xen:domus-bzw.-gäste-erstellen

Erstellung von Gästen für Xen (DomU)

Die verschiedenen DomUs sind die virtuellen Maschinen („Gäste“) oberhalb der dom-0. Die Erstellung mit dem Xen-Tools sollte auf allen Systemen gleich sein. Eine manuelle Variante (ohne Xen-Tools) wird auch beschrieben.

Es wird (bisher) nur die Erstellung von Images (und die Benutzung mit loop) beschrieben. Es geht auch mit LVM.

Auf diesen Seiten gibt es fertige Xen-Images zum runterladen:

Die XenServer Produkte unterstützen das Xen Virtual Appliance (XVA) Format, das man mit einer grafischen Schnittstelle oder auf der Kommandozeile mit „xe“ importieren kann.

  1. In der Datei /etc/xen/xend-config.sxp die gewünschten Änderungen vornehmen, z.B. die Zeile (network-script network-dummy) durch (network-script network-bridge) ersetzen.
  2. Mit den Xen-Tools ist eine VM schnell erstellt:
    xen-create-image --hostname debian --dhcp --dir /srv/xen

    Das Beispiel erstellt zwei Images (eins für das swap-file, eins für das root-Dateisystem) im Verzeichnis /srv/xen (es wird automatisch das Unterverzeichnis domains angelegt) mit dem Namen debian. Die Konfiguration sieht dann nach Anpassung so aus (die letzte Zeile z.B. hinzugefügt werden).

Ohne DHCP und mit fester IP sieht der Anruf so aus:

xen-create-image --hostname debian --ip 192.168.0.1 --dir /srv/xen

:!: bei --dir sollte in der Pfadangabe hinten kein Slash (/) am Pfadnamen stehen.

#
#  Kernel + memory size
#
kernel      = '/boot/vmlinuz-2.6.22-14-xen'
ramdisk     = '/boot/initrd.img-2.6.22-14-xen'
memory      = '128'
#
#  Disk device(s).
#
root        = '/dev/sda1 ro'
disk        = [ 'file:/domains/debian/disk.img,sda1,w', 'file:/domains/debian/swap.img,sda2,w' ]

#
#  Hostname
#
name        = 'debian'

#
#  Networking
#
dhcp        = 'dhcp'
vif         = [ 'bridge=xenbr0' ]

#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
extra='xencons=tty'

Bei entsprechender Hardwareunterstützung können auch nicht angepasste Betriebssysteme, d.h. solche ohne eigenen Hypervisor (wie Windows), betrieben werden. Diese laufen allerdings nicht ganz so schnell, da die Treiber nicht angepasst sind. Novell (Virtual Machine Driver Pack) und XenSource (XenSource Windows Tools) bieten jeweils angepasste Treiber, die jedoch nicht kostenlos sind.

Zuerst sollte man sich ein Image erstellen (siehe oben: manuelle Erstellung) außerdem muss man eine Konfiguration anlegen:

# WinXP sample config
kernel      = '/usr/lib/xen-3.0.3-1/boot/hvmloader'
builder     = 'hvm'
memory      = '384'
name	    = 'winxp1'
device_model= '/usr/lib/xen-3.0.3-1/bin/qemu-dm'
boot        ='d'
disk        = [ 'file:/domains/winxp/winxp.img,ioemu:hda,w', 'file:/domains/WinXP.ISO,hdc:cdrom,r' ]

#
#  Networking
#
#dhcp        = 'dhcp'
vif         = [ 'type=ioemu, bridge=xenbr0' ]
vnc=1
vncpasswd='winxp'
vnclisten='0.0.0.0'
#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Zu Erklärung:

  • Im Gegensatz zu den oben genannten Debian-Beispiel wird hier die komplette Hardware durch Qemu emuliert. Daher werden vorhande Images von vorhandenen physikalischen Systemen leider nicht reichen, da Windows andere Hardware vorfindet und relativ sicher nicht starten wird.
  • /domains/winxp/winxp.img ist das oben angelegte Image auf das vom
  • CD-Image /domains/WinXP.ISO installiert wird.
  • Die Anzeige der grafischen Oberfläche wird mit VNC realisiert, auf das unter allen IP-Adressen (vnclisten='0.0.0.0') mit dem Passwort winxp zugegriffen werden kann. Dann kann man sich mit
    vncviewer DOM-0-HOSTNAME:0

    dorthin verbinden.

:!: Nach der Installation

boot        ='d'

auf

boot        ='c'

setzen.

  • Um ein CD-ROM Laufwerk als Installationsquelle zu benutzen:
    disk        = [ 'file:/srv/xen/domains/lexware/lexware-c.img,ioemu:hda,w', 'phy:/dev/cdrom,hdc:cdrom,r' ]
  • Feste IP:
    vif  = [ 'ip=192.168.0.13, type=ioemu, bridge=xenbr0' ]

Wenn die Xen-Tools nicht zur Verfügung stehen (oder man eine grundsätzliches Verständnis bekommen will) ist die manuelle Erstellung eine Alternative.

Dazu

  1. erzeugt man ein Image (die spätere Systempartition erstellen) mit dem Befehl
    dd if=/dev/zero of=IMAGENAME.IMG count=0 bs=1024k seek=5000

hier wird also die Datei IMAGENAME.IMG mit 5 GB Speicher angelegt. Dieser wird allerdings noch nicht voll belegt, da hier eine Sparse-Datei angelegt wurde. Da die Datei bisher leer ist, werden wir

  1. ein Dateisystem im Image anlegen:
    mkfs.ext3 IMAGENAME.IMG

    .

FIXME (weiter)

     xt-install-image Install a new distribution.
     xt-customize-image Run a collection of hook scripts to customise the freshly installed system.
     xt-create-xen-config Create a configuration file in /etc/xen so that xm can create the new image.

:!: Vorher sollte das Gastsystem runtergefahren werden.

Die Änderung ist schnell erledigt: Im ersten Schritt wird das Image durch anhängen von Nullen um 1GB vergrößert und anschließend auch das (ext3) Dateisystem.

dd if=/dev/zero bs=1024000 count=1024 >> disk.img
resize2fs -f disk.img

Wer mehr oder weniger als 1GB vergrößern muss natürlich die Zahlen entsprechend (so dass die Multiplikation der Zahlen von bs und count die gewünschte Kapazität ergibt) anpassen.

Anschließend ggf. das LVM anpassen.

Für Ubuntu gibt es in Etch keine passenden Scripte von debootstrap. Zwar wird dapper als unterstützt angegeben, aber es ist trotzdem nix da.

Also laden wir uns ein aktuelles debootstrap von Ubuntu:

wget http://archive.ubuntulinux.org/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.8_all.deb
dpkg -i debootstrap_1.0.8_all.deb
  We're trying to configure an installation of gutsy in
 /srv/xen - but there is no hook directory for us to use.

  This means we don't know how to configure this installation.

  We'd expect the hook directory to be : /usr/lib/xen-tools/gutsy.d

Im Verzeichnis /usr/lib/xen-tools legt man also noch einen Verweis auf ubuntu.d an:

ln -s ubuntu.d gutsy.d