Depuis que je suis confiné à travailler depuis chez moi, j’ai eu l’envie de monter un environnement de machine sous Linux, toutes sur la même machine hyperviseur.
Pour cela, j’ai resorti un vieux PC du placard :
- Intel i7 2770
- 16 Go de RAM
- 1 To de disque dur
- Carte mère avec technologie Intel VT (virtualisation) activable
Ma machine va recevoir toutes les autres sous forme de VM (Virtual Machine) : mon PC sera donc considéré comme un « Hyperviseur »
Pour fonctionner, mon hyperviseur va fonctionner sous Linux Ubuntu Server 18.04; d’autres distributions Linux peuvent également être utilisés pour réaliser ce type de machine : la configuration d’une adresse IP fixe sur ma machine sera par contre un pré-requis. Sous Ubuntu Server, la configuration repose sur le système « Netplan ».
Je vous propose de voir plusieurs choses au sein de cet article :
- L’installation de VirtualBOX
- L’utilisation & l’administration de VirtualBOX via une interface WEB
- L’utilisation & l’administration de VirtualBOX en ligne de commande
1 – Installation de VirtualBOX
Avant d’installer quoi que se soit, un peu de paramétrage :
- Dans le dossier /etc/apt/source.list.d on va créer un fichier qui portera le non « virtualbox.list »
- Dans ce fichier, on va copier les lignes suivantes :
deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian bionic contrib # deb-src http://download.virtualbox.org/virtualbox/debian bionic contrib # deb-src http://download.virtualbox.org/virtualbox/debian bionic contrib # deb-src http://download.virtualbox.org/virtualbox/debian bionic contrib # deb-src http://fr.archive.ubuntu.com/ubuntu bionic-security multiverse
- Ensuite, on lance la commande (en étant toujours sous ‘root’) :
wget -q https://www.virtualbox.org/download/oracle_vbox.asc apt-key add oracle_vbox.asc apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A2F683C52980AECF
- Cela importera les clés du repository virtualbox
- On lance la commande « apt update«
On installera les paquets VirtualBOX sur la machine avec la commande :
apt install virtualbox-5.2 virtualbox-ext-pack
2 – L’utilisation & l’administration de VirtualBOX via une interface WEB
VirtualBOX est maintenant installé… Mais en mode ligne de commande, il faut bien avouer que cela n’est pas très firendly ! On va donc installer une interface WEB qui va permettre de gérer cet émulateur pour par la suite y créer nos machines virtuelles. Cette interface s’appelle « phpvirtualbox » et est disponible sur GitHub.
phpVirtualBOX est un projet construit en langage PHP depuis plusieurs années… Même si le projet est de moins en moins actif, il reste l’une des seule solutions pour administrer graphiquement depuis un navigateur WEB, des machines virtuelles à distance.
L’interface étant basée sur un mode WEB, il nous faut donc un serveur WEB : on installe alors Apache avec les modules utilisés par l’application WEB :
apt install apache2 libapache2-mod-php php php-soap php-xml
Ensuite on va se créer un USER spécifique qui fera fonctionner le processus « vboxwebsrv » :
adduser vbox
Le système va vous demander un tas de chose, dont son mot de passe : on mettra « pass »
Pour que le USER que l’on vient de créer puisse discuter correctement avec VirtualBOX, on va le rattacher au groupe VirtualBOX :
usermod -G vboxusers vbox
Maintenant que l’on a créé le USER qui va permettre l’exécution du processus qui permettra l’intéraction avec le service WEB, on va créer un script de lancement de ce processus :
- Se rendre dans /etc/systemd/system
- Créer le fichier vboxwebsrv.service avec l’éditeur de votre choix
- Ajouter le texte suivant dans ce nouveau fichier :
[Unit] Description=vboxwebsrv service [Service] User=vbox Group=vbox ExecStart=/usr/lib/virtualbox/vboxwebsrv -H 127.0.0.1 WorkingDirectory=/home/vbox Restart=on-failure RestartSec=1m #StandardOutput=null [Install] WantedBy=multi-user.target
- Enregistrer le fichier
- On test le service pour voir s’il est fonctionnel :
systemctl start vboxwebsrv.service
- Puis on regarde s’il est bien démarré avec la commande « systemctl status vboxwebsrv.service » :
root@hyperviseur:/etc/systemd/system# systemctl status vboxwebsrv.service ● vboxwebsrv.service - vboxwebsrv service Loaded: loaded (/etc/systemd/system/vboxwebsrv.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2020-03-18 17:22:46 UTC; 5min ago Main PID: 32063 (vboxwebsrv) Tasks: 17 (limit: 4915) CGroup: /system.slice/vboxwebsrv.service ├─32063 /usr/lib/virtualbox/vboxwebsrv -H 127.0.0.1 ├─32072 /usr/lib/virtualbox/VBoxXPCOMIPCD └─32081 /usr/lib/virtualbox/VBoxSVC --auto-shutdown mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000134 main OS Version: #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000172 main DMI Product Name: OptiPlex 790 mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000181 main DMI Product Version: 01 mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000239 main Host RAM: 15919MB (15.5GB) total, 15308MB (14.9GB) available mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000243 main Executable: /usr/lib/virtualbox/vboxwebsrv mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000244 main Process ID: 32063 mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.000244 main Package type: LINUX_64BITS_UBUNTU_18_04 mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.011449 main IPC socket path: /tmp/.vbox-vbox-ipc/ipcd mars 18 17:22:46 hyperviseur vboxwebsrv[32063]: 00:00:00.151658 SQPmp Socket connection successful: host = 127.0.0.1, port = 18083, master socket = 8 mars 18 17:22:51 hyperviseur vboxwebsrv[32063]: 00:00:05.149184 Watchdog Statistics: 0 websessions, 0 references
- Si tout s’est correctement déroulé, vous pouvez activer définitivement ce nouveau service, ce qui permettra un démarrage automatique au démarrage de Linux :
root@hyperviseur:/etc/systemd/system# systemctl enable vboxwebsrv.service Created symlink /etc/systemd/system/multi-user.target.wants/vboxwebsrv.service → /etc/systemd/system/vboxwebsrv.service
- La dernière chose à configurer sur VirtualBOX est son fichier de configuration : /etc/default/virtualbox
On indiquera les lignes suivantes à minima dedans :
VBOXWEB_USER=vbox VBOXWEB_HOST=127.0.0.1
D’autres options dans ce fichier sont possible, mais pas vraiment indispensable dans notre cas; on se référera à la documentation officielle à ce propos.
Maintenant que VirtualBOX est installé et que son interface de communication WEB est fonctionnelle, on passe au téléchargement de l’application « phpvirtualbox« ; on la trouvera sur GitHub (NB: le projet a migré de SourceForge à GitHub). On téléchargera la version 5.2 disponible dans la liste des releases de l’application (NB : à cette date, la version de développement n’est compatible qu’avec la version 6.x de VirtualBOX).
cd /var/www/html wget https://codeload.github.com/phpvirtualbox/phpvirtualbox/zip/5.2-1
- On décompresse l’archive ZIP reçu dans notre dossier (qui doit être /var/www/html) et on créé un lien vers le dossier cible :
unzip phpvirtualbox-5.2-1.zip ln -s phpvirtualbox-5.2-1/ phpvirtualbox
cd phpvirtualbox cp config.php-example config.php
On modifiera les lignes suivantes dans le fichier config.php:
- Remplacer la ligne « #var $vrdeaddress = ‘192.168.1.1’; » par « var $vrdeaddress = ‘192.168.1.190’; »
NB : 192.168.1.190 étant l’adresse de votre machine et bien supprimer le # en début de ligne
–> Éventuellement, vous pouvez modifier la langue dans le fichier de config en changeant la ligne « var $language = ‘en‘; » par « var $language = ‘fr‘; »
- On oublie pas de mettre tout ce petit monde avec les bons droits :
chown -R www-data:www-data /var/www/html/
- Maintenant que tout est correctement installé, il faut redémarrer le serveur (reboot) ou redémarrer les services VirtualBOX :
systemctl list-units | grep vbox vboxautostart-service.service loaded active exited vboxautostart-service.service vboxballoonctrl-service.service loaded active exited vboxballoonctrl-service.service vboxdrv.service loaded active exited VirtualBox Linux kernel module vboxweb-service.service loaded active running vboxweb-service.service vboxwebsrv.service loaded active running vboxwebsrv service root@hyperviseur:/var/www/html/phpvirtualbox# systemctl restart vboxautostart-service.service root@hyperviseur:/var/www/html/phpvirtualbox# systemctl restart vboxballoonctrl-service.service root@hyperviseur:/var/www/html/phpvirtualbox# systemctl restart vboxdrv.service root@hyperviseur:/var/www/html/phpvirtualbox# systemctl restart vboxweb-service.service root@hyperviseur:/var/www/html/phpvirtualbox# systemctl restart vboxwebsrv.service
- Vous pouvez maintenant vous rendre sur la page WEB de votre service : http://<VotreAdresseIP>/phpvirtualbox
- Une page de login doit apparaître
- Le login & mot de passe sont par défaut : admin /admin
Vous pourrez rajouter d’autres utilisateurs dans la partie configuration par la suite et changer le mot de passe de ce compte « admin« …
3 – L’utilisation & l’administration de VirtualBOX en ligne de commande
Pour gérer en ligne de commande VirtualBOX, une commande essentielle est a connaitre :
VBoxManage <option> <commande>
Pour la liste complète, on se réferera à la documentation offcielle
Toutefois, pour une petite mise en bouche, je vous propose de créer une VM depuis la ligne de commande : ce sera une machine de base, avec des options standard !
Notre VM s’appelera « linux2020 ».
On débutera par la création de la VM :
VBoxManage createvm --name linux2020 --register --basefolder "<chemin>"
C’est le strict minimum pour commencer la création d’un VM; les options correspondent à :
- – -name : on donne un nom à notre VM
- – -register : on enregistre notre nouvelle VM dans la base des machines de VirtualBOX
- – -basefolder : on défini le chemin ou sera stocké nos machines virtuelles.
On remarque que le retour de cette commande affiche plusieurs informations, dont un UUID : cette variable est unique et peut remplacer le nom de la machine dans les commandes qui vont suivre…
Cela va créer aussi un dossier du nom de la machine ainsi que du fichier « linux2020.vbox »; ce fichier contient au final assez peut d’informations pour le moment :
<?xml version="1.0"?> <!-- ** DO NOT EDIT THIS FILE. ** If you make changes to this file while any VirtualBox related application ** is running, your changes will be overwritten later, without taking effect. ** Use VBoxManage or the VirtualBox Manager GUI to make changes. --> <VirtualBox xmlns="http://www.virtualbox.org/" version="1.15-linux"> <Machine uuid="{437ea587-87ad-40d8-942e-7963af03a9b2}" name="linux2020" OSType="Other" snapshotFolder="Snapshots" lastStateChange="2020-03-27T12:02:22Z"> <Hardware> <CPU> <PAE enabled="true"/> <LongMode enabled="true"/> <HardwareVirtExLargePages enabled="false"/> </CPU> <Memory RAMSize="128"/> <Paravirt provider="Default"/> <RemoteDisplay enabled="false"/> <AudioAdapter driver="ALSA" enabled="true" enabledIn="false" enabledOut="false"/> </Hardware> </Machine> </VirtualBox>
On va donc maintenant configurer notre machine avant de booter sur l’image ISO et y accéder par RDP… sauf qu’avant d’aller plus loin, il faut « enregistrer » dans le système notre nouvelle VM :
VBoxManage registervm <chemin>/linux2020/linux2020.vbox
Puis on passera les parametres de la VM par l’option « modifyvm » :
VBoxManage modifyvm linux2020 --ostype RedHat_64 --memory 1024 --vram 8 --acpi on --cpus 2 --boot1 dvd --graphicscontroller vboxvga --firmware bios --nic1 bridged --bridgeadapter1 eno1 --cableconnected1 on --mouse ps2 --keyboard ps2 --vrde on
Explications sur toutes ces options :
- – -ostype est suivit de l’ID de l’OS qui sera installé; la liste des OS supporté peut être trouvé via la commande « VBoxManage list ostypes«
- – -memory est en Méga Octect : 1024 Mo dans l’exemple
- – -vram est la taille de la mémoire vidéo : 8 Mo dans l’exemple
- – -acpi on : on active la gestion de l’ACPI de la VM
- – – cpus : on donne le nombre de CPU que l’on souhaite affecter à la VM
- – -boot<NuméroDeSéquence> : le numéro de séquence est le numéro d’ordre du périphérique qui permet de booter; dans cet exemple le premier périphérique de boot sera le lecteur de DVD
- – -graphicontroller : défini le type de pilote vidéo qui sera utilisé par la VM
- – -firmware : défini le type de microprogramme servant au démarrage de la VM; ici dans l’exemple, la machine est équipé d’u BIOS
- – -nic<NuméroInterface> : défini comment est connecté l’interface réseau qui porte le numéro « NuméroInterface »; on peut avoir jusqu’à 4 interfaces : dans l’exemple, la carte réseau sera mise en mode « bridged »
- – -bridgeadapter<NuméroInterface> : la carte réseau défini ci-dessus ayant été mise en mode « bridge » (aka « pont »), il faut la relier à la carte réseau de l’hyperviseur qui apportera la connexion au réseau. Dans l’exemple, le nom de lcarte réseau de l’hyperviseur s’appel « eno1 »
Note : on peut lister le nom des interfaces réseau disponible en utilisant la commande « VBoxManage list bridgedifs« - – -cableconnected<NuméroInterface> : défini l’état de l’interface, si elle est connecté ou pas; dans l’exemple, elle est forcé à connecté.
- – -mouse : défini le type de connexion de la souris; le mode « ps2 » est utilisé ici
- – -keyboard : défini le type de connexion du clavier; le mode « ps2 » est utilisé ici
- – -vrde : on défini si on souhaite avoir un retour écran par le protocole RDP; ici on positionne cette option sur « on » pour l’activer et le port par defaut sera 3389.
Maintenant que notre VM est défini, il faut lui définir l’ISO sur laquelle on va booter mais également définir une chose importante : le disque dur et sa taille !
VBoxManage createmedium disk --filename "/vm/linux2020/linux2020.vdi" --size 1048576 --format VDI --variant Standard
Cette fois, on passe l’option « createmedium » à la commande principale « VBoxManage »; détails de la ligne de commande :
- disk : on indique que l’on va créer un disque dur; d’autres options sont possible pour créer d’autres type de disques (DVD, etc…)
- – -filename : on va indiquer entre double quote, le chemin ou sera stocké le disque. Je vous conseil de stocker ce disque dans le même répertoire que celui qui contient la définition de votre VM (là ou est stocké le fichier en .vbox). On indiquera un fichier avec l’extension en « .vdi » qui est le standard sur VirtualBOX
- – -size : l’option à ne pas manquer, elle défini la taille en Mo du disque dur
- – – format : en relation avec la commande « filename« , on défini le format du stockage; dans mon exemple, on est sur un format de type « VDI » qui est le standad sur VirtualBOX
- – -variant : défini comment le disque va être créé sur votre hyperviseur; par defaut le fichier de votre disque grossira en fonction de ce que vous mettez dedans et ne prendra pas la totalité de la taille défini plus haut.
Pour connecter notre disque dur, il nous faut également un port IDE :
VBoxManage storagectl linux2020 --name IDE --add ide
On connecte le disque sur le bus IDE :
VBoxManage storageattach linux2020 --storagectl IDE --port 0 --device 0 --type hdd --medium "<chemin>/linux2020.vdi"
Maintenant que le disque dur est crée et connecter, on passe à la création du lecteur de DVD et on va y monter une image ISO en connectant tout cela sur le bus IDE de la VM :
VBoxManage storageattach linux2020 --storagectl IDE --port 1 --device 0 --type dvddrive --medium "<chemin>/redhat.iso"
Si vous avez bien suivi ce modop pour la création de la VM en ligne de commande (CLI), votre machine devrait être prête à être démarrée; mais avant, il peut être bon de vérifier son paramétrage :
VBoxManage showvminfo linux2020
On lance maintenant la VM :
root@hyperviseur:/vm# VBoxManage startvm linux2020 --type headless Waiting for VM "linux2020" to power on... VM "linux2020" has been successfully started.
L’option « –type headless » indique que la machine sera lancée sans affichage sur l’écran de l’hyperviseur : en même temps, cela ne fonctionnerait pas puisque l’on est en mode console / CLI 😉 .
Il ne reste plus qu’à lancer le client RDP de votre ordinateur pour accéder à l’écran de la VM. Sous Windows, vous pouvez rechercher « RDP » ou lancer la commande « mstsc.exe » :
Après avoir indiqué l’adresse de votre hyperviseur et le port de connexion à la VM (défini plus haut), vous devriez pouvoir visualiser l’écran de votre VM :
Si vous devez arréter la VM depuis la console de votre hyperviseur, 2 choix s’offrent à vous :
- Mode ACPI : on envoie une commande au système de la VM pour lui demander de s’arréter…
VBoxManage controlvm <nomDeLaVM> acpipowerbutton
- Mode « débranchage électrique » : cela arrète la VM tout comme si vous débranchiez électriquement votre ordinateur…. Avec ce mode, attention aux pertes de données et problèmes de stabilité de la VM (fsck, etc…)
VBoxManage controlvm <nomDeLaVM> poweroff
Il existe d’autres commandes qui peuvent être interressant :
- reset : lance un RESET de la VM
- savestate : sauvegarde l’état de la machine
- resume : reprend l’état antérieur de la VM
Vous devez être connecté pour poster un commentaire.