Contents
Installation initiale 
À l'install, nous avons lancé:
apt-get install xen-hypervisor libc6-xen linux-image-xen-amd64 libsysfs2 xen-ioemu-3.0.3-1
Afin d'installer la base de Xen.
libc6-xen n'est pas disponible sous amd64, par choix, selon le bug 379444.
réseau 
Pour permettre au future domU d'avoir accès au réseau, on doit enlever le commentaire à la configuration suivante dans : /etc/xen/xend-config.sxp
(network-script network-bridge)
Création de domU 
Prérequis 
Installer xen-tools et xen-utils-common
aptitude install xen-tools xen-utils-common
Pré-configuration 
Pour réduire considérablement la quantité d'option à passer lors de la création d'un domU, éditer le fichier de configuration: /etc/xen-tools/xen-tools.conf
Xen-tools place à notre disposition des "roles", ça permet de modifier les paquets installés par défaut à la création d'un domU.
On a un rôle qui installe puppet: https://lethe.koumbit.net/svn/koumbit/trunk/xen-tools/role.d/minimal-puppet
Création manuelle 
Une fois qu'on a éditer /etc/xen-tools/xen-tools.conf et fait le check out du rôle de minimal-puppet, on peut créer un domU avec la commande suivante:
xen-create-image --role=minimal-puppet --hostname=pichu.exemple.net --ip=10.11.12.50
Création avec puppet 
Des recettes Puppet ont également été écrites afin de gérer automatiquement les DomUs. Elles sont présentement en voie d'être acceptées "upstream" par DavidS.
Pour les utiliser, il suffit d'ajouter un bloc du genre à nodes.pp:
xen::domain::xenU { "alternc.koumbit.net":
ensure => "running",
memory => "256M",
size => "4G",
swapsize => "256M",
vg => "data",
ip => "209.44.112.86",
netmask => "255.255.255.192",
gateway => "209.44.112.65",
role => "puppet",
}
On note ici le rôle "puppet" qui va faire que le vserver, au démarrage, va s'autoconfigurer. Notez qu'il faut ajouter l'IP du vserver à la main dans le zonefile sur homere (/etc/bind/db.209.44.112).
Faire attention de respecter les quotas définis dans VserverService/GrilleDePrix.
Une fois que le client puppet remarque les changements, il va créer et lancer le domU. Tant qu'une étape n'est pas terminée, puppetd ne loggue rien dans daemon.log, alors il peut être difficile de comprendre ce qui se passe. La première étape est la création de l'image et à ce moment, xen-tools écrit un log de ses activités dans /var/log/xen-tools/<host>.log. On peut donc y suivre la progression de l'install. Donc pour faire le suivi, on peut faire:
tail -f /var/log/daemon.log /var/log/xen-tools/alternc.koumbit.net.log
Il faut ensuite configurer le serveur, par puppet ou manuellement. Par exemple, il faut régler le mot de passe root, qui est vide par défaut.
Donc en résumé:
- éditer nodes.pp
- surveillez les logs sur le dom0
ajouter l'ip dans le zone file de homere (PTR et A donc /etc/bind/db.209.44.112 et /var/alternc/bind/zones/koumbit.net)
- configurer le domU
Migration d'un vserver en domU 
Pour migrer un vserver en domU, il doit avoir un kernel compatible avec Xen installé. Il y a deux façons de faire ça. La façon préférable est de mettre à jour à etch (EtchUpgrade) et la procédure ci-bas assume une plateforme sous etch pour le domU. Autrement, il est parfaitement possible de compiler un kernel xen pour sarge.
- install xen kernel dans la machine virtuelle:
virtual# aptitude install linux-image-xen-amd64
ceci ne marche pas dans les machines 686, on se croise les doigts et on install -686
Il y a un volume logique scratch de 15G pour dumper temporairement les vservers en transit. dom0# mount /dev/mapper/vg00-scratch /mnt
- premier sync
root-vserver# cd /vservers/foo ; tar cf - . | pv -s 15G | ssh dom0 'cd /mnt ; tar xf -'
- create with the sync
dom0# xen-create-image --copy=/mnt --memory=256Mb --size=10Gb --swap=256Mb --gateway=209.44.112.65 --ip=209.44.112.122 --netmask=255.255.255.192 --lvm=vg00 --hostname=bedford.koumbit.net --kernel=/boot/vmlinuz-2.6.18-4-xen-amd64 --initrd=/boot/initrd.img-2.6.18-4-xen-amd64 General Infomation -------------------- Hostname : bedford.koumbit.net Distribution : sarge Fileystem Type : ext3 Size Information ---------------- Image size : 10Gb Swap size : 256Mb Image type : full Memory size : 256Mb Kernel path : /boot/vmlinuz-2.6.18-4-xen-amd64 Initrd path : /boot/initrd.img-2.6.18-4-xen-amd64 Networking Information ---------------------- IP Address 1 : 209.44.112.122 Netmask : 255.255.255.192 Gateway : 209.44.112.65 Creating ext3 filesystem on /dev/vg00/bedford.koumbit.net-disk Done Installing your system with copy from /home/anarcat/bedford-sync Done Running hooks Done No role script specified. Skipping Creating Xen configuration file Done All done Logfile produced at: /var/log/xen-tools/bedford.koumbit.net.log
- stop and remove from boot the vserver:
vserver-root# vserver foo stop vserver-root# rm /etc/vservers/foo/apps/init/mark
- mount the new partition on /mnt:
mount /dev/mapper/vg00-domU-disk /mnt
- rsync --numeric-ids -a -v ./ domu:/mnt
- umount the partition
umount /mnt
- start virtual machine:
dom0# xm create -c foo.koumbit.net.cfg
I had problems with the mysql permissions, which I had to fix, after looking through the messages in /var/log/daemon.log, this took a while.
I also had to install the fix detailed in XenNotes for the MAC address of the domU so that it doesn't create new ifs at each reboot (!!).
Other things to do:
- create yourself an account in the vserver if you don't already have one
- fix networking:
- put a random, xen-reserved mac in /etc/xen/foo.cfg:
vif = [ 'ip=X.Y.Z.A,mac=00:16:3e:FF:FF:FF' ]
- minimal net conf:
auto eth0 lo iface lo inet loopback iface eth0 inet static address 209.44.112.125 netmask 255.255.255.192 # /26 gateway 209.44.112.65
- put a random, xen-reserved mac in /etc/xen/foo.cfg:
- /etc/hostname is often wrong
- /etc/fstab is probably empty:
/dev/sda1 / ext3 errors=remount-ro 0 1 proc /proc proc rw,nodev,nosuid,noexec 0 0 /dev/sda2 none swap sw 0 0
Destroying a domU 
xen-delete-image --lvm=vg00 bedford2.koumbit.net
That's it.
dom0 avec 2 cartes réseau en mode bridged 
Le dom0 a accès à 2 cartes (eth0 - public et eth1 - réseau privé), on veut pouvoir créer des domU qui vont être accessible seulement de l'interface privé. Par défaut, les domU ont seulement accès au pont "xenbr0" qui est lié à l'interface eth0. On doit donc créer un nouveau pont (xenbr1) et le lier a l'interface eth1.
modifié la configuration de xen 
Ajouter le script suivant dans /etc/xen/scripts/my-network-script
#!/bin/sh dir=$(dirname "$0") "$dir/network-bridge" "$@" vifnum=0 netdev=eth0 "$dir/network-bridge" "$@" vifnum=1 netdev=eth1
Permettre l'exécution du script:
# chmod 755 /etc/xen/scripts/my-network-script
Modifier le fichier: /etc/xen/xend-config.sxp pour activer le nouveau script pour la configuration du réseau.
##(network-script network-bridge) (network-script my-network-script)
configuration du réseau 
S'assurer que l'interface privé a une gateway dans le fichier de configuration /etc/network/interface
on peut tester en ajoutant une passerelle manuellement:
route add -net 192.168.0.0/24 gw 192.168.0.1
configuration du domU 
Dans le fichier de configuration du domU /etc/xen/Mon-domU.cfg indiquer le nom du pont qui doit être utilisé.
vif = [ 'ip=192.168.0.4', 'bridge=xenbr1' ]
voilà 
Maintenant, à l'intérieur du domU, on faire un ping aux autres ip dans le subnet privé.
Problèmes à résoudre 
Upgrades / gestion du kernel 
Afin de faciliter la gestion du kernel en domU, on utilise pygrub afin de permettre à Xen d'utiliser le kernel installé dans le domU.
On se chroot dans le domU afin d'installer le kernel patché via apt-get
apt-get install linux-image-xen-amd64
Toujours dans le domU, on crée le répertoire /boot/grub
Puis /boot/grub/menu.lst
default 0 timeout 5 title Debian 'etch' GNU/Linux 2.6.18-6-xen-amd64 kernel /boot/vmlinuz-2.6.18-6-xen-amd64 root=/dev/xvda2 ro initrd /boot/initrd.img-2.6.18-6-xen-amd64 ro
- On sort du chroot, on umount la partition lvm
Revenu dans dom0, on commente les lignes kernel et initrd puis on ajoute
bootloader = '/usr/bin/pygrub'
Aussi, étrangement, il faut s'assurer que le disque utilisé pour root soit défini en premier dans le paramètre disk sinon ça ne boot pas et ça crache un message d'erreur cryptique (soumettre un bug report ??)
Virtualisation matérielle à tester 
See http://wiki.debian.org/DebianInstaller/Xen, "Using HVM (VT processors)"
xenconsole: Could not read tty from store: No such file or directory
And the domU is doing nothing.
bedford.koumbit.net 6 256 1 ------ 0.0
I think the problem is due to QUMU, in /var/log/xen/qemu...
domid: 3
qemu: the number of cpus is 1
shared page at pfn:ffff, mfn: 4c985
buffered io page at pfn:fffd, mfn: 4c987
---------------------- DirectFB v0.9.25 ---------------------
(c) 2000-2002 convergence integrated media GmbH
(c) 2002-2004 convergence GmbH
-----------------------------------------------------------
(*) DirectFB/Core: Single Application Core. (2006-12-04 07:38)
(*) Direct/Memcpy: Using SSE optimized memcpy()
(!) Direct/Util: opening '/dev/fb0' and '/dev/fb/0' failed
--> No such file or directory
(!) DirectFB/FBDev: Error opening framebuffer device!
(!) DirectFB/FBDev: Use 'fbdev' option or set FRAMEBUFFER environment variable.
(!) DirectFB/Core: Could not initialize 'system' core!
--> Initialization error!
Could not initialize SDL - exiting
When using vnc=1 in the domU config, i get:
domid: 11 qemu: the number of cpus is 1 shared page at pfn:ffff, mfn: 40e8e buffered io page at pfn:fffd, mfn: 40e90 False I/O request ... in-service already: 0, pvalid: 0, port: 0, data: 0, count: 0, size: 0
Interfaces multiples 
Chaque domU a deux interfaces alors qu'il n'y a qu'une seule interface matérielle. Ceci brise les statistiques munin / réseau.
Aliases not working 
I naively tried to setup an alias in the /etc/network/interfaces file in the domU, but it doesn't ping, even from marius.
Références 
Voir http://wiki.debian.org/DebianInstaller/Xen pour les notes spécifiques à Debian.
Le Wiki Koumbit