Outils pour utilisateurs

Outils du site


serveur_xen_4

Xen

Pre-requis

Sous Debian, il faut configurer l'interface reseau en “bridge”, ce qui implique:

# aptitude install bridge-utils

Et puis, par exemple, on transforme un classique:

auto eth0
iface eth0 inet static
   address 192.168.1.1
   netmask 255.255.255.0
   gateway 192.168.1.254

En:

auto eth0
iface eth0 inet manual

auto brlan
iface brlan inet static
   address 192.168.1.1
   netmask 255.255.255.0
   gateway 192.168.1.254
   bridge_ports eth0
   bridge_stp off
   bridge_maxwait 0

Et puis:

# reboot 

ou autres, pour prendre en compte les modifs.

Install

Sous Debian Squeeze donc :

# aptitude install xen-hypervisor xen-linux-system xen-tools xen-qemu-dm  

Dom0 et cpu

Liens:

Lorsqu'on a beaucoup de CPUs, il est malin d'en garantir un peu pour le Dom0, dans le cas ou des DomU s'affollent !

Au reboot

Avec Grub2 par exemple, si on veut garantir 2G , et 2 CPUs :

GRUB_CMDLINE_XEN_DEFAULT="com2=57600,8n1 console=com2,vga dom0_mem=2048M dom0_max_vcpus=2 dom0_vcpus_pin=true"

C'est dom0_vcpus_pin=true qui force Xen a choisir et a dédié dom0_max_vcpus CPUs au Dom0.

A chaud

Pour forcer 2 CPUS :

# xm vcpu-set Domain-0 2

Puis dédiés a CPU virtuel 1 et 2 , respectivement le CPU 1 et 2.

# xm vcpu-pin Domain-0 0 0
# xm vcpu-pin Domain-0 1 1

Et voila:

# xm vcpu-list
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Domain-0                             0     0     0   -b-   82257.8 0
Domain-0                             0     1     1   r--   18666.4 1

Lenny en Squeeze

avant

S'assurer que Lenny est *up-to-date* et qu'il reboote !

Donc:

# aptitude update
# aptitude dist-upgrade
# reboot

apt

Virer toutes les references a “lenny”.

Donc, /etc/apt/sources.list devient:

# ---- Squeeze ------

deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

# remplace "volatile":  
deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free

Virer les “pinnings”, c'est a dire:

/etc/apt/preferences

(qu'on renommer “old-preferences” par exemple) Et dans /etc/apt/apt.conf.d si un fichier force “lenny” ou un package quelconque.

upgrade

Il faut être attentif au question posé, mais la plupart du temps, la réponse par défaut suffit.

# aptitude update
# LANG=C aptitude install apt dpkg aptitude
# LANG=C aptitude full-upgrade

Et elle souvent nécessaire de finir le travail par:

# LANG=C aptitude install

Et enfin:

# aptitude autoclean

Grub2

Afin que “Xen” soit prioritaire dans la liste des kernels:

# cd /etc/grub.d/
# mv 10_linux 21_linux

Modifier grub2:

# vi /etc/default/grub

Et faire en sorte d'avoir:

# TJ -----------------
GRUB_DISABLE_OS_PROBER="true"
GRUB_CMDLINE_XEN=""
GRUB_CMDLINE_XEN_DEFAULT="xencons=off dom0_mem=1024M dom0_max_vcpus=2"
# --------------------

Ou bien, si vous avez un port serie “COM2” pour monitorer votre serveur:

# TJ -----------------
GRUB_DISABLE_OS_PROBER="true"
GRUB_CMDLINE_XEN=""
GRUB_CMDLINE_XEN_DEFAULT="com2=57600,8n1 console=com2,vga dom0_mem=1024M dom0_max_vcpus=2"
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=57600 --unit=1 --word=8 --parity=no --stop=1"
# --------------------

Dans ce dernier cas, adapter aussi /etc/inittab :

# TJ ------------------
#CONS:2345:respawn:/sbin/getty -i -h -L 57600 ttyS1 vt100
CONS:2345:respawn:/sbin/getty -i -h -L 57600 hvc0 vt100
# ---------------------

Forcer “grub2” en outre passant le chainage via Grub0:

# upgrade-from-grub-legacy
# mv /boot/grub/menu.lst* ~backups/.

Xen4

Installer !

On suppose que les paquets suivants sont déjà installé:

linux-image-2.6.32-5-xen-amd64
xen-tools
# aptitude install xen-hypervisor xen-qemu-dm

Xen3

A virer a la main !

Xen3

# aptitude remove xen-hypervisor-3.2-1-amd64

Verifier dans /boot/grub/grub.cfg que “Xen4” est en premier choix (par default, donc).

Remove

Il reste des paquets “lenny” a purger:

# dpkg -l | grep lenny
# aptitude remove libvolume-id0 ...

Sauf les “kernel 2.6.26” qui peuvent être utile pour certain DomU…

sysctl.conf

Préparer le reboot :

# TJ ---------------------
# Desactiver Ipv6 (sous Squeeze)
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.default.autoconf=0
# En cas de crash noyau
kernel.panic=300
# Les requetes ARP ne traversent pas
net.ipv4.conf.all.arp_ignore=1
# ------------------------

Reboot

# reboot

Purge

Purger les paquets retournés par la commande:

# dpkg -l | grep "^rc"
# aptitude purge $(dpkg --get-selections | grep deinstall | awk '{print $1}')

Xen 4

Pas de difficulté particulière a installer et utiliser Xen 4 sur un noyau Debian/Squeeze/Testing.

clocksource

problème

$ uname -r
2.6.32-5-xen-amd64
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
xen tsc

“jiffies” a disparu des horloges disponible…

Donc, ne plus faire dans la conf des DomU:

extra      = 'clocksource=jiffies'

Mais petit a petit, il y a toujours un décalage de temps en le Dom0 et DomU …

solution

Lien:

Il y a un problème (encore): ca ne fonctionne simplement plus.

Entre autre, /proc/sys/xen/independent_wallclock n'existe plus.

La seule solution : Installer un client ntp sur chaque “DomU” !!!!!!!!

Gasp.

Solution qui marche

Ne pas démarrer le DomU avec :

extra = 'clocksource=jiffies'

Mais laissé par defaut: c'est equivalent de 'clocksource=xen'

Puis dans le DomU, modifier “ntp.conf” en ajoutant:

 disable kernel

Voila.

Solution (marche pas)

Dans le Dom0:

Editer /etc/ntp.conf et ajouter:

disable kernel

Et puis:

# /etc/init.d/ntp restart

Dans chaque DomU:

# aptitude install ntp

… puis apporter les mêmes modification dans ntp.conf.

Pas mieux. :-(

xvda

Liens:

Il y a (encore!) un bug entre “grub” et “xen”.

Lorsqu'un DomU demarre, il ne voit pas “xvda” !!!! ce serait un bug de grub2 !

solution 1 : PyGrub

Lien: http://wiki.debian.org/PyGrub

Creer le DomU avec “xen-create-image” en ajoutant l'option “–pygrub”

On va alors demarrer le “DomU” en s'appuyant sur “grub”, ce qui, par miracle ?, decouvre “xvda” !

Interessant: car le noyau du DomU est independant de celui du Dom0.

Mais quid des vieux DomU qui n'utilise pas “PyGrub” ?

solution 2

FIXME: en recherche d'autres solutions.

PyGrub

“PyGrub” permet de demarrer les DomU “Squeeze”, sous Xen 4 Squeeze.

Installer “PyGrub”, aprés coup.

Monter l'image du disk.

Creer le fichier menu.lst comme suit dans “<IMAGE_DISK>/boot/grub/” :

default         0
timeout         2

title           Debian GNU/Linux 6.0
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.32-5-xen-amd64 root=/dev/xvda2 ro 
initrd          /boot/initrd.img-2.6.32-5-xen-amd64

title           Debian GNU/Linux 6.0 (Single-User)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.32-5-xen-amd64 root=/dev/xvda2 ro single
initrd          /boot/initrd.img-2.6.32-5-xen-amd64

Adapter selon le contenu de “…/boot” , bien sur.

Demounter ce volume.

Faculatif ? faire un test ?:

/usr/lib/xen-default/bin/pygrub /dev/vg0/vpntls-disk

En tout cas on voit le menu…

Dans le fichier de conf du DomU , faire les changements suivant:

bootloader = '/usr/lib/xen-default/bin/pygrub'

#kernel      = '/boot/vmlinuz-2.6.32-5-xen-amd64'
#ramdisk     = '/boot/initrd.img-2.6.32-5-xen-amd64'

Lenny et squeeze

Transition

Lenny est en fin de vie et squeeze n'est pas encore là…

Que faire: mélanger squeeze et lenny :)

Dans /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian/ lenny main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ lenny main non-free contrib

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

# Backports
deb http://backports.debian.org/debian-backports lenny-backports main contrib non-free

# squeeze
deb http://ftp.fr.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ squeeze main non-free contrib

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

Dans /etc/apt/preferences (a créer au besoin) :

Package: *
Pin: release a=stable
Pin-Priority: 990

Package: *
Pin: release a=testing
Pin-Priority: 99

Package: *
Pin: release a=lenny-backports
Pin-Priority: 200

Dans /etc/apt/apt.conf.d/local (a créer au besoin) :

APT::Default-Release "stable";

En pour finir:

# aptitude update 

Nous voila avec 3 choix de packages:

Lenny/Stable Backports Squeeze/Testing

bridge

Sous Debian, Xen fonctionne trés bien (mieux? plus simple?) avec une interface bridge. Et ce n'est pas compliqué a mettre en place.

Il existe d'autres méthodes.

:!: On va faire ca alors qu'on est en “dhcp” : c'est pour le fun. Mieux vaut avoir une IP FIXE.

Préparer l'interface…

# aptitude install brigde-utils
# brtcl show
bridge name     bridge id               STP enabled     interfaces
(rien)

Dans /etc/network/interfaces , au lieu d'avoir le classique:

allow-hotplug eth0
iface eth0 inet dhcp

On va avoir:

auto eth0
iface eth0 inet manual

# dhcp !

auto brlan
iface brlan inet dhcp
      bridge_ports eth0
      bridge_stp off
      bridge_maxwait 0

D'abord, je suis en dhcp , ce qui etait un test, mais ca fonctionne aussi comme cela. (En prod, j'ai plutot une IP FIXE !)

Ensuite, il ne faut pas oublier “eth0” , et la forcer “manual” : On monte l'interface “eth0” mais on ne la configure pas.

En montant, “eth0” va permettre a ces dépendances, “brlan”, de monter aussi. (Sinon, ca ne fonctionnera pas).

Ceci fait.

# /etc/init.d/networking restart

Compter jusqu'a 30 (secondes) … et verifier que c'est UP.

# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
...
6: brlan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN

Et aussi:

# brctl show
bridge name     bridge id               STP enabled     interfaces
brlan           8000.00xxxxxxxxx        no              eth0

C'est tout bon.

Package

“Xen 4” est dans Squeeze/Testing, donc:

Donc:

# aptitude -t testing install xen-hypervisor-4.0-amd64
# aptitude -t testing install linux-image-xen-amd64

Reboot…

1er test

vu

Aprés reboot:

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0 15567     8     r-----     31.4

xen-tools

On peut creer des DomU sans “xen-tools”: mais c'est un peu plus simple avec.

Je ne vois pas la différence avec la version précédente pour l'instant.

# aptitude -t testing install xen-tools

Adapter le fichier /etc/xen-tools/xen-tools.conf a ses besoins. Pour moi:

# egrep -v "^(#|$)" /etc/xen-tools/xen-tools.conf
lvm = vg0
install-method = debootstrap
size   = 10Gb      # Disk image size.
memory = 512Mb    # Memory size
swap   = 512Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image  = full     # tj # sparse   # Specify sparse vs. full disk images.
dhcp = 1
bridge = brlan
hash_method = sha512
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
arch = amd64
mirror = `xt-guess-suite-and-mirror --mirror`
ext3_options     = noatime,nodiratime,errors=remount-ro
ext2_options     = noatime,nodiratime,errors=remount-ro
xfs_options      = defaults
reiserfs_options = defaults
btrfs_options    = defaults
serial_device = hvc0 #default
disk_device = xvda #default

1er DomU

On va creer un DomU pour tester “samba” :

# xen-create-image --hostname samba-test --role udev

A la fin: ca me donne le mot de passe “root”…. et ca créé:

/dev/vg0/samba-test-swap
/dev/vg0/samba-test-disk
/etc/xen/samba-test.cfg

Dans “cfg” :

kernel      = '/boot/vmlinuz-2.6.32-5-xen-amd64'
ramdisk     = '/boot/initrd.img-2.6.32-5-xen-amd64'
vcpus       = '1'
memory      = '512'
root        = '/dev/xvda2 ro'
disk        = [
                'phy:/dev/vg0/samba-test-disk,xvda2,w',
                'phy:/dev/vg0/samba-test-swap,xvda1,w',
              ]
name        = 'samba-test'
dhcp        = 'dhcp'
vif         = [ 'mac=00:16:3E:XX:XX:XX,bridge=brlan' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

La conf mérite d'être corrigé ?

Mettre en commentaire “dhcp …” et mounter la partition afin d'y apporter les modifications “nécessaire”…

# mkdir /mnt/domu
# mount /dev/vg0/samba-test-disk /mnt/domu
# cd /mnt/domu/etc

Vérifier (et rectifier):

# cat hostname
samba-test
# cat inittab | egrep "^1"
1:2345:respawn:/sbin/getty 38400 hvc0
# cat pam.d/common-password | egrep "^password"
password   required   pam_unix.so nullok obscure md5

Correction en:

password   required   pam_unix.so nullok obscure sha512
# cat network/interfaces | egrep -v "^(#|$)"
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

Correction en (par exemple):

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
      address 192.168.1.12
      netmask 255.255.255.0
      gateway 192.168.1.254
# cat hosts
127.0.0.1    localhost
127.0.1.1    samba-test.thierry-jaouen.local samba-test
# cat resolv.conf
domain thierry-jaouen.local
search thierry-jaouen.local
nameserver 192.168.1.253
nameserver 8.8.8.8
nameserver 8.8.4.4
# cat apt/sources.list | egrep -v "^(#|$)"
deb     http://ftp.fr.debian.org/debian/     lenny main contrib non-free
deb-src http://ftp.fr.debian.org/debian/     lenny main contrib non-free
deb     http://security.debian.org/ lenny/updates  main contrib non-free
deb-src http://security.debian.org/ lenny/updates  main contrib non-free
# cat fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
devpts          /dev/pts        devpts  rw,noexec,nosuid,gid=5,mode=620 0  0
/dev/xvda1 none swap sw 0 0
/dev/xvda2 / ext3 noatime,nodiratime,errors=remount-ro 0 1

Fin? on demounte:

# umount /mnt/domu

Demarrage

# xm create samba-test -c

Oups

Afin de pouvoir faire toujours tourner les anciens DomU:

# aptitude install linux-modules-2.6-xen-amd64

Oups2

Pour mémoire: le noyau plante parfois lorsque mes scripts de backup s'excute: combinaison de lvm snapshot…

Bref, en attendant de comprendre:

  1. j'ai udev qui rale parce qu'il manquerai des scripts
  2. j'ai kpart_x qui gigote
  3. j'ai xen qui me dit: “BUG: unable to handle kernel paging request …”

Pas de meilleure idée que:

# aptitude -t testing install udev kpartx

ce qui elimine au moins les 2 premiers messages d'erreurs…

Oups3

Lien: http://ubuntuforums.org/showthread.php?t=1431118

A verifier:

Le petit message là:

...  kernel: [  586.970351] svc: failed to register lockdv1 RPC service (errno 97).

serait lié au fait que je “blacklist ipv6”.

Donc, dans /boot/grub/menu.lst, faire en sorte d'avoir aussi:

kernel          /boot/vmlinuz-2.6.XXXX root=/dev/md1 ro quiet splash ipv6.disable=1

Donc: “ipv6.disable=1”

:!: A verifier

Upgrade Xen 3 -> Xen 4

Help:

Au préalable:

  • arreter proprement tout les DomU …
  • faire en sorte qu'il ne redemarre pas au prochain reboot: mv {,DISABLED-}/etc/xen/auto

Mettre a jour les noyaux (avec et sans support Xen):

# aptitude -t testing install linux-image-2.6 linux-image-xen-amd64 xen-hypervisor-4.0-amd64 uuid-runtime xen-tools xenstore-utils

Attention! Xen 3 et Xen 4 co-habite.

Donc:

# aptitude purge xen-hypervisor-3.2-1-amd64 xen-utils-3.2-1

Et ca alors:

# aptitude -t testing show xen-linux-system-2.6.32-5-xen-amd64 

Reboot !

Pour le DomU

La conf:

kernel      = '/boot/vmlinuz-2.6.32-5-xen-amd64'
ramdisk     = '/boot/initrd.img-2.6.32-5-xen-amd64'

Monter la partition du DomU:

# mount /dev/vg0/mon_domu /mnt/domu
# cp -dpR /lib/modules/2.6.32-5-xen-amd64 /mnt/domu/lib/modules/

Grub2

Liens:

Faire le ménage et plus tard: Migrer vers GRUB2:

# upgrade-from-grub-legacy

Mais aussi:

“The Xen hypervisor (and not just a Xen-ready kernel!) should be the first entry, so do this:”

# mv -i /etc/grub.d/10_linux /etc/grub.d/21_linux
# update-grub2

(juste aprés 20_linux_xen en fait…)

Essentiellement dans /etc/default/grub :

Modifier le chargement par defaut (pour le choix entre 0 et “X”) :

GRUB_DEFAULT=X

Désactiver la prise en compte des DomU sur des partitions LVM:

GRUB_DISABLE_OS_PROBER="true"

Remplacant de “# xenhopt=” :

GRUB_CMDLINE_XEN_DEFAULT="..." 

Exemple:

GRUB_CMDLINE_XEN_DEFAULT="com2=57600,8n1 console=com2,vga dom0_mem=2048M dom0_max_vcpus=4"

GRUB_CMDLINE_XEN_DEFAULT=“xenhopt=com2=57600,8n1 console=com2,vga dom0_mem=2048M dom0_max_vcpus=4”

Remplacant de “#xenkopt=” :

GRUB_CMDLINE_XEN="..."                                                                                            

Exemple:

GRUB_CMDLINE_XEN="console=tty0 console=hvc0"
:!: et non pas “GRUB_CMDLINE_XEN_KERNEL” !!!!

serial

Pour mémoire:

GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=57600 --unit=1 --word=8 --parity=no --stop=1"

grub dans domU squeeze

nvidia et Xorg

Lien: http://blogs.simc.be/simc/index.php/post/2009/02/08/Nvidia-est-xen-encore-plus-simple

export IGNORE_XEN_PRESENCE=1

./NVIDIA-Linux-x86_64-180.22-pkg2.run

qemu et Windows

Lien: http://alex.mordue.co.uk/blog/?p=85

Sous squeeze:

# aptitude install xen-qemu-dm

Bugs

timer bug

TSC & HPET timer !!!!!!

Liens:

Que ce passe ?

  • (XEN) Platform timer appears to have unexpectedly wrapped 10 or more times.
  • daemon ntp disparait (pas de trace de plantage dans les logs)
  • l'heure deraille
# dmesg | grep -I acpi 
[    0.267127] hpet_acpi_add: no address or irqs in _CRS
# lsmod | grep -i acpi
acpi_processor          5087  1 processor,[permanent]

La soluce serait ( à verifier ) :

cpuidle=0 et clocksource=pit  dans les parametres de demarrage Xen !

network

Liens:

http://wiki.r1soft.com/display/kb/Poor+Network+Performance+Between+CDP+Server+and+Host+on+a+XEN+Virtual+Machine,+or+Connection+Closed+due+to+%28ClosedChannelException%29

En gros, dans les DomU :

ethtool -K eth0 tx off
serveur_xen_4.txt · Dernière modification : 2011/11/15 15:39 de thierry