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 vous connecter pour laisser un commentaire.