Ça faisait un moment que je n'avais pas fait de tuto alors je reviens ici avec un pour vous expliquer comment procéder à une virtualisation ou plutôt exécuter des machines virtuelles avec VirtualBox 4.2 sur un serveur Debian Squeeze. Normalement vous utilisez l'interface graphique VirtualBox pour gérer vos machines virtuelles mais un serveur ne dispose pas forcément d'un environnement desktop. Heureusement, VirtualBox est livré avec un outil appelé VBoxHeadless qui permet de vous connecter aux machines virtuelles via une connexion de bureau à distance sans avoir besoin de l'interface VirtualBox.
Dans ce tuto j'utilise une VM basée sur Windows Server 2012 Standard mais vous pouvez utiliser n'importe quel autre système accepté par VirtualBox.
Voici les chapitres de ce tuto :
- Préparation de l'environnement
- Installation de VirtualBox sur votre serveur Debian Squeeze
- Installation du pack d'extension VirtualBox
- Importer une VM
- Se connecter à distance à une VM
- Gérer ses VMs via le navigateur avec phpVirtualBox
Avant d'installer VirtualBox sur votre serveur, il va falloir créer un utilisateur spécifique au contrôle de virtualbox que l'on appellera vbox :
root@server:~# groupadd vbox root@server:~# useradd -d /home/vbox -m -g vbox -s /bin/bash vbox
Si vous souhaitez mettre vos VMs sur un autre disque vous pouvez changer le chemin du home ou bien créer un lien symbolique.
Créez un mot de passe pour cette utilisateur :
root@server:~# passwd vboxInstallation de VirtualBox sur votre serveur Debian Squeeze
Pour installer VirtualBox sur votre serveur Debian Squeeze, vous devez avoir les privilèges root.
Commençons par ajouter le repository à notre configuration aptitude :
root@server:~# cd /tmp/ root@server:~# vi /etc/apt/sources.list
Et ajoutez ceci à la fin du fichier sources.list :
deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free
Téléchargeons et ajoutons la clé publique :
root@server:~# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add -
Ensuite mettons à jour la base de données des packages et notre système :
root@server:~# apt-get update root@server:~# apt-get upgrade
Recherchons les versions disponibles de VirtualBox...
root@server:~# aptitude search virtualbox
v virtualbox - p virtualbox-3.2 - Oracle VM VirtualBox p virtualbox-4.0 - Oracle VM VirtualBox p virtualbox-4.1 - Oracle VM VirtualBox i virtualbox-4.2 - Oracle VM VirtualBox p virtualbox-ose - x86 virtualization solution - base binarie p virtualbox-ose-dbg - Solution de virtualisation x86 - symboles p virtualbox-ose-dkms - x86 virtualization solution - kernel modul p virtualbox-ose-fuse - x86 virtualization solution - virtual file p virtualbox-ose-guest-dkms - x86 virtualization solution - guest additi p virtualbox-ose-guest-source - x86 virtualization solution - guest additi p virtualbox-ose-guest-utils - x86 virtualization solution - non-X11 gues p virtualbox-ose-guest-x11 - x86 virtualization solution - X11 guest ut p virtualbox-ose-qt - x86 virtualization solution - Qt based use p virtualbox-ose-source - Solution de virtualisation x86 - source du
...et lançons l'installation en téléchargeant virtualbox-4.2 ainsi que les headers de votre kernel (chez moi 2.6.32-5-amd64). DKMS assurera que les modules du noyau hôte de VirtualBox seront correctement mis à jour si une nouvelle version du noyau est installée :
root@server:~# apt-get install linux-headers-$(uname -r) build-essential virtualbox-4.0 dkmsInstallation du pack d'extension VirtualBox
Depuis la version 4.x, VirtualBox a mis en place un pack d'extensions et a externalisé certaines fonctionnalités comme l'accès au bureau à distance (VRDP) qui faisait auparavant parti de VirtualBox. Nous aurons donc ici besoin de ce pack d'extension pour accéder à distance à nos VMs.
Pour cela rendez-vous sur la page de téléchargement de VirtualBox et téléchargez la dernière version du VirtualBox Extension Pack pour la version 4.2 de VirtualBox :
root@server:~# cd /tmp/ root@server:~# wget http://download.virtualbox.org/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack root@server:~# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
Ajoutons notre utilisateur créé en début de tuto au groupe vboxusers créé lors de l'installation de VirtualBox :
root@server:~# adduser vbox vboxusers
Maintenant vous pouvez utiliser VirtualBox sur votre serveur avec en ligne de commande avec VBoxHeadless et VBoxManage.
Importer une VMAvant d'importer une VM avec VBoxManage, il va falloir convertir celle-ci au format OVF (Open Virtualization Format).
La majorité des logiciels de virtualisation comme VMware Workstation et VirtualBox sont capables d'exporter vers ce type de format. Je vais prendre ici pour exemple VirtualBox.
Ouvrez VirtualBox sur votre machine et cliquez sur Fichier > Exporter une application virtuelle... :
Choisissez la VM à exporter :
Sélectionnez le format OVF lors de l'export et générez le fichier manifest :
Cliquez sur Suivant puis Exporter et attendez la fin du processus :
Vous aurez trois fichiers de créés :
Copiez-les sur votre serveur Debian Squeeze et entrez cette commande pour importer la VM avec l'utilisateur vbox :
vbox@server:~# VBoxManage import /tmp/w2k12.ovf
Ceci devrait apparaître dans la console :
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Interpreting /tmp/w2k12.ovf... OK. Disks: vmdisk1 26843545600 -1 http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized w2k12-disk1.vmdk -1 -1 Virtual system 0: 0: Suggested OS type: "Windows2012_64" (change with "--vsys 0 --ostype "; use "list ostypes" to list all possible values) 1: Suggested VM name "W2k12" (change with "--vsys 0 --vmname ") 2: Number of CPUs: 1 (change with "--vsys 0 --cpus ") 3: Guest memory: 2048 MB (change with "--vsys 0 --memory ") 4: Sound card (appliance expects "", can change on import) (disable with "--vsys 0 --unit 4 --ignore") 5: USB controller (disable with "--vsys 0 --unit 5 --ignore") 6: Network adapter: orig Bridged, config 3, extra slot=0;type=Bridged 7: CD-ROM (disable with "--vsys 0 --unit 7 --ignore") 8: IDE controller, type PIIX4 (disable with "--vsys 0 --unit 8 --ignore") 9: IDE controller, type PIIX4 (disable with "--vsys 0 --unit 9 --ignore") 10: SATA controller, type AHCI (disable with "--vsys 0 --unit 10 --ignore") 11: Hard disk image: source image=w2k12-disk1.vmdk, target path=/home/vbox/VirtualBox VMs/W2k12/w2k12-disk1.vmdk, controller=10;channel=0 (change target path with "--vsys 0 --unit 11 --disk path"; disable with "--vsys 0 --unit 11 --ignore") 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully imported the appliance.
Vous êtes maintenant prêt à démarrer votre VM avec le nom donné lors de l'import. Ici :
vbox@server:~# VBoxHeadless --startvm "W2k12"
Et vous allez très probablement vous retrouver avec ce type d'erreur si vous importez une VM qui venait d'un système Windows :
Oracle VM VirtualBox Headless Interface 4.2.12 (C) 2008-2013 Oracle Corporation All rights reserved. VRDE server is listening on port 3389. Error: failed to start machine. Error message: Failed to open/create the internal network 'HostInterfaceNetworking-Contrôleur Realtek PCIe GBE Family' (VERR_INTNET_FLT_IF_NOT_FOUND). Failed to attach the network LUN (VERR_INTNET_FLT_IF_NOT_FOUND)
Quand on regarde les propiétés de la VM pour le champs NIC 1 (Network Interface Controller), on trouve ceci en tapant la commande :
vbox@server:~# VBoxManage showvminfo "W2k12" | grep NIC
NIC 1: MAC: 08002747035F, Attachment: Bridged Interface 'Contrôleur Realtek PCIe GBE Family', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none NIC 2: disabled NIC 3: disabled NIC 4: disabled NIC 5: disabled NIC 6: disabled NIC 7: disabled NIC 8: disabled
Réassignons correctement l'interface :
vbox@server:~# VBoxManage modifyvm "W2k12" --bridgeadapter1 eth0
En relancant la commande VBoxManage showvminfo on devrait maintenant avoir pour le champs NIC 1 ceci :
NIC 1: MAC: 08002747035F, Attachment: Bridged Interface 'eth0', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
Vous devriez maintenant ne plus avoir d'erreur au démarrage de votre VM
Attention car la commande citée plus haut pour le démarrage de la VM ne vous rendra pas la main et permet juste d'avoir des détails si des erreurs surviennent au lancement de la VM. Utilisez plutôt cette commande pour lancer votre VM :
vbox@server:~# VBoxManage startvm "W2k12" --type headless
Waiting for VM "W2k12" to power on... VM "W2k12" has been successfully started.Se connecter à distance à une VM
Maintenant que notre VM est lancée, on va y accéder via la Connexion bureau à distance :
Et voilà
Après le mode barbu avec les lignes de commande, on va passer au mode lama avec une IHM se rapprochant de très prés à celle de VirtualBox sur votre navigateur avec phpVirtualBox.
En pré-requis il vous faudra évidemment un serveur web comme Apache 2 avec PHP 5 d'installé.
Téléchargez la version de phpVirtualBox compatible avec la version de VirtualBox installé (ici la 4.2).
Et décompressez l'archive sur votre serveur web :
root@server:~# cd /tmp/ root@server:~# wget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.2-4.zip root@server:~# unzip phpvirtualbox-4.2-4.zip -d /var/www
Copiez le fichier config.php-example vers config.php :
root@server:~# cd /var/www/phpvirtualbox-4.2-4 root@server:~# cp config.php-example config.php root@server:~# vi config.php
Et modifiez la configuration du fichier en changeant les variables username et password pour y mettre le nom de l'utilisateur qui démarre VirtualBox. C'est-à-dire vbox et le mot de passe associé. Vous n'aurez probablement pas besoin de changer la variable location si vous êtes sur le même serveur.
Il va maintenant falloir modifier les paramètres de lancement du service vboxwebsrv.
root@server:~# vi /etc/default/virtualbox
VBOXWEB_USER=vbox VBOXWEB_HOST=127.0.0.1
Une documentation plus complète est disponible sur le wiki de phpVirtualBox pour la configuration du service.
Maintenant que c'est fait, vous pouvez démarrer le service web VirtualBox en exécutant cette commande en root :
/etc/init.d/vboxweb-service start
Starting VirtualBox web service:done..
Ouvrez votre navigateur et entrez l'adresse vers phpVirtualBox. Le username et mot de passe par défaut est admin.
Voilà maintenant vous pouvez gérer vos VMs à distance très facilement!
J'espère que ce tuto servira à certains d'entre vous