quelques notes sur l’utilisation de l’hyperviseur Xen sur une dedibox avec une debian etch. Pour l’installation sur une dedibox v2 voir Xen dedibox2

Debian Etch

Installer une debian etch avec juste un / de 2G, l’espace restant sera utilisé par le LVM

Installer les paquets Xen :

 apt-get install xen-linux-system-2.6.18-4-xen-686 xen-tools libc6-xen \
 xen-hypervisor-3.0.3-1-i386-pae xen-linux-system-2.6.18-4-xen-vserver-686 bridge-utils

voilà, il est temps de rebooter. Une fois le reboot effectif, vous pouvez vérifier que vous utilisez bien le noyau xen :

 uname -a 
 Linux dedi01 2.6.18-4-xen-686 #1 SMP Mon Mar 26 21:49:04 UTC 2007 i686 GNU/Linux

Pour jouer avec les lvm et reiserfs, il faut les installer :

 apt-get install lvm2 reiserfsprogs

Un petit fdisk plus tard, il est possible de créer un VG (vg00) avec tout le disque restant.

Une des fonctionnalités de xen c’est d’utiliser un pont réseau pour regrouper toutes les interfaces virtuelles. Dans mon cas, je vais avoir quelques machines virtuelles avec des IPs privés, et peut-être une ou 2 avec des IPs publiques supplémentaires. Il me faut donc 2 ponts réseau.

Configurons donc ces ponts réseau :

 vi /etc/network/interfaces
 auto dummy0
 iface dummy0 inet static
       address 192.168.1.1
       netmask 255.255.255.0

Dom0

ajouter un wrapper pour le script bridge :

 vi /etc/xen/scripts/network-bridge-dedi

#!/bin/sh
# Exit if anything goes wrong.
set -e

# First arg is the operation.
OP=$1
shift

script=/etc/xen/scripts/network-bridge

case ${OP} in
   start)
        $script start bridge=xennet netdev=eth0 vifnum=0 antispoof=no
        $script start bridge=xendmz netdev=dummy0 vifnum=1 antispoof=no
        ;;

   stop)
        $script stop bridge=xennet netdev=eth0 vifnum=0
        $script stop bridge=xendmz netdev=dummy0 vifnum=1
        ;;

   *)
       echo 'Unknown command: ' ${OP}
       echo 'Valid commands are: start, stop'
       exit 1
esac

 chmod +x /etc/xen/scripts/network-bridge-dedi

configurer xen pour utiliser un pont réseau :

 vi /etc/xen/xend-config.sxp
 (network-script network-bridge-dedi)
 #(network-script network-dummy)
 /etc/init.d/xend restart

pour vérifier que tout marche bien, on affiche l’état des ponts :

 brctl show
 bridge name     bridge id               STP enabled     interfaces
 xendmz          8000.feffffffffff       no              vif0.1
                                                         pdummy0
 xennet          8000.feffffffffff       no              vif0.0
                                                         peth0

on ajoute un peut de nat :

 /sbin/iptables -t nat -A POSTROUTING -o xennet -j MASQUERADE

Reste à configurer une petite machine virtuelle :

 vi /etc/xen-tools/xen-tools.conf
 xen-create-image --hostname=mail --size=4Gb --swap=256Mb --ip=192.168.1.2 --lvm=vg00 --debootstrap --dist=etch  --passwd

Un petit lvscan permet de voir les 2 nouveaux FS :

dedi01:/etc/xen# lvscan
  ACTIVE            '/dev/vg00/mail-disk' [4,00 GB] inherit
  ACTIVE            '/dev/vg00/mail-swap' [256,00 MB] inherit

changer le fichier de conf pour bien utiliser le bon pont :

 vi /etc/xen/mail.cfg
 vif  = [ 'ip=192.168.1.2' 'bridge=xendmz']

et on peut booter la nouvelle machine, et se connecter dessus :

 xm create /etc/xen/mail.cfg
 xm console mail

pour la lancer automatiquement :

 cd /etc/xen/auto
 ln -s ../mail.cfg .

Contournement d’un bug dans l’allocation mémoire du pilote réseau

Régulièrement, certains domU se retrouvais injoignable par le réseau, des ping dom0 vers domU et domU vers dom0 donnaient 100% des paquets perdu pourtant toutes les interfaces étaient là, bien présentent, et bien configuré. Seul indice, cette ligne dans /var/log/message

xen_net: Memory squeeze in netback driver.

La solution, fixer la mémoire utilisé par dom0, dans /etc/xen/xend-config.sxp

(dom0-min-mem 96)

et dans /boot/grub/menu.lst

# xenhopt=dom0_mem=96M

Mon utilisation

Depuis la mise en ligne de ces quelques notes vous êtes nombreux à me demander comment j’utilise mes xen, alors voilà , j’ai 7 domU sur ma dedibox réparties comme ceci :

  • divers, 64Mo de ram pour le ldap
  • greg, 128Mo de ram serveur web d’un amis
  • jabber, 128Mo de ram serveur jabber (ejabberd) avec les passerelles
  • lmbc, 128Mo de ram le site web de lille métropole basket club (LAMP)
  • mail, 96Mo de ram, serveur de mail exim + spamassassin + imap
  • walcky, 128Mo de ram, lamp + smtp + spamassassin + imap
  • web, 192Mo de ram front web apache + divers sites php + mysql.

Vous pouvez consulter les Statistiques de toutes ces machines.

Liens