Xen kasutamine Debian Etchiga

Allikas: Kuutõrvaja
(Ümber suunatud leheküljelt Virtualiseerimine tarkvaraga Xen)


Xen tarkvara paigaldamine

Kaasaegsete Linuxi distributsioonide paketihaldusest on reeglina võimalik Xen tarkvara paigaldada. Nt Debian GNU/Linux v 4.0 puhul i386 arhitektuuri jaoks tuleb paigaldada paketid

  • Xen hypervisor - xen-hypervisor-3.0.3-1-i386-pae
  • Xen tuum - linux-image-2.6-xen-686 (on vaikimisi samuti pae toega)
  • Xen programmid jms - libc6-xen xen-docs-3.0 xen-tools xen-utils-3.0.3-1 xen-utils-common bridge-utils

Peale tarkvara paigaldamist tuleb arvuti bootida kasutades hypervisorit ning Xeni tuuma, selleks sobib kasutada nt sellise sisuga GRUB menüü faili menu.lst

 default     0
 timeout     15
 color cyan/blue white/blue
 
 title xen
 root (hd0,1)
 kernel /boot/xen-3.0.3-1-i386-pae.gz dom0_mem=393216
 module /boot/vmlinuz-2.6.18-6-xen-686 root=/dev/hda2 ro max_loop=255
 module /boot/initrd.img-2.6.18-6-xen-686
 savedefault
 boot

Pange tähele, et privilegeerimata domeeni tuum paikneb väljaspoole privilegeerimata domeeni failisüsteemi ning see asjaolu on iseloomulik paravirtualiseerimisele. Lisaks on piiratud dom0 mälu mahuga 384 MB. Tõsi, on olemas py-grub initsiatiiv, mis võimaldab kasutada domU'ga domU sees paiknevat tuuma.

Peale bootimist saab küsida hüpervisori dmesg'i käsuga

 bash# xm dmesg

Xen tarkvara seadistamine

Xen'i tarkvara koosneb kahest osast

  • dom0 sees töötab serveri pool, mida kontrollib seadistusfail /etc/xen/xend-config.sxp
  • Iga domU omadused on kirjas vastava domU seadistusfaili sees, /etc/xen/domU-nimi.cfg

Kuigi xend-config.sxp failis tehtud muudatuste kehtestamiseks tihti piisab xend doeemoni peatamisest ja startimisest

 bash# /etc/init.d/xend stop|start

osutub, et vahel on kõige otsekohesem segaduste vältimiseks peale selle faili muutmist arvuti alglaadida. Pealegi, xend-config.sxp failis tehakse vajalikud muudatused Xeni juurutamise ajal ära ning edaspidi muudetakse seda Xeni kasutamise ajal harva. xend-config.sxp faili muutmise teel saab teha järgmisi otsustusi

  • millises režiimis töötab domU'de võrk (bridge, routing, nat)
  • kui palju on dom0 sees kasutusel protsessoreid, soovitav on valida üks (dom0-cpus 1)
  • kui palju mälu on tagatud dom0 jaoks, soovitav 196 MB (dom0-min-mem 196)

Xen võimaldab kasutada domU'sid võrgu mõttes kolmel erineval moel, tavaliselt kasutatakse kõiki domU'sid samaagselt ühes ja samas režiimis

  • routing - dom0 on võrgu sõlmpunktiks iga domU ja dom0'ga samas subnetis olevate teiste arvutite vahel
  • nat - dom0 on võrgu sõlmpunktiks iga domU ja dom0'ga samas subnetis olevate teiste arvutite vahel kusjuures, dom0 teeb NAT teisendusi domU'de jaoks
  • bridge - dom0 ja kõik domU'de võrguseadmed asuvad ühes ja samas võrgus etherneti mõttes, kasutatakse sama ip subneti aadresse

Järgnevates punktides käsitletakse eraldi domU'le vastava seadistusfaili kõiki muid omadusi ning kuidas seadistada käima erinevaid võrgus töötamise režiime, alustuseks võiks Debian GNU/Linux 4.0 puhul vaadata üle mainitud dom0-cpus ja dom0-min-mem parameetrite väärtused ning dom0 operatsioonisüsteem alglaadida.

Xen domU moodustamine

Igale domU operatsioonisüsteemi eksemplarile vastab üks või mitu image faili (või partitsiooni või LVM volume'i) dom0 failisüsteemis. Debian Etch sisaldab paketti xen-tools, mis hõlbustab Guest domeenide immidza tekitamist. Koostage nt selline seadistusfail /etc/xen-tools/xen-tools.conf

dir = /data
debootstrap = 1
size   = 4Gb      # Disk image size.
memory = 512Mb    # Memory size
swap   = 1024Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = etch    # Default distribution to install.
image  = full   # Specify sparse vs. full disk images.
passwd = 1
kernel = /boot/vmlinuz-2.6.18-6-xen-686
mirror = http://ftp.aso.ee/debian/

ning öelge

bash# xen-create-image --hostname=xen.loomaaed.tartu.ee --ip=172.16.92.2 \
--gateway=172.16.92.128 --netmask=255.255.255.0

Tulemusena moodustatakse domU seadistusfail

/etc/xen/xen.loomaaed.tartu.ee.cfg

ning juurfailisüseemi ja saaleala tõmmised kataloogi /data/domains/xen.loomaaed.tartu.ee

/data/domains/xen.loomaaed.tartu.ee/disk.img
/data/domains/xen.loomaaed.tartu.ee/swap.img

Parameetri dir asemel saab kasutada parameetrit lvm, nt 'lvm=data_xen' puhul oleks moodustatud vastavad LVM voluumid gruppi data_xen

 /dev/data_xen/xen.loomaaed.tartu.ee-swap
 /dev/data_xen/xen.loomaaed.tartu.ee-disk

Seadistusfaili võiks kohendada ülevaatlikuse mõttes nt selliseks

 name    = 'xen.loomaaed.tartu.ee'
 kernel  = '/boot/vmlinuz-2.6.18-6-xen-i386'
 ramdisk = '/boot/initrd.img-2.6.18-6-xen-i386'
 root    = '/dev/sda1 ro'
 memory  = '1024'
 disk    = [ 'file:/data/domains/xen.loomaaed.tartu.ee/disk.img,sda1,w',
             'file:/data/domains/xen.loomaaed.tartu.ee/swap.img,sda2,w' ]
 vif  = [ 'mac=00:16:3E:2C:7E:EF' ]
 vcpus="1"

Toodud domU seadistamiseks kasutatud parameetrid on isenesest mõistetava tähendusega, kõikvõimalike parameetrite loetelu saab küsida käsuga

 bash# xm create --help_config

domU sisse peab olema samuti paigaldatud libc6-xen teek.

domU'de arvu suurenemisel lihtsustab süsteemi haldamist kui mac aadressid on tekitatud mingi süsteemi alusel, näiteks võiks kasutada sarnast skeemi kümend süsteemist kuueteistkümned süsteemi teisendamisel

  • ip aadress 192.168.2.13 - 70:01:68:00:20:13 ehk kasutades sulge 70:0(1:68):(00:2)(0:13)

domU käivitamine ja seiskamine

Jättes esialgu pööramata tähelepanu võrguseadistustele ja kommenteerides vif parameetri domU seadistusfailist välja veendume, et domU on kasutatav st teda saab käivitada, konsoolilt sisse logida ning seisata.

domU käivitamine koos konsooli kasutamisega toimub selliselt, -c võti tähendab, et samale terminalile kus käsk anti esitatakse domU konsool

 bash# xm create -c /etc/xen/xen.loomaaed.tartu.ee.cfg

Peale domU käivitamist võib sisse logida kas konsooli kaudu või üle võrgu kui võrk oleks seadistatud. Konsoolilt pääseb välja Ctrl + ] kombinatsiooni abil ning konsooli tagasi käsuga

 bash# xm cosole xen.loomaaed.tartu.ee

domU seiskamiseks on käsk

 bash# xm shutdown xen.loomaaed.tartu.ee

Töötavate domeenide nimekirja näeb käsuga

 bash# xm list

Xen domU'le vastavaid failisüsteeme saab dom0 all hõlpsasti külge ühendada ja kasutada, kusjuures vastav domU ei tohi samal ajal töötada

 bash# mount -o loop /data/domains/xen.loomaaed.tartu.ee/disk.img /mnt

Võrgu kasutamine domU seest routing režiimis

Võrku seoses Xeniga tuleks ette kujutada selliselt, et dom0 ja domU on kokku ühendatud ühe virtuaalse ristikaabliga. Kui on mitu domU'd, siis dom0'ist läheb igasse domU'sse eraldi kaabel. Selle kaabli nö Xeni poolne ots on ühendatud näiteks vif12.0 nimelise seadmega ning domU poolne ots vastab domU sees seadmele eth0. 12 tähendab, et kõnealuse domU Xeni ID on 12 (nö 'xm list' järgi) ning 0 tähendab, et tegu on selle domeeni esimese võrguseadmega ehk ristikaabliga (üldiselt võib dom0 ja domU vahel olla ka enam kui üks virtuaalne ristikaabel). vif seadmed tekitavad routing režhiimis domU käivitamisel automaatselt ja seiskamisel eemaldatakse automaatselt. Sama domU järjekordsel käivitamisel seadme nimi muutub suuremaks, vastavalt selle domU Xeni ID väärtusele.

Routing režiimis kasutab domU ise eraldi subneti ip aadressi ning andmevahetust domU ja muu võrgu vahel vahendab dom0, mis käitub ruuterina. Sellise asjakorralduse tekitamiseks peab xend-config.sxp failis olema kaks rida

 (network-script network-route)
 (vif-script     vif-route)

ja välja kommenteeritud read

 # (network-script network-bridge)
 # (vif-script vif-bridge)
 ...
 # (network-script network-nat)
 # (vif-script     vif-nat)

Peale nende seadistusfailide ülevaatamist ning xend serveri restarti peaks olema näha selline võrguseade dom0 ifconfig käsu väljundis (sobiv ip aadress ja võrgumask on ifconfig abil nö käsitsi omistatud)

 vif12.0   Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet addr:192.168.17.254  Bcast:192.168.17.255  Mask:255.255.255.0
           ..

ning domU sees seade (sobiv ip aadress ja võrgumask on samuti ifconfig abil käsitsi omistatud, kusjuures vaikelüüsiks on 192.168.17.254)

 eth0      Link encap:Ethernet  HWaddr 00:16:3E:21:4F:83  
           inet addr:192.168.17.1  Bcast:192.168.17.255  Mask:255.255.255.0
           ..

Kui kasutada mitut domU'i routing režiimis, siis iga üks peab kasutab oma ja teistest erinevat ip subnetti.

Töötava domU võrguseadmete kohta saab küsida öeldes

 # xm network-list domU-nimi
 Idx BE     MAC Addr.     handle state evt-ch tx-/rx-ring-ref BE-path
 0   0      00:16:3E:21:4F:83  0     4      10    768  /769     /local/domain/0/backend/vif/2/0

Võrgu kasutamine domU seest nat režiimis

NAT režiimi on sarnane routingule kuid lisaks sooritab dom0 NAT teisendusi sellel võrguseadmel, kust liiklus füüsilisest arvutist väljub. Sellise asjakorralduse tekitamiseks peab xend-config.sxp failis olema kaks rida

 (network-script network-nat)
 (vif-script     vif-nat)

ja välja kommenteeritud read

 # (network-script network-bridge)
 # (vif-script vif-bridge)
 ...
 # (network-script network-route)
 # (vif-script     vif-route)

Peale nende seadistusfailide ülevaatamist ning xend serveri restarti peaks olema dom0 ifconfig käsu väljund sarnane routing režiimile ning lisaks on dom0 peal näha NAT teisendus

 bash# iptables -L -n -v -t nat
 ...
 Chain POSTROUTING (policy ACCEPT 15 packets, 1213 bytes)
  pkts bytes target     prot opt in     out     source               destination         
   32   2684 MASQUERADE  0    --  *      eth0    0.0.0.0/0            0.0.0.0/0

Vajadusel saab sobivat NAT teisendust ise kohendada

 bash# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Võrgu kasutamine domU seest bridge režiimis

Bridge režiimis asuvad domU ja dom0 võrguseadmed sama virtuaalse silla küljes ning kasutavad sama alamvõrgu ip aadresse st domU'idest saab nö otse võrku ja dom0 ruutimisega ei tegele.

Ühe võrgukaardi bridge puhul peavad Xen serveri tarkvara seadistusfailis olema read

 (network-script network-bridge)
 (vif-script vif-bridge)

ja välja kommenteeritud read

 # (network-script network-route)
 # (vif-script     vif-route)
 ...
 # (network-script network-nat)
 # (vif-script     vif-nat)

ning domU seadistusfailis olema rida

vif = ['bridge=xenbr0']

Peale nende seadistusfailide ülevaatamist ning xend serveri restarti peaks olema näha sellised võrguseadmed ifconfig käsu väljundis

 bash# ifconfig
 ...
 eth0      Link encap:Ethernet  HWaddr 00:1C:C4:79:CC:EE  
           inet addr:10.0.7.107  Bcast:10.0.7.255  Mask:255.255.255.0
 
 peth0     Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
 
 vif0.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
 
 xenbr0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link

Kusjuures, bridge režhiimis asub võrgu mõttes dom0 sarnases positsioonis koos domU'dega

  • eth0 - dom0 virtuaalne võrguseade
  • peth0 - arvuti esimene füüsiline võrgukaart, ip aadress puudub aga liiklus käib läbi
  • vif0.0 - dom0 virtuaalsele võrguseadmele vastav Xeni poolne virtuaalne interface
  • xenbr0 - virtuaalne bridge

Käsk brctl näitab, et virtuaalse bridge kaudu on ühendatud dom0 virtuaalne infterface (ja selle kaudu dom0 eth0 seade) ning arvuti esimene füüsiline võrgukaart

 bash# brctl show
 bridge name     bridge id               STP enabled     interfaces
 xenbr0          8000.feffffffffff       no              vif0.0
                                                         peth0

Kui käivitada domU siis tekib Xeni ifconfig nimekirja juurde seade, ip aadress puudub, aga domU liiklus käib läbi kuna tegu on dom0 ja domU virtuaalse ristikaabli Xeni poolse otsaga

 vif17.0   Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link

Ja see seade on silla külge ühendatud

 bash# brctl show
 bridge name     bridge id               STP enabled     interfaces
 xenbr0          8000.feffffffffff       no              vif0.0
                                                         peth0
                                                         vif17.0

Võrgu kasutamine domU seest bridge režiimis mitme võrguseadmega

Võimalik on ka selline asjakorraldus, et ühe domU sees on mitu võrguseadet, nt eth0 ja eth1 ning kumbki suhtleb kaugema ümbrusega läbi erinevate füüsiliste võrgukaartide. Selleks tekitada üks skript, nt nimega /etc/xen/scripts/kaks-silda.sh ja sisuga

#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=xenbr0
"$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=xenbr1

Lisaks tuleb seadistusfailis /etc/xen/xend-config.sxp kasutada parameetri network-script parameetrit selle skriptiga

(network-script kaks-silda.sh)

Peale xend restarti kasutab nüüd Xen kahte virtuaalselt silda (ingl. k. bridge)

bash # brctl show
bridge name     bridge id               STP enabled     interfaces
xenbr0          8000.feffffffffff       no              vif0.0
                                                        peth0
                                                        vif18.0
xenbr1          8000.feffffffffff       no              vif0.1
                                                        peth1
                                                        vif18.1

Lisaks tuleb domU seadistusfailis parameetri vif juures näidata ära mõlemad sillad

 vif = [ 'bridge=xenbr0','bridge=xenbr1' ]

Tulemusena tekib vastava domU sisse kaks võrguseadet, eth0 ja eth1 ning sobivate aadresside ning ruutingu kasutamisel saab nende kaudu pöörduda vastavatesse võrkudesse, kusjuures liiklus käib läbi erinevate füüsiliste võrgukaartide.

Võrgu kasutamine domU seest bridge režiimis mitme võrguseadmega, dom0 kasutab 8021q (vlan) seadmeid

Seadistuste tegemise mõttes ei ole suur vahet, kas arvutis kasutatakse füüsilisi võrgukaarte või 8021q virtuaalseid seadmeid. Näiteks olgu dom0 sees kasutada virtuaalsed seadmed eth0.411 ja eth0.412 seoses teenuste pakkumisega ning eth1 Xeni halduseks.


Xen skriptidega

Sel juhul võiks kasutada network-bridge asemel sellist network-bridge-custom skripti /etc/xen/xend-config.sxp failis network-script parameetriga

 #!/bin/bash
 ip link set dev eth0 up
 vconfig set_name_type DEV_PLUS_VID_NO_PAD
 vconfig add eth0 411
 vconfig add eth0 412
 dir=$(dirname "$0")
 "$dir/network-bridge" "$@" netdev=eth0.411 vifnum=0 bridge=xenbr411
 "$dir/network-bridge" "$@" netdev=eth0.412 vifnum=1 bridge=xenbr412

Tulemusena esinevad dom0 juures seadmed

 peth0.411 Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
 ...
 peth0.412 Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link

ning sillad

 bash# brctl show
 bridge name     bridge id               STP enabled           interfaces
 xenbr411                8000.feffffffffff       no              vif0.0
                                                                 peth0.411
                                                                 vif1.0
 xenbr412                8000.feffffffffff       no              vif0.1
                                                                 peth0.412
                                                                 vif1.1

ning domU sees on näha tavapärasel moel eth0 ja eth1 seadmed.


/etc/network/interfaces skriptiga

Selle eelis on see, et saab kasutada /etc/init.d/networking skripti, samuti ifup ja ifdown käske.

network-bridge asemele network-dummy nimeline tühi fail.

 #!/bin/bash
 #

xend-config.sxp sisse

 (network-script network-dummy)

/etc/network/interfaces

 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
 
 # The loopback network interface
 auto lo eth0 eth0.411 eth0.412 xenbr411 xenbr412
 iface lo inet loopback
 
 allow-hotplug eth0 eth0.411 eth0.412
 
 # The primary network interface
 iface eth0 inet static
 
 #vconfig set_name_type DEV_PLUS_VID tehakse automaatselt
 #vlan id 411 võrgu puhul siis
 #vconfig add eth0 411
 iface eth0.411 inet static
         #mtu 1500
         mtu 1492
         vlan_raw_device eth0
 
 iface eth0.412 inet static
         #mtu 1500
         mtu 1492
         vlan_raw_device eth0
 
 iface xenbr411 inet static
         bridge_ports    eth0
         bridge_stp off
         address 192.168.0.x
         netmask 255.255.255.0
         network 192.168.0.0
         broadcast 192.168.0.255
         gateway 192.168.0.x
         # dns-* options are implemented by the resolvconf package, if installed
         dns-nameservers x.x.x.x
 
 iface xenbr412 inet static
         bridge_ports    eth0
         bridge_stp off
 

xenbr411 on näiteks toodud IP aadressiga

Nn host-only võrgu kasutamine

Kui guestid peavad saama ainult omavahel üle võrgu suhelda, siis sobib kasutada vastava host'i võrguseadmena dummy seadet. Muus osas toimub seadistuste tegemine sarnaselt füüsilise seadmega. Mitme dummy seadme tekitamiseks tuleb öelda host'is näiteks

 # modprobe dummy numdummies=5

Full virtualization

Kui kasutada olev riistavara on AMD-V või Intel VT toega, siis on võimalik kasutada Xeni ka 'full virtualization' rezhiimis. Kontrollimiseks soovitatakse vaadata dom0 peal kas käsk väljastab midagi või mitte, kui väljastab, siis on full virtualizationi jaoks tugi olemas

bash# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Näiteks kaasneb full virtualizationiga võimalus kasutada domU (mida antud juhul nimetatakse HVM - hardware virtual machine) sees modifitseerimata operatsioonisüsteemi. Kasutamiseks tuleb paigaldada pakett

xen-ioemu-3.0.3-1

Üldiselt on asjatoimetused sarnased kui paravirtualiseerimise puhul, domU seadistusfailiks sobib nt sellise sisuga fail, antud juhul toimub Debian GNU/Linux operatsioonisüsteemi paigaldusmeedialt bootimine, millele võiks järgneda install varem dd käsuga moodustatud disk image'le

kernel = "/usr/lib/xen-3.0.3-1/boot/hvmloader"
builder = 'hvm'
device_model = '/usr/lib/xen-3.0.3-1/bin/qemu-dm'
memory  = '2048'
vcpus = '1'
name='full-virt'
vif = [ 'mac=00:16:3E:3A:8E:7A, type=ioemu, bridge=xenbr2' ]
disk = [ 'file:/data/zones/domains/full-virt/disk.img,ioemu:hda,w',
         'file:/data/images/debian-40r0-i386-CD-1.iso,hdc:cdrom,r' ]
boot='d'
vnc=1

Lisaks peab olema näidatud vnc kasutamine ka Xeni seadistusfailis /etc/xen/xend-config.sxp

# The interface for VNC servers to listen on. Defaults
# to 127.0.0.1  To restore old 'listen everywhere' behaviour
# set this to 0.0.0.0
(vnc-listen '127.0.0.1')

Peale selliste seadistuste tegemist ning domU bootimist saab ühenduda vnc kliendiga (nt vncviewer) porti 5900 ning suhelda domU konsooliga. Seda võiks praktiliselt teha ssh abil porte sobivalt suunates. Peale operatsioonisüsteemi paigaldamist tuleks asendada boot parameetri väärtuseks 'c' ning bootida vastselt paigaldatud süsteem.

Konsool võiks X keskkonnas välja näha selline

Xen-hvm-console.gif

PV domU juurfailisüsteemi ühendamine üle NFS'i

domU saab bootida nn root-over-nfs (ingl. k. juurfailisüsteem-üle-nfs'i) viisil, sobib hästi katsetusteks ning erijuhtudeks. Selleks sobib kasutada nt sellist domU seadistusfaili, arusaadavalt peab NFS server olema ettevalmistatud

 name="nfs"
 kernel="/boot/vmlinuz-2.6.18-6-xen-686"
 ramdisk="/boot/initrd.img-2.6.18-6-xen-686"
 root="/dev/sda1"
 memory=64
 
 nfs_server = '192.168.10.251'
 nfs_root   = '/data/nfsroot_xen'
 root       = '/dev/nfs'
 
 vif = ['mac=00:16:3e:6a:0c:49,bridge=xenbr0']

Tundub, et igal juhul Debian Etch Xen tarkvara küsib sellisel juhul domU ip aadressi dchp serverilt.

HVM domU juurfailisüsteemi ühendamine üle NFS'i

HVM domU saab bootida üle PXE kui muus osas tavalises HVM seadistusfailis kasutada PXE-võimelist võrgukaardi mudelit, nt rtl8139 ning boot parameetri väärtuseks näidata 'n'.

Näiteks sellel pildid on toodud HVM domU peal OpenBSD bootimine üle PXE

Xen-hvm-pxe.gif

RedHat Enterprise Linux 5 Xen'i kasutamine

Kui dom0 operatsioonisüsteemi paigaldamisel valida virtualiseerimise tugi, siis vastne süsteem seadistataksegi kasutama Xeni hypervisorit. Edasi tuleb programmi virt-install abil paigaldada domU

dom0# virt-install 
What is the name of your virtual machine? domU-1
 How much RAM should be allocated (in megabytes)? 3072
 What would you like to use as the disk (path)? /data/domains/domU-1/os.img
 How large would you like the disk (/data/domains/domU-1/os.img) to be (in gigabytes)? 20
 Would you like to enable graphics support? (yes or no) no 
 What is the install location? nfs:nfs.tartu.loomaaed.ee:/data/install/rh

Kusjuures kataloogis /data/install/rh peab asuma domU's tööle hakkava nt RedHat 4 AS Linuxi esimese CD sisu kuhu on kataloogi RedHat/RPMS kopeeritud juurde kõigi ülejäänud CD'de sama kataloogi sisu.

RedHati Xeni erineb Debiani omast sellevõrra, et domU asub ühel seadme immidzal (os.img), mille sees on failisüsteemidele vastavad partitsioonid. Lisaks kasutatakse pygrub bootloaderit domU käivitamisel.

domU kettafaili suurendamine

Selleks, et suurendada failisüsteemi mahtu, näiteks 5G, käivita alltoodud käsud.

NB!! Kui failis on mitu partitsiooni, ei tohi kahte viimast käsku anda, vaid tuleks tekkinud vabale ruumile uus partitsioon tekitada.

# dd if=/dev/zero of=fc4.img bs=1M count=0 seek=5120
# e2fsck -f -y fc4.img
# resize2fs -p fc4.img

Debian Lenny tuuma kasutamine domU tuumana

Debian Lenny sisaldab osaliselt Xeni toetust, mis tähendab seda, et Lenny Xen tuum ei sobi kasutada dom0 jaoks küll aga domU jaoks; dom0 töötaks sel juhul Debian Etch tuumaga. Sellisel puhul tuleb domU seadistusfailis teha kolm muudatust

  • root parameetri väärtus peab olema nt '/dev/sda1' asemel kujul '/dev/xvda1'
  • konsooliks tuleb öelda extra parameetri abil hvc (hypervisor virtual console) seade, extra="console=hvc0"
  • lisada faili /etc/inittab rida selleks, et domU konsoolilt sisse logida saaks (lisaks peab co olema kirjas ka /etc/securetty failis)
 co:2345:respawn:/sbin/getty hvc0 9600 vt100-nav

Need muudatused on seotud Linuxi tuuma lisatud Xeni toega, täpsemalt paravirt_ops'sidega, http://wiki.xensource.com/xenwiki/XenParavirtOps.

Lisaks tuleb domU sees kasutada Lenny Xen tuuma moodulite paketti.

Windows XP HVM domU kasutamine Ubuntu Hardy (v. 8.04) amd64 dom0 all

Ubuntu Hardy sisaldab Xen 3.2 versiooni ja seoses sellega on mõned erisused. Näiteks riistvaraline virtualiseerimine toimub Windows XP operatsioonisüsteemi jaoks sellise domU seadistusfailiga

 kernel = '/usr/lib/xen/boot/hvmloader'
 device_model = "/usr/lib/xen/bin/qemu-dm"
 builder = 'hvm'
 memory  = '512'
 disk    = [ 'phy:/dev/data/xp,ioemu:hda,w', 'phy:/dev/loop0,ioemu:hdc:cdrom,r' ]
 name    = 'xp'
 vif  = [ 'mac=00:16:3e:00:00:01,bridge=eth0,model=ne2k_pci' ]
 
 cdrom="/dev/hdc"
 boot='c'  #d is cdrom boot, c is disk boot.
 vnc="1"
 vncviewer="1"
 sdl="0"
 vcpus=1
 pae=0
 acpi=0
 apic=0
 on_poweroff = 'destroy'
 on_reboot   = 'destroy'
 on_crash    = 'destroy'
  • Esmakordselt alglaadimisel, st CD seadmelt bootimiseks tuleb boot parameetrina väärtusena kasutada 'd'.
  • CD seadme tõmmis on eelnevalt dom0 sees ühendatud külge selliselt
 # losetup /dev/loop0 /home/install/winxp.iso
  • HVM domU käivitamiseks tuleb öelda, st tingimata ilma -c võtmeta
 # xm create /etc/xen/xp.cfg
  • VNC ja SDL vahel valimiseks tuleb vastavalt vnc ja vncviewer paari või sdl väärtuseks näidata '1'.
  • Praktiliseks kasutamiseks on ehk kõige mugavam käivitada Windowsi seest Remote Desktop ligipääs ning pöörduda öeldes
 $ rdesktop 192.168.10.41 -g 1200x1024 -u xp_kasutajanimi -p xp_parool -k et

Xen-xp-hvm.gif

Ubuntu Hardy 3.2 Xenile on iseloomulik, et seal nimetatakse sillad traditsiooniliste võrgukaartide nimedega, eth0, eth1 jne. Samuti, kui kasutada vlan seadmeid, siis nimetatakse neile vastavad sillad traditsiooniliselt eth2.2, eth2.3 jne.

NetBSD-HEAD (200808300002Z) PV domU kasutamine Ubuntu Hardy (v. 8.0.4) amd64 dom0 all

NetBSD järgmise versiooni jaoks paistab olevat paravirtualiseeritud tuum, see asjaolu teeb NetBSD kasutamise Xen'i dom0 all loomulikumaks. Süsteemi paigaldamine toimub 2008 aasta suvel kasutades NetBSD-HEAD'i selliselt

 kernel = "/boot/netbsd-INSTALL_XEN3_DOMU"
 memory = 128
 name = "netbsd"
 disk = [ 'phy:/dev/data/netbsd,0x3,w' ]
 vif = ['mac=00:0C:6E:40:59:A3,bridge=eth0']
 root="xbd0"
 extra="console=hvc0"
  • Bootige domU installimiseks ja installeerige operatsioonisüsteem
 # xm create -c netbsd.cfg

OpenBSD v 4.4 HVM domU kasutamine Ubuntu Hardy (v. 8.0.4) amd64 dom0 all

2008 aasta sügisel jagatava OpenBSD kasutamiseks HVM domeenina sobib näiteks selline domU seadistusfail

 kernel = '/usr/lib/xen/boot/hvmloader'
 device_model = "/usr/lib/xen/bin/qemu-dm"
 builder = 'hvm'
 memory  = '512'
 disk    = [ 'phy:/dev/data/openbsd_44,ioemu:hda,w', 'phy:/dev/loop1,ioemu:hdc:cdrom,r' ]
 name    = 'openbsd_44'
 vif  = [ 'mac=00:16:3E:08:67:4D,bridge=eth0,model=ne2k_pci' ]
 
 cdrom="/dev/hdc"
 boot='c'  # d is cdrom boot, c is disk boot.
 vnc="1"
 vncviewer="1"
 sdl="0"
 vcpus=1
 pae=0
 acpi=0
 apic=0
 on_poweroff = 'destroy'
 on_reboot   = 'destroy'
 on_crash    = 'destroy'

Esialgesel bootimisel tuleb kasutada boot parameetri väärtusena d, et domU boodiks virtuaalselt DVD meedialt. /dev/loop1 on ühendatud DVD tõmmisega öeldes eelnevalt

 # losetup /dev/loop1 /home/install/install44.iso

OpenBSD HVM domU käivitamiseks tuleb öelda

 # xm create /etc/xen/openbsd-hvm.cfg

Ning ühenduda vnc kliendiga Xen poolt tekitatud VNC serveri külge.

Märkused:

  • IO üsna halb, mõni MBait/s
  • ilma pci passthru'ta võrguseadmed (ne) töötavad üsna halvasti, Base10T st 10 Mbit/s
  • võrgukaartide pci passthru ei tööta (domU ei boodi, annab vigu, ehk on tegu üldisema HVM passthru probleemiga)
  • OpenOSPFD (link state osa) tarkvara töötab tõenäoliselt poolikult kuna virtuaalsed võrguseadmed ei ole piisavalt virtuaalsed

domU sees töötavat OpenBSD saab praktiliselt kasutada tulemüürina, kasutaja peab ise otsustama selle lahenduse sobivuses, kuid tehniliselt on see võimalik.

Solaris Express (v 101) HVM domU kasutamine Ubuntu Hardy (v. 8.0.4) amd64 dom0 all

2008 aasta sügisel jagatava OpenSolarise popululaarse distributsiooni Solaris Express ehk Nevade versioon 101 (sol-nv-b101-x86-dvd.iso) kasutamiseks sobib näiteks selline domU seadistusfail

 kernel = '/usr/lib/xen/boot/hvmloader'
 device_model = "/usr/lib/xen/bin/qemu-dm"
 builder = 'hvm'
 memory  = '1024'
 disk    = [ 'phy:/dev/data/sol,ioemu:hda,w', 'phy:/dev/loop2,ioemu:hdc:cdrom,r' ]
 name    = 'sol'
 vif  = [ 'type=ioemu,mac=00:16:3e:00:15:01,bridge=eth0' ]
 cdrom="/dev/hda"
 #  Behaviour
 ne2000=0
 boot='c'  #d is cdrom boot, c is disk boot.
 vnc="1"
 vncviewer="1"
 sdl="0"
 vcpus=1
 pae=0
 acpi=0
 apic=0
 on_poweroff = 'destroy'
 on_reboot   = 'destroy'
 on_crash    = 'destroy'

Esialgesel bootimisel tuleb kasutada boot parameetri väärtusena d, et domU boodiks virtuaalselt DVD meedialt. /dev/loop2 on ühendatud DVD tõmmisega öeldes eelnevalt

 # losetup /dev/loop1 /home/install/sol-nv-b101-x86-dvd.iso

Solarise HVM domU käivitamiseks tuleb öelda

 # xm create /etc/xen/sol-hvm.cfg

Ning ühenduda vnc kliendiga Xen poolt tekitatud VNC serveri külge, sarnaselt Windows XP juhtumile, tulemusena näeb juba ettevalmistatud juhtumil värvilist pilti

Sol-domU.gif

Plokkseadme ühendamine töötava domU külge

Plokkseadme ühendamiseks dom0 seest töötava domU külge tuleb öelda dom0 sees

 # xm block-attach 62 phy:/dev/data/xmattachtest /dev/xvda5 w

kus 62 on kõnealuse domU ID ning domU sees

 # mount /dev/xvda5 /mnt

Lahtiühendamiseks tuleb domU sees failisüsteem lahti ühendada (või muu kasutus lõpetada) ning dom0 peal öelda

 # xm block-detach 62 /dev/xvda5

Võrguseadme ühendamine töötava domU külge

Võrguseadme ühendamiseks töötava domU külge tuleb öelda dom0 sees

 # xm network-attach 62 bridge=xenbr2

kus 62 on kõnealuse domU ID. Juurde ühendatud võrguseade paistab domU sees järgmise ethx seadmena.

Lahtiühendamiseks tuleb dom0 peal öelda

 # xm network-detach 62 2

Kus viimane arv 2 tähistab mitmenda võrguseadmega kõnealuses domU's tegeldakse.

PCI seadme kasutamine paravirtualiseeritud domU seest

Selleks, et paravirtualiseeritud domU seest saaks kontrollida füüsilise PCI seadme tööd, tuleb kõnealune PCI seade kirjeldada domU sees kasutuses olevaks

  • seade tuleb dom0 juurest vabastada
  • seade tuleb domU'le edasi anda

Konkreetselt kirjeldab järgnevalt esitatud näide, kuidas kõik USB seadmed teha kättesaadavaks domU'le eesmärgiga kasutada Eesti ID kaarti selle domU seest.

dom0 juurest seadme vabastamine

Esmalt tuleb teha kindalt seadme PCI identifikaatorid, nt vabastame USB seadmed

 # lspci | grep -i usb
 00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
 00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02)
 00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02)
 00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02)
 00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
 00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02)
 00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02)
 00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02)

Identifikaatorite väärtused on 0000:00:1a.0, 0000:00:1a.1 jne.

Üks võimalus vabastamiseks on lisada dom0 tuumale parameetrid pciback.hide ning pciback.permissive, kokku saab näiteks selline tulemus

 title           Xen 3.2 / Ubuntu 8.04.1, kernel 2.6.24-19-xen
 root            (hd0,0)
 kernel          /xen-3.2.gz console=com1 com1=9600,8n1 dom0_mem=393216
 module          /vmlinuz-2.6.24-19-xen root=/dev/mapper/aix--dom0-root ro \
   console=ttyS0,9600   max_loop=255 pciback.permissive pciback.hide=(0000:00:1a.0) \
   (0000:00:1a.1)(0000:00:1a.2)  (0000:00:1a.7)(0000:00:1d.0)(0000:00:1d.1)\
   (0000:00:1d.2)(0000:00:1d.7)
 module          /initrd.img-2.6.24-19-xen
 quiet

Peale dom0 bootimist peaks üheks õnnestumise kinnituseks olema, et lsusb ei väljasta enam midagi ning öeldakse nii

 # dmesg | grep -i seizing
 [    1.345540] pciback 0000:00:1a.0: seizing device
 [    1.411955] pciback 0000:00:1a.1: seizing device
 [    1.478379] pciback 0000:00:1a.2: seizing device
 [    1.528209] pciback 0000:00:1a.7: seizing device
 [    1.578050] pciback 0000:00:1d.0: seizing device
 [    1.644476] pciback 0000:00:1d.1: seizing device
 [    1.694304] pciback 0000:00:1d.2: seizing device
 [    1.744130] pciback 0000:00:1d.7: seizing device

PCI seadme domU'le edasiandmine

PCI seadme domU'le edasiandmiseks peab domU seadistusfailis olema kaks iseloomulikku parameetrit, domU tuum tuleb bootida argumendiga swiotlb=force ning pci juures peab näitama edasiantavate seadmete pci identifikaatorite väärtused, näiteks selliselt

 extra='swiotlb=force xencons=tty'
 pci=['0000:00:1a.0','0000:00:1a.1','0000:00:1a.2',\
 '0000:00:1a.7','0000:00:1d.0','0000:00:1d.1','0000:00:1d.2','0000:00:1d.7']

Kui kõik õnnestub, siis peale domU bootimist on näha domU sees öeldes lspci ja lsusb vastavad seadmed. Nende seadmete kasutamine toimub edasi domU seest tavapäraselt viisil.

Paravirtualiseerimise puhul reeglina domU näeb lihtsustatud seadmeid ja kasutab vastavaid nö lihtsustatud liideseid nendega suhtlemiseks. Edasiantud seadmete puhul aga peab domU kasutama edasiantud riistvarale vastavaid draivereid.

domU oleku salvestamine

domU olek on määratletud muu hulgas kõvakettal, mälus ja protsessori registrites olevate andmetega. Need olekud on võimalik salvestada ning seejärel domU sulgeda ja sobival ajal hiljem domU käivitada sellisesse olekusse, milles ta oli sulgemise hetkel. Praktiliselt küll lähevad nii katki nt võrguühendused, aga nt sulgemise ajal töötanud programmid töötavad edasi.

Seda saab teha öeldes

 # xm save domU-nimi /data/checkpoint-failid/domU-nimi.save
 # xm restore /data/checkpoint-failid/domU-nimi.save

Sellist süsteemi oleku salvestamist ning salvestatud oleku juurde tagasipöördumist võiks võrrelda sülearvuti hibernate (ingl. k. talveuni) režiimi kasutamisega.

Probleemid

Kui ei tarkvara kasutamine ei anna soovitud tulemust, siis esmalt maksab tutvuda logifailide sisuga, nt Debian puhul asuvad nad kataloogis /var/log/xen.

Mõnel juhul võib ilmuda peale domU konsoolile bootimist st võtmega -c rohkelt teateid

Couldnt get a file descriptor referring to the console

Selle vastu aitab liigutada ära domU sees fail

bash# mv /etc/console/boottime.kmap.gz /etc/console/boottime.kmap.gz-muidu-segab-xenni

Tundub, et 2007 aasta keskel on AMD64 platvormil Debian Etch Xenilisel paketituumal probleeme stabiilsusega mitme protsessori puhul. Selle vastu aitab kasutada /etc/xen/xend-config.sxp failis rida

# In SMP system, dom0 will use dom0-cpus # of CPUS
# If dom0-cpus = 0, dom0 will take all cpus available
(dom0-cpus 1)

Lisaks on täheldatud probleeme kui domU juurfailisüsteemina kasutatakse reiser failisüsteemi.

Kui domU on Debian Sarge, siis ei ole seal standardse paketihaldusega võimalik paigaldada nn xenisõbralikku libc teeki libc6-xen ning selle tulemusena võivad ilmneda sellised teated

4gb seg fixup, process S43portmap (pid 1046), cs:ip 73:b7e763f8

Selle vastu aitab kataloogi /lib/tls liigutamine (kusjuures see on Thread-Local Storage mitte Transport Layer Security teek)

bash# mv /lib/tls /lib/tls.disabled

dom0 sees ethtool vms utiliitidega võrguseadmeid uurides tuleb pöörduda pethx kujul seadme poole, nt selliselt

bash# ethtool peth0

Kui domU sees töötab Debian Etch operatsioonisüsteem ning kasutatakse paketihaldusega jagatavat udev'i, siis vaikimisi igal domU reboodil suureneb ethernetiseadme järjekorranumber, st eth0, eth1 jne. Selle vastu aitab domU seadistusfailis fikseerida võrguseadme mac aadress, võiks kasutada Xeni poolt kord omistatud aadress, mille leiab domU failist

/etc/udev/rules.d/z25_persistent-net.rules

Katse näitab, samuti asjakohaste arhiivide lugemine, et 64bit dom0 all saab edukalt kasutada 32bit domU keskkondi, kusjuures domU tuumaks on 64bit dom0 tuuma. Ilmselt rakenduvad seejuures samasugused asjaolud nagu ilma Xenita 64bit tuuma ja 32 bit userspace'i kasutamisel.

domU sees võrguseadmele aliase tekitamine toimub tavapäraselt, nt

bash# ifconfig eth0:0 192.168.1.2 netmask 255.255.255.0

või Debiani puhul kirjeldades sissekande failis /etc/network/interfaces.

Kui HVM rezhiimis töötava 32bit domU jaoks on tarvis rohkem mälu, siis vähemalt 64bit dom0 puhul on sobiv öelda

pae=1

Kusjuures, tundub, et Debian GNU/Linux Etch puhul AMD64 platvormil on HVM domU'd 32 bitilised paratamatult.

Kui pidada Debian Edge dom0 all Debian Sarge domU'd, siis tuleb arvestada, et uue kerneli draiverite vastu kasutatakse suhteliselt vana userspace'i. Paljudel juhtudel ei pruugi see probleeme tekitada, aga näiteks eksootiliste failisüsteemide kasutamisel jällegi võivad tekkida ebakooskõlad.

Kui dom0 ja domU operatsioonisüsteemid on erinevad, nt Redhat 5 ja Debian 4, on üldiselt asjakohane kasutada domU jaoks seal töötava operatsioonisüsteemi tuuma. Praktiliselt tuleb siis antud juhul Debiani tuuma ja ramdisk kopeerida dom0 peale ja näidata domU seadistusfailis nende asukoht kätte Xenile.

domU sisse tuleks lisada udev pakett ja seejärel domU'le shutdown öelda ning käivitada. Tulemusena asendatakse /dev/ptyp[0-f] seadmed /dev/pts/* seadmetega ning samaaegselt saab sisse logida üle 16 kasutaja.

Kui arvuti käivitamisel saab teate

 PAE mode mismatch error (xen=yes dom0=no)

tähendab see seda, et supervisor ja tuum ei ole pae toetuse mõttes kooskõlas. Tuleb arvestada asjaolu, et Debiani Xeni toetusega tuumades on kõigis pae tugi sees, kuigi supervisori pakett on pae ja mitte pae juhtumite jaoks. Lahenduseks on kasutada pae toetusega riistvara või kompileerida tuum ringi.

Selleks, et domU kellaaega mõjutaks domU sees töötav ntp server tuleb domU sees öelda

 bash# sysctl xen.independent_wallclock=1

või lisada faili /etc/sysctl.conf rida

 xen.independent_wallclock=1

Kui dom0 mälu on väga vähe, siis kaob questide võrk ja ilmub dmesg'i teade

 xen_net: Memory squeeze in netback driver.

Riistvara

Xen lahenduse riistvara planeerimisel tuleb tähele panna järgmisi momente

  • PAE tugi - osa 32 bit riistvara omab PAE tuge, mis praktiliselt tähendab, et saab kasutada üle 4 GB mälu (tavaliselt 64 bit riistvara käivitatuna 32 bit operatsioonisüsteemiga töötab nagu 32 bit riistvara ning omab PAE tuge); mõnedes distributsioonides (nt Debian 4.0) on Xen kompileeritud vaid PAE toega riistvaral kasutamiseks
  • PV või HVM domeenid - kõige lihtsamalt juhul HVM domeenide kasutamiseks peab riistvara sisaldama Intel VT või AMD-V tuge
  • nt võrguseadmete kasutamine HVM domeenis PCI passthru režiimis - osa Intel VT toega riistvara sisaldab veel lisaks spetsiaalseid laiendusi, mida tähistatakse VT-d (Virtualization Technology for Directed I/O), mis võimaldab IO virtualiseerimist nii, et seda on eriti efektiivne kasutada domU'des (vt. http://en.wikipedia.org/wiki/X86_virtualization, http://lxr.xensource.com/lxr/source/docs/misc/vtd.txt, lisaks VT-d laiendustele on olemas teisigi, nt VT-c)

Xen Debian GNU/Linux Lenny'ga

Lenny sisaldab Xen tarkvara versiooni 3.2, paigaldamiseks tuleb öelda i386 platvormil

 # apt-get install xen-linux-system-2.6.26-2-xen-686
 # apt-get install xen-tools

Kusjuures toetatud on nii PAE kui non-PAE 32 bit riistvara (Etch sisaldas vaid PAE toega Xen'i).

Kui domU bootimisel jääb konsoolile viimaseks reaks

 Starting periodic command scheduler: crond.

siis aitab login: ettesaamiseks lisada domU seadistusfaili rida

 extra='xencons=tty'

Kui üle ssh domU sisse logides tekib

 $ ssh root@10.0.6.221         
 PTY allocation request failed on channel 0
 stdin: is not a tty

siis aitab domU peale udev paigaldamine.

Selleks, et käsk 'xm shutdown domUnimi' mitte ainult ei peataks domU tööd, vaid lisaks ka nö 'xm list' nimekirjast kaoks kõnealune domU ära tuleb kasutada /etc/xen/xend-config.sxp failis rida

 (dom0-cpus = 0)

NB! Debian Etch puhul tuli selle parameetri väärtusena kasutada '1'-te, selleks, et kogu süsteem AMD64 platvormil ei hanguks episoodiliselt.

Kui on vajadus käivitada Lenny dom0 all Sarge domU, siis võib olla vajalik ühendada käsitsi külge devpts

 # mount -t devpts devpts /dev/pts

Vastasel korral öeldakse ssh'ga sisse logides

 $ ssh 192.168.2.12
 mart@192.168.2.12's password:
 PTY allocation request failed on channel 0


Ühiskasutuses plokkseadme kasutamine

Kui on vajadus kasutada mitme domU sees ühte ja sama plokkseadet, nn ühiskasutuses plokkseadet (ingl. k. shared block device), siis sobib nad domU seadistusfailides kirjeldada sarnaselt, oluline on 'w!' osa

 disk = ['phy:/dev/volumegroupname/ocfs2_test,xvda2,w!' ]

Ühiskasutuses plokkseadmega kasutatakse tavaliselt spetsiaalset failisüsteemi, ühiskasutuses plokkseadme failisüsteemi (ingl. k. shared disk file system), nt OCFS2.

Kasulikud lisamaterjalid