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