Quelques trucs en vrac sur Xen.
====== Kickstart ======
  * fichier .cfg Xen
kernel = "/var/xen_images/centos/vmlinuz"
ramdisk = "/var/xen_images/centos/initrd.img"
extra = "text ks=https://192.168.3.1/_ks_.cfg noverifyssl"
name = "centos6_1"
memory = "1024"
disk = [ 'phy:/dev/datavg/centos6_1-disk,xvda,w', ]
vif = [ 'bridge=xenbr0', ]
vcpus=1
on_reboot = 'destroy'
on_crash = 'destroy'
  * fichier ks.cfg
install
url --url http://mirror.centos.org/centos/6/os/x86_64
lang en_US.UTF-8
network --device eth0 --bootproto dhcp
# Bogus password, change to something sensible!
rootpw bogus
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Europe/Paris
bootloader --location=mbr --driveorder=xvda --append="console=xvc0"
reboot
# Partitioning
clearpart --all --initlabel --drives=xvda
zerombr
ignoredisk --only-use=xvda
part /boot --fstype ext4 --size=100 --ondisk=xvda
part pv.2 --size=8000 --grow --ondisk=xvda
volgroup rootvg pv.2
logvol / --fstype ext4 --name=LogVol00 --vgname=rootvg --size=1024 --grow
logvol swap --fstype swap --name=LogVol01 --vgname=rootvg --size=256 --grow --maxsize=512
%packages
@core
====== Convertir image .ova ou .vmdk vers Xen ======
  tar vxf Hortonworks_Sandbox_2.1.ova
  qemu-img convert -O raw Hortonworks_Sandbox_2.1-disk1.vmdk Hortonworks_Sandbox_2.1.raw
====== Créer une VM Linux ======
xen-create-image -lvm=vgdata --debootstrap --size=4GB --memory=1500MB --swap=1500MB
   --dist=etch --mirror=http://ftp.fr.debian.org/debian/ --force --ip=192.168.1.1  
   --netmask=255.255.255.0 --gateway=192.168.1.254 --hostname=wowvmii --passwd
   --kernel=/boot/vmlinuz-2.6.18-6-xen-686
   --initrd=/boot/initrd.img-2.6.18-6-xen-686
====== Exemple de fichier de conf pour une VM Debian ======
  * /etc/xen/gameVM.cfg
#
# Configuration file for the Xen instance gameVM, created
# by xen-tools 3.9 on Mon Jun 29 14:35:36 2009.
#
#
#  Kernel + memory size
#
kernel      = '/boot/vmlinuz-2.6.26-2-xen-amd64'
ramdisk     = '/boot/initrd.img-2.6.26-2-xen-amd64'
memory      = '2048'
extra       = 'xencons=tty'
vcpus       = '2'
#
#  Disk device(s).
#
root        = '/dev/sda2 ro'
disk        = [
                  'phy:/dev/vg_data/gameVM-swap,sda1,w',
                  'phy:/dev/vg_data/gameVM-disk,sda2,w',
                  'phy:/dev/vg_data/gameVM-data,sdb,w',
                  'phy:/dev/vg_data/gameVM-data2,sdc,w',
              ]
#
#  Hostname
#
name        = 'gameVM'
#
#  Networking
#
vif         = [ 'ip=192.168.1.3,vifname=vif1.3' ]
#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
====== Exemple de conf pour une VM XP ======
Testé avec Xen 3.2 sur Debian Lenny
kernel = '/usr/lib/xen-3.2-1/boot/hvmloader'
builder = 'hvm'
memory = '1024'
name = "xpVM"
vcpus = 1
vif = ['type=ioemu, bridge=xenbr0']
disk = [ 'phy:/dev/vg_data/xpVM-disk,ioemu:hda,w', 'file:/tmp/xp.iso,ioemu:hdc:cdrom,r' ]
device_model = '/usr/lib/xen-3.2-1/bin/qemu-dm'
boot = 'd'
sdl = 0
vnc = 1
vncdisplay = 0
vncviewer = 0
usbdevice = 'tablet'
Penser à modifier //(vnc-listen 'X.X.X.X')// dans ///etc/xen/xen-config.sxp// pour avoir un accès VNC lors de l'install et relancer un ///etc/init.d/xend restart//. 
Une fois l'install terminée on peut retirer la ligne suivante :
  'file:/tmp/xp.iso,ioemu:hdc:cdrom,r'
Et remplacer :
  boot = 'd'
  vnc = 1
Par :
  boot = 'c'
  vnc = 0
La connexion se fera via un client RDP par la suite.
====== Créer un bridge local pour une VM Windows (avec HVM) ======
Le NAT ne marche pas des masses (Xen 3.2) avec une VM avec HVM. Du coup un bridge local permet de résoudre le souci :
tunctl -t tap0 -u root
ip link set up dev tap0
brctl addbr xenbr0
brctl addif xenbr0 tap0
ip link set up dev xenbr0
ip addr add 192.168.3.1/24 dev xenbr0
brctl addif xenbr0 tap0
Sur la ou les VM(s) on utilise 192.168.3.2 par ex. comme adresse IP.
====== Lister les VMs ======
  * **xm list**
dedibox:/usr/sbin# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1014     2 r-----  16540.9
NXvm                                       2      256     1 -b----    459.6
WEBvm                                      3      512     1 -b----   1020.3
WoWvmII                                    1     1000     1 -b----   6352.7
gserver                                    8      256     1 r-----   7579.9
====== Afficher l'uptime des machines ======
  * **xm uptime**
dedibox:/usr/sbin# xm uptime
Name                              ID Uptime
Domain-0                           0 22:39:40
NXvm                               2 22:36:21
WEBvm                              3 22:36:02
WoWvmII                            1 22:36:40
gserver                            8 19:54:13
====== Afficher les perfs des VMs ======
  * **xentop -b -i 2 2>/dev/null |grep -v vdb |tail -12 |grep -v vbd** 
xentop -b -i 2 2>/dev/null |grep -v vdb |tail -12 |grep -v vbd            
xentop - 13:37:31   Xen 3.0.3-1
5 domains: 2 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown 
Mem: 3144124k total, 3143720k used, 404k free    CPUs: 2 @ 2000MHz
      NAME  STATE   CPU(sec) CPU(%)     MEM(k) MEM(%)  MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS   VBD_OO   VBD_RD   VBD_WR SSID
  Domain-0 -----r      16666   99.1    1037476   33.0   no limit       n/a     2    0        0        0    0        0        0        0    0
   gserver -----r       7712   99.5     261996    8.3     262144       8.3     1    0        0        0    5        6    57598   163161    0
      NXvm --b---        460    0.1     261968    8.3     262144       8.3     1    0        0        0    2       52    27095   216960    0
     WEBvm ------       1029    0.4     524104   16.7     524288      16.7     1    1   637789   364648    8      420   138717   536729    0
   WoWvmII ------       6354    0.5    1023748   32.6    1024000      32.6     1    1    52265   548430    3      193   154307  1415267    0
====== Afficher la répartition CPU ======
  * **xm vcpu-list**
dedibox:/usr/sbin# xm vcpu-list
Name                              ID VCPUs   CPU State   Time(s) CPU Affinity
Domain-0                           0     0     0   r--    8989.2 any cpu
Domain-0                           0     1     0   ---    7777.5 any cpu
NXvm                               2     0     0   ---     461.1 any cpu
WEBvm                              3     0     0   -b-    1032.7 any cpu
WoWvmII                            1     0     0   ---    6355.7 any cpu
gserver                            8     0     1   r--    7817.7 any cpu
====== Afficher les infos réseau ======
  * **xm network-list //VM//**
dedibox:/usr/sbin# xm list |egrep -v "Domain|Name"|awk '{print $1}'|while read i
> do
> echo $i
> xm network-list $i
> done
NXvm
Idx BE     MAC Addr.     handle state evt-ch tx-/rx-ring-ref BE-path
0   0  00:16:3e:7b:7c:6e    0     4      8     522  /523     /local/domain/0/backend/vif/2/0  
WEBvm
Idx BE     MAC Addr.     handle state evt-ch tx-/rx-ring-ref BE-path
0   0  00:16:3e:54:d8:29    0     4      14    528  /529     /local/domain/0/backend/vif/3/0  
WoWvmII
Idx BE     MAC Addr.     handle state evt-ch tx-/rx-ring-ref BE-path
0   0  00:16:3e:11:b8:c3    0     4      9     523  /524     /local/domain/0/backend/vif/1/0  
gserver
Idx BE     MAC Addr.     handle state evt-ch tx-/rx-ring-ref BE-path
0   0  00:16:3e:27:dd:cb    0     4      11    525  /526     /local/domain/0/backend/vif/8/0  
====== Afficher les poids de chaque VM ======
  * **xm sched-credit -d //VM//**
xm list|egrep -v Name|awk '{print $1}'|while read i; do echo "--- $i ---" ;xm sched-credit -d $i; done
--- Domain-0 ---
{'cap': 0, 'weight': 256}
--- NXvm ---
{'cap': 0, 'weight': 256}
--- WEBvm ---
{'cap': 0, 'weight': 512}
--- WoWvmII ---
{'cap': 0, 'weight': 512}
--- gserver ---
{'cap': 0, 'weight': 256}
====== Ajouter un disque à chaud ======
lvcreate -L 51200 -n ftpVM-data8 vg_data
xm block-attach ftpVM phy:/dev/vg_data/ftpVM-data8 /dev/sdi w
=> Penser à modifier le fichier de conf de la VM pour la prise en compte au boot
====== Troubleshooting ======
===== 4gb seg fixup errors =====
  * Installer le package //libc6-xen// : **apt-get install libc6-xen**
  * Si /lib/tls existe sur votre machine : **mv /lib/tls /lib/tls.disabled**
  * **echo ‘hwcap 0 nosegneg’ > /etc/ld.so.conf.d/libc6-xen.conf && ldconfig**
  * Rebooter la VM
===== Choisir l'ordre de démarrage des VMs =====
Par défaut les VMs sont démarrées par rapport à l'ordre alphabétique des liens sous ///etc/xen/auto// :
lrwxrwxrwx 1 root root 20 Dec 22 15:50 0WoWvmII.cfg -> /etc/xen/WoWvmII.cfg
lrwxrwxrwx 1 root root 17 Dec 22 15:50 1NXvm.cfg -> /etc/xen/NXvm.cfg
lrwxrwxrwx 1 root root 18 Dec 22 15:50 2WEBvm.cfg -> /etc/xen/WEBvm.cfg
lrwxrwxrwx 1 root root 20 Mar  8 21:02 3gserver.cfg -> /etc/xen/gserver.cfg
===== Temporiser le démarrage des VMs =====
On peut parfois avoir des soucis si plusieurs VMs démarrent en parallèle. Cela peut arriver qu'une VM soit plus longue à démarrer (fsck par ex.) ce qui amène la VM suivante à démarrer alors que la précédente est toujours en cours de boot. On peut temporiser le lancement des VMs grâce à la variable **XENDOMAINS_CREATE_USLEEP** présente dans le fichier ///etc/default/xendomains//.
===== Perfs réseau dégradées =====
Sous Debian, décommenter la ligne suivante dans ///etc/network/interfaces// sur les VMs :
  post-up  ethtool -K eth0 tx off
:!: le package **ethtool** doit être installé.
===== PTY allocation request failed on channel 0 =====
Sur la VM, lancer :
  apt-get install udev
Rajouter la ligne ci-dessous dans le /etc/fstab (sur la console de la VM) :
  none            /dev/pts      devpts    defaults        0   0
Lancer :
  mkdir /dev/pts
  mount -a