Le blog d'un bidouilleur
Le blog d'un bidouilleur

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

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.

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…

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 :

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

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

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 !!!

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.

 

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 :

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)

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 :

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.

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
Les machines créées en ligne de commande ne seront pas vu dans l’interface de phpVirtualBox… et inversement !

 

Translate »

GFPR : Nous utilisons Google Analytics

Veuillez confirmer, si vous acceptez notre suivi Google Analytics. Vous pouvez également refuser le suivi, ainsi vous pourrez continuer à visiter notre site Web sans envoyer de données à Google Analytics