Configurer une machine virtuelle sur linux

Je développe habituellement sur un mac avec une stack pré-compilée de PHP/Mysql : AMPPS. Pour les petits site du quotidien cela est très convivial et n’oblige pas a rentrer dans le dur du sujet : la configuration d’un vHost Apache suffit généralement pour commencer un nouveau projet.

Cependant les applications sont limitées dès lors que vous voulez vous servir de librairies avancées tel que ffmpeg, imagick, pear…etc. Installer de telles librairies relève du casse tête sur un mac ou un pc alors qu’une ligne de commande suffit à les installer sur un environnement linux.

La solution pour se rapprocher de l’environnement de production consiste à monter une VM (Machine virtuelle) Debian sur notre machine hôte, de lui installer les librairies nécessaires et de partager un dossier avec notre machine hôte. Ainsi un serveur web tournera sur notre machine virtuelle et nous ferons appel à notre site via la machine hôtes. En réalité tout est transparent pour le développeur puisqu’il continue à travailler avec ses outils/arborescence habituels… Il faut juste configurer et démarrer la machine virtuelle et le tour est joué. D’autres solutions existent pour palier à ce genre de problème, notamment Vagrant qui permet d’industrialiser grandement ce processus, mais sa mise en place reste encore relativement obscure et fastidieuse pour les néophytes.

La procédure ci-dessous vous aidera à configurer votre système pour un tel développement, il se base sur une installation de Debian 7 wheezy, il faudra adapter les commandes pour travailler avec un autre système d’exploitation.

Installation de la machine virtuelle

Il nous faut dans un premier temps télécharger VirtualBox qui va nous servir à créer/cloner des machines virtuelle à partir de notre machine hôte.

L’installation de linux se fait en mode graphique en montant une image iso à partir de la fenêtre principale de la VM.

Après l’installation de la machine, ouvrez un terminal administrateur et mettez l’ensemble de votre système à jour :

apt-get update && apt-get upgrade && apt-get dist-upgrade

Vous pouvez ensuite installer la suite de logiciel qui vous sera utile, ex :

apt-get install mysql-server php5 apache2 phpmyadmin

Installation des logiciels additionnels VirtualBox pour Debian

Il vous faudra installer et mettre à jour module-assistant qui est un utilitaire de compilation et de gestion de paquet pour le noyaux linux.

apt-get install build-essential module-assistant

Configurez l’outil précédemment installé en tapant

m-a prepare

Depuis le menu « Device » de VirtualBox montez l’iso des logiciels additionnels : « insérez l’image CD des Additions invités » ou « Install Guest Additions » sur un menu Anglais.

En root, monter le CD et rendez-vous dans le repertoire des devices puis lancez l’installation :

cd /media/cdrom0
sh VBoxLinuxAdditions.run

Il se peut alors qu’une erreur apparaissent :

Verifying archive integrity...Error in MD5 checksums: 11f13a48bedc739d254d397cf3291974 is different from da0d4cda657dac6dba692dbc4da829b4

Ceci peut être résolu en créant un nouvel utilisateur dans la VM, en ejectant le CD puis en redémarrant.

adduser vboxusers

umount /media/cdrom0
reboot

Après le redémarrage il vous faudra à nouveau monter l’image CD et relancer le processus d’installation.

Configuration du réseau de la machine hôte

Eteignez la machine et configurer le réseau en bridge (configuration>réseau>bridged network) à partir de l’interface la plus rapide de votre machine hôte : surement l’ethernet en0 dans mon cas. Ceci permettra à votre VM d’adhérer à votre réseau courant comme une machine physique.
Il suffit alors de configurer votre réseau VM avec une ip static
Copier et adaptez les lignes suivantes dans le fichier de configuration réseau de la VM

nano /etc/networks/interfaces
# Loopback interface
auto lo
iface lo inet loopback

# Network bridged Vboxhttps://www.biper-studio.com/configurer-une-machine-virtuelle-pour-le-developpement-sur-debian/
allow-hotplug eth0
auto eth0
iface eth0 inet static
	address 192.168.0.xxx 	# ip static de la machine
	netmask 255.255.255.0	# masque de réseau
	gateway 192.168.0.254	# routeur, adresse de la box

Configuration d’un dossier partagé

Vous pouvez maintenant éteindre la machine pour configurer les dossiers partagés

shutdown -h now

Rendez-vous dans la configuration des dossiers partagés de la machine virtuelle.
Configurer un nouveau partage en cliquant sur l’icone dossier +.
Chemin du dossier : correspond à votre dossier de travail sur la machine hôte,
Nom du dossier : correspond au nom du partage, comme il sera accéder via la ligne de commande et pour nous éviter les guillemets, choisissez un nom sans espace ni caractères spéciaux.
Cocher la case configuration permanente pour avoir accès aux dossier même après redemarrage de la machine.
Vous pouvez démarrer la machine virtuelle et accéder au partage.
A cette étape, le partage devrait être visible et monté dans /media/ . Tous les dossiers de partage sont préfixé par sf_ automatiquement.
Vérifier que le dossier est bien monté en tapant

ls -la /media/

Gestion des droits pour l’utilisateur accédant au partage (sfvbox)

Afin de lisser l’utlisation du dossier partagé avec la machine hôte il faudra configurer l’utilisateur vboxsf (vbox shared files ), utilisateur qui gère le partage via Virtual Box.
Il faudra notamment permettre au groupe d’Apache d’accéder à ce dossier :
Dans /etc/group remplacer l’utilisateur vboxsf par la ligne suivante

vboxsf:x:1001:www-data

Montage du dossier partagés avec les bons droits

Le montage des dossiers partagés se fait via le programme mount.vboxsf celui-ci n’est pas disponible par défaut en ligne de commande, on peut palier à ce problème en faisant un lien symbolique vers l’executable.

 
sudo ln -sf /usr/lib/x86_64-linux-gnu/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf

N’oubliez pas de vérifier que les user id et group id sont corrects et correspondent à votre utilisateur www-data:

 
# user Id
id -u www-data
# group Id
getent group www-data

Vous pouvez monter le dossier partagé directement dans votre dossier web de la VM avec les bons droits en écriture via la ligne suivante.
Si c’est la première fois que vous montez votre partage, créez votre point de montage manuellement : mkdir /var/www/serverNameApachePourCePartage

sudo mount.vboxsf -o rw,uid=33,gid=33 nomDuPartageDansLaConfigurationVirtualBox /var/www/serverNameApachePourCePartage

Démontage des dossiers partagés

Si vous constatez une erreur vous pouvez démonter tous les partages et ensuite les recréer

umount /media/*

Configuration d’un vHost Apache sur la machine hôte

Félicitation votre dossier de partage et bien monté et fonctionnel !
Maintenant il ne nous reste plus qu’à configurer un vHost pour accéder à notre site.

cd /etc/apache2/sites-available/
cp default serverNameApachePourCePartage.labas
nano serverNameApachePourCePartage.labas

Remplacer et adapté le contenu de ce fichier par le vHost suivant

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName serverNameApachePourCePartage.labas
	
        DocumentRoot /var/www/serverNameApachePourCePartage.labas

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/serverNameApachePourCePartage.labas>
                Options -Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/serverNameApachePourCePartage.labas.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
</VirtualHost>
# Activer le site
a2ensite serverNameApachePourCePartage.labas
# Redémmarer Apache
service apache2 reload

Il ne nous reste plus qu’à configurer le DNS de votre machine Hôte en éditant le fichier hosts, sur un mac on fera :

sudo nano /etc/hosts

On pourra ainsi ajouter la ligne suivante

192.168.0.xxx serverNameApachePourCePartage.labas