Le but de ce billet est de résumer tous les points que j'ai vu pour avoir une configuration virtualbox complétement contrôlable en ligne de commande avec graphique accessible en VRDP.
Le nom de la VM est guest.

  • Creer un port de connection VRDE
  • Cela permet d'avoir ensuite l'accès à la console car en mode headless impossible de recuperer la console du client lourd.
    La fonctionnalité est fournie avec les extention pack de Virtualbox, à ne pas confondre avec les guest addition.
    Il faut télécharger le pack à cette URL ($VBOXVER est la version virtualbox) :
    http://download.virtualbox.org/virtualbox/$VBOXVER/Oracle_VM_VirtualBox_Extension_Pack-$VBOXVER.vbox-extpack
    Ensuite faire la configuration suivante pour utiliser la fonctionnalité vrde :
    VBoxManage extpack install "fichier downloadé"
    VBoxManage modifyvm guest --vrde on
    VBoxHeadless --startvm guest --vrde config

  • Forwarder port SSH pour le mode NAT
  • La machine arrétée il faut changer les propriétés avec la commande suivante :
    VBoxManage modifyvm "guest" --natpf1 "guestssh,tcp,,2222,,22"
    On pourra ensuite se connecter à la VM avec
    ssh -p 2222 localhost

  • Permettre le server DNS de repondre au requete de l'hote
  • il faut que la VM passe les requetes DNS au guest.
    VBoxManage modifyvm "guest" --natdnshostresolver on

  • Installer le guest addition
  • Cette partie là est à faire sur la machine invitée donc après l'installation.
    Cela necessite une compilation, il faudra donc ajouter les "kernel headers" et autres outils de compilation.
    J'ai trouvé cette page qui détaille bien l'installation.

Ensuite on peut avoir pas mal de details avec les commandes suivantes :
VBoxManage getextradata guest enumerate
VBoxManage showvminfo guest --details
VBoxManage list extpacks
La deuxième commande est particulièrement utile car on peut voir les details VRDP.

On peut aussi voir l'IP de la VM après avoir installé l'ext pack et le VM guest addition.
VBoxManage guestproperty get guest /VirtualBox/GuestInfo/Net/0/V4/IP | awk -F ':' '{print $2}'

Enfin en cas de plusieures VM tournant sur le même hôte, on pourra gérer les différents port VRDP en utilisant un "range" de ports à la declaration :
VBoxManage modifyvm guest --vrdeport 3333-3353


Enfin pour bien ranger ses vm dans un répertoire donné on peut faire un :
VBoxManage setproperty machinefolder /data/VirtualBoxVm/

Je trouve ca vraiment stupide de mettre des fichiers de plusieurs gig dans un fichier caché de la home ....

J'ai compilé tout ca dans mon script de management en mode cli de virtualbox.
Il y a maintenant un version python3 de la chose plus sympa à utiliser : vb.py