IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Xen

De SergiTurWiki
Share/Save/Bookmark
Dreceres ràpides: navegació, cerca
Logo de Xen

Xen és un programari lliure de màquines virtuals que permet executar múltiples sistemes operatius (anomenats guests o convidats) en un mateixa màquina (anomenada host o amfitrió).

Terminologia

  • Domain 0 (dom0): És el sistema operatiu de la màquina amfitrió. És el SO del servidor físic on s'instal·la Xen. S'executa automàticament a l'inici per l'hypervisor i se li donen privilegis específics i accés directa al maquinari.
  • Domain U (domU): Un domini convidat (guest) de xen. Un domU és un màquina virtual Xen. La u ve de "unprivileged".
  • Hardware Virtual Machine HVM: és l'única forma en que Xen pot executar altres sistemes operatius com Windows.

Cal tenir en compte que hi ha kernels de Linux per a dom0 i kernels de Linux per a domU. Per exemple les últimes versions dels kernels oficials d'Ubuntu, només funcionen com a domU mentres que la última versió que suporta dom0 és Feisty.

Xen és un sistema de Paravirtualització.

Contingut

Instal·lació

NOTA: Llegiu la web:
https://help.ubuntu.com/community/Xen#Ubuntu%27s%20Support%20of%20Xen
El kernel dom0 s'ha d'instal·lar a mà perquè el kernel que porten versions d'Ubuntu com Intrepid o Jaunty no té les capacitats 
per a suportar dom0.
Els kernels d'Ubuntu per defecte són kernels que es poden utilitzar directament en màquines domU.

Ubuntu 8.04 (Hardy Heron)

Des dels repositoris

Per instal·lar a una màquina amb Ubuntu 8.10 (Intrepid Ibex)

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 8.10
Release:	8.10
Codename:	intrepid

Cal executar:

$ sudo apt-get update
$ sudo apt-get install ubuntu-xen-server
S'està llegint la llista de paquets... Fet 
S'està construint l'arbre de dependències       
Reading state information... Fet           
S'instal·laran els següents paquets extres:
  debootstrap gcc gcc-4.3 libbeecrypt6 libc6-dev libc6-xen
  libconfig-inifiles-perl libexpect-perl libgomp1 libio-pty-perl
  libio-stty-perl libneon27 librpm4.4 libterm-readline-gnu-perl
  libterm-size-perl libtext-template-perl linux-libc-dev python-dev
  python-xen-3.3 python2.5-dev rinse rpm vnstat xen-docs-3.3
  xen-hypervisor-3.3 xen-shell xen-tools xen-utils-3.3 xfsprogs
Paquets suggerits:
  gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb
  gcc-doc gcc-4.3-multilib libmudflap0-4.3-dev gcc-4.3-doc gcc-4.3-locales
  libgcc1-dbg libgomp1-dbg libmudflap0-dbg glibc-doc alien attr dvhtool quota
  xfsdump
Paquets recomanats:
  xen-hypervisor-amd64 xen-hypervisor-i386 xen-hypervisor-i386-pae
S'instal·laran els següents paquets NOUS:
 debootstrap gcc gcc-4.3 libbeecrypt6 libc6-dev libc6-xen
 libconfig-inifiles-perl libexpect-perl libgomp1 libio-pty-perl
 libio-stty-perl libneon27 librpm4.4 libterm-readline-gnu-perl
 libterm-size-perl libtext-template-perl linux-libc-dev python-dev
 python-xen-3.3 python2.5-dev rinse rpm ubuntu-xen-server vnstat xen-docs-3.3
 xen-hypervisor-3.3 xen-shell xen-tools xen-utils-3.3 xfsprogs
0 actualitzats, 30 nous a instal·lar, 0 a eliminar i 0 no actualitzats.

Un cop instal·lat, activem la xarxa:

$ sudo joe /etc/xen/xend-config.sxp

I assegureu-vos que teniu la línia (a la meva versió ja hi era):

(network-script network-bridge)

...estigui sense comentar.

El següent pas només es necessari si les màquines virtuals no utilitzen LVM. Modifiqueu el fitxer /etc/modules:

$ sudo joe /etc/modules

I canvieu la línia (només si no utilitzeu el sistema LVM!!!)

loop

Per:

loop max_loop=64

Torneu a iniciar la màquina per comprovar que tot funciona correctament. Al reiniciar s'executarà el kernel de xen:

$ sudo reboot

Ara heu de crear una imatge virtual amb la comanda xen-create-image de l'eina xen-tools.

Consulteu Creant una imatge virtual LVM.

Ubuntu 8.10 (Intrepid Ibex)

Amb binaris

IMPORTANT: Sembla que no funciona. Consulteu http://ubuntuforums.org/showthread.php?t=947391

El kernel precompilat que proporciona la Ubuntu 0.10 és per a domU i no pas per dom0. Per tant, cal recompilar el kernel.

Podeu obtenir informació de com fer-ho a:

NOTA: tingueu en compte que si voleu que la màquina virtual sigui Ubuntu 8,10, no hi ha cap problema en que l'amfitriona sigui 8.04.

Configuració de la construcció del Kernel:

Script per obtenir el codi font:

apt-get update
apt-get upgrade
apt-get install linux-image-server linux-server 
apt-get install ubuntu-xen-server build-essential libncurses5-dev gawk mercurial
mkdir -p ~/build/linux-2.6.27-xen
cd /usr/src/
hg clone http://xenbits.xensource.com/ext/linux-2.6.27-xen.hg

La configuració de la construcció (builder) del programa és realitza amb:

$ cd /usr/src/linux-2.6.27-xen.hg 
$ make O=~/build/linux-2.6.27-xen/ menuconfig

Les opcions a escollir són:

General setup ---> Choose SLAB allocator (SLUB (Unqueued Allocator)) ---> (X) SLAB

Processor type and features ---> Subarchitecture Type (PC-compatible) ---> (X) Enable Xen compatible kernel

Bus options (PCI etc.)  ---> [*] PCI support
                            [*]   Xen PCI Frontend
                            [ ]     Xen PCI Frontend Debugging (NEW)

Change <M> 802.1d Ethernet Bridging to <*> 802.1d Ethernet Bridging:

Networking support ---> Networking options ---> <*> 802.1d Ethernet Bridging

Disable 10000 Mbit Ethernet (otherwise the build process will most likely fail):

Device Drivers ---> [*] Network device support ---> [ ] Ethernet (10000 Mbit) --->

Make the Xen section look as follows (make sure you select Xen version compatibility (3.0.4 and later) instead of Xen version 
compatibility (3.0.2 and later)):

Device Drivers  ---> XEN  ---> [*] Privileged Guest (domain 0)
                              <*> Backend driver support (NEW)
                              <*>   Block-device backend driver (NEW)
                              <*>   Block-device tap backend driver (NEW)
                              <*>   Network-device backend driver (NEW)
                              (8)     Maximum simultaneous transmit requests (as a power of 2) (NEW)
                              [ ]     Pipelined transmitter (DANGEROUS) (NEW)
                              < >     Network-device loopback driver (NEW)
                              <*>   PCI-device backend driver (NEW)
                                      PCI Backend Mode (Virtual PCI)  --->
                              [ ]     PCI Backend Debugging (NEW)
                              < >   TPM-device backend driver (NEW)
                              <M>   SCSI backend driver (NEW)
                              <M> Block-device frontend driver
                              <M> Network-device frontend driver
                              <M>   Network-device frontend driver acceleration for Solarflare NICs (NEW)
                              <M> SCSI frontend driver (NEW)
                              <*> User-space granted page access driver (NEW)
                              <*> Framebuffer-device frontend driver (NEW)
                              <*>   Keyboard-device frontend driver (NEW)
                              [*] Disable serial port drivers (NEW)
                              <*> Export Xen attributes in sysfs (NEW)
                              (256) Number of guest devices (NEW)
                                  Xen version compatibility (3.0.4 and later)  --->

Atenció, a l'apartat Xen cal posar 3.0.4!

Xen version compatibility (3.0.4 and later)  --->

El fitxer .config que queda a /root/build/linux-2.6.27-xen el podeu consultar a:

http://acacha.dyndns.org/~sergi/Xen/config

Ara ja podeu construir el Kernel:

# make O=~/build/linux-2.6.27-xen

NOTA: Pot tardar molta estona (hores). Tot depèn de la velocitat del vostre ordinador.

Un cop construït, es pot instal·lar amb:

make O=~/build/linux-2.6.27-xen/ modules_install install

NOTA: A mi m'apareixen un munt d'avisos.

Abans a /boot teníeu:

# ls -l /boot/
total 24072
-rw-r--r-- 1 root root  510401 2009-04-02 01:01 abi-2.6.27-11-server
-rw-r--r-- 1 root root  509681 2008-11-04 22:15 abi-2.6.27-7-server
-rw-r--r-- 1 root root   91522 2009-04-02 01:01 config-2.6.27-11-server
-rw-r--r-- 1 root root   91528 2008-11-04 22:15 config-2.6.27-7-server
drwxr-xr-x 2 root root    4096 2009-04-16 13:59 grub
-rw-r--r-- 1 root root 8048048 2009-04-16 13:56 initrd.img-2.6.27-11-server
-rw-r--r-- 1 root root 8043980 2009-04-16 13:49 initrd.img-2.6.27-7-server
-rw-r--r-- 1 root root  124152 2008-09-11 22:11 memtest86+.bin
-rw-r--r-- 1 root root 1052790 2009-04-02 01:01 System.map-2.6.27-11-server
-rw-r--r-- 1 root root 1050576 2008-11-04 22:15 System.map-2.6.27-7-server
-rw-r--r-- 1 root root    1073 2009-04-02 01:02 vmcoreinfo-2.6.27-11-server
-rw-r--r-- 1 root root    1072 2008-11-04 22:16 vmcoreinfo-2.6.27-7-server
-rw-r--r-- 1 root root 2298064 2009-04-02 01:01 vmlinuz-2.6.27-11-server
-rw-r--r-- 1 root root 2294192 2008-11-04 22:15 vmlinuz-2.6.27-7-server
-rw-r--r-- 1 root root  427143 2008-10-06 20:12 xen-3.3.gz

Ara:

# ls -la /boot/
total 15368
drwxr-xr-x  3 root root    4096 2009-04-19 20:38 .
drwxr-xr-x 20 root root    4096 2009-04-16 19:50 ..
-rw-r--r--  1 root root  509681 2008-11-04 22:15 abi-2.6.27-7-server
-rw-r--r--  1 root root   88820 2009-04-19 20:38 config-2.6.27.5
-rw-r--r--  1 root root   91528 2008-11-04 22:15 config-2.6.27-7-server
drwxr-xr-x  2 root root    4096 2009-04-16 20:17 grub
-rw-r--r--  1 root root 8064768 2009-04-16 19:44 initrd.img-2.6.27-7-server
-rw-r--r--  1 root root  124152 2008-09-11 22:11 memtest86+.bin
-rw-r--r--  1 root root 1004670 2009-04-19 20:38 System.map-2.6.27.5
-rw-r--r--  1 root root 1050576 2008-11-04 22:15 System.map-2.6.27-7-server
-rw-r--r--  1 root root    1072 2008-11-04 22:16 vmcoreinfo-2.6.27-7-server
-rw-r--r--  1 root root 1991541 2009-04-19 20:38 vmlinuz-2.6.27.5
-rw-r--r--  1 root root 2294192 2008-11-04 22:15 vmlinuz-2.6.27-7-server
-rw-r--r--  1 root root  427143 2008-10-06 20:12 xen-3.3.gz

Fixeu-vos que hi ha un kernel (vmlinuz-2.6.27.5) sense fitxer initrd. Per crear-lo executeu:

# depmod 2.6.27.5
# update-initramfs -c -k 2.6.27.5

I actualitzeu el grub:

# update-grub 

S'ha afegit la entrada de menú de Grub (al fitxer /boot/grub/menu.lst):

title		Xen 3.3 / Ubuntu 8.10, kernel 2.6.27.5
uuid		206bc5c8-a336-45ee-8852-2162b5ee10ae
kernel		/boot/xen-3.3.gz
module		/boot/vmlinuz-2.6.27.5 root=UUID=206bc5c8-a336-45ee-8852-2162b5ee10ae ro console=tty0
module		/boot/initrd.img-2.6.27.5
quiet

Recursos:


Debian Lenny

En servidor s'escolleix una versió de 64bits (AMD64). Les passes a seguir estan força ben explicades a:

http://www.howtoforge.com/virtualization-with-xen-on-debian-lenny-amd64

Les passes extres recomanades són:

Xen Server

Control del serveis. Fitxers d'inicialització System V

Es pot controlar el servei Xen amb:

$ sudo /etc/init.d/xend
Usage: /etc/init.d/xend {start|stop|restart|force-reload}

Això executa el servidor xen (hypervisor) segons el fitxer de configuració /etc/xen/xend-config.sxp

Fitxers instal·lats

$ dpkg -L xen-utils-3.3 | grep etc

/etc
/etc/udev
/etc/udev/xen-backend.rules
/etc/xen
/etc/xen/auto
/etc/xen/scripts
/etc/xen/scripts/network-bridge
/etc/xen/scripts/vif-bridge
/etc/xen/scripts/network-route
/etc/xen/scripts/vif-route
/etc/xen/scripts/network-nat
/etc/xen/scripts/vif-nat
/etc/xen/scripts/block
/etc/xen/scripts/block-enbd
/etc/xen/scripts/block-nbd
/etc/xen/scripts/blktap
/etc/xen/scripts/vtpm
/etc/xen/scripts/vtpm-delete
/etc/xen/scripts/xen-hotplug-cleanup
/etc/xen/scripts/external-device-migrate
/etc/xen/scripts/vscsi
/etc/xen/scripts/xen-script-common.sh
/etc/xen/scripts/locking.sh
/etc/xen/scripts/logging.sh
/etc/xen/scripts/xen-hotplug-common.sh
/etc/xen/scripts/xen-network-common.sh
/etc/xen/scripts/vif-common.sh
/etc/xen/scripts/block-common.sh
/etc/xen/scripts/vtpm-common.sh
/etc/xen/scripts/vtpm-hotplug-common.sh
/etc/xen/scripts/vtpm-migration.sh
/etc/xen/scripts/vtpm-impl
/etc/xen/xend-config.sxp
/etc/xen/xend-pci-permissive.sxp
/etc/xen/xend-pci-quirks.sxp
/etc/xen/qemu-ifup
/etc/init.d
/etc/init.d/xend
/etc/init.d/xendomains
/etc/default
/etc/default/xendomains

Fitxers de configuració

/etc/xen/xend-config.sxp

Es pot consultar sense comentaris i sense línies en blanc amb la comanda:

$ cat /etc/xen/xend-config.sxp | grep -v '^#\|^$\|^;'
(xend-relocation-server yes)
(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
'(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 196)
(dom0-cpus 0)
(vncpasswd )

/etc/init.d/xend

Permet control·lar el servei Xen:

$ sudo /etc/init.d/xend restart


/etc/xen/scripts/network-bridge

Consulteu [[]]

Paquets

Debian 5.0 lenny dom0:

$ dpkg -l | grep xen
ii  libxenstore3.0                          3.2.1-2                  Xenstore communications library for Xen
ii  linux-image-2.6.26-1-xen-amd64          2.6.26-13lenny2          Linux 2.6.26 image on AMD64, oldstyle Xen support
ii  linux-image-2.6.26-2-xen-amd64          2.6.26-21lenny3          Linux 2.6.26 image on AMD64, oldstyle Xen support
ii  linux-image-xen-amd64                   2.6.26+17+lenny1         Linux image on AMD64, oldstyle Xen support
ii  linux-modules-2.6-xen-amd64             2.6.26+17+lenny1         Linux 2.6 modules on AMD64
ii  linux-modules-2.6.26-1-xen-amd64        2.6.26-13lenny2          Linux 2.6.26 modules on AMD64
ii  linux-modules-2.6.26-2-xen-amd64        2.6.26-21lenny3          Linux 2.6.26 modules on AMD64
ii  xen-hypervisor-3.2-1-amd64              3.2.1-2                  The Xen Hypervisor on AMD64
ii  xen-linux-system-2.6.26-1-xen-amd64     2.6.26-13lenny2          XEN system with Linux 2.6.26 image on AMD64
ii  xen-shell                               1.8-3                    Console based Xen administration utility
ii  xen-tools                               3.9-4                    Tools to manage Debian XEN virtual servers
ii  xen-utils-3.2-1                         3.2.1-2                  XEN administrative tools
ii  xen-utils-common                        3.2.0-2                  XEN administrative tools - common files
ii  xenstore-utils                          3.2.1-2                  Xenstore utilities for Xen
ii  xenwatch                                0.5.2-1                  Virtualization utilities, mostly for Xen

Ubuntu dom=:

$ dpkg -l | grep xen
ii  libc6-xen                         2.8~20080505-0ubuntu9         GNU C Library: Shared libraries [Xen version
ii  libxen3                           3.3.0-1ubuntu7                library interface for Xen, a Virtual Machine
ii  python-xen-3.3                    3.3.0-1ubuntu7                python bindings for Xen, a Virtual Machine M
ii  ubuntu-xen-server                 0.0.1-2ubuntu10               Xen software for running on servers
ii  xen-docs-3.3                      3.3.0-1ubuntu7                documentation for XEN, a Virtual Machine Mon
ii  xen-hypervisor-3.3                3.3.0-1ubuntu7                The Xen Hypervisor for i386 and amd64.
ii  xen-shell                         1.8-3                         Console based Xen administration utility
ii  xen-tools                         3.9-3                         Tools to manage Debian XEN virtual servers
ii  xen-utils-3.3                     3.3.0-1ubuntu7                XEN administrative tools

Màquines virtuals. Configuració dels convidats(guests)

Script per a crear màquines virtuals Ubuntu Server

NOTA: L'última versió d'aquest script la trobareu a: https://svn.projectes.lafarga.cat/svn/projectesticdel/xen/
NAME=BravoFS
XEN_VG=xen_vm
SIZE=200G
SWAP_SIZE=512MB
DISTRO=karmic
RAM=1024
MAC=00:16:3E:00:00:b0 

sudo lvcreate -L ${SIZE} -n ${NAME} ${XEN_VG} || exit
sudo mkfs.ext3 /dev/$XEN_VG/${NAME}
sudo lvcreate -L ${SWAP_SIZE} -n ${NAME}swap ${XEN_VG} && sudo mkswap /dev/${XEN_VG}/${NAME}swap

sudo mkdir /mnt/${NAME}
sudo mount /dev/mapper/${XEN_VG}-${NAME} /mnt/${NAME}
#sudo /usr/sbin/debootstrap --arch=amd64 --include=linux-image-server,grub --components=main,restricted,universe,multiverse $DISTRO /mnt/${NAME}  
http://es.archive.ubuntu.com/ubuntu/ 
sudo mount /dev/mapper/xen_vm-repositori_maquina_virtual /mnt/repositori_maquina_virtual
sudo tar -xvpzf /mnt/repositori_maquina_virtual/karmic_ubuntu_server.tar.gz -C /mnt/${NAME}/

#Canviar el nom de màquina. Fitxers /etc/hosts i /etc/hostname   

sudo bash -c "cat <<EOF >/mnt/${NAME}/etc/hosts   
127.0.0.1	localhost
127.0.1.1	${NAME}.informatica.iesebre.com	${NAME} 

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF"

sudo bash -c "cat <<EOF >/mnt/${NAME}/etc/hostname          
${NAME}
EOF"

sudo bash -c "cat <<EOF >/mnt/${NAME}/etc/resolv.conf
domain informatica.iesebre.com
search informatica.iesebre.com iesebre.com
nameserver 192.168.2.1

#DNS timofonica Ferreries
#nameserver 80.58.61.250
#nameserver 80.58.61.254
EOF" 

sudo umount /mnt/${NAME} 

sudo bash -c "cat <<EOF >/etc/xen/${NAME}
bootloader = '/usr/lib/xen-3.2-1/bin/pygrub'
memory = ${RAM}
name = '${NAME}'
vif = [ 'mac=${MAC}, bridge=eth0' ]          # replace with DomU's IP
dhcp = 'dhcp'
#netmask = '255.255.255.0'
#gateway = 'XXX'                        # Dom0
disk = [ 'phy:/dev/${XEN_VG}/${NAME},xvda1,w','phy:/dev/${XEN_VG}/${NAME}swap,xvda2,w' ]
EOF"


Crear una Ubuntu Server Jaunty com a domU sense xen-tools (a mà i amb debootstrap)

Aquest exemple el farem utilitzant LVM. Es tracta d'instal·lar un màquina virtual (domU o guest) amb una Ubuntu Server 9.04 (Jaunty) en una màquina dom0 o host Debian. Això s'ha fet en un servidor dedicat de la empresa OVH.

Primer creem els volums lògics de LVM. Anomenarem al LV acacha. Creem el volum lògic:

# lvcreate -L 250G -n acacha xenvg

El formatem amb el sistema de fitxers ext3:

# mkfs.ext3 /dev/xenvg/acacha

Hem escollit que la màquina ocupi 250G. Fixeu-vos que prèviament hauríeu de tenir un VG creat anomenat xenvg. Consulteu Xen#Xen_a_OVH.

Per crear la swap d'acacha:

# lvcreate -L1G -n acacha_swap xenvg
Logical volume "acacha_swap" created
# mkswap /dev/xenvg/acacha_swap 
NOTA: A Xen#Xen_a_OVH hi ha el detall de com fer el mateix però per a instal·lar un Debian en comptes de una Ubuntu (més simple per que la gent de OVH proporcionen un fitxer comprimit amb la màquina virtual)

Ara muntem el LV que acabem de crear:

# mount /dev/mapper/xenvg-acacha /mnt

Ara necessitem deboostrap. Jo l'he instal·lat a mà:

# wget http://falcon.landure.fr/pool/etch/debootstrap/debootstrap_1.0.10_all.deb
# dpkg -i debootstrap_1.0.10_all.deb

Però possiblement també anirà bé amb:

$ sudo apt-get install debootstrap

Consulteu Xen#Xen_a_OVH.

Primer cal afegir un hook per a Jaunty (si heu instal·lat ):

# cd /usr/share/debootstrap/scripts/
# sudo ln -s gutsy jaunty

Debootstrap uns permetrà instal·lar una Ubuntu molt bàsica. Executeu:

# debootstrap --arch=amd64 --include=linux-image-server,grub --components=main,restricted,universe,multiverse jaunty /mnt http://es.archive.ubuntu.com/ubuntu/

En els cas de OVH he utilitzat el seus mirrors d'Ubuntu:

# debootstrap --arch=amd64 --include=linux-image-server,grub --components=main,restricted,universe,multiverse jaunty /mnt http://mir1.ovh.net/ubuntu/

Si tot va bé, heu d'obtenir un missatge com:

I: Base system installed successfully.

Ara cal preparar el sistema. Entrem amb chroot:

# chroot /mnt

Establiu una paraula de pas per a root:

# passwd

Observeu els repositoris que us ha creat debootstrap:

# cat /etc/apt/sources.list
deb http://mir1.ovh.net/ubuntu jaunty main restricted universe multiverse

Instal·lem l'editor de text nano (si no voleu utilitzar vi):

# apt-get install nano
NOTA: Apareixen uns missatges relacionats amb els locals... Ja ho solucionarem més endavant però de moment podeu fer:
# export LANG=C

Editeu el fitxer:

# nano /etc/apt/sources.list

Afegiu els security i els src:

deb-src http://mir1.ovh.net/ubuntu jaunty main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse

Torneu a actualitzar.

# apt-get update

I feu un upgrade:

# apt-get upgrade

Instal·lem ssh:

# apt-get install ssh


Elimineu les referències al rellotge de maquinari per evitar que la domU es pengi:

# update-rc.d -f hwclockfirst remove
# update-rc.d -f hwclock remove
# rm /etc/udev/rules.d/85-hwclock.rules

Configureu la xarxa. Consulteu Xen#Xen_a_OVH per saber els detall de com obtenir una IP addicional (fail-over) de OVH.

Cal adaptar els fitxers:

  • /etc/network/interfaces # (añadir las IP failover y la ruta)
  • /etc/hostname
  • /etc/hosts

Al fitxer /etc/network/interfaces heu de posar quelcom similar a:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
   address <IP FAILOVER>        # ip DomU
   netmask 255.255.255.255
   gateway <IP PRINCIPAL>  # ip Dom0
  
   post-up /sbin/ip route add <IP PRINCIPAL>/32 dev eth0    # ip Dom0

On la:

  • IP FAILOVER: és una ip extra que s'obté des del manager de OVH.
  • IP PRINCIPAL: és la ip del servidor dom0.

NOTA: La última línia sembla que no va (post-up). Ho podem solucionar creant un fitxer com:

$ cat /etc/network/if-pre-up.d/gateway
#!/bin/sh
/sbin/ip route add 94.23.214.221/32 dev eth0 

Cal fer-lo executable amb:

$ sudo chmod +x /etc/network/if-pre-up.d/gateway

I els fitxers hostname i hosts els podeu copiar del domO i adaptar-los (posar el nom que vulgueu) a la vostra màquina:

# exit
# cp /etc/hosts /mnt/etc
# cp /etc/hostname /mnt/etc

$ sudo nano /mnt/etc/hosts 

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
IP FAILOVER   NOM_DNS_PROVEIT_PER_OVH
# The following lines are desirable for IPv6 capable hosts
#(added automatically by netbase upgrade)
::1     ip6-localhost ip6-loopback
feo0::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
$ sudo nano /mnt/etc/hostname

I poseu el NOM_DNS_PROVEIT_PER_OVH.

També cal desactivar tls:

# mv /lib/tls /lib/tls.old 

I per evitar l'error Xen#Xen_en_m.C3.A0quines_domU_es_penja_despr.C3.A9s_de_.22Running_local_boot_scripts_.28.2Fetc.2Frc.local.29.22:

$ cd /mnt/etc/event.d/
$ sudo cp tty1 xvc0
$ sudo joe xvc0 

Sortim del chroot i desmuntem el sistema:

# exit
# umount /mnt

Utilitzem les plantilles que es proporcionen la gent de OVH per crear el fitxer de configuració de xen que executara la domU Ubuntu Server:

# cd /etc/xen
# cp domU-64bit-ovh acacha

Editeu la plantilla

# nano acacha

Per exemple pot quedar de la següent manera:

#  -*- mode: python; -*-
kernel="/boot/domU_64/vmlinuz-2.6.21-xxxx-xenU-ipv4-64"
memory = "1024"
maxmem = "1024"
name = "acacha"
vcpus=1
#interface=eth0
#dhcp=off
# vif = [  ]
vif = [ 'ip=87.98.227.105' ]		# replace with DomU's IP
netmask = "255.255.255.0"
gateway = "94.23.214.222"			# Dom0
# example for LVM or partition
disk = [ 'phy:/dev/mapper/xenvg-acacha,/dev/hda1,w', 'phy:/dev/mapper/xenvg-acacha_swap,hda2,w' ]  

# example for image file
#disk = [ 'file:xen/xenvg-node0001.img,hda1,w', 'file:/xen/xenvg-node0001-swap.img,hda2,w' ]  

# This uses environment variables XAUTHORITY and DISPLAY.  You
# can override that:
# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ]
#
# To create one using the VNC backend and sensible defaults:
#vfb = [ 'type=vnc' ]
# The backend listens on 127.0.0.1 port 5900+N by default, where N is
# the domain ID.  You can override both address and N:
#
# Or you can bind the first unused port above 5900:
# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vnunused=1' ]
# You can override the password:
# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ]  

# Set the hostname.
#hostname= "node%d" % vmid

# Set root device.
root = "/dev/hda1"

# Sets runlevel 2.
#extra = "2"
extra='console=xvc0 xencons=xvc0'
#sdl=0
#vnc=0
#nographics=0

Ara ja podem provar la màquina amb:

# xm create -c /etc/xen/acacha

Un cop dins s'ha instal·lat i configurat:

$ sudo apt-get install slocate
$ sudo tasksel

I es marca Basic Ubuntu Server

Es soluciona els problemes de locales. Consulte locale

Recursos:

Utilitzant xen-tools

Consulteu l'apartat xeen-tools per tal d'obtenir més informació.

Primer cal mirar que els valors per defecte de xen-tools siguin correctes:

$ sudo joe /etc/xen-tools/xen-tools.conf

I busqueu la secció:

##
# Networking setup values.
##

I indiqueu la pasarel·la (gateway), la màscara i l'adreça de difusió (broadcast) adequats per a la vostra xarxa. Per exemple:

gateway   = 192.168.0.1
netmask   = 255.255.255.0
broadcast = 192.168.1.255 

També cal descomentar la línia:

# passwd = 1

Si volem que ens pregunti per una paraula de pas de l'usuari root diferent per a cada màquina virtual.

I canvieu també la opció mirror:

mirror = http://ftp.us.debian.org/debian/

Per els mirrors que utilitzeu al vostre fitxer /etc/apt/sources.list. Per exemple, per a Ubuntu:

mirror = http://es.archive.ubuntu.com/ubuntu/

Els fitxers del repositori seran utilitzats per insta·lar una versió bàsica de la màquina virtual. Xen utilitzar debootstrap

Ara ja podem crear una nova màquina virtual:

$ sudo xen-create-image --hostname=xen1.casa --ip=192.168.1.10 --ide --force

Abans d'executar la comanda, en un altre terminal podeu executar:

$ tail -f /var/log/xen-tools/xen1.casa.log 

Creant una imatge virtual LVM

S'especifica la opció --lvm. Per exemple:

$ sudo xen-create-image --hostname=xen3.example.com --size=2Gb --swap=512Mb --ip=192.168.0.203 --force --memory=256Mb --arch=i386 --lvm=xen_vm

On el valor és el nom d'un grup de volum de LVM amb espai suficient:

$ sudo vgdisplay 
 --- Volume group ---
 VG Name               xen_vm
 System ID             
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  14
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                5
 Open LV               2
 Max PV                0
 Cur PV                1
 Act PV                1
 VG Size               233,75 GB
 PE Size               4,00 MB
 Total PE              59841
 Alloc PE / Size       57713 / 225,44 GB
 Free  PE / Size       2128 / 8,31 GB
 VG UUID               WN3a13-B1Ij-X53p-Svpl-oDty-GUh4-AVcWOB

Canvis que cal fer a les màquines virtuals (domU)

Accés consola:

Cal afegir la línia:

extra='xencons=tty1' 

Al fitxer de configuració de la màquina virtual. Això ens permetra accedir a la consola i evitar l'error:

Xen#Xen_en_m.C3.A0quines_domU_es_penja_despr.C3.A9s_de_.22Running_local_boot_scripts_.28.2Fetc.2Frc.local.29.22

Canvis a la domU

$ sudo cp -a  /lib/modules/`uname -r`/   /mnt/myguest/lib/modules/

Mostrar les imatges

Per consultar les màquines virtuals:

$ xen-list-images 
Name: Sintesi2nESI_1.iescopernic.com
Memory: 256
IP: 192.168.0.101
 
Name: Sintesi2nESI_2.iescopernic.com
Memory: 256
IP: 192.168.0.102

Name: xen1.example.com
Memory: 256
IP: 192.168.0.200

Name: xen3.example.com
Memory: 256
IP: 192.168.0.203


Eliminant màquines virtuals amb xen-delete-image

S'utilitza:

$ xen-delete-image [options] [--hostname=]imageName1 [options] [--hostname=]imageName1 

Per exemple:

xen-delete-image [options] [--hostname=]imageName1

Fitxers de les màquines virtuals

Fitxers imatge

Carpeta domains (/home/xen)

Normalment les màquines virtuals s'emmagatzemen totes en una mateixa carpeta del sistema. Aquesta carpeta se la sol anomenar /home/xen:

$ ls -la  /home/xen/
total 28
drwxr-xr-x 4 root root  4096 2009-04-20 21:14 .
drwxr-xr-x 4 root root  4096 2009-04-20 21:02 ..
drwxr-xr-x 5 root root  4096 2009-04-21 19:38 domains

La carpeta domains, conté les màquines virtual (una màquina virtual a cada carpeta). Les carpetes tenen el nom escollit per a la màquin virtual. Per exemple:

$ ls -la  /home/xen/domains/
total 20
drwxr-xr-x 5 root root 4096 2009-04-21 19:38 .
drwxr-xr-x 4 root root 4096 2009-04-20 21:14 ..
drwxr-xr-x 2 root root 4096 2009-04-20 21:14 Sintesi2nESI_1.iescopernic.com
drwxr-xr-x 2 root root 4096 2009-04-21 19:38 Sintesi2nESI_2.iescopernic.com
drwxr-xr-x 2 root root 4096 2009-04-20 21:19 xen1.example.com

Dins de cada màquina virtual ens trobem:

  • Fitxer disk.img: Conté la màquina virtual. Simula el disc dur de la màquina virtual.
  • Fitxer swap.img: Conté la partició swap de la màquina virtual.

NOTA: Si s'utilitza LVM, aquests no són els fitxers imatge. Consulteu Fitxers imatge amb LVM.

Per exemple:

$ ls -lah  /home/xen/domains/Sintesi2nESI_1.iescopernic.com
total 5510424
...
-rw-r--r-- 1 root root 5,0G 2009-04-21 15:16 disk.img
-rw-r--r-- 1 root root 256M 2009-04-21 15:14 swap.img

A diferència d'altres sistemes com VirtualBox, la màquina virtual

Fitxers imatge amb LVM

Si s'utilitza la opció --lvm al crear una imatge de xen, aleshores no hi ha fitxers imatge si no que hi ha volums lògics de LVM. Per exemple, per una màquina anomenada xen3.example.com:

 --- Logical volume ---
 LV Name                /dev/xen_vm/xen3.example.com-swap
 VG Name                xen_vm
 LV UUID                SVLKI1-P0ly-MPm8-MxJd-urCD-pGZN-P3awiy
 LV Write Access        read/write
 LV Status              available
 # open                 0
 LV Size                512,00 MB
 Current LE             128
 Segments               1
 Allocation             inherit
 Read ahead sectors     0
 Block device           254:5
  
 --- Logical volume ---
 LV Name                /dev/xen_vm/xen3.example.com-disk
 VG Name                xen_vm
 LV UUID                jwXefL-4zE7-eqsb-KJux-mah1-yA0T-sOhzky
 LV Write Access        read/write
 LV Status              available
 # open                 0
 LV Size                2,00 GB
 Current LE             512
 Segments               1
 Allocation             inherit
 Read ahead sectors     0
 Block device           254:6

Aquesta màquina s'ha creat amb la comanda:

$ sudo xen-create-image --hostname=xen3.example.com --size=2Gb --swap=512Mb --ip=192.168.0.203 --force --memory=256Mb --arch=i386 --lvm=xen_vm

On xen_vm és el nom d'un volum lògic de LVM que tenia espai lliure:

$ sudo vgdisplay
 --- Volume group ---
 VG Name               xen_vm
 System ID             
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  14
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                5
 Open LV               2
 Max PV                0
 Cur PV                1
 Act PV                1
 VG Size               233,75 GB
 PE Size               4,00 MB
 Total PE              59841
 Alloc PE / Size       57713 / 225,44 GB
 Free  PE / Size       2128 / 8,31 GB
 VG UUID               WN3a13-B1Ij-X53p-Svpl-oDty-GUh4-AVcWOB

Fitxers de configuració

Fitxers .cfg

Per cada màquina virtual hi ha un fitxer nom_maquina_virtual.cfg a la carpeta /etc/xen.

Per exemple:

$ ls -la
...
r-xr-x  2 root root 4096 2009-02-20 07:56 auto
-rwxr-xr-x  1 root root  896 2009-02-20 07:53 qemu-ifup
drwxr-xr-x  2 root root 4096 2009-04-20 19:35 scripts
-rw-r--r--  1 root root  804 2009-04-21 15:18 Sintesi2nESI_1.iescopernic.com.cfg
-rw-r--r--  1 root root  804 2009-04-21 19:42 Sintesi2nESI_2.iescopernic.com.cfg
-rw-r--r--  1 root root 8276 2009-02-20 07:53 xend-config.sxp
-rw-r--r--  1 root root 6938 2007-12-29 18:57 xend-config-xenapi.sxp
-rw-r--r--  1 root root 1256 2007-12-29 18:57 xend-pci-permissive.sxp
-rw-r--r--  1 root root 4129 2007-12-29 18:57 xend-pci-quirks.sxp

/boot/grub/menu.lst

El fitxer d'arrancada de grub, queda amb una entrada nova similar a:

title           Xen 3.2 / Ubuntu 8.04.2, kernel 2.6.24-23-xen
root            (hd0,0)
kernel          /xen-3.2.gz
module          /vmlinuz-2.6.24-23-xen root=/dev/mapper/IescopernicXen-root ro console=tty0
module          /initrd.img-2.6.24-23-xen
quiet

Executar les màquines virtual automàticament al arrancar la màquina host (dom0)

Feu un link de la configuració de la vostra màquina virtual a la carpeta /etc/xen/auto

$ sudo ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
NOTA: És possible que haguiu de crear la carpeta:
$ sudo mkdir /etc/xen/auto

La carpeta per defecte és /etc/xen/auto però es pot modificar a /etc/default/xendomains:

$ cat /etc/default/xendomains
...
## Type: string
## Default: /etc/xen/auto
#
# This variable sets the directory where domains configurations
# are stored that should be started on system startup automatically.
# Leave empty if you don't want to start domains automatically
# (or just don't place any xen domain config files in that dir).
# Note that the script tries to be clever if both RESTORE and AUTO are 
# set: It will first restore saved domains and then only start domains
# in AUTO which are not running yet. 
# Note that the name matching is somewhat fuzzy.
#
XENDOMAINS_AUTO=/etc/xen/auto
...

Es poden aplicar els canvis sense reiniciar amb:

$ sudo /etc/init.d/xendomains restart

Comproveu-ho amb:

$ sudo xm list

On col·locar el kernel de les màquines domU?

Dos possibilitats:

  • Al sistema de fitxers del host (dom0): S'utilitzen els fitxers especificats al fitxer xen-config (paràmetre kernel).
  • Al sistema de fitxers del domU: Funciona tant per a màquines HVM i paravirt-domU. L'avantatge és que és fàcil actualitzar el kernel, moduls i els fitxers initrd.

pygrub

TODO

$ sudo cat *.hvm
kernel = “/usr/lib/xen/boot/hvmloader”
builder = ‘hvm’
memory = 2048
name = “IntrepidHVM”
vcpus = 1
vif = [ 'type=ioemu,bridge=eth1' ]
disk = [ 'phy:/dev/sdb5,hda,w!','phy:/dev/loop0,hdc:cdrom,r']
device_model = ‘/usr/lib/xen/bin/qemu-dm’
vnc=1
boot=’d’

To evaluate hypervisor load Interpid PV DomU utilizing same image device :-

$ sudo joe intrepid.py
name = ‘IntrepidPV’
bootloader=”/usr/bin/pygrub”
memory = 2048
disk = ['phy:/dev/sdb5,hda,w']
vif = [ 'bridge=eth1' ]
vfb = ['type=vnc,vncunused=1']
on_reboot = ‘restart’
on_crash = ‘restart’

$ sudo xm create intrepid.py
$ vncviewer localhost:0

Recursos:

Com accedir/muntar els sistemes de fitxers (disc dur) de les màquines virtuals?

Fitxers

$ mkdir vm_base
$ sudo mount -o loop /vserver/images/vm_base.img vm_base

LVM

L'exemple s'aplica a una màquina virtual anomenada prova.iescopernic.com i creada en una unitat lògica LVM anomenada

Consulteu la configuració de la màquina virtual:

$ cat /etc/xen/prova.iescopernic.com.cfg

# Configuration file for the Xen instance prova.iescopernic.com, created
# by xen-tools 3.8 on Thu May 28 17:02:40 2009.
#

#
#  Kernel + memory size 
#
kernel      = '/boot/vmlinuz-2.6.24-19-server'
ramdisk     = '/boot/initrd.img-2.6.24-19-server'
memory      = '512' 

#
#  Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                  'phy:/dev/xen_vm/prova.iescopernic.com-swap,xvda1,w',
                  'phy:/dev/xen_vm/prova.iescopernic.com-disk,xvda2,w', 
              ]
...

Ara que ja sabem on es troba el disc (/dev/xen_vm/prova.iescopernic.com-disk), el podeu muntar amb:

$ mkdir prova
$ sudo mount /dev/xen_vm/prova.iescopernic.com-disk prova

Cal tenir el suport per a LVM instal·lat (se suposa que ja es té si no no es podria haver creat la màquina virtual).

Instal·lar des de CD

Només es pot fer directament amb Xen amb màquines domU HVM. Consulteu Windows com a domU. Però es pot utilitzar qemu per aconseguir instal·lar la màquina virtual a una partició LVM o a un fitxer imatge.

Consulteu:

Qemu#Executar_una_instal.C2.B7laci.C3.B3_des_de_CD_amb_qemu_i_VNC

Windows com a domU

NOTA: Cal tenir en compte que no podem paravirtualitzar Windows, ja que paravitualitzar implica modificar el nucli del sistema domU i en el cas de Windows (al no ser Open Source) només pot fer una modificació Microsoft i no la ha fet pas. Per tant, cal utilitzar HVM, o el que és el mateix, només ho podreu fer amb certs processadors.

Cal instal·lar un Xen a Debian Lenny com ho faríeu per a qualsevol altre màquina virtual. En aquest cas però necessiteu els paquets extres Xen IO Emulation tools:

$ sudo apt-get install xen-ioemu-3.0.3-1

En aquest cas cal utilitzar un fitxer imatge (és pot fer amb LVM?, no està clar...)

$ mkdir /home/xen
$ mkdir /home/xen/domains
$ mkdir /home/xen/domains/win01
$ sudo dd if=/dev/zero of= /home/xen/domains/win01/disk.img bs=1M count=4096

El fitxer de configuració del domU serà:

$ sudo joe /Etc/xen/win01.cfg

kernel = '/usr/lib/xen/boot/hvmloader'
builder = 'hvm'
memory = '256'
device_model='/usr/lib/xen/bin/qemu-dm' 

# Disks
disk = [ 'file:/home/xen/domains/win01/disk.img,ioemu:hda,w',
'file:/home/cc/iso-images/WindowsXP-SP2/image.iso,ioemu:hdc:cdrom,r' ]

# Hostname
name = 'win01'

# Networking
vif = ['type=ioemu, bridge=xenbr0']

# Behaviour
boot='d'
vnc=1
vncviewer=1
sdl=0

Fixeu-vos que configurem VNC per tal de poder accedir a la màquina per entorn gràfic. Per executar-la:

$ sudo xm create win01.cfg

Ara cal iniciar un client VNC i connectar-lo a:

localhost
Port: 5900 

Recursos:

Fitxers de log

Durant la creació de les màquines virtuals amb #xen-tools, podeu consultar elf fitxers de lo que es troben a la carpeta:

$ sudo tail -f /var/log/xen-tools/NOM_MAQUINA_VIRTUAL.log

Per exemple:

$ sudo tail -f /var/log/xen-tools/Sintesi2nESI_1.iescopernic.com.log

Si teniu qualsevol error, segurament en trobareu el detall al fitxer de log.

També podeu consultar el log amb:

$ sudo xm log

dmesg

Es pot consultar el boot de Xen amb:

$ sudo xm dmesg
 \ \/ /___ _ __   |___ / |___ \  / |   _ __ ___/ |   _ __  _ __ ___ 
 \  // _ \ '_ \    |_ \   __) | | |__| '__/ __| |__| '_ \| '__/ _ \
 /  \  __/ | | |  ___) | / __/ _| |__| | | (__| |__| |_) | | |  __/
/_/\_\___|_| |_| |____(_)_____(_)_|  |_|  \___|_|  | .__/|_|  \___|
                                                   |_|             
(XEN) Xen version 3.2.1-rc1-pre (buildd@buildd) (gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)) Fri Feb 20 06:53:43 
UTC 2009
(XEN) Latest ChangeSet: unavailable
(XEN) Command line: 
(XEN) Video information:
...

Activar els logs del servidor

Cal descomentar una línia al fitxer:

/etc/xen/xend-config.sxp

El fitxer de log estan a la carpeta:

/var/log/xen

El fitxer de log més important el trobareu a:

$ sudo tail -f /var/log/xen/xend.log

Gestió de la memòria RAM

La memòria RAM que utilitza cada màquia es pot consultar amb xm:

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
AlfaFS                                       6  1024     1     -b----    143.7
Domain-0                                     0  1968     1     r-----   4840.5
negrell                                      4  1024     1     -b----   1607.3

En aquest cas es tracta d'un sistema de 4GB de RAM on 1968 són de la dom0 i hi ha dos màquines virtuals amb 1024 de RAM cadascuna.

NOTA: La RAM que no apareix en lloc es RAM reservada per a l'hypervisor

A les màquines virtuals (domU) se'ls hi assigna memòria mitjançant la seva configuració:

$ cat /etc/xen/AlfaFS
bootloader = '/usr/lib/xen-3.2-1/bin/pygrub'
memory = 1024
name = 'AlfaFS'
vif = [ 'mac=00:16:3E:00:00:a0, bridge=eth0' ]          # replace with DomU's IP
dhcp = 'dhcp'
#netmask = '255.255.255.0'
#gateway = 'XXX'                        # Dom0
disk = [ 'phy:/dev/xen_vm/AlfaFS,xvda1,w','phy:/dev/xen_vm/AlfaFSswap,xvda2,w' ]

$ cat negrell 
bootloader = '/usr/lib/xen-3.2-1/bin/pygrub'
memory = 1024
name = "negrell"
vif = [ 'mac=00:16:3E:00:00:04, bridge=eth0' ]             # replace with DomU's IP
dhcp = "dhcp"
#netmask = "255.255.255.0"
#gateway = "XXX"                        # Dom0
disk = ['phy:/dev/xen_vm/negrell,xvda1,w','phy:/dev/xen_vm/negrellswap,xvda2,w' ]

Un dels problemes que podem tenir és saber la memòria total de la que disposa el sistema. Amb l'ordre free:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1968        511       1456          0         40        235
-/+ buffers/cache:        234       1733
Swap:         3812          0       3812

Només podem veure la quantitat de RAM que em reservat per a la domO. Podem utilitzar l'ordre dmidecode per obtenir informació sobre el sistema:

$ dmidecode | more
...
Handle 0x1100, DMI type 17, 23 bytes
Memory Device
	Array Handle: 0x1000
	Error Information Handle: Not Provided
	Total Width: 72 bits
	Data Width: 64 bits
	Size: 2048 MB
	Form Factor: FB-DIMM
	Set: 1
	Locator: DIMM 1A
	Bank Locator: Not Specified
	Type: DDR2 FB-DIMM
	Type Detail: Synchronous
	Speed: 667 MHz (1.5 ns)
...
Handle 0x1102, DMI type 17, 23 bytes
Memory Device
	Array Handle: 0x1000
	Error Information Handle: Not Provided
	Total Width: 72 bits
	Data Width: 64 bits
	Size: No Module Installed
	Form Factor: FB-DIMM
	Set: 3
	Locator: DIMM 3C
	Bank Locator: Not Specified
	Type: DDR2 FB-DIMM

Type Detail: Synchronous

	Speed: Unknown

Aniran sortint les ranures que tenim de memòria i si hi ha instal·lat memòria o no.

NOTA: Amb dmidecode també podeu consultar el nombre de CPUs que té la màquina

Es pot canviar la RAM assignada a una màquina en calent. Per exemple per canviar la RAM assignada a la domO:

$ sudo  xm mem-set 0 1900
$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
AlfaFS                                       6  1024     1     -b----    143.8
Domain-0                                     0  1900     1     r-----   4846.4
negrell                                      4  1024     1     -b----   1608.0

Per defecte la dom0 s'assigna tota la memòria que no està assignada a les màquines virtuals. Al crear una nova màquina de 1024MB el resultat és:

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
AlfaFS                                       6  1024     1     -b----    144.2
BravoFS                                      7  1024     1     -b----      3.6
Domain-0                                     0   944     1     r-----   4877.3
negrell                                      4  1024     1     -b----   1611.1

Per evitar que la dom0 es quedi sense memòria, podeu modificar el fitxer /etc/xen/xend-config.sxp:

# Dom0 will balloon out when needed to free memory for domU.
# dom0-min-mem is the lowest memory level (in MB) dom0 will get down to.
# If dom0-min-mem=0, dom0 will never balloon out.
(dom0-min-mem 256)

La quantitat de memòria necessària per a la domO depèn del que si executi, però si només fa de servei Xen i té un servidor SSH i poca cosa més, es pot arribar a executar amb 128MB. Si voleu estar tranquils assigneu 256MB o utilitzeu les ordres top i free per saber l'ús de memòria que fa la vostra màquina.

Manual Unix

xenman

Xen-tools

xen-create-image

Exemples de creació de màquines virtuals:

$ sudo mkdir /home/xen 
$ sudo xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev

Un altre exemple:

$ sudo xen-create-image --hostname=Sintesi2nESI_1.iescopernic.com --size=5Gb --swap=256Mb --ip=192.168.0.101 --role=udev

Un altre:

$ sudo xen-create-image --force --hostname=Sintesi2nESI_3.iescopernic.com --memory=412Mb --size=5Gb --swap=256Mb --ip=192.168.0.103 --role=udev --accounts
$ sudo xen-create-image --force --hostname=cs3.iescopernic.com --memory=412Mb --size=5Gb --swap=256Mb --ip=192.168.0.103 --role=udev --accounts --lvm


Un exemple força complet:

$ xen-create-image --hostname=xen1.example.com --size=2Gb --swap=256Mb --ide \
--ip=192.168.0.101 --netmask=255.255.255.0 --gateway=192.168.0.1 --force \
--dir=/home/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.22-14-xen \
--initrd=/boot/initrd.img-2.6.22-14-xen --debootstrap --dist=gutsy \
--mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd

Podeu trobar més exemples d'aquesta eina a:

http://www.xen-tools.org/software/xen-tools/examples.html

I consultant el manual

$ man xen-create-image

Recursos:

Fitxer de configuració /etc/xen-tools/xen-tools.conf

Es pot consultar el fitxer sense comentaris amb:

# cat /etc/xen-tools/xen-tools.conf | grep -v '^#\|^$\|^;'
install-method = debootstrap
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = etch     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
kernel      = /boot/vmlinuz-`uname -r`
initrd      = /boot/initrd.img-`uname -r`
mirror = http://ftp.us.debian.org/debian/
ext3_options   = noatime,nodiratime,errors=remount-ro
ext2_options   = noatime,nodiratime,errors=remount-ro
xfs_options    = defaults
reiser_options = defaults

Atenció: Compte amb les opcions:

kernel      = /boot/vmlinuz-`uname -r`
initrd      = /boot/initrd.img-`uname -r`

En Ubuntu el kernel de Xen no està preparat per a màquines domU i us pot donar problemes. Millor que indiqueu directament quin és el kernel i el fitxer initrd, sense utilitzar uname.

Xen-utils

xm

La comanda xm ens proporciona el Xen management user interface. Permet gestionar Xen.

xm create (executar)

Executa una màquina virtual:

$ sudo xm create /etc/xen/cs2.iescopernic.com.cfg
Using config file "/etc/xen/cs2.iescopernic.com.cfg".
Started domain cs2.iescopernic.com

També podem utilitzar la opció console (-c) per tal de que ens torni una consola de la nova màquina virtual (també és útil per veure la carrega de la màquina virtual):

$ sudo xm create -c /etc/xen/cs2.iescopernic.com.cfg
...
...
* Running local boot scripts (/etc/rc.local)                            [ OK ] 

Ubuntu 8.04 cs2.iescopernic.com tty1 

cs2.iescopernic.com login:

Es pot tornar a la consola de la màquina dom0 amb la combinació de tecles:

Ctrl+AltGr+] (és a dir les tecles Ctrl+Alt Gr (alt de la dreta) + la tecla de l'asterisc)

Podeu consultar totes les opcions amb:

$ sudo xm create --help_config 

xm shutdown (apagar)

Atura correctament una màquina virtual.

$ sudo xm shutdown cs1.iescopernic.com

xm destroy:

És com apagar un ordinador "a la brava" (com treure l'electricitat). Útil quan la màquina no contesta:

$ sudo xm destroy cs1.iescopernic.com

Mostrar la llista de màquines en execució:

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1588     2     r-----    467.2

Podeu obtenir més detalls amb:

$ sudo xm list --long |more

Per mostrar totes les màquines disponibles i creades amb xen-tools:

$  sudo xen-list-images 
...

Al executar una màquina amb:

$ xm create /etc/xen/cs1.iescopernic.com.cfg

tenim:

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1588     2     r-----    470.4
cs1.iescopernic.com                          2   400     1     -b----      1.4

xm console

Permet accedir a una màquina virtual (domU) des de la màquina dom0:

$ sudo xm console cs2.iescopernic.com 
...
cs2.iescopernic.com login:login:

Es pot tornar a la consola de la màquina dom0 amb la combinació de tecles:

Ctrl+AltGr+] (és a dir les tecles Ctrl+Alt Gr (alt de la dreta) + la tecla de l'asterisc)


Actualitzar màquines virtuals:

$ sudo xen-update-image --dir=/vserver/images vm03.example.com

xm info

Mostra informació de Xen:

$ sudo xm info
host                   : IescopernicXen
release                : 2.6.24-23-xen
version                : #1 SMP Mon Jan 26 03:12:59 UTC 2009
machine                : i686
nr_cpus                : 2
nr_nodes               : 1
cores_per_socket       : 2
threads_per_core       : 1
cpu_mhz                : 1995
hw_caps                : bfebfbff:20100000:00000000:00000140:0000e39d:00000000:00000001
total_memory           : 2018
free_memory            : 256
max_free_memory        : 1654
max_para_memory        : 1650
max_hvm_memory         : 1638
node_to_cpu            : node0:0-1
xen_major              : 3
xen_minor              : 2
xen_extra              : .1-rc1-pre
xen_caps               : xen-3.0-x86_32p 
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xf5800000
xen_changeset          : unavailable
cc_compiler            : gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
cc_compile_by          : buildd
cc_compile_domain      : buildd
cc_compile_date        : Fri Feb 20 06:53:43 UTC 2009
xend_config_format     : 4

xm dmesg

Mostra el boot de Xen.

$ xen dmesg

xm console

Es connecta amb una consola a la màquina virtual:

$ sudo xm console <name> - Log in on a virtual machine.

TODO: "to log in on that virtual machine (type CTRL+] if you are at the console, or CTRL+5 if you're using PuTTY to go back to dom0), or use an SSH client to connect to it (192.168.0.101). "

Còpies de seguretat de imatges virtuals amb LVM

Recursos:

Xen-shell

Per instal·lar xen-shell, primer cal instal·lar uns prerequisits:

$ sudo apt-get install sudo libterm-readline-gnu-perl

I ara:

$ sudo apt-get install xen-shell

Xen-shell permet als usuaris accedir a la màquina HOST (dom0) i els proporciona una consola que només els permet gestionar la seva màquina virtual.

Primer cal crear un usuari:

$ sudo adduser usuari

I canviar la shell (normalment /bin/bash) per /usr/bin/xen-login-shell

$ sudo chsh -s /usr/bin/xen-login-shell usuari

Ara cal editar el fitxer /etc/sudoers (fitxers que gestiona la comanda sudo) i permetre al nou usuari que pugui executar les comandes:

  • /usr/sbin/xm
  • /usr/bin/xen-create-image

No editeu mai el fitxers sudoers directament. Si cometeu qualsevol error podeu perdre l'accés a la màquina. Cal utilitzar la comanda visudo:

$ sudo visudo

I afegiu les línies:

User_Alias   XENUSERS = usuari
Cmnd_Alias   XEN      = /usr/sbin/xm
Cmnd_Alias   XENIMG   = /usr/bin/xen-create-image
XENUSERS     ALL      = NOPASSWD: XEN,XENIMG

A les imatges que l'usuari tingui accés, cal afegir una línia al fitxer de configuració. Per exemple editem la imatge prova.iescopernic.com:

$ sudo joe /etc/xen/prova.iescopernic.com.cfg

I afegim:

# These users may control this instance.
xen_shell = 'usuari'   

Si volem que l'usuari pugui tornar a crear la imatge des de 0 cal afegir a la home del usuari un script de shell:

$ sudo joe /home/usuari/image.sh

I a dins cal posar com es torna a crear la imatge. Per exemple:

#!/bin/sh
/usr/bin/sudo /usr/bin/xen-create-image --hostname=bob --ip=192.168.0.105 --netmask=255.255.255.0 --gateway=192.168.0.1 --dir=/vserver/images -dist=sarge --debootstrap --force

Cal fer l'script executable:

$ sudo chmod 755 /home/bob/image.sh

Ara l'usuari usuari és pot connectar per ssh i accedir a la shell.

Recursos:

Com utilitzar xen-shell

xen-shell> help
xen-shell v1.8.110
The following commands are available within this shell:

      boot - Boot the Xen guest.
   console - Gain access to a Xen guest via the serial console.
      exit - Exit the shell.
      help - Show general, or command-specific, help information.
    passwd - Change the password used to access this host.
     pause - This will pause the Xen guest.
      quit - Exit this shell.
    reboot - Reboot the Xen guest.
    serial - Gain access to the Xen guest via the serial console.
  shutdown - Shutdown the Xen guest.
    status - Show the status of the Xen guest.
    sysreq - Send a 'sysreq' keystroke to the guest.
       top - Show system resource usage.
   unpause - This will unpause the Xen guest.
    uptime - Show the uptime information of your guest system and this host.
   version - Show the version of this shell, and of Xen.
    whoami - Show the user you're connected to the host system as.

For command-specific help run "help command".

Configuració de la xarxa

L'script de configuració de la xarxa és /etc/xen/scripts/network-bridge:

# network-bridge (start|stop|status) {VAR=VAL}*
#
# Vars:
#
# bridge     The bridge to use (default ${netdev}).
# netdev     The interface to add to the bridge (default gateway device).
# antispoof  Whether to use iptables to prevent spoofing (default no).


NOTA: Aquest script s'executa durant l'arrancada del servidor Xen i el seu objectiu es crear els bridges per poder treballar amb xarxa a les màquines virtuals

És el que s'encarrega de crear els bridges al executar Xen. Això és així per que s'indica d'aquesta manera al fitxer principal de configuració de Xen:

$ cat /etc/xen/xend-config.sxp
(xend-relocation-server no) 
(xend-relocation-hosts-allow ) 
(network-script 'network-bridge') 
(vif-script vif-bridge) 
(dom0-min-mem 196) 
(dom0-cpus 1)  

Xen crea per defecte un bridge. Si consulteu la configuració de les interfícies de xarxa amb ifconfig:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0f:fe:de:8f:f7  
         inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
         inet6 addr: fe80::20f:feff:fede:8ff7/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:144230 errors:0 dropped:0 overruns:0 frame:0
         TX packets:29449 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:46316390 (44.1 MB)  TX bytes:3413438 (3.2 MB)

...

peth0     Link encap:Ethernet  HWaddr 00:0f:fe:de:8f:f7  
         inet6 addr: fe80::20f:feff:fede:8ff7/64 Scope:Link
         UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
         RX packets:144401 errors:0 dropped:0 overruns:0 frame:0
         TX packets:30656 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:100 
         RX bytes:49117571 (46.8 MB)  TX bytes:3964340 (3.7 MB)
         Memory:f0180000-f01a0000 

Hi ha una interfície virtual anomenada peth0. La eth0 i peth0 estan enllaçades com podeu veure amb:

$ brctl show
bridge name     bridge id               STP enabled     interfaces
eth0            8000.000ffede8ff7       no              peth0
NOTA: A partir de la versió 3.2 de xen el bridge s'anomena eth0, eth1

Cada com que s'inicia una màquina domU s'inicia una targeta de xarxa:

vifX.0

On X és el número identificador de la màquina virtual. Aquest número s'assigna de forma correlativa al crear la màquina i no es pot canviar (AFAIK), pero el podeu consultar amb:

$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3500     4     r-----     84.6
node0001                                     4   256     1     -b----      7.1
ubuntuserver                                 6   256     1     -b----     23.9

És la columna ID. Ara si veu ifconfig:

$ sudo ifconfig 
vif4.0    Link encap:Ethernet  HWaddr fe:ff:ff:ff:ff:ff  
         inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
         UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
         RX packets:15341 errors:0 dropped:0 overruns:0 frame:0
         TX packets:25534 errors:0 dropped:38 overruns:0 carrier:0
         collisions:0 txqueuelen:32 
         RX bytes:853442 (833.4 KiB)  TX bytes:33363100 (31.8 MiB)

vif6.0    Link encap:Ethernet  HWaddr fe:ff:ff:ff:ff:ff  
         inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
         UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
         RX packets:100 errors:0 dropped:0 overruns:0 frame:0
         TX packets:109 errors:0 dropped:921 overruns:0 carrier:0
         collisions:0 txqueuelen:32 
         RX bytes:27316 (26.6 KiB)  TX bytes:14486 (14.1 KiB)

Que estan connectades al bridge:

$ sudo brctl show
bridge name	bridge id		STP enabled	interfaces
eth0		8000.0022649889d0	no		peth0
							vif4.0 
							vif6.0

Esquema de la xarxa

     LAN0                                                  LAN1
      |                                                     |
+-----+-----------------------------------------------------+-----+
|     |                                                     |     |
| +---+-------------------------+ +-------------------------+---+ |
| |   |                         | |                         |   | |
| | peth0                       | |                       peth1 | |
| |                             | |                             | |
| | eth0         vif1.0  vif1.1 | |  vif2.0  vif2.1       eth1  | |
| |                |       |    | |    |       |                | |
| +---^------------+-------+----+ +----+-------+------------^---+ |
|     |            |       |           |       |            |     |
|     |     +------+-------+-----------+-------+------+     |     |
|     |     |      |       |           |       |      |     |     |
|     |     | +----+-------+----+ +----+-------+----+ |     |     |
|     |     | |    |       |    | |    |       |    | |     |     |
|     |     | |  eth0    eth1   | |  eth0    eth1   | |     |     |
|     |     | |    |       |    | |    |       |    | |     |     |
|   +-+-+   | |  +-+-+   +-+-+  | |  +-+-+   +-+-+  | |   +-+-+   |
|   |   |   | |  |   |   |   |  | |  |   |   |   |  | |   |   |   |
|  www ssh  | | www ssh ftp pop | | www ssh ftp pop | |  ftp pop  |
|           | |                 | |                 | |           |
|  Domain0  | |     Domain1     | |     Domain2     | |  Domain0  |
+-----------+ +-----------------+ +-----------------+ +-----------+

Recursos:

Adreces MAC

Per a les màquina virtuals Xen disposa d'un prefix de fabricant per a evitar conflictes de MAC. Segons:

$ cat /usr/share/nmap/nmap-mac-prefixes | grep Xensource
00163E Xensource

El prefix és:

00:16:3E

Consulteu MAC i nmap.

iptables

Al iniciar màquines virtuals amb Xen a la màquina domO es generen automàticament unes normes:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 2532K packets, 228M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 17M packets, 17G bytes)
 pkts bytes target     prot opt in     out     source               destination         
5358K 7561M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-in vif1.0 
 652K   32M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-in vif4.0 
 102K  100M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-in vif5.0 
 3586  211K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-in vif7.0 

Els paquets que passen pels bridges generats per al correcte funcionament de la xarxa amb Xen passen per PREROUTING, FORWARD i POSTROUTING. Les normes anteriors s'asseguren que els paquets passin sense problemes.

Consulteu iptables

Configuració de la xarxa als domU

A Ubuntu cal tenir en compte certs temes.

  • udev: Cal tenir en compte que si no indiquem una mac al fitxer de configuració de la màquina virtual (domU) aleshores Xen li assignarà una mac aleatòria. Cada cop que tornem a engegar la màquina virtual li assignarà una nova ethX
  • Network-manager? eliminar-lo? a servidor no hi és.

Si s'assigna sempre la mateixa MAC a la màquina virtual:


$ sudo joe /etc/xen/xen1.example.com.cfg
   vif         = [ 'mac=00:16:3E:00:00:01', 'ip=192.168.0.106' ]

Editar el fitxer: /etc/udev/rules.d/70-persistent-net.rules a la domU:

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:16:3E:00:00:01", NAME="eth0"

A /etc/network/interfaces:

# The primary network interface
auto eth0
iface eth0 inet dhcp
NOTA: les MAC que comencen per 00:16:3E estan reservades a Xen. Poseu MACs d'aquest rang per evitar conflictes:
$ cat /usr/share/nmap/nmap-mac-prefixes | grep 00163E
00163E Xensource

Un altre alternativa: es proposa als comentaris de l'article (Another aproach):

SUBSYSTEM=="net", SUBSYSTEMS=="xen", DRIVERS=="vif", ATTRS{nodename}=="device/vif/0", NAME="eth0"
SUBSYSTEM=="net", SUBSYSTEMS=="xen", DRIVERS=="vif", ATTRS{nodename}=="device/vif/1", NAME="eth1

Consultar l'estat de la xarxa a la maquina dom0

$ sudo /etc/xen/scripts/network-bridge status
============================================================
14: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 00:1f:29:5e:bc:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.8/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::21f:29ff:fe5e:bcc2/64 scope link 
       valid_lft forever preferred_lft forever
14: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 00:1f:29:5e:bc:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.8/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::21f:29ff:fe5e:bcc2/64 scope link 
       valid_lft forever preferred_lft forever
 
bridge name	bridge id		STP enabled	interfaces
eth0		8000.001f295ebcc2	no		peth0
eth2		8000.0022649889d0	no		peth2
 
80.68.86.192/29 dev dummy0  proto kernel  scope link  src 80.68.86.193 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.8 
default via 192.168.1.1 dev eth0 
 
Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
80.68.86.192    0.0.0.0         255.255.255.248 U     0      0        0 dummy0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
============================================================

Múltiples IP, interfícies de xarxa

ebtables

Filtra a nivell de bridge (commutador) o nivell 2. ÉS un firewall similar a iptables per filtrar continguts a nivell de bridge.

Saber si una CPU suporta virtualització per maquinari

$ grep "vmx" /proc/cpuinfo  

o

$ grep "svm" /proc/cpuinfo 

Xen a OVH

Compte!: S'esborrarà el directori /xen. Podeu fer copia abans dels seus continguts amb:

# cd /xen
# mv DomU-* /home/lavostrahome

Creació de LVM

# umount /dev/md2
# pvcreate /dev/md2 
Physical volume "/dev/md2" successfully created
# vgcreate xenvg /dev/md2
Volume group "xenvg" successfully created

Ara cal afegir els LV. Per exemple

# lvcreate -L 5G -n node01 xenvg
# mkfs.ext3 /dev/xenvg/node01

També cal crear les SWAP:

# lvcreate -L256M -n node01-swap xenvg
# mkswap /dev/xenvg/node01-swap

Per crear acacha:

# lvcreate -L 250G -n acacha xenvg
# mkfs.ext3 /dev/xenvg/acacha

Per crear la swap d'acacha:

# lvcreate -L1G -n acacha_swap xenvg
 Logical volume "acacha_swap" created
# mkswap /dev/xenvg/acacha_swap 

Para crear tota una sèrie de LVs:

# for i in `seq 1 9`; do lvcreate -L 5G -n node0$i xenvg; lvcreate -L256M -n node0$i-swap xenvg; done
# for i in /dev/xenvg/node0[1-9]; do mkfs.ext3 $i; mkswap $i-swap; done

DomU Debian ofert per OVH:

# mount -t ext3 /dev/xenvg/node01 /mnt # también verifique en /etc/fstab
# cd /mnt
# tar xfj /xen/DomU-64Bit-Debian-Etch.tbz # para una DomU 64bit

o

# tar xfj /xen/DomU-32Bit-Debian-Etch.tbz # para una DomU 32bit 
# chroot /mnt
# passwd

Ara cal adaptar els fitxers:

  • /etc/network/interfaces # (añadir las IP failover y la ruta)
  • /etc/hostname
  • /etc/hosts


Al fitxer /etc/network/interfaces heu de posar quelcom similar a:

auto eth0
iface eth0 inet static
   address <IP FAILOVER>        # ip DomU
   netmask 255.255.255.255
   gateway <IP PRINCIPAL>  # ip Dom0
   post-up /sbin/ip route add <IP PRINCIPAL>/32 dev eth0    # ip Dom0

On la:

  • IP FAILOVER: és una ip extra que s'obté des del manager de OVH.
  • IP PRINCIPAL: és la ip del servidor dom0.

I els fitxers hostname i hosts els podeu copiar del domO i adaptar-los (posar el nom que vulgueu) a la vostra màquina:

# exit
# cp /etc/hosts /mnt/etc
# cp /etc/hostname /mnt/etc

$ sudo nano /mnt/etc/hosts 

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
IP FAILOVER   NOM_DNS_PROVEIT_PER_OVH
# The following lines are desirable for IPv6 capable hosts
#(added automatically by netbase upgrade)
::1     ip6-localhost ip6-loopback
feo0::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
$ sudo nano /mnt/etc/hostname

I poseu el NOM_DNS_PROVEIT_PER_OVH.

I crear un fitxer de configuració a la carpeta /etc/xen/, per exemple

# joe /etc/xen/node01 
# umount /mnt
# xm create -c node01 

Recursos:

Creació de la xarxa virtual a OVH

Copia literal de la web:

http://guias.ovh.es/ManualUtilizacionXen

Por razones de seguridad, la infraestructura de red de OVH no le permite realizar "bridging", es decir, añadir las interfaces de red virtuales directamente a la interfaz de red real.


Aunque éste es el modo por defecto de funcionamiento de Xen, es necesario cambiarlo.

En la instalación de la distribución Debian/Xen de OVH todo está ya preparado para su uso. Por tanto Xen está ya configurado sin bridge, en modo routing.

Esto quiere decir, que el tráfico que viene de los servidores virtuales no se envía directamente al siguiente switch, sino se encamina mediante el host.

Se precisan operaciones en 3 niveles:

   * la red exterior: Encamina las IP failover o la subred IP para las diferentes instancias virtuales en el servidor. Se gestiona desde el Manager.
   * el servidor: El kernel de linux debe saber donde enviar los paquetes recibidos por las direcciones adicionales. Esta parte se gestiona por Xen a partir del momento que la IP está configurada en un servidor virtual.
   * el servidor virtual: El kernel del servidor virtual debe saber donde enviar el tráfico (respuesta: hacia el servidor real, que hará función de pasarela) y cómo llegar. 


En los servidores creados con la distribución Xen de OVH, sólo es necesario adaptar el fichero /etc/network/interfaces en cada servidor virtual:

auto eth0 iface eth0 inet static

   address <IP FAILOVER>        # ip DomU
   netmask 255.255.255.255
   gateway <IP PRINCIPAL>  # ip Dom0
   post-up /sbin/ip route add <IP PRINCIPAL>/32 dev eth0    # ip Dom0

Xen a OVH (Ubuntu Server)

Consulteu Crear una Ubuntu Server Jaunty com a domU sense xen-tools (a mà i amb debootstrap)

Script de creació de màquines a partir d'una còpia tar.gz

$ cat installKarmic_sensedebootstrap.sh
NAME=AlfaFS
XEN_VG=xen_vm
SIZE=100G
SWAP_SIZE=512MB
DISTRO=karmic
RAM=1024
MAC=00:16:3E:00:00:a0

sudo lvcreate -L $SIZE -n $NAME $XEN_VG || exit
sudo mkfs.ext3 /dev/$XEN_VG/$NAME
sudo lvcreate -L $SWAP_SIZE -n ${NAME}swap $XEN_VG && sudo mkswap /dev/$XEN_VG/${NAME}swap

sudo mkdir /mnt/${NAME}
sudo mount /dev/mapper/$XEN_VG-$NAME /mnt/${NAME}
#sudo /usr/sbin/debootstrap --arch=amd64 --include=linux-image-server,grub --components=main,restricted,universe,multiverse  
#$DISTRO /mnt/${NAME} http://es.archive.ubuntu.com/ubuntu/
sudo mount /dev/mapper/xen_vm-repositori_maquina_virtual /mnt/repositori_maquina_virtual
sudo tar -xvpzf /mnt/repositori_maquina_virtual/karmic_ubuntu_server.tar.gz -C /mnt/${NAME}/
sudo umount /mnt/${NAME}

sudo bash -c "cat <<EOF >/etc/xen/${NAME}
bootloader = '/usr/lib/xen-3.2-1/bin/pygrub'
memory = ${RAM}
name = '${NAME}'
vif = [ 'mac=${MAC}, bridge=eth0' ]          # replace with DomU's IP
dhcp = 'dhcp'
#netmask = '255.255.255.0'
#gateway = 'XXX'                        # Dom0
disk = [ 'phy:/dev/${XEN_VG}/${NAME},xvda1,w','phy:/dev/${XEN_VG}/${NAME}swap,xvda2,w' ]
EOF"


Paràmetres del nucli

Consulteu Linux_Kernel#Obtenir_la_configuraci.C3.B3_del_nucli_que_s.27est.C3.A0_executant

HVM

Algunes CPU contenen extensions que permeten virtualitzar sistemes per hardware. El nom de la extensió depèn del fabricant:

  • AMD: Les CPU que suporten HVM són les que tenen la extensió AMD-V (SVM).
  • Intel: La extensió s'anomena IntelVT (VMX).

per comprovar si una CPU AMD suporta virtualització:

$ cat /proc/cpuinfo | grep svm

Per a Intel:

$ cat /proc/cpuinfo | grep vmx

o:

$ egrep '(vmx|svm)' --color=always /proc/cpuinfo 

També podeu consultar dmesg:

$ xm dmesg | grep -i hvm

Quan es virtualitza una màquina virtual sense suport per HVM se l'anomena paravirtualització. Per entendre millor els tipus de virtualització podeu consultar:

http://www.vmware.com/files/pdf/VMware_paravirtualization.pdf

Recursos:

Exemple Xen amb HVM

Primer cal crear els fitxers imatge amb [dd]]:

$ dd if=/dev/zero of=/home/xen1.example.com.img bs=1024k count=4000

Això crea una imatge de 4GB. Ara el CD:

$ dd if=/dev/cdrom of=/home/ubuntu8_10_server_amd64.iso 

Ara el fitxer de configuració de Xen:

$ sudo joe /etc/xen/xen1.example.com.cfg
import os, re
arch = os.uname()[4]

kernel = "/usr/lib/xen-default/boot/hvmloader"

builder='hvm'  

memory = 512
shadow_memory = 8
name = "xen1.example.com"
vif = [ 'type=ioemu, bridge=eth0' ]
disk = [ 'file:/home/xen1.example.com.img,xvda,w', 'file:/home/ubuntu8_10_server_amd64.iso,xvdc:cdrom,r' ]
#disk = [ 'file:/home/xen1.example.com.img,xvda,w', 'phy:/dev/cdrom,xvdc:cdrom,r' ]
device_model = '/usr/lib/xen-default/bin/qemu-dm'
# boot on floppy (a), hard disk (c) or CD-ROM (d)
# default: hard disk, cd-rom, floppy
boot="dc"

L'opció

boot="dc" 

Fa que la màquina virtual s'executi primer el CD i després el disc dur.

sdl=0 vnc=1 vnclisten="0.0.0.0" vncconsole=1 vncpasswd='howtoforge' stdvga=0 serial='pty' usbdevice='tablet'

on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'

Resolució de problemes. Troubleshooting

No funciona upstart (initctl)

Consulteu dpkg-divert.

xvc0, pygrub i fsck. La màquina domU sembla que es queda fregida al iniciar el sistema

Si us fixeu al posar console=xvco només mostra els missatges del nucli al arrancar. el grub de la màquina virtual és:

title           Ubuntu 9.10, kernel 2.6.31-14-server
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.31-14-server root=/dev/xvda1 ro console=xvc0
initrd          /boot/initrd.img-2.6.31-14-server 

Després d'executar el nucli s'inicia el ramdisk. Si durant la execució del ramdisk al intentar muntar el sistema de fitxers este té errors de fsck aleshores s'aturarà amb el missatge:

Premeu Ctrl+D per continuar o poseu paraula de pas de root per a fer el manteniment...

El problema és que amb xvc0 aquest missatge no es mostra (ni cap després del kernel excepte el login!). Al treure xvc0 ja surt el missatge i podem recuperar el sistema introduint la paraula de pas de root i:

# fsck

Configuracions de les domU

Error: Device 0 (vif) could not be connected. Could not find bridge, and none was specified

Cal definir el bridge al fitxer /etc/xen/xend-config.sxp:

$ sudo cp xend-config.sxp xend-config.sxp.old
 
(xend-relocation-server no) 
(xend-relocation-hosts-allow ) 
(network-script 'network-bridge netdev=eth0') 
(vif-script vif-bridge) 
(dom0-min-mem 196) 
(dom0-cpus 0)  

---

o

(xend-unix-server yes)
(xend-relocation-server no)
(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
(network-script 'network-route netdev=eth0')
(vif-script     vif-route)
(dom0-min-mem 64)
(dom0-cpus 0)
NOTA: On posa eth0 cal posar la interfície de xarxa que correspongui!!

També cal tornar a iniciar xen:

$ sudo /etc/init.d/xend start
$ sudo /etc/init.d/xendomains start

Abans hi havia:

$ cat xend-config.sxp.old |  grep -v '#'
(network-script network-dummy)
(vif-script vif-bridge)
(dom0-min-mem 196)
(dom0-cpus 0)
(vncpasswd )

Configurar la hora del sistema

Cal instal·lar el paquet tzdata

$ sudo apt-get install tzdata
$ sudo dpkg-reconfigure tzdata

BUG: soft lockup - CPU#0 stuck for xs

Sembla que succeïx amb els kernel domU d'Ubuntu.

Alternatives que es proposen i que no he provat:

Instal·lar el Kernel de Debian:

echo "deb http://ftp.br.debian.org/debian lenny main" >> /etc/apt/sources.list
aptitude update
aptitude install linux-image-2.6.26-2-xen-686

Canviar el paràmetre vcpus de 2 a 1.

Recursos:

xc_dom_find_loader: no loader found

$ sudo xm create /etc/xen/prova.iescopernic.com.cfg
Using config file "/etc/xen/prova.iescopernic.com.cfg".
Error: (2, 'Invalid kernel', 'xc_dom_find_loader: no loader found\n')

Aquest error indicar que el kernel no és xen-aware.

Recursos

Xen en màquines domU es penja després de "Running local boot scripts (/etc/rc.local)"

Solució 1:

Sembla que hi ha un error a 30-disable-gettys de xen-tools i que no es crea la terminal xvc0.

La solució, afegir un fitxer xvc0 similar al tty1 a upstart (dins la màquina domU):

$ sudo mount -t ext3 /dev/xenvg/acacha /mnt
$ cd /mnt/etc/event.d/
$ sudo cp tty1 xvc0
$ sudo joe xvc0 

I canvieu a la última línia tty1 per xvc0

Recursos:

Solució 2:

Si quan executeu una màquina virtual, per exemple amb create i la opció -c:

$ sudo xm create -c /etc/xen/cs2.iescopernic.com.cfg
NOTA: La opció -c crea la imatge i tot seguit la mostra per la terminal en que hem executat la comanda.

La màquina es penja a:

...
Running local boot scripts (/etc/rc.local)

Cal afegir la línia:

extra='xencons=tty1'

Al fitxer de configuració de la màquina virtual. Per exemple

$ sudo joe 
...
#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

extra = '2 console=xvc0'
extra='xencons=tty1'

Un altre símptoma pot ser no poder accedir a la màquina amb la comanda console:

$ sudo xm console cs2.iescopernic.com

Recursos:

Kernel i fitxer initrd de la màquina domU

A Ubuntu, cal tenir en compte que no és recomanable utilitzar el kernel de xen de la màquina host (dom0) sinó que cal utilitzar un kernel (i un fitxer initrd adequats).

Per exemple, amb una Ubuntu Server com a Host (dom0) amb un kernel de Xen:

$ uname -r
2.6.24-23-xen

Si volem que aquest host (dom0) allotgi múltiples màquines virtuals (domU) Ubuntu Server, el kernel de les màquines virtuals ha de ser l'habitual de Ubuntu i no el kernel Xen.

Val la pena modificar el fitxer /etc/xen-tools/xen-tools.conf

$ sudo joe /etc/xen-tools/xen-tools.conf 

I canviar les opcions:

kernel      = /boot/vmlinuz-`uname -r`
initrd      = /boot/initrd.img-`uname -r`

Per el kernel que vulguem per a les màquines domU. Per exemple:

kernel      = /boot/vmlinuz-2.6.24-19-server
initrd      = /boot/initrd.img-2.6.24-19-server

Assegureu-vos que els fitxers estan a la carpeta boot. Si ja heu creat màquines virtuals amb la eina xen-tools, podeu modificar els paràmetres equivalents en els fitxers de configuració. Per exemple:

$ sudo joe /etc/xen/cs1.iescopernic.com.cfg
...
kernel      = '/boot/vmlinuz-2.6.24-19-server'
ramdisk     = '/boot/initrd.img-2.6.24-19-server'

Cal assegurar-se que la màquina virtual té aquest kernels instal·lats. Primer cal localitzar on està els disc dur de la màquina virtual per tal de poder muntar-lo:

$ cat /etc/xen/prova.iescopernic.com.cfg
...
root        = '/dev/xvda2 ro'
disk        = [
                 'phy:/dev/xen_vm/prova.iescopernic.com-swap,xvda1,w',
                 'phy:/dev/xen_vm/prova.iescopernic.com-disk,xvda2,w',
             ]

Ara el muntem amb:

$ cd
$ mkdir prova
$ sudo mount /dev/xen_vm/prova.iescopernic.com-disk prova

I copiem els kernels:

$ sudo cp /boot/vmlinuz-2.6.24-19-server /home/sergi/prova/boot
$ sudo cp /boot/initrd.img-2.6.24-19-server /home/sergi/prova/boot
$ sudo umount prova

Treure apparmor

Per què? Ho recomanen Aquí però no veig el per què...

$ sudo /etc/init.d/apparmor stop
$ sudo update-rc.d -f apparmor remove

ACPI

Si observeu errors durant el reinici de xarxa (errors relacionats amb irqpoll). No hi ha suport per a ACPI al kernel de Xen

Podeu consultar els possibles errors amb:

$ dmesg

Primer val la pena intentar desactivar les opcions ACPI i les opcions Plug'n'Play des de la BIOS.

Podeu afegir la opció acpi=off al fitxer /boot/grub/menu.list:

title           Xen 3.1 / Ubuntu 7.10, kernel 2.6.22-14-xen
root            (hd0,0)
kernel          /boot/xen-3.1.gz
module          /boot/vmlinuz-2.6.22-14-xen root=UUID=your-uuid-here ro console=tty0 acpi=off
module          /boot/initrd.img-2.6.22-14-xen

Dual Core CPU

Si teniu 2 cpus al vostre processador afegiu la línia:

vcpus       = '2'

Al fitxer de la vostra màquina virtual (per exemple /etc/xen/xen1.example.com.cfg):

$ sudo joe /etc/xen/xen1.example.com.cfg

# Configuration file for the Xen instance xen1.example.com, created
# by xen-tools 3.8 on Mon May  5 16:49:32 2008.
#
#
#  Kernel + memory size
#
kernel      = '/boot/vmlinuz-2.6.24-16-xen'
ramdisk     = '/boot/initrd.img-2.6.24-16-xen'
memory      = '64'
vcpus       = '2'
[...]

Executeu:

# cat /proc/cpuinfo

A la màquina virtual per comprovar que utilitza les dos CPU.

Copiar kernel domU a màquina virtual

Primer cal muntar la imatge.

Si la imatge no és amb LVM:

$ sudo mount -o loop /home/xen/domains/xen1.example.com/disk.img /mnt/xen1.example.com

Si és amb LVM:

$ sudo mount /dev/xen_vm/cs1.iescopernic.com-disk /mnt/cs1.iescopernic.com/


cd /mnt/lib/modules/
cp -pfr /lib/modules/2.6.27-11-server/ .
cd
umount /mnt

undefined reference to `__udivdi3' al compilar el kernel

Segons:

http://www.howtoforge.com/installing-xen-3.3-with-kernel-2.6.27-on-ubuntu-8.10-x86_64
you need to use older (e.g. gcc-4.2) 
if it is possible dont use Ubuntu 8.10 as system where you would be compile xen kernel 

Ubuntu 8.10 utilitza gcc-4.3. Per instal·lar gcc-4.2

$ sudo apt-get install gcc-4.2
$ ls -la /usr/bin/gcc
$ sudo rm -rf /usr/bin/gcc
$ sudo ln -s /usr/bin/gcc-4.2 /usr/bin/gcc
$ ls -la /usr/bin/gcc

I ara compileu. Un cop acabat torneu a refer gcc:

$ sudo rm -rf /usr/bin/gcc
$ sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
$ ls -la /usr/bin/gcc


Xen s'atura durant l'arrancada del md0 (Xen is relinquishing VGA Console)

The emulation is slow. To ensure full performance you should install a 'xen-friendly' ...

Si durant el boot del servidor Xen u surt un missatge com:

 ***************************************************************
 ***************************************************************
 ** WARNING: Currently emulating unsupported memory accesses  **
 **          in /lib/tls glibc libraries. The emulation is    **
 **          slow. To ensure full performance you should      **
 **          install a 'xen-friendly' (nosegneg) version of   **
 **          the library, or disable tls support by executing **
 **          the following as root:                           **
 **          mv /lib/tls /lib/tls.disabled                    **
 ** Offending process: slapd (pid=2477)                       **
 ***************************************************************
 ***************************************************************

Cal executar:

$ sudo mv /lib/tls /lib/tls.disabled

Please select one and only one of the installation methods:

Si us surt l'error (per exemple utilitzar xen-delete-images):

Please select one and only one of the installation methods:
--dir
--evms
--lvm

Verifique que al fitxer de configuració /etc/xen-tools/xen-tools.conf no tingueu més una línia dir i una línia lvm. Les opcions dir, evms i lvm són excluients.

Afegir la distro intrepid

$ sudo ln -s /usr/lib/xen-tools/hardy.d /usr/lib/xen-tools/intrepid.d

i

$ sudo ln -s /usr/share/debootstrap/scripts/hoary /usr/share/debootstrap/scripts/intrepid

I al fitxer /etc/xen-tools/xen-tools.conf, afegim com a dist intrepid:

$ sudo joe /etc/xen-tools/xen-tools.conf

dist   = intrepid     # Default distribution to install.

Xen i NTP

Cal tenir en compte que el temps el marca la màquina host. És a dir, per molt que utilitzem eines per a NTP a les màquines virtual Xen, la hora no es canviarà i sempre es mantindrà la hora de la màquina host. Per aquesta raó és molt important tenir la hora correctament a la màquina host.

Enllaços externs

OpenFPnet
IES Nicolau Copèrnic