Mon CV

Une machine virtuelle sous VirtualBox en LaunchDaemon sur Mac, accessible via phpVirtualBox (3/3)

21 mai 2013

Si vous avez suivi l’épisode 1 de cette épopée – Une machine virtuelle sous VirtualBox en LaunchDaemon sur Mac, accessible via phpVirtualBox (1/3) – vous avez normalement à ce stade sur votre Mac une machine virtuelle tournant sous VirtualBox en tâche de fond, sans interface graphique, et se lançant au boot de votre machine, de manière indépendante de l’ouverture de session utilisateur.

Une chose intéressante est maintenant de pouvoir accéder simplement à votre machine virtuelle.

Je passe sur les TeamViewer, SparkAngels, VNC et autre Apple Remote Desktop pour vous suggérer un truc plus geek. Pourquoi ne pas utiliser phpVirtualBox ?

Mais késako ?

PhpVirtualBox (https://code.google.com/p/phpvirtualbox/) est un projet OpenSource basé sur un autre projet OpenSource désormais en sommeil : vboxweb (une réécriture en AJAX de l’interface graphique de VirtualBox). L’intérêt c’est que vous pourrez directement ouvrir votre navigateur pour accéder à VirtualBox, voir les VM démarrées, modifier l’affectation des ressources, faire un capture d’écran et prendre le contrôle à distance.

La limite, c’est que ce n’est pas réellement codé pour s’adapter à un environnement où vous devez mettre en place des contrôles d’accès sur vos VM, car une fois connecté, vous aurez accès à tous les machines virtuelles qui tournent sur votre VirtualBox.

Une fois installé vous ne serez pas dépaysé, car on est clairement dans le même environnement que l’interface classique de VirtualBox.

 

Comment installer tout cela sur le Mac ?

1. La première chose, c’est de démarrer automatiquement le webservice de VirtualBox.

La commande installée par VirtualBox se trouve dans /usr/bin/vboxwebsrv mais malheureusement, si vous l’exécutez à partir de ce chemin, vous aurez affaire à des crashes. Nous allons donc la lancer à partir de /Applications/VirtualBox.app/Contents/MacOS/vboxwebsrv.

Si vous souhaitez le faire manuellement pour tester dans votre Terminal :

cd /Applications/VirtualBox.app/Contents/MacOS
./vboxwebsrv
## Ou pour ne pas afficher la sortie standard
./vboxwebsrv  >/dev/null

VirtualBox vous facilite désormais le travail pour le lancement automatique en vous installant automatiquement une entrée LaunchAgent (dans ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist), comme cela est mentionné dans leur documentation. Le fichier d’exemple est disponible dans /Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxwebsrv.plist.
Le truc, c’est qu’un LaunchAgent se lance à l’ouverture de la session utilisateur, ce qui exclu un véritable fonctionnement de type serveur, puisque cela nécessite en permanence qu’une session soit ouverte sur la station.

Nous allons donc créer manuellement un fichier XML (.plist) pour disposer d’un LaunchDaemon qui se lancera avec le démarrage de la machine (sinon faites le fainéant en déplaçant et modifiant le fichier préparé par VirtualBox ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist, mais cela risque de vous prendre plus de temps).

Il faut créer un fichier /Library/LaunchDaemons/org.virtualbox.vboxwebsrv.plist qui contienne le contenu suivant :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Disabled</key>
  <false/>
  <key>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>org.virtualbox.vboxwebsvc</string>
  <key>UserName</key>
  <string>localadmin</string>
  <key>Program</key>
  <string>/Applications/VirtualBox.app/Contents/MacOS/vboxwebsrv</string>
  <key>Sockets</key>
  <dict>
    <key>Listeners</key>
    <dict>
      <key>SockServiceName</key>
      <string>18083</string>
      <key>SockPathName</key>
      <string>/Users/localadmin</string>
      <key>SockType</key>
      <string>stream</string>
      <key>SockFamily</key>
      <string>IPv4</string>
    </dict>
  </dict>
</dict>
</plist>

Pensez à remplacer “localadmin” par le nom d’utilisateur qui a les droits nécessaires sur votre installation VirtualBox (attention il faut le faire à deux emplacements).

Soit vous le faites avec un éditeur de texte classique, soit en ligne de commande :

nano /Library/LaunchDaemons/org.virtualbox.vboxwebsrv.plist

… collez alors le contenu du fichier vu plus haut. Faites un CTRL + X pour quitter, et validez la modification par Yes.

Chargez ensuite avec la commande

sudo launchctl load /Library/LaunchDaemons/org.virtualbox.vboxwebsrv.plist

Evidemment, si vous n’êtes pas adepte de la console, vous pouvez aussi créer cette entrée LaunchDaemon avec un logiciel en mode graphique. Lingon est tout à fait capable de le faire, à condition de vous procurer un ancienne version (1.2), téléchargeable ici, car les versions plus récentes, qui sont désormais payantes, ne permettent pas de gérer les Daemons système. Je pense que je vous proposerai d’ailleurs bientôt un petite tutoriel sur l’utilisation des différentes versions de Lingon.

A partir de maintenant vous avez paramétré votre machine pour démarrer le webservice de VirtualBox au boot.

 

2. Installer phpVirtualBox à proprement parler

Pour continuer nous allons considérer que vous avez un serveur web Apache fonctionnel sur votre machine (qu’il s’agisse d’une version Serveur ou Client de Mac OS X ou d’un MAMP).

L’installation de phpVirtualBox ne pose pas question particulière :

  • Récupérez la dernière version de phpVirtualBox sur la page de téléchargement du projet
  • Dézipez l’archive téléchargée dans un répertoire de votre serveur web
  • Renommez config.php-example en config.php et personnalisez vos paramètres. Il vous faut vous attarder sur les lignes
    var $username = 'xxxxxx';
    var $password = 'xxxxxx';

    où il vous faut mettre les identifiants de l’utilisateur du système utilisé pour VirtualBox.
    Vous pouvez aussi personnaliser la langue par défaut, ou si besoin, l’adresse du webservices.

  • Ouvrez ensuite votre navigateur et allez à l’adresse correspondante au dossier dans lequel vous avez installé phpVirtualBox.
  • Les identifiants par défaut sont admin / admin … pour les modifier, une fois connecté, allez dans le menu Fichiers > Paramètres > Utilisateurs.

phpVirtualBox capture d'écran

Une fois connecté, vous trouverez une interface très proche de l’application VirtualBox.

Il vous faudra par contre, si vous souhaitez utiliser cela à distance sans disposer d’un VPN, effectuer le routage des ports utilisés (pour le service Web  – 80 par défaut – et pour le contrôle à distance de vos machines virtuelles – 3389 par défaut).


Les seuls problèmes que j’ai rencontrés … se situent au niveau du démarrage du webservice de VirtualBox qui a été un peu tatillon. Normalement avec le fichier plist proposé ci-dessus, cela fonctionne mais si vous rencontrez une erreur ‘vboxwebsrv’ au login dans phpVirtualBox, je vous propose de faire ceci :

sudo launchctl unload /Library/LaunchDaemons/org.virtualbox.vboxwebsrv.plist
VBoxManage setproperty websrvauthlibrary null
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.vboxwebsrv.plist

 

Posted in Apple et MacintoshTags: