Ferme de serveurs virtualisés avec Oracle VirtualBox sur Windows

Passionné d’intégration de systèmes et de virtualisation, j’ai choisi de décrire dans cet article une vision plus inhabituelle d’Oracle VirtualBox qui est la répartition de machines virtuelles sur différents serveurs PC sous Windows (l’équivalent existe aussi sous linux) et de les administrer à distance via une interface web.
Cet article se veut avant tout pédagogique, même si des environnements de tests peuvent être gérés avec cette méthode.
Les hyperviseurs, moteurs de la virtualisation, sont classiquement divisés en type :

  • type 1 : l’hyperviseur s’installe comme un OS sur le serveur et est optimisé pour le service à rendre.
  • type 2 : l’hyperviseur est un logiciel qui tourne sur l’OS de l’hôte.

VirtualBox est un hyperviseur de type 2 que l’on utilise pour réaliser des tests, des POCs, …. Il est facile à mettre en oeuvre et possède un grand nombre d’adeptes. Il intègre une console d’administration de type client lourd qui permet de faire tourner localement des machines virtuelles.
Le but de cet article est de décrire l’utilisation de deux logiciels open source qui vont nous permettre :

  • De démarrer automatiquement au boot du serveur des machines virtuelles grâce à un service Windows : VboxVmService
  • D’accéder à l’administration des VM rattachées à des PC distants via une interface web: phpvirtualbox

 
Le paramétrage réalisé ne tient pas compte d’éventuels problèmes de sécurité, à vous de « blinder » l’installation éventuellement..

1. Briques utilisées pour réaliser l’installation

Plutôt que d’utiliser Apache avec PHP (c’est trop simple ?), j’ai choisi de changer un peu et d’utiliser IIS présent dans mon Windows 7 mais non installé.
architecture_serveur_virtualbox_2
 
La phase d’installation sera la suivante :

1) installation de VboxVmService

2) installation de PHP

3) installation de phpvirtualbox

4) installation d’IIS

5) paramétrage d’IIS

6) Paramétrages supplémentaires propres au lien entre VboxVmServicen phpvirtualbox et Virtualbox

Les liens de téléchargement des produits sont donnés en annexe..

2. Installation

a. Installation de VboxVmService

Cette installation ne présente pas de problème. L’installeur se présentant sous forme d’exécutable (VBoxVmService-4.0-Bayberry.exe) et demande simplement le répertoire d’installation.
Lancer le service..

b. Installation de PHP et paramétrage

Récupérer une version de PHP 5.5 pour WIndows non thread safe (suivant note http://php.net/manual/fr/install.windows.iis7.php ), ici php-5.5.0-nts-Win32-VC11-x64.zip, et la dézipper dans C:VirtualBoxAdmin
Renommer le fichier C:VirtualBoxAdminphp-5.5.0-nts-Win32-VC11-x64php.ini-development  en php.ini
Dans le fichier php.ini :
Activer Soap  en supprimant le commentaire devant le mot clé « extension » :

extension=php_soap.dll

Activer le paramètre timezone avec la valeur suivante (l’important est de l’activer quel que soit le time zone) :

date.timezone =Europe/Paris

Rajouter en fin de fichier :

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Exécuter le programme C:VirtualBoxAdminphp-5.5.0-nts-Win32-VC11-x64php-cgi.exe.
Si une erreur est remontée concernant la non existance de la dll msvcr110.dll, télécharger sur microsoft.com une version de Visual C++ 2012
(http://www.microsoft.com/fr-fr/download/details.aspx?id=30679) et choisir VSU1vcredist_x64.exe
.

c. Installation de phpvirtualbox

Récupérer une version de phpvirtualbox, ici phpvirtualbox-4.2-4.zip, et la dézipper dans C:VirtualBoxAdmin.

d. Installation d’IIS

Panneau de configuration –> programmes et fonctionnalités –> Activer ou désactiver des fonctionnalités Windows
activer_iis_1
Cliquer dans les cases à cocher : Service Internet IIS et dans Fonctionnalités de développement d’applications –> CGI suivant l’image ci dessous
activer_iis_7

e. Paramétrage d’IIS

Ouvrir l’interface de paramétrage IIS et se positionner dans Default Web Site.
Cliquer sur mappage de gestionnaire
activer_iis_gestionnaire_de_mapping_1
et choisir Ajouter un mappage de module
activer_iis_gestionnaire_de_mapping_2
 
Paramétrer le module suivant l’image ci-dessous
activer_iis_gestionnaire_de_mapping_3
 
Création d’un répertoire virtuel pointant sur l »installation de phpvirtualbox
activer_iis_creer_repertoire_virtuel_1
Puis renseigner le répertoire virtuel comme ci-dessous :
activer_iis_creer_repertoire_virtuel_2.

f. Paramétrages supplémentaires propres au lien entre VboxVmService, phpvirtualbox et Virtualbox

Un problème de droit utilisateur existe lors du lancement du programme VboxWebsrv.exe qu iest appelé par le service VboxVmService. Pour le corriger, ouvrir une fenêtre de commandes et lancer  :

C:\> dcomcnfg

Puis dans l’interface graphique, sélectionner
Services de composants –> ordinateurs –> Configuration DCOM –> VirtualBox Application
puis faire un clic droit et selectionner Propriétés
Dans le volet Identité, renseigner les champs « Cet utilisateur » avec le login/password d’un utilisateur ayant les droits d’administrateur.
Un autre problème est lié à l’authentification du web service de VirtualBox. Pour faire simple, j’ai détourné le problème en entrant la commande suivante :

"C:\Program Files\Oracle\VirtualBox\VBoxManage" setproperty websrvauthlibrary null

Mais vous pouvez jouer plus sportif en affinant la cause de ce problème 😉
Après ces modifications, arrêter et redémarrer le service

g. Déploiement sur plusieurs serveurs

Si vous comptez réaliser une ferme de serveurs Virtualbox, l’installation ci-dessus doit être réalisée sur chacun des serveur de la ferme. De plus penser à paramétrer correctement le firewall Windows et activer le service RPC pour permettre les accès distants sur la console des machines virtuelles.
Le paramètre « var $servers » du fichier config.php de phpvirtualbox autorise la connexion à plusieurs serveurs virtualbox distants à partir de la même interface web.

3. Utilisation de l’interface web phpvirtualbox

Nous voici prêts à utiliser notre interface graphique. Pour y accéder, entrer : « http://localhost/virtualboxadmin », le login et le mot de passe par défaut sont admin/admin.

a. Importation des machines virtuelles existantes

Les machines virtuelles crées avec le client lourd n’apparaissent pas dans la console php. Il est cependant possible de les importer à l’aide de la commande : menu machine –> ajouter –> choisir un fichier xxx.vbox
.

b. Paramétrage de la console phpvirtualbox

L’accès en mode console est grisé par défaut dans l’interface graphique.
activer_la_console_1
Pour l’activer, il faut aller cliquer sur la VM et choisir Configuration–>affichage–>bureau à distance
Le port serveur doit être unique sur chaque serveur, il faut attribuer un port différent par VM par serveur.
activer_la_console_2
Lorsque l’on clique sur l’icone console en haut à droite, la fenêtre de connexion  apparait sous cette forme :
activer_la_console_3Il faut remplacer « null » par l’adresse IP de la machine à contacter (l’interface ne la rajoute pas automatiquement). Si les fonctionnalités console ne fonctionnent pas, il faut installer le Virtual Box Extension sur le serveur.

c. Paramétrage du service VboxVmService

Pour démarrer automatiquement des VM au boot du PC, il faut d’une part rendre automatique le démarrage du service. Ensuite, il faut manuellement (eh oui !) dire explicitement les VM qui doivent être démarrées automatiquement par le service. Pour cela il faut configurer le fichier VBoxVmService.ini se trouvant dans le répertoire d’installation du service en rajoutant une entrée par VM, incrémentée de 0 à n. Cette entrée comporte un paramétre AutoStart à renseigner par yes le cas échéant. Pour le paramétre ShutdownMethod , les choix possibles sont « savestate » and « acpipowerbutton » suivant que l’état de la machine virtuelle doit être sauvegardé au shutdown du serveur ou non.
[Vm0]
VmName=ubuntu
ShutdownMethod=savestate
AutoStart=yes
[Vm1]
VmName=winxp
ShutdownMethod=savestate
AutoStart=no

4. Conclusion

Vous voilà propriétaire d’une ferme de serveurs virtualisés avec des fonctionnalités basiques, certes, mais à bon marché et facile à exploiter..

Annexe

VboxVmService : http://sourceforge.net/projects/vboxvmservice
PHP sur Windows :  http://windows.php.net/download
PHP VirtualBox : http://code.google.com/p/phpvirtualbox
Documentation PHP sur Windows : http://php.net/manual/fr/install.windows.iis7.php