bhyve pour virtualiser une machine Debian

04/01/2019

Pour démarrer la nouvelle année, j’ai pas trouvé mieux à faire que de me lancer dans la virtualisation sous FreeBSD avec bhyve. Ci-dessous, un petit guide qui reprend en partie les lignes du manuel de FreeBSD.

Les instructions sont à exécuter en tant que root.

Préparation de l’hôte

Création des répertoires

mkdir -p /bhyve/{vm,iso}

Charger les modules noyau nécessaires à bhyve

kldload nmdm vmm

Création de l’interface tap0 pour connecter le périphérique réseau virtuel de la VM.

kldload if_tap
ifconfig tap0 create
sysctl net.link.tap.up_on_open=1

Création d’un pont réseau bridge0 ayant pour membres l’interface tap0 et l’interface physique. Dans cet exemple, l’interface physique est em0.

kldload if_bridge
ifconfig bridge0 create
ifconfig bridge0 addm em0 addm tap0
ifconfig bridge0 up

Persistance

sysrc -f /boot/loader.conf nmdm_load=YES
sysrc -f /boot/loader.conf vmm_load=YES
sysrc -f /boot/loader.conf if_tap_load=YES
sysrc -f /boot/loader.conf if_bridge_load=YES
sysrc cloned_interfaces+="bridge0 tap0"
sysrc ifconfig_bridge0="addm em0 addm tap0"
echo 'net.link.tap.up_on_open=1' >> /etc/sysctl.conf

Créer une VM Debian

Préparation

Prérequis

mkdir -p /bhyve/vm/exemple
pkg inst grub2-bhyve

Récupération de l’image d’installation

cd /bhyve/iso
fetch https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.6.0-amd64-netinst.iso

Création du disque virtuel

cd /bhyve/vm/exemple
truncate -s 16G disk.img

Création de la carte des périphériques

edit /bhyve/vm/exemple/device.map

(hd0) /bhyve/vm/exemple/disk.img
(cd0) /bhyve/iso/debian-9.6.0-amd64-netinst.iso

Installation du système

Charger le noyau Linux depuis l’image d’installation

grub-bhyve -m /bhyve/vm/exemple/device.map -r cd0 -M 1024M exemple

La commande ci-dessus démarre Grub. Si l’image d’installation contient un fichier grub.cfg, un menu devrait apparaître. Si ce n’est pas le cas, les fichiers vmlinuz et initrd doivent être localisés et chargés manuellement.

grub> ls
grub> ls (cd0)/isolinux
grub> linux (cd0)/isolinux/vmlinuz
grub> initrd (cd0)/isolinux/initrd.img
grub> boot

Sélectionner l’option d’installation dans le menu Grub. L’invite de commande de FreeBSD devrait réapparaître.

Démarrer la VM et l’installation du système

bhyve -A -H -P \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,virtio-net,tap0 \
-s 3:0,virtio-blk,/bhyve/vm/exemple/disk.img \
-s 4:0,ahci-cd,/bhyve/iso/debian-9.6.0-amd64-netinst.iso \
-l com1,stdio -c 1 -m 1024M exemple

Après l’installation du système, un redémarrage de la machine est nécessaire et cela va entraîner la sortie de bhyve.

L’instance de la VM doit être détruite avant de redémarrer à nouveau

bhyvectl --destroy --vm=exemple

Démarrage

À présent la VM peut être démarrée directement depuis le disque virtuel. À nouveau, il faut avant tout charger le noyau.

grub-bhyve -m /bhyve/vm/exemple/device.map -r hd0,msdos1 -M 1024M exemple

Sélectionner le noyau à lancer dans le menu Grub. L’invite de commande de FreeBSD devrait réapparaître.

Démarrer la VM

bhyve -A -H -P \
-s 0:0,hostbridge \
-s 1:0,lpc \
-s 2:0,virtio-net,tap0 \
-s 3:0,virtio-blk,/bhyve/vm/exemple/disk.img \
-l com1,stdio -c 1 -m 1024M exemple

L’invite de commande de la VM devrait apparaître.

Arrêt

Pour arrêter la VM, il suffit d’ordonner son arrêt à l’aide de poweroff ou reboot, puis, détruire son instance.

bhyvectl --destroy --vm=exemple

Liens utiles