www.starend.org

TechNIX

Installation customisée de Xen 3.0
sur Debian 3.1 'stable'


23/11/2006


!!! Documentation périmée !!!
!!! Out of date !!!


Créer un serveur de virtualisation Xen 3.0 sur une machine installée en Debian Linux 3.1r1,
et créer des machines virtuelles Debian.

Exemples avec une Debian Linux 3.1r1 stable.
Noyau Linux 2.6.16.19 à télécharger sur www.kernel.org .
Patch Xen 3.0 pour ce noyau à télécharger sur alioth.debian.org .
Les ressemblances des numéros de version entre Debian et Xen est fortuite.

!!! En construction !!!
Suivre l'article : http://www.debian-administration.org/articles/423
pour l'installation sur une debian 3.1 dite 'stable'.

Pour info, il faut sérieusement songer à compiler un noyau.
Le noyau fourni par backport linux-image-2.6.16-1-xen-686 est le seul que j'ai réussi à faire démarrer.
Cependant, j'ai éprouvé des difficultés avec le réseau, les packets sortaient avec un mauvais CRC TCP ou UDP :-(
Analyse de trames avec ethereal à l'appuis.
les noyaux linux-image-2.6.16-2-xen-686 et linux-image-2.6.17-2-xen-686 ne démarrent pas, au moins chez moi.

Installer les dépendances nécessaires à la bonne exploitation de Xen :
# aptitude install -y xen-hypervisor-3.0-i386 xen-utils-3.0 iproute bridge-utils libc6-xen kernel-package debootstrap

J'ai utilisé le noyau Linux 2.6.16.19 et le patch Xen correspondant.
Il se peut que les versions évoluent avec le temp.
Là je suis limité par la version du patch de Xen :-(
Télécharger et décompresser le noyau Linux 2.6.16.19 :
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.19.tar.bz2
$ tar jxvf linux-2.6.16.19.tar.bz2


Si vous avez déjà un noyaux au petits oignons mais d'une version différente :
$ cd linux-2.6.16.19
$ cp _quelquepart_/config-2.6.XXX .config
$ make oldconfig
$ cd ..

Et répondre à toutes les questions, ce sont les différences entre les deux noyaux.
Sinon, vous pouvez aussi récupérer la configuration de votre noyau de base,
la config se trouve dans '/boot/config*' ...

Maintenant, il faut télécharger le patch de Xen pour le noyau, et l'appliquer :
$ wget --no-check-certificat https://alioth.debian.org/download.php/1605/linux-2.6.16.19-xen2.0.2-hg9697.patch.gz
$ cd linux-2.6.16.19
$ cp ../linux-2.6.16.19-xen2.0.2-hg9697.patch.gz xen.patch.gz
$ gunzip xen.patch.gz
$ patch -p1 < xen.patch

Oui, je sais, le '--no-check-certificat', c'est pas clean...
Voir tous les patchs disponibles :
https://alioth.debian.org/project/showfiles.php?group_id=30894

Dans un premier temp, on fait un noyau spécifique à la machine pour le domaine (Xen) 0.

Pour voir les modifications apportées par le patch Xen, on refait :
$ make oldconfig
Et il vaut mieux répondre 'y' à ces question là :
Processor type and features ---> Subarchitecture Type (Xen-compatible)
Privileged Guest (domain 0)
Block-device backend driver
Network-device backend driver
Scrub memory before freeing it to Xen
Block-device frontend driver
Network-device frontend driver
Disable serial port drivers
Export Xen attributes in sysfs


Maintenant, on compile le noyau Linux/Xen, sous forme de pacquetage deb :
$ make-kpkg --append-to-version -xen kernel_image
Et on l'installe, en tant que root bien sûr :
dpkg -i ../linux-xen0-2.6.16.19-xen_2.6.16.19-xen-10.00.Custom_i386.deb

Le plus dur est fait, on ajoute Xen pour le démarrage de la machine.
Dans '/boot', on doit avoir ça :
$ ls -1 /boot
...
config-2.6.8-2-386
config-xen0-2.6.16.19-xen
grub
...
initrd.img-2.6.8-2-386
...
System.map-2.6.8-2-386
System.map-xen0-2.6.16.19-xen
...
vmlinuz-2.6.8-2-386
xen0-linux-2.6.16.19-xen
xen-3.0-i386.gz


Par défaut, la Debian 3.1 utilise Grub.
Ajouter ceci à '/boot/grub/menu.lst' :
title Xen 3.0-i386 / Kernel perso Xen0
root (hd0,0)
kernel /boot/xen-3.0-i386.gz
module /boot/xen0-linux-2.6.16.19-xen root=/dev/hda1 ro console=tty0
savedefault
boot


Rebooter la machine sur le nouveau noyau...
Bienvenue dans Xen :-)
Comment ça y'a pas de différence?





J'ai créé une machine virtuelle à la mano : 'test'.





J'ai un problème lorsque je tente de démarrer une machine.
# xm create test -c
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.

Au bout d'un certain nombre de tentatives, ça marche. Pourquoi?

Je tente sur une nouvelle install :
# cd /etc/udev/rules.d
# ln -s ../xen-backend.rules xen-backend.rules





A ce jour, les paquets xen fournis par debian marchent, en testing... mais pour au maximum 2 machines virtuelles (en plus du dom0).
Au delà de 2, kernel panic :-(




Petite rêgle à respecter.
Prévoir de la place dans /var pour l'équivalent de la mémoire cumulée de toutes les machines virtuelles, mêmes celles qui ne tournent pas.
Dans /var/lib/xen/save plus précisément (créé par xend lors d'un arret de la machine hôte).




# more /xen/etc/vmbridges
#!/bin/sh

BRIDGES="externe interne dmz serveur admin"

case "$1" in
start)
echo "Declaration de 255 loops."
rmmod loop
modprobe loop max_loop=255
echo "Creation des loops manquants..."
for I in $(seq 0 255)
do rm /dev/loop/$I 2>&-
mknod /dev/loop/$I b 7 $I
chmod 664 /dev/loop/$I
chown root.disk /dev/loop/$I
rm /dev/loop$I 2>&-
ln -s /dev/loop/$I /dev/loop$I
done
echo -n "Ajout des bridges : "
for I in $BRIDGES
do echo -n "$I "
brctl addbr $I
brctl setfd $I 0
ifconfig $I 0.0.0.0
done
echo "OK."
brctl addif externe eth0
brctl addif interne eth1
echo -n "Montage des cartes physiques : "
for I in $(ifconfig -a | grep "^eth" | cut -f1 -d " ")
do echo -n "$I "
ifconfig $I 0.0.0.0
done
echo "OK."
/etc/init.d/networking restart
;;

stop)
brctl delif externe eth0
brctl delif interne eth1
for I in $BRIDGES
do echo -n "$I "
ifconfig $I down
brctl delbr $I
done
echo "OK."
;;

*)
echo 'Valid commands are: start, stop' >&2
exit 1
esac


Un petit lien pour le démarrage automatique :
# ln -s /xen/etc/vmbridges /etc/rc2.d/S15vmbridges




Liens d'aide :
1) http://www.xensource.com
2) http://blacklord.littleboboy.net/wiki/doku.php?id=xen_pour_debian
3) http://julien.danjou.info/xen.html
4) http://www.howtoforge.com/perfect_xen_setup_debian_ubuntu
5) http://www.debian-administration.org/articles/423

Compilation perso (P3 750, PIIX) :
vmlinuz-2.6.16.19-xen-dom0
initrd.img-2.6.16.19-xen-dom0
vmlinuz-2.6.16.19-xen-domU
initrd.img-2.6.16.19-xen-domU
Licence Creative Common 2007 :: BY-NC-SA :: Webdesign DENDIEVEL Stéphane