Xen est un outil de virtualisation. Il permet de faire tourner plusieurs OS en parallèle sur un système en gérant la répartition des ressources. Dans notre cas, le but de de faire tourner plusieurs Fedora Core 4 sur une même machine.
Installation Xen
La machine sig.erasme.org est une Fedora Core 4. Xen est fournit en standard sur la Fedora Core 4. L’installation consiste donc à installer une Fedora Core 4 minimale. Reste à installer le kernel spécifique à Xen ainsi qu’un kernel pour les machines virtuelles, lui aussi spécifique à Xen.
Grossièrement, le principe de Xen, c’est un kernel Xen (donc pas Linux) qui boot en premier. Ce kernel va alors booter un kernel Linux qui sera la première machine virtuelle et qui a plus de droit que les autres. Elle s’appelle dom0 (ou Domain 0). C’est dom0 qui se chargera de lancer les autres VM.
Pour l’installation, nous avons utilisé les dernières versions de Xen (kernel xen, kernel xen0, kernel xenU et outils xen) de XenSource : http://bits.xensource.com/Xen/lates.... Soit :
- xen-3.0.0-2.1_fc4.i386.rpm
- xen-kernel-2.6.12-xen3_2.1_fc4.i686.rpm
ATTENTION : il y a peu de kernel qui fonctionne correctement avec Xen (plantage au boot ou problème de mémoire). En cas d’expérience, ne pas s’étonner s’il y a des problèmes.
Il est nécessaire d’installer auparavant les packages suivants :
# rpm -ivh libidn-0.5.15-1.i386.rpm curl-7.13.1-3.i386.rpm
On peut alors installer les outils Xen (kernel-xen0 : kernel hôte, kernel-xenU : kernel machine virtuelle, xen : outils d’administration) :
# rpm -ivh xen-3.0.0-2.1_fc4.i386.rpm xen-kernel-2.6.12-xen3_2.1_fc4.i686.rpm
Il est nécessaire de vérifier que les répertoires xenstored sont bien créé xenstored sont bien créés :
Il alors modifier /etc/grub.conf afin de booter sur le kernel xen0. Nous en profitons aussi pour rajouter le paramètre dom0_mem pour définir la mémoire alloué à la VM dom0. Il est conseillé de ne pas mettre beaucoup si cette machine ne sert qu’à démarrer les autres. En effet, si on met trop, il ne restera que peu de mémoire pour les autres VM. Dans notre cas le serveur dispose de 2Go, nous attribuons seulement 128 Mo pour dom0.
Voici donc à quoi ressemble le fichier grub.conf :
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.12-xen3)
root (hd0,0)
kernel /boot/xen-3.gz dom0_mem=128M
module /boot/vmlinuz-2.6-xen ro root=LABEL=/
module /boot/initrd-2.6-xen.img
Vient maintenant le moment de reboot la machine sur le kernel Xen.
Nous pouvons maintenant démarrer le démon xend à l’aide des commandes suivantes :
# service xend start
# chkconfig --level 3 xend on
On peut alors s’assurer que cela fonctionne en listant les domaines (sort d’environnement d’exécution pour les machines virtuelles) de xen avec la commande :
# xm list
Installation du machine virtuelle
Il y a plusieurs façons de procéder. On créer une nouvelle partition physique est faire l’installation du système dans cette partition physique et rebootant la machine sur le CD d’installation de la Fedora Core 4.
On peut aussi faire l’installation de la machine virtuelle dans une fichier qui sera vu comme une partition. C’est cette solution que nous avons mise en place. Les fichiers des images de partition ce trouve dans le répertoire /var/vm/.
Commençons pas créer un fichier vide de la taille de la partition (13 Go) :
# dd if=/dev/zero of=machine1.img bs=1M count=13312
Il est alors nécessaire de formatter cette partition (ici en Ext3) :
# /sbin/mke2fs -F -j machine1.img
Nous allons maintenant installer un système minimum de Fedora Core 4 dessus afin de pouvoir booter cette machine. Pour cela, il faut monter ce fichier en loop back :
# mkdir machine1
# mount -o loop machine1.img machine1
Pour que l’on puisse faire l’installation à l’aide de yum, il faut créer quelques fichiers indispensables :
# cd machine1
# mkdir etc
# mkdir dev
# for i in console null zero ; do /sbin/MAKEDEV -d /var/vm/machine1/dev -x $i ; done
Dans le répertoire /var/vm/machine1/etc, il faut créer le fichier fstab suivant :
/dev/sda1 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
Il ne reste plus qu’à installer la liste des packages qui nous intéresse. Dans notre cas, comme le système hôte est aussi une Fedora Core 4 et qui plus est minimale, nous somme partie de la liste des packages installés sur le système hôte pour l’installation de la machine virtuelle.
Pour cela, il faut déjà récupérer la liste des packages installés, supprimer les kernels inutiles et les outils Xen et faire installer les packages restants par Yum. Vous pouvez faire cela à l’aide de la commande suivante :
# rpm -qa | egrep -iv '(kernel|xen)' | perl -e 'while(<>) { $_ =~ s/\n/ /; print $_; }' | xargs yum --installroot=/var/vm/machine1/ -y install
Il est aussi nécessaire d’installer le kernel Xen sur la VM. En effet, le kernel utilisé se trouve sur dom0 et n’a pas besoin d’être sur la VM mais nous avons besoins de ses modules sur la VM. Vous pouvez donc le rajouter avec la commande suivante :
# yum --install=/var/vm/machine1 install /root/xensource/xen-kernel-2.6.12-xen3_2.1_fc4.i686.rpm
Il peut être nécessaire de modifier la configuration de yum afin qu’il ne vérifie pas la signature GPG pour installer ce package. Pour cela, il faut éditer le fichier /etc/yum.conf et modifier la ligne suivante comme suit :
gpgcheck=0
Une fois l’installation finie, il faut démonter le fichier :
# umount /var/vm/machine1/proc
# umount /var/vm/machine1
Reste à écrire le fichier de configuration de la machine virtuelle. Dans mon cas, le fichier est placé dans le répertoire /etc/xen/auto afin de permettre le démarrage automatique de cette VM lors du boot du serveur hôte. Voici le contenu du fichier machine1 :
kernel ="/boot/vmlinuz-2.6.12.6-xen3_2.1_fc4"
memory = 768
name = "machine1"
nics = 1
disk = ['file:/var/vm/machine1.img,sda1,w']
root = "/dev/sda1"
extra = "ro selinux=0 3"
Pour décrypter un peu. Nous utilisons le kernel /boot/vmlinuz-2.6.12.6-xen3_2.1_fc4 pour la machine virtuelle, elle a 768 Mo de mémoire, elle s’appele machine1, elle a une interface réseau, elle utilise une partition qui se trouve dans le fichier /var/vm/machine1.img et qui sera vue comme /dev/sda1 dans la VM, la partition de boot de la VM est /dev/sda1 et nous rajoutons les paramètres "ro selinux=0 3" au boot du kernel afin de booter en désactivant SELinux et au runlevel 3.
Pour que la VM soit démarré automatique au boot de la machine hôté, il faut s’assurer que le service xendomains est bien démarré au boot de notre runlevel :
# chkconfig --level 3 xendomains on
Utilisation d’une machine virtuelle
- Démarrer une VM
Maintenant que notre machine virtuelle est bien installé, il faut la démarrer. Cela peut être fait automatiquement lors du boot de la machine hôte si xendomains est activé. Sinon, on peut démarrer une machine avec la commande :
# xm create -c machine1
L’option -c permet d’attacher le terminal actuel à la console de la VM et donc de voir le boot de la machine.
- Arrêter une VM
On peut le faire normalement en étant sur la VM. Sinon, en étant sur la machine hôte on peut utiliser la commande suivante :
# xm shutdown machine1
- Se rattacher à la console d’une VM déjà démarré
Sur la machine hôte, on peut le faire simplement en utilisant la commande :
# xm console machine1
Notre terminal devenant alors la console de la VM.
Sur la machine hôte, on peux aussi se connecter en telnet sur le port 9601 (pour le première VM, incrémenter pour les autres) pour accéder à la console.
Annexes
Notre installation de Xen a été faite en se basant sur la documentation disponible ici http://www.fedoraproject.org/wiki/F.... Toutefois, en suivant exactement la procédure nous avons eu quelques difficulté. En effet, l’installation du groupe "Base" avec yum ne fonctionne pas pour nous.