• Créer une machine virtuelle FreeBSD avec Bhyve

    Ici je montre une procédure pour installer FreeBSD
    Cette procédure est différente de celle de HardenedBSD en cela que le seul firmware capable de démarrer FreeBSD est BHYVE_DEBUG (ou BHYVE_UEFI si vous l'importez d'un FreeBSD).

    Vous devez avoir le role root pour suivre ce tuto.
    Donc passez en root avant de commencer.

    1) Installer Bhyve et gnu-coreutils

    pkg install pkg://openindiana.org/system/bhyve pkg://openindiana.org/system/library/bhyve gnu-coreutils

    (Sur OI, le module vmm de bhyve est déjà chargé, inutile de le charger, à la différence de FreeBSD)

    2) Créer une arborescence simple pour stocker nos VM et les configurations :

    mkdir -p /VIRTU/VM
    mkdir /VIRTU/ISO

    3) Télécharger/Importer un .iso d'installation sur le serveur OI qui va créer la VM !
    ATTENTION, la configuration est différente en fonction des OS. Vous devez consulter l'article correspondant à la VM que vous souhaitez virtualiser ! Ici, c'est pour FreeBSD seulement.

    Nous allons télécharger l'ISO directement dans le dossier /VIRTU/ISO créé au-dessus (histoire d'etre ordonnés !)

    cd /VIRTU/ISO

    Télécharger l'ISO de FreeBSD 13.1 RELEASE :

    curl -O https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/13.1/FreeBSD-13.1-RELEASE-amd64-bootonly.iso

    4) Créer une interface réseau virtuelle (pour notre VM).
    Sur FreeBSD, on va créer une tap0, un pont et lier une carte réseau physique.

    Sur OI, on créée directement une vnic et on la lie à la carte réseau reliée à internet (la e1000g0 dans mon cas)... c'est plus rapide !

    On appellera notre vnic, vnic1 (sachez que la nomenclature des vnic est très peu permissive sur OI... ce sera vnic+chiffre ! Et c'est tout !) :

    dladm create-vnic -l e1000g0 vnic1

    La vnic 1 ne doit surtout pas etre configurée en IP directement sur notre serveur, nous ne faisons ici que la créer.
    C'est la VM qui va s'en charger toute seule !

    Je précise, mais ça va de soi, que si vous avez plusieurs VM, vous avez donc plusieurs vnic !
    Ici je prends vnic1... mais il est évident que si vous avez plusieurs VMs, ce sera plutot vnic3 ou vnic4 etc...


    6) Créer le disque de stockage pour la VM :
    Nous voulons créer une VM du nom de "masuperVM".
    Commençons par lui créer un dossier :

    mkdir /VIRTU/VM/masuperVM

    Rendons-nous dans ce dossier et créons le disque de stockage !
    (un disque de 10Go d'espace, qu'on va nommer storage_masuperVM).

    cd /VIRTU/VM/masuperVM
    truncate -s 10G storage_masuperVM

    7) Créer la VM et la démarrer !
    Oula.. alors là, ça se complique (mais juste un peu ;-)) !

    Voici comment se présente une configuration de VM avec la commande bhyve.
    Pour vous faciliter la lecture, j'ai remis à la ligne chaque élément important de la configuration.
    Ce n'est pas cet encart que vous copie/collerez et exécuterez, mais l'encart de la commande sur toute une ligne plus bas.

    bhyve -K fr -c 2 -m 1G -w -H \
    -s 0,hostbridge \
    -s 3,ahci-cd,/VIRTU/ISO/
    FreeBSD-13.1-RELEASE-amd64-bootonly.iso \
    -s 4,nvme,/VIRTU/VM/masuperVM/storage_masuperVM \
    -s 5,virtio-net,vnic1 \
    -s 29,fbuf,vga=off,rfb=192.168.1.39:5900,w=800,h=600,wait \
    -s 30,xhci,tablet \
    -s 31,lpc \
    -l com1,stdio \
    -l bootrom,/usr/share/bhyve/firmware/BHYVE_DEBUG.fd masuperVM

    Explications :

    -K fr     :  permet d'avoir un clavier AZERTY à l'intérieur des consoles VNC.. Profitez-en, cette option n'existe que sur illumos ! Pas encore sur FreeBSD !
    -c 2
          :   2 vCPUs

    -m 1G  :   1G de RAM
    - w       :   pour le debugging
    - H       :   permet de céder le fil d'exécution du CPU quand une instruction HLT est détectée (allez regarder dans la doc !)

    - s        :   configure un port PCI (on en configure 1 pour chaque élément de la VM.. comme sur un ordi !)
    ahci-cd : c'est pour spécifier l'ISO d'installation de l'OS qu'on veut émuler
    nvme   : on décide que le disque dur pour la VM est un nvme ! et on pointe le stockage qu'on a créé ! 
    virtio-net : c'est le modèle de carte réseau pour la VM... c'est un des plus connus et largement accepté par les VMs
    vnic=vnic1 : on précise le nom de la carte réseau qu'on a précedemment créé pour notre VM
    wait        : c'est l'instruction qui empeche la machine virtuelle de démarrer tant que vous n'avez pas ouvert une connexion VNC (indispensable lorsque vous devez appuyer sur une touche pour booter sur un installeur au lancement d'une VM pour installer votre OS !)

    rfb : c'est l'adresse IP de notre serveur OI de virtualisation, à laquelle on ajoute un port pour VNC (5900 est classique, mais libre à vous de changer. ET SURTOUT, VOUS DEVREZ ATTRIBUER UN PORT DIFFERENT SI VOUS AVEZ PLUSIEURS VM !!). Lorsqu'on se connectera à notre VM via VNC, on se connectera en réalité à notre serveur de virtualisation, qui nous redirigera vers la VM grace au port qu'on a précisé.
    x=800,h=600 : on définit un affichage de 800x600 pour la VM, mais libre à vous de mettre plus !
    -l com,stdio : nous rajoutons un port série pour la console bhyve
    bootrom : pointer le firmware fourni avec bhyve pour pouvoir booter sur notre OS à installer.
    masuperVM : le nom que l'on donne à notre VM de test !
    Remise sur une seule ligne, voici la commande qu'on va exécuter :

    bhyve -K fr -c 2 -m 1G -w -H -s 0,hostbridge -s 3,ahci-cd,/VIRTU/ISO/FreeBSD-13.1-RELEASE-amd64-bootonly.iso -s 4,nvme,/VIRTU/VM/masuperVM/storage_masuperVM -s 5,virtio-net,vnic1 -s 29,fbuf,vga=off,rfb=192.168.1.39:5900,w=800,h=600,wait -s 30,xhci,tablet -s 31,lpc -l com1,stdio -l bootrom,/usr/share/bhyve/firmware/BHYVE_DEBUG.fd masuperVM

    Voilà, la VM est créée !
    Elle ne démarrera qu'au moment de votre première connexion VNC !

    Il ne vous reste donc qu'à vous connecter avec TigerVNC (ou autre - TightVNC sur Windows est gratuit) à la VM (192.168.0.112:5900), et la VM se lance !

    Procédez à l'installation de l'OS comme d'habitude.

     

    Une fois votre installation terminée, votre VM s'éteindra et ne redémarrera pas d'elle-meme (c'est normal).

    Pour la rallumer, modifiez légèrement la commande ci-dessus pour retirer l'ISO d'installation (le -s 3 ..../FreeBSD-13.1-RELEASE-amd64-bootonly.iso), et la VM démarrera de nouveau, en bootant directement sur le disque "nvme" cette fois.

    Voici la commande pour redémarrer sans l'ISO,
    je vous suggère de créer un tout petit script et  d'envoyer cette commande dans un fichier de conf pour la sauvegarder et relancer votre machine plus facilement :

    echo '#!/bin/sh' > /VIRTU/VM/masuperVM/masuperVM.conf
    echo 'bhyve -K fr -c 2 -m 1G -w -H -s 0,hostbridge -s 4,nvme,/VIRTU/VM/masuperVM/storage_masuperVM -s 5,virtio-net,vnic1 -s 29,fbuf,vga=off,rfb=192.168.1.39:5900,w=800,h=600,wait -s 30,xhci,tablet -s 31,lpc -l com1,stdio -l bootrom,/usr/share/bhyve/firmware/BHYVE_DEBUG.fd masuperVM' >> /VIRTU/VM/masuperVM/masuperVM.conf

    Pour relancer votre machine, exécutez simplement le script :
    (donnez d'abord les droits d'exécution - cette étape n'est à faire qu'une seule fois - chmod 740)

    chmod 740 /VIRTU/VM/masuperVM/masuperVM.conf
    ./VIRTU/VM/masuperVM/masuperVM.conf

     

    Bien, nous avons fait notre première VM... Nul doute que vous avez remarqué que la console est accaparée par le processus lorsqu'on lance une VM, et que de ce fait, on ne peut plus rien faire pendant ce temps (embetant qu'on veut lancer plusieurs VM en meme temps).
    Solution simple : vous connecter au serveur de virtualisation OI en SSH, et ouvrir plusieurs instances SSH !
    (L'envoi de la commande avec nohup ou & - en arrière-plan - ne fonctionnera pas avec bhyve).

    Une dernière commande bien utile si vous ne parvenez pas à stopper votre VM via VNC : stopper votre VM de force :

    bhyvectl --vm=masuperVM --force-poweroff

    Voilà, c'est fini !

     

     


    Tags Tags : , , , , , , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :