Linux : Virtualbox en ligne de commande (CLI)… et interface WEB

Linux : Virtualbox en ligne de commande (CLI)… et interface WEB
Accueil et demande de login/password sur l'application phpvirtualbox

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 :

  1. L’installation de VirtualBOX
  2. L’utilisation & l’administration de VirtualBOX via une interface WEB
  3. 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 :

  • Ensuite, on lance la commande (en Ă©tant toujours sous ‘root’) :
  • 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 :

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.

[tds_council]Le seul point nĂ©gatif Ă  ce programme, c’est qu’il propose un accĂšs Ă  la console en utilisant la technologie (dĂ©passĂ©e et plus vraiment supportĂ©e) Adobe Flash Player. Si vous utilisez un navigateur WEB qui ne possĂšde plus ce module, soit vous en changez, soit vous passez directement au chapitre 3, soit vous utilisez un client RDP fourni en standard par Windows « mstsc.exe », sous Linux, on pourra utiliser Remmina, Vinagre, etc…[/tds_council]

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 :

Ensuite on va se créer un USER spécifique qui fera fonctionner le processus « vboxwebsrv » :

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 :

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 :

  • Enregistrer le fichier
  • On test le service pour voir s’il est fonctionnel :

  • Puis on regarde s’il est bien dĂ©marrĂ© avec la commande « systemctl status vboxwebsrv.service » :

  • 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 :

  • La derniĂšre chose Ă  configurer sur VirtualBOX est son fichier de configuration : /etc/default/virtualbox
    On indiquera les lignes suivantes Ă  minima dedans :

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).

  • 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 :

  • On installe le fichier de configuration de l’application :

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 :

  • Maintenant que tout est correctement installĂ©, il faut redĂ©marrer le serveur (reboot) ou redĂ©marrer les services VirtualBOX :

[tds_warning]

Si vous oubliez cette Ă©tape, il est possible que certains Ă©lĂ©ments de votre interface WEB ne fonctionneront pas correctement… C’est le cas de la Console (« Remote desktop ») qui peut rester grisĂ©.

[/tds_warning]

  • 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« …

[tds_warning]

Il est difficile de trouver la bonne configuration quand on installe tous ces Ă©lĂ©ments… J’ai pu tester la version dĂ©veloppement de phpvirtualbox (en date du 14/03/2020) avec les versions 5.x et 6.x de VirtualBOX. En utilisant une version de phpvirtualbox 6.x (celle de dĂ©veloppement) on peut se retrouver avec ce type de message :

Il ne faut pas mélanger les versions !!!

[/tds_warning]

[tds_note]Si vous rencontrez des problĂšmes en rentrant sur l’interface, voici quelques pistes :

  • VĂ©rifier que le processus vboxwebsrv fonctionne bien en tache de fond : la commande « ps -ef | grep box » doit renvoyer une ligne qui doit ressembler Ă  cela :
    /usr/lib/virtualbox/vboxwebsrv –background -H 127.0.0.1
    Notez bien que le processus doit avoir les arguments « –background -H 127.0.0.1« 
  • VĂ©rifier que le fichier de configuration de l’application phpvirtualbox est bien prĂ©sent : il doit ĂȘtre fourni sous le nom « config.php« ; une version d’exemple est disponible Ă  la racine du serveur sur laquelle vous rĂ©fĂ©rer
  • VĂ©rifier que le fichier /etc/default/virtualbox contient bien les informations dĂ©crites ci-dessus.
  • Si vous avez des problĂšmes pour utiliser la console, il faut vĂ©rifier que :
    • Le pack d’extension de VirtualBox est bien installĂ© : c’est cette extension qui permet d’apporter le dĂ©port vidĂ©o via le protocole RDP, il est donc indispensable
      • Note : on peut vĂ©rifier que le pack est bien installĂ© par la commande « VBoxManage list extpacks« ; dans le cas contraire, on pourra exĂ©cuter par exemple la commande « VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.38.vbox-extpack » en ayant pris soin de tĂ©lĂ©charger le fichier « Oracle_VM_VirtualBox_Extension_Pack-5.2.38.vbox-extpack » avant !!!
    • Lorsqu’une VM est dĂ©marrĂ©e, dans la console de votre hyperviseur (et pas celle de VirtualBox !), on tapera la commande :

    • La commande doit renvoyer une ligne tel que dans l’exemple ci-dessus (NB: 192.168.1.150 est l’adresse de mon hyperviseur dans cet exemple)
      • ATTENTION: si la ligne renvoie une adresse en « 127.0.0.1 » Ă  la place de l’adresse de l’hyperviseur (ou de « 0.0.0.0 »), vous ne pourrez jamais vous connecter sur la console ou Ă  distance depuis une console RDP avec apparition d’une erreur de type « TCP: SECURITY_ERROR Error #2048« 
    • Lorsque vous ĂȘtes connectĂ© en RDP, cette mĂȘme commande doit renvoyer en plus une ligne comme comme dans cet exemple :

    • Si l’adresse fournie par le fichier .rdp de la machine fait rĂ©fĂ©rence Ă  une adresse locale comme « 127.0.0.1 », il est fort probable que le fichier de config n’a pas Ă©tĂ© mis Ă  jour correctement; 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)
      Si vous avez crĂ©Ă© des machines avec cette mauvaise configuration, vos machines doivent soit ĂȘtre refaite, soit Ă©ditĂ© directement au niveau de son fichier de config (.vbox) afin de rĂ©tablir une bonne configuration d’accĂšs.

 

[/tds_note]

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 :

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 :

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 :

Puis on passera les parametres de la VM par l’option « modifyvm » :

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 !

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 :

On connecte le disque sur le bus IDE :

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 :

[tds_note]

Pour dĂ©monter une image ISO d’un lecteur de DVD, la commande est simple :

On remarquera que pour dĂ©monter l’image ISO, il suffit de passer Ă  l’option « – -medium« , le paramĂštre « none » (NB : l’option « – -type » n’est pas obligatoire ici)

[/tds_note]

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 :

[tds_council]

Vous l’aurez remarquĂ© certainement, mais la commande principale ressemble toujours Ă  :

VBoxManage <option> <NomDeLaMachine> <option1> [paramĂštre] [<option2> [paramĂštre] <option3> [paramĂštre] …]

L’ensemble de ces options peut ĂȘtre retrouvĂ© sur la documentation officielle.

[/tds_council]​

On lance maintenant la VM :

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…
  • 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…)

    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

[tds_note]Les machines crĂ©Ă©es en ligne de commande ne seront pas vu dans l’interface de phpVirtualBox… et inversement ![/tds_note]

 

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.