informatique:nix:linux:xen

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

  • 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

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

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.

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é.

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
  • informatique/nix/linux/xen.txt
  • Dernière modification : 2014/12/04 12:16
  • de 127.0.0.1