====== 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