Dernière mise à jour : 22/05/2008
Nous verrons dans cet article comment installer Xen sur une machine n'ayant pas les instructions matérielles de virtualisation (VT) en utilisant LVM pour partitionner avec flexibilité nos différentes machines virtuelles. Le tout est réalisé grâce à Debian Etch avec les bons noyaux qui vont bien. J'ai aussi utilisé le noyau officiel de chez Xen afin d'avoir quelque chose de propre (enfin dans la limite du possible). Attention, mon tutoriel prends de véritables adresses IP, je n'ai donc aucun besoin de NAT. Si tel est votre problème, achetez le numéro 100 de GLMF, il contient le serveur parfait et un setup bien plus avancé que le miens :)
Commencez donc par installer votre Debian sur le nouveau serveur, sélectionnez une installation classique sans interface, vous pouvez configurer ensuite votre LVM pendant l'installation ou bien comme moi le faire par la suite. Dans cet exemple, nous avons crées plusieurs partitions pour le système suivi d'une grande partition pour le LVM :
xen:~# fdisk -l /dev/sda Disk /dev/sda: 73.2 GB, 73274490880 bytes 255 heads, 63 sectors/track, 8908 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 5 40131 de Dell Utility /dev/sda2 6 8908 71513347+ 5 Extended /dev/sda5 6 29 192748+ 83 Linux /dev/sda6 30 151 979933+ 83 Linux /dev/sda7 152 273 979933+ 83 Linux /dev/sda8 274 395 979933+ 83 Linux /dev/sda9 396 1003 4883728+ 82 Linux swap / Solaris /dev/sda10 1004 1064 489951 83 Linux /dev/sda11 1065 8908 63006898+ 8e Linux LVM
Il vous faut à présent télécharger le dernier xen disponible (je tourne en x86_64 sous Debian). Au moment de la configuration, il s'agit de Xen 3.1 tarball 64 bit SMP. Détarrez le tout et lancez l'installation : tar xzf xen-3.1.0-install-x86_64.tgz && cd dist && ./install.sh. Il vous faut creer l'initrd, voici ma commande : mkinitramfs -o /boot/initrd.img-2.6.18-xen 2.6.18-xen.
Vous devez à présent mettre votre grub à jour avec ceci (remplacez bien sûr hd0,4 par votre partition racine) :
title Xen 3.1.0 / Debian GNU/Linux, kernel 2.6.18-xen root (hd0,4) kernel /xen-3.1.0.gz module /vmlinuz-2.6.18-xen root=/dev/sda6 max_loop=64 ro console=tty0 module /initrd.img-2.6.18-xen savedefault
Installez ensuite les bons outils pour votre machine : apt-get install bridge-utils xen-tools iproute lvm2 screen libssl0.9.7. Nous sommes alors prêts à configurer le LVM. Dans cet exemple j'ai une partition de 63GB que je vais utiliser en physique et que je vais ensuite diviser en morceaux de 5GB pour les machines virtuelles. Suivez le guide, dans l'ordre, on crée le volume physique, le virtuel et le volum logique, puis on formate ce dernier en ext3 et on le monte :
pvcreate /dev/sda11 vgcreate xenlvm /dev/sda11 lvcreate -L5G -nmonitor xenlvm mkfs.ext3 /dev/mapper/xenlvm-monitor mount /dev/mapper/xenlvm-monitor /mnt/
Après création cela vous donne un volume LVM de 60GB avec une première machine virtuelle de 5GB :
xen # vgdisplay --- Volume group --- VG Name xenlvm VG Size 60.09 GB xen:~# lvdisplay --- Logical volume --- LV Name /dev/xenlvm/monitor VG Name xenlvm LV Size 5.00 GB
Il ne nous reste plus qu'à installer Debian, vous pouvez pour ce faire utiliser xen-create-image mais je préfère voir ce qui se passe, donc j'utilise debootstrap (à installer si ce n'est déjà fait) comme ceci /usr/sbin/debootstrap --arch i386 etch /mnt/xen/ http://ftp.fr.debian.org/debian. Vous devriez alors obtenir :
I: Retrieving Release I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... I: Checking component main on http://toth.cp.dias.ie/debian... I: Retrieving adduser I: Validating adduser ... I: Configuring tasksel... I: Base system installed successfully.
Il faut ensuite paramétrer quelques fichiers, changer le mot de passe root et installer quelques paquets :
cp /etc/network/interfaces /mnt/xen/etc/network/ cp /etc/resolv.conf /mnt/xen/etc/ cp /etc/hosts /mnt/xen/etc/ chroot /mnt/xen passwd root vi /etc/network/interfaces /etc/hosts /etc/hostname apt-get install host ssh CTRL + D (pour sortir du chroot) umount /mnt/
Je crée ensuite le fichier de configuration xen de ma première machine virtuelle dans /etc/xen/monitor.cfg :
kernel = '/boot/vmlinuz-2.6.18-xen' ramdisk = '/boot/initrd.img-2.6.18-xen' memory = 128 name = 'monitor' hostname = 'monitor.exemple.fr' root = '/dev/sda1 ro' disk = [ 'phy:/dev/mapper/xenlvm-monitor,sda1,w' ] vif = ['ip=192.168.0.166,bridge=xenbr0']
Il est important de modifier /etc/xen/xend-config.sxp pour qu'il contienne vos changements, dans mon cas (sans besoin de NAT), je change donc les deux lignes suivantes :
(network-script network-bridge) ... (vif-script vif-bridge)
Le moment de vérité a sonné, votre première machine virtuelle est prête à fonctionner, testons donc cela : xm create -c monitor.cfg, vous devriez obtenir quelque chose comme çà :
berial:~# xm create -c monitor.cfg Using config file "/etc/xen/monitor.cfg". Started domain monitor Bootdata ok (command line is root=/dev/hda1 ro ) Linux version 2.6.18-xen (shand@endor) (gcc version 3.4.4 20050314 (prerelease) (Debian 3.4.3-13)) #1 SMP Fri May 18 16:01:42 BST 2007 BIOS-provided physical RAM map: Xen: 0000000000000000 - 0000000008800000 (usable) No mptable found. Built 1 zonelists. Total pages: 34816 Kernel command line: root=/dev/sda1 ro ... Starting OpenBSD Secure Shell server: sshd. Starting periodic command scheduler: crond. Debian GNU/Linux 4.0 monitor tty1 monitor login:
Il vous reste a placer les demons xend et xendomains au demarrage comme suit :
update-rc.d xend defaults 3 update-rc.d xendomains defaults 3
Félicitations, vous avez installé votre premier système xen avec une machine virtuelle, il ne vous reste plus qu'à en installer plus :) Je vous livre enfin en plus une petite astuce pour bénéficier d'IPv6 sur la zone 0 (c'est un problème que j'ai rencontré). Il semblerait que selon l'installation, votre xenbr0 prenne une adresse IPv6 (je tourne en ra un peu partout), donc pour pallier à ce problème, rentrez ceci et redémarrez :
auto eth0 iface eth0 inet static address 192.168.0.200 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.254 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.0.1 dns-search frlinux.net iface eth1 inet6 static address 2001:100:20:de:eeff:e9ff:fef0:f9b2 #calculez cette adresse vous même à partir de la MAC netmask 64 up ip route add default dev eth1 via fe80::21c:eff:fedf:2800 # bootez sur un noyau non xen et notez la route IPv6 par défaut (ip -6 ro) iface xenbr0 inet static pre-up brctl addbr xenbr0 post-down brctl delbr xenbr0 address 192.168.0.201 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 bridge_fd 0 bridge_hello 0 bridge_stp off
Enfin si vous n'avez pas de réseau dans votre machine virtuelle, éditez /etc/network/interfaces et remplacez allow-hotplug eth0 par :
auto eth0