====== Xen ======
Xen4 et Debian ...
Liens:
*http://mrngm.com/xen-on-debian-lenny-to-squeeze.html
*http://wiki.debian.org/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:
* http://kh4z.fr/how-to-pin-dom0-vcpu-to-cpu
* http://fclose.com/b/linux/2258/managing-xen-dom0s-cpu-and-memory/
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 ====
Liens:
*http://xen.1045712.n5.nabble.com/Which-clocksource-should-dom0-be-using-td4581393.html
*https://wiki.umiacs.umd.edu/VirtualMeshTest/index.php/Xen_clock_sync_issues
*http://wiki.debian.org/Xen#A.27clocksource.2BAC8-0.3ATimewentbackwards.27
=== 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:
*http://my.opera.com/marcomarongiu/blog/index.dml/tag/Sysadmin
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:
*http://mancoosi.org/~abate/xen-4-debian-squeeze
*http://xen.1045712.n5.nabble.com/Can-t-find-root-when-start-vm-td3379059.html
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 "/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 =====
Lien: http://www.net-cry.de/unix/linux/linux-1/lenny-to-squeeze-upgrading-transition/
==== 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: mtu 1500 qdisc mq state UP qlen 1000
...
6: brlan: 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.
#
#
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:
- j'ai udev qui rale parce qu'il manquerai des scripts
- j'ai kpart_x qui gigote
- 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:
*http://blog.lenorcy.info/2010/11/03/hyperviseur-xen-sur-debian-squeeze-amd64/
*http://fclose.com/b/2258/managing-xen-dom0s-cpu-and-memory/
*http://wiki.xensource.com/xenwiki/Xen4.0
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:
*https://help.ubuntu.com/community/Grub2
*http://performance.izzop.com/content/debian-xen-et-grub
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 ====
Lien:
*https://www.hosthop.com/hop/knowledgebase/29/Debian-60-Grub-Error-grub-probe-cant-find-drive-for-ordevorxvda1-Workaround.html
===== 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:
*http://xen.1045712.n5.nabble.com/Xen-4-TSC-problems-td3396848i20.html
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