La virtualisation sous BSD avec Bhyve

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
74
Mois de parution
septembre 2014
Domaines


Résumé
Bhyve est l'hyperviseur de FreeBSD disponible à partir de sa version 10.0. C'est un hyperviseur de niveau 2, c'est-à-dire qu'il s'agit d'un logiciel, s'exécutant sur un système d'exploitation hôte, qui simule une machine physique. On peut ainsi exécuter un ou plusieurs système(s) d'exploitation invité(s) sur une même machine.

Body

Contrairement à certains hyperviseurs (comme QEMU), Bhyve ne virtualise pas tous les composants de la machine virtuelle. En effet, il s'appuie sur des fonctions de virtualisation présentes sur le CPU de la machine physique. Ces fonctions sont présentes sur les CPU récents de chez Intel (Extended Page Tables) et de chez AMD (Rapid Virtualization Indexing). En clair, votre CPU est aujourd'hui capable d'exécuter plusieurs systèmes d'exploitation à la fois (et sans les mains !).

Concernant les périphériques, Bhyve présente aux systèmes invités des périphériques nécessitant un pilote spécifique appelé virtio. Ce pilote définit une interface générique entre l'hyperviseur et les systèmes invités afin de faciliter l'intégration de nouveaux systèmes. À l'heure où j'écris ces lignes, seulement trois systèmes d'exploitation tournent sur Bhyve : FreeBSD, OpenBSD et Linux - c'est déjà pas mal ! Néanmoins en théorie, tout système possédant des pilotes virtio et une prise en charge des interruptions MSI(-X) devrait fonctionner dans Bhyve. Grâce à la communauté qui est très active, nous devrions voir prochainement le support de NetBSD, ainsi que d'Illumos.

Bon, assez de blabla, on est quand même ici pour apprendre et comprendre comment ce bouzin^Wpetit bijou fonctionne !

1. Préparation de l'environnement (pour FreeBSD)

Tout d'abord, il va nous falloir du matos :

- un ordinateur pas trop vieux (pour avoir les supports de virtualisation susnommés) ;

- une installation de FreeBSD 10.0 (amd64) toute fraîche ;

- les droits root sur cette machine ;

- une connexion Internet (pour télécharger les images des distributions) ;

- autre ?

Pour être certain d'avoir un processeur compatible, vous pouvez vérifier la présence de l'option POPCNT dans sa liste de features :

$ dmesg | grep POPCNT

Maintenant qu'on est prêt, on va pouvoir se lancer !

Pour commencer, on va créer un répertoire de travail nommé /usr/local/vmrc/vm. On stockera là-dedans les fichiers nécessaires de nos VM :

# mkdir -p /usr/local/vmrc/vm; cd /usr/local/vmrc/vm

On crée un répertoire pour notre machine FreeBSD :

# mkdir freebsd_ten0; cd freebsd_ten0

On va ensuite charger le cœur de Bhyve, à savoir le module noyau permettant l'exécution des machines virtuelles. Car oui, Bhyve n'est qu'une sorte de frontend au « Gestionnaire de machines virtuelles » (*VMM*) du noyau de FreeBSD. Chargeons ledit module :

# kldload vmm

Maintenant, nous allons pouvoir créer et exécuter notre première machine virtuelle. Pour commencer, nous exécuterons une instance de FreeBSD 10. Téléchargez l'image d'installation (ici : ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.0/FreeBSD-10.0-RELEASE-amd64-disc1.iso). Pour que ce soit plus simple, créez un lien vers le fichier téléchargé :

# ln -s path_to_freebsd_10.iso freebsd10.iso

Il faut aussi créer un disque dur virtuel. Pour ce faire, nous utiliserons un fichier vide de la taille du disque souhaité :

# truncate -s 4G freebsd_ten0.img

Voilà, nous obtenons un disque dur de 4 Gi pour notre machine virtuelle (vous pouvez adapter la taille comme bon vous semble). Il serait aussi intéressant de donner un accès à Internet à notre VM. Nous allons pour cela créer une interface virtuelle tap, que nous brancherons à notre interface physique (celle qui nous permet d'accéder à l'extérieur) en utilisant un bridge. Chargeons les modules nécessaires :

# kldload if_bridge kldload if_tap

On crée ensuite notre interface virtuelle :

# ifconfig tap0 create up

On modifie une variable du système pour ne pas avoir à monter l'interface tap à la main :

# sysctl net.link.tap.up_on_open=1 # ensure tap0 is up and working on open !

Puis, on crée un bridge reliant les deux interfaces.

Mon interface physique est ici alc0. Vous devrez sans doute adapter les commandes avec votre propre nom d'interface.

# ifconfig bridge0 create up ifconfig bridge0 addm tap0 addm alc0

Un petit ifconfig nous montrera que tout est bien configuré.

Remarque : l'interface tap0 n'aura jamais d'adresse IP assignée. En effet, c'est l'hyperviseur qui « s'attachera » à cette interface et lira/écrira les paquets réseau envoyés/reçus par la VM. Lorsque notre VM sera lancée, le PID de l'instance de Bhyve sera affiché dans les informations de tap0.

2. Notre première machine virtuelle

Il est maintenant l'heure d'exécuter la machine virtuelle. Nous procéderons en deux étapes :

1. Chargement du noyau invité,

2. Exécution du système.

La première étape consiste à charger et initialiser le système afin qu'un système d'exploitation puisse s'exécuter. C'est, en quelque sorte, tout ce qui se passe avant que l'OS ne démarre : BIOS, exécution du bootloader stocké sur les premiers secteurs du disque (eg. GRUB, Lilo, ou bien le bootloader de l'OS directement). Pour le moment, Bhyve ne supporte pas les chaînages de bootloaders, ainsi nous resterons sur des configurations simples avec un seul bootloader. L'objectif du bootloader est de charger le noyau en mémoire et de tout préparer afin qu'il puisse s'exécuter correctement.

Chargeons donc le noyau de l'ISO téléchargée précédemment avec 1024 Mi de mémoire vive. La commande à utiliser s'appelle Bhyveload. On peut lui passer quelques paramètres, comme la taille de la mémoire vive ou bien le disque d'amorçage (ici, le disque d'amorçage est l'image ISO) :

# Bhyveload -m 1024M -d freebsd10.iso freebsd_ten0

Vous devriez voir le loader de FreeBSD s'afficher. Vous pouvez interagir avec lui et modifier des variables de boot. Si vous ne touchez à rien avant la fin du décompte, ou que vous appuyez sur <Entrée>, vous allez retomber sur votre shell. En réalité, votre machine virtuelle a été créée dans le VMM et est prête à être exécutée ! Pour s'en assurer, listez les VM à l'aide la commande suivante :

# ls -l /dev/vmm

crw------- 1 root wheel 0, 168 Jul 2 10:14 freebsd_ten0

La commande permettant l'exécution de la VM s'appelle Bhyve (étonnant !), voyons rapidement comment elle fonctionne :

Usage: Bhyve [-aehAHIPW] [-g ] [-s ] [-S ] [-c vcpus] [-p pincpu] [-m mem] [-l ]

Tout d'abord les options de base :

-c # définit le nombre de CPU virtuels attachés à la VM,

-m définit la taille de la mémoire vive allouée,

-A crée une table ACPI (utile pour certains systèmes d'exploitation voulant interagir avec le matériel).

Plus en détails, il est possible d'assigner les CPU virtuels à des numéros de CPU physiques, de forcer l'utilisation de MSI au lieu d'MSI-X (pour les systèmes ne supportant pas MSI-X), ou encore de définir des périphériques PCI. Cette dernière option est très intéressante, car un système d'exploitation sans périphérique n'a pas beaucoup d'intérêt... Voyons comment définir ces périphériques avec l'option -s slot,driver :

- Le slot est ici un numéro de 0 à 31, suivi d'un numéro de fonction optionnel (de 0 à 7). Ces numéros correspondent aux ports PCI sur votre carte mère. En pratique, ils ont peu d'importance, le tout étant que chaque périphérique ait un numéro différent des autres.

- Le driver est le type de périphérique à émuler. On a le choix entre :

   - hostbridge ou amd_hostbridge : il s'agit du composant permettant la configuration des bus PCI par le guest ;

   - passthru : accès direct depuis le guest vers un bus PCI de l'host (on ne l'utilisera pas) ;

   - virtio-net : interface réseau (VirtIO) ;

   - virtio-block : disque dur (VirtIO) ;

   - ahci-cd : lecteur CD ;

   - ahci-hd : disque dur SATA ;

   - lpc : port série.

Ensuite, nous pouvons configurer les périphériques. L'ensemble des options de chaque périphérique est disponible dans le man de Bhyve. Avec tout ça en tête, on va être capable de créer notre machine virtuelle avec une interface réseau, un disque dur (pour y installer notre système), un lecteur CD avec l'ISO d'installation, et ça sera déjà bien pour commencer. On va construire la ligne de commandes pas à pas pour bien tout comprendre et, dans la suite de l'article, j'expliquerai juste les variantes de cette commande :

Commande

Description

-c 2

2 CPU virtuels

-m 1024M

1024 Mi de mémoire vive

-A

FreeBSD aime bien avoir sa table ACPI

-H

permet de ne pas utiliser 100 % du CPU host

-s 0:0,hostbridge

configure un hostbridge

-s 1:0,lpc

configure un port série (pour y brancher la sortie standard de Bhyve et voir la console de la VM dans notre terminal)

-s 2:0,virtio-net,tap0

configure une interface réseau branchée sur tap0

-s 3:0,virtio-blk,freebsd_ten0.img

branche un disque dur virtuel sur la VM, ce disque dur est en réalité le fichier freebsd_ten0.img créé précédemment

-s 31:0,ahci-cd,freebsd10.iso

branche un disque dur virtuel sur la VM, ce disque dur est en réalité le fichier freebsd_ten0.img créé précédemment

-l com1,stdio

branche le port série COM1 sur notre terminal

Et quand on assemble le tout :

# Bhyve -c 2 -m 1024M -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,freebsd_ten0.img -s 31:0,ahci-cd,release.iso -l com1,stdio -W freebsd_ten0

Voilà ! Maintenant, vous devriez voir l'installeur de FreeBSD démarrer, puis vous afficher le prompt d'installation. Installez le système jusqu'à ce qu'il vous propose d'exécuter un shell à la fin. On va régler la console afin qu'elle fonctionne correctement au redémarrage :

# echo 'console "/usr/libexec/getty std.9600" vt100 on secure' >>/mnt/etc/ttys

Si vous voulez vous connecter en SSH avec le compte root, vous devrez aussi modifier votre configuration SSH :

# /usr/bin/sed -i '' -E 's,#?(PermitRootLogin) no,\1 yes,' /mnt/etc/ssh/sshd_config

Vous pouvez maintenant redémarrer le système (guest hein ! Ne redémarrez pas votre machine physique, ce serait dommage). Une fois le système arrêté, vous aurez la main sur votre shell. Il va falloir nettoyer les restes de notre machine virtuelle avant de pouvoir la relancer (car non, ce n'est pas automatique). On pourrait très bien en créer une nouvelle, mais c'est mieux de recycler (enfin, c'est ce qu'on m'a appris).

# Bhyvectl --vm=freebsd_ten0 --destroy

J'en profite pour vous parlez rapidement de Bhyvectl, qui permet d'interagir avec le VMM afin de récupérer des infos sur vos machines virtuelles en cours d'exécution, voire de les modifier (par exemple, en les détruisant). N'hésitez pas à regarder les options disponibles pour cette commande !

Il est possible d'accéder au disque dur de la VM depuis l'environnement host. Il est fortement déconseillé de faire ceci en production ; en effet, une modification du système de fichiers du guest peut faire planter la VM, mais de plus, cela rompt l'isolation entre le guest et l'host ! Sur FreeBSD, on utilise la commande mdconfig qui permet de configurer un espace de stockage, ici un disque dur :

# mdconfig -f freebsd_ten0 -t vnode -u 0 

L'option -u permet de définir le numéro du device créé (/dev/mdX), l'option -t définit le type de device (ici, un disque dur) et l'option -f le fichier contenant les données du disque dur. FreeBSD va maintenant présenter /dev/md0 comme si c'était un vrai disque dur. 

# gpart show md0

34 8388541 md0 GPT (4.0G)

34 128 1 freebsd-boot (64K)

162 7966592 2 freebsd-ufs (3.8G)

7966754 419840 3 freebsd-swap (205M)

8386594 1981 - free - (991K)

La première partition contient le code d'amorçage du système, la seconde est la partition principale et la troisième le swap. Nous nous intéressons ici aux fichiers du système guest, donc à la seconde partition.

# mount /dev/md0p2 /mnt

Si le système de fichiers n'est pas propre, vous devrez exécuter la commande suivante pour le nettoyer :

# fsck -t ufs /dev/md0p2 

Une fois les modifications effectuées, ne pas oublier de démonter le système de fichiers :

# umount /mnt

Relançons maintenant notre VM sur son disque dur directement :

# Bhyveload -m 1024M -d freebsd_ten0.img freebsd_ten0

Il faudra dorénavant exécuter la commande précédente avant chaque invocation de Bhyve.

# Bhyve -c 2 -m 1024M -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,freebsd_ten0.img -l com1,stdio -W freebsd_ten0

Vous pouvez vous identifier et vérifier que tout fonctionne correctement (interface configurée, comptes utilisateurs créés, etc.). Après avoir joué avec votre VM vierge, redémarrez-la :

# reboot

Et nettoyez la VM avec Bhyvectl --destroy.

Jusqu'à présent, nous avons interagi avec notre VM au travers de notre terminal, c'est-à-dire que la sortie standard de Bhyve était branchée à notre terminal. Si vous aviez fermé celui-ci, la VM aurait cessé de fonctionner ; c'est embêtant lorsque vous voulez mettre ça en production...

Pour remédier à ce problème, il est possible de lancer Bhyve en tâche de fond ; néanmoins, le seul accès restant aux VM est celui par le réseau (Telnet, SSH, ...). Fort heureusement, il est possible de brancher la sortie standard de Bhyve sur un terminal virtuel auquel nous pourrons accéder quand bon nous semble (comme une console de secours). Nous utiliserons pour cela le pilote nmdm(4), qui crée un modem entre deux terminaux virtuels de telle sorte qu'ils puissent discuter entre eux. Chargeons le pilote et voyons comment brancher Bhyve :

# kldload nmdm

On lance Bhyve pour qu'il se branche sur le premier terminal (/dev/nmdm0A) :

# Bhyve -c 2 -m 1024M -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,freebsd_ten0.img -l com1,/dev/nmdm0A -W freebsd_ten0 &

Puis, on se connecte à la VM en utilisant le programme cu sur le deuxième terminal (/dev/nmdm0B) :

# cu -l /dev/nmdm0B

On obtient une console identique à celle accessible par écran/clavier. Pour quitter cette console, il vous suffit de composer la séquence de touches ~. (man cu pour la liste complète des commandes). La VM continuera à s'exécuter en tâche de fond jusqu'à ce qu'elle soit détruite (soit par Bhyvectl, soit par un reboot de l'host). Pour les têtes en l'air qui oublieraient à quel terminal elles ont branché une VM, voici en bonus une commande pour l'afficher :

# lsof -n | grep freebsd_ten0 | grep Bhyve | awk '{print $2}' | xargs -Ixxx lsof -n -p xxx | grep nmdm | awk '{print $9}' /dev/nmdm0A

On en a fini avec FreeBSD en tant que guest ; vous savez maintenant créer, configurer, exécuter, gérer des machines virtuelles et même accéder à une console de secours. Il reste néanmoins un peu de travail à accomplir avant de pouvoir proposer votre cloud maison. En effet, un hyperviseur ne supportant que lui-même en tant qu'invité n'a pas grand intérêt face à ses concurrents ! Fort heureusement, Bhyve supporte deux OS supplémentaires, à savoir OpenBSD et Linux. La section suivante nous guidera donc dans l'installation et la configuration d'une VM faisant tourner chacun d'eux.

3. Une machine virtuelle OpenBSD

Pour d'obscures raisons, certaines personnes (dont certaines ont écrit un article dans ce numéro !) utilisent une variante de NetBSD, très sécurisée, nommée OpenBSD. Il se différencie des autres BSD par l'importance qu'il accorde à la sécurité, la qualité de son code et son intransigeance vis-à-vis des licences des logiciels qu'il utilise (pas de ZFS sous licence CDDL par exemple). Cela les a ainsi poussés à écrire et maintenir les programmes de base du système, comme ps ou encore cat. On peut aussi noter qu'un certain nombre de programmes ont été développés par l'équipe d'OpenBSD : openssh, openSMTPd, ou encore libreSSL (fork d'openSSL).

Bon, je pense que je vous ai assez mis l'eau à la bouche avec cet éloge d'OpenBSD, donc commençons ! Tout d'abord, le loader de FreeBSD ne sait charger que FreeBSD... Il nous faudra donc utiliser un autre loader disponible dans les ports : grub2-Bhyve :

# make -C /usr/ports/sysutils/grub2-Bhyve install clean

Afin d'avoir une connexion réseau sur notre deuxième VM, nous allons créer une deuxième interface virtuelle :

# ifconfig tap1 create ifconfig bridge0 addm tap1

Comme pour notre première machine, on va créer un dossier dédié :

# mkdir /usr/local/vmrc/vm/openbsd_vm1

# cd openbsd_vm1

Pour ne pas avoir à re-compiler OpenBSD avec les bonnes options, téléchargeons une image pré-construite disponible ici :

# fetch http://people.freebsd.org/~grehan/flashimg.amd64-20131014.bz2

# gunzip flashimg.amd64-20131014.bz2

# mv flashimg.amd64-20131014 openbsd_vm1.img

Le fichier obtenu est une image disque comme celle que nous avons créée pour FreeBSD précédemment. Elle contient un système de base prêt à l'emploi.

Le loader grub2-Bhyve a besoin d'un fichier de mapping des disques identique à celui utilisé par GRUB. Nous allons donc créer ce fichier en définissant notre disque dur racine hd0 comme étant l'image téléchargée :

# echo '(hd0) ./openbsd_vm1.img' >device.map

Nous pouvons maintenant charger le système à l'aide de la commande grub-Bhyve. Celle-ci prend en paramètres la taille de la mémoire vive à allouer, le disque racine à utiliser (ici, nous n'en avons qu'un seul, hd0) et le fichier de mapping :

# grub-Bhyve -M 1024M -r hd0 -m device.map openbsd_vm1

Vous allez voir un shell de type GRUB apparaître ; il fonctionne exactement de la même manière qu'un GRUB normal. Pour charger le noyau d'OpenBSD, nous utilisons la commande kopenbsd. Nous lui passons en paramètres un port série et le chemin vers le noyau (sur le disque hd0) :

# kopenbsd -h com0 (hd0,openbsd1)/bsd

Puis, on démarre le noyau :

# boot

En réalité, nous n'avons fait que charger en mémoire le noyau comme nous le faisions avec FreeBSD. Pour réellement démarrer le système, nous devons utiliser la commande Bhyve. Ici, nous allons légèrement la modifier pour utiliser l'hostbridge AMD et des interruptions de type MSI(-X) :

# Bhyve -c 2 -m 1024M -A -H -P -s 0:0,amd_hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,openbsd_vm1.img -l com1,/dev/nmdm1A -W openbsd_vm1

On peut maintenant se connecter à la VM via cu :

# cu -l /dev/nmdm1B

Une fois le système démarré, vous pouvez vous identifier avec le compte root et le mot de passe test123.

# uname -a OpenBSD Bhyve 5.4 FLASHRD#1 amd64

On peut tester la connectivité réseau :

# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=49 time=44.062 ms

Il est aussi possible d'atteindre la VM FreeBSD précédemment créée (elle a chez moi l'IP 10.1.255.30) :

# ping 10.1.255.30

PING 10.1.255.30 (10.1.255.30): 56 data bytes 64 bytes from 10.1.255.30: icmp_seq=0 ttl=64 time=0.262 ms

L'image étant une image Flash, certaines partitions du système sont montées en lecture seule au démarrage. Si vous voulez faire des modifications sur partitions, il vous faudra les remonter en écriture :

# mount -o rw -u /root

Je vous laisse tout le loisir de jouer avec OpenBSD, installer des serveurs, etc. Nous allons continuer notre tour des OS avec l'installation de Linux.

4. Une machine virtuelle Linux

Je vous passe l'introduction de Linux (ce n'est pas le sujet de ce numéro a priori). Nous allons ici installer une Debian 64 bits. Vous pouvez, si vous le souhaitez, installer n'importe quelle autre distribution 64 bits.

Comme pour les précédentes machines, on configure une interface réseau virtuelle :

# ifconfig tap2 create ifconfig bridge0 addm tap2

Puis, un dossier contenant les fichiers :

# mkdir /usr/local/vmrc/vm/linux_vm2; cd linux_vm2

Téléchargez une image d'installation récente :

# fetch http://cdimage.debian.org/cdimage/archive/6.0.9/amd64/iso-cd/debian-6.0.9-amd64-CD-1.iso mv debian-6.0.9-amd64-CD-1.iso linux.iso

Puis, créez comme d'habitude une image disque de 4 Gi :

# truncate -s 4G linux_vm2.img

Pour charger le noyau de Linux, nous utiliserons encore grub2-Bhyve. Il faut donc créer le fichier de mapping. Ici, nous avons deux disques, le CD (fichier .iso) et le disque dur virtuel :

# echo '(hd0) ./linux_vm2.img' >device.map echo '(cd0) ./linux.iso' >>device.map

On invoque la commande grub-Bhyve en lui disant d'utiliser le CD-ROM comme périphérique racine :

# grub-Bhyve -M 1024M -r cd0 -m device.map linux_vm2

Pour charger le noyau de Linux, on utilise la commande linux sur le fichier vmlinuz (adaptez le chemin vers le noyau si vous utilisez une autre distribution). De plus, le noyau Linux utilise un mécanisme de scripts d'initialisation pour démarrer le système ; ces scripts sont contenus dans le fichier initrd.gz.

# linux (cd0)/install.amd64/vmlinuz initrd (cd0)/install.amd64/initrd.gz boot

Et on démarre le système :

# Bhyve -c 2 -m 1024M -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap2 -s 3:0,virtio-blk,linux_vm2.img -s 31:0,ahci-cd,linux.iso -l com1,stdio linux_vm2

Installez le système de la manière la plus simple possible (une partition sur le disque principal). Une fois le système installé, redémarrez.

On va maintenant charger le guest depuis le disque virtuel :

# grub-Bhyve -M 1024M -r hd0 -m device.map linux_vm2 set root='(hd0,msdos1)' linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/vda1 initrd /boot/initrd.img-2.6.32-5-amd64 boot

Puis, on le démarre :

# Bhyve -c 2 -m 1024M -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap2 -s 3:0,virtio-blk,linux_vm2.img -l com1,/dev/nmdm2A linux_vm2 cu -l /dev/nmdm2B

Et voilà, votre 3ème VM est prête à être utilisée !

5. Configuration permanente

Nous avons vu tout au long de cet article comment créer, puis lancer des machines virtuelles FreeBSD, OpenBSD et Linux à la main. Il existe cependant des scripts permettant d'automatiser et de rendre les configurations permanentes (pour ne pas avoir à tout reconfigurer à chaque redémarrage de la machine host).

Ces scripts sont encore en fort développement, donc nous récupérerons la dernière version sur GitHub :

# git clone https://github.com/michaeldexter/vmrc; cd vmrc

On installe le tout en exécutant les deux scripts suivants :

# sh install-vmrc.sh ./templates/install-templates.sh

Maintenant, éditez le fichier de configuration /usr/local/etc/vm.conf afin de modifier si besoin est le nom de votre interface réseau, ou bien les chemins vers le dossier des VM (normalement, ils devraient être corrects).

Nous avons déjà provisionné 3 machines virtuelles à la main ; néanmoins, il existe un script permettant de provisionner automatiquement une machine à partir d'un template. Vous pouvez par exemple créer une nouvelle machine virtuelle sur FreeBSD 9.2 en exécutant la commande suivante :

# sh mkvm.sh t_freebsd92 freebsd_nine

Cela créera un dossier dans /usr/local/vmrc/vm nommé freebsd_nine4. Chaque machine doit avoir un numéro différent, car il est utilisé notamment pour affecter un device nmdm.

Afin de pouvoir utiliser le script, il nous faut modifier notre fichier rc.conf situé dans /etc :

# echo 'vm_enable="YES"' >>/etc/rc.conf

Il faut aussi écrire un fichier de configuration de notre machine. Ce fichier vous permettra de configurer l'interface réseau, le serveur DNS, ou encore la console à utiliser (nmdm, stdio ou encore tmux).

# cp /usr/local/vmrc/templates/t_freebsd10 /usr/local/vmrc/vm/freebsd_vm0/freebsd_vm0.conf

Éditez ce fichier à votre convenance, puis arrêtez la machine si elle tourne encore. Nous pouvons désormais la démarrer :

# /usr/local/etc/rc.d/vm start freebsd_vm0

Le script s'occupe de créer le bridge, l'interface tap, d'ajouter l'interface au bridge, de charger les modules noyau nécessaires et enfin, de lancer la machine avec les bons paramètres. Lorsque la machine redémarre, il va aussi nettoyer la machine.

Le script vous permet également d'interagir plus facilement avec vos machines. Par exemple, vous pouvez vous « attacher » à n'importe quelle VM grâce à la commande attach :

# /usr/local/etc/rc.d/vm attach freebsd_vm0

La liste des commandes disponibles se trouve dans le fichier vmrc-instructions.txt.

Si vous souhaitez lancer vos machines au démarrage de l'host, il vous suffit d'appeler le script dans le fichier rc.local (la ligne suivante lance toutes les VM d'un seul coup) :

# echo '/usr/local/etc/rc.d/vm start' >>/etc/rc.local

Conclusion

Avec tout ce que vous avez appris tout au long de cet article, vous êtes maintenant en mesure de construire votre propre plateforme de « Cloud » avec des réseaux virtuels, du stockage réparti et des hautes performances.

Même si Bhyve reste un outil peu convivial, sans interface graphique et sans terminal graphique, le projet libvirt (http://libvirt.org) est aujourd'hui compatible avec Bhyve. Ainsi, vous pouvez intégrer un host faisant tourner Bhyve dans une infrastructure plus globale faisant tourner d'autres technologies (Xen, KVM, VMware...), le tout dans de jolies interfaces de gestion.




Articles qui pourraient vous intéresser...

Tendance actuelle : la conteneurisation d'applications

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
110
Mois de parution
septembre 2020
Domaines
Résumé

Actuellement, il est fréquent de voir des applications proposées sous la forme d'un conteneur. Chaque mise en conteneur – ou conteneurisation – d'une application est particulière et j'ai justement dû récemment me plier à l'exercice : je partage avec vous mon expérience dans cet article.

Utilisez Terraform pour vos projets Docker

Magazine
Marque
GNU/Linux Magazine
Numéro
240
Mois de parution
septembre 2020
Domaines
Résumé

Terraform est un outil populaire pour déployer de l’infrastructure en particulier à destination des Clouds publics. Cependant, il possède de nombreux providers pour dialoguer avec différents hyperviseurs, bases de données ou solutions d’infrastructures en Software Defined. Voyons dans cet article son utilisation avec Docker.

Effectuer des sauvegardes avec rdiff-backup

Magazine
Marque
Linux Pratique
Numéro
121
Mois de parution
septembre 2020
Domaines
Résumé

Tous les jours, nous créons et manipulons des données. Certaines plus importantes que d’autres. Une chose que nous partageons tous c’est bien la peur de les perdre. Peut-être avez-vous déjà perdu des données suite à une panne de votre disque de stockage, l’attaque d’un virus ou le vol de votre ordinateur. Les personnes ayant déjà connu cette situation comprennent les tracas que cela peut causer. Vous allez découvrir dans ce tutoriel comment limiter le risque d’y faire face. La solution se trouve en un mot : « sauvegarde ». L’outil que nous allons vous présenter ici a été conçu pour vous aider à réaliser cette tâche de manière efficace et efficiente.

Assurez l’intégrité de vos fichiers avec fs-verity

Magazine
Marque
Linux Pratique
HS n°
Numéro
48
Mois de parution
septembre 2020
Domaines
Résumé

Vous êtes-vous déjà demandé comment faire pour protéger des fichiers importants ? Votre système d’exploitation vous a-t-il déjà informé que vos fichiers étaient corrompus ? Pensez-vous souvent à l’intégrité des informations contenues dans vos fichiers ? Vous êtes tombé au bon endroit, nous découvrirons ici comment protéger vos données avec fs-verity.

Gérer une base de données avec Adminer

Magazine
Marque
Linux Pratique
Numéro
121
Mois de parution
septembre 2020
Domaines
Résumé

La gestion des bases de données relationnelles est une technologie essentielle pour les entreprises. Sa complexité nécessite de disposer de logiciels pratiques et fiables pour manipuler les données avec efficacité et en toute sécurité. Adminer entre dans la catégorie poids plume de ces outils, mais ne manque pas d'arguments pour séduire les administrateurs de bases de données et les développeurs.