Quelques trucs en vrac sur 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'
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
tar vxf Hortonworks_Sandbox_2.1.ova qemu-img convert -O raw Hortonworks_Sandbox_2.1-disk1.vmdk Hortonworks_Sandbox_2.1.raw
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
#
# 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'
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.
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.
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
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
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
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
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  
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}
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
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