Xen

Aus wiki.archlinux.de

Hier wird beschrieben, wie man Xen unter Arch Linux einrichtet.

Was ist Xen?

Sinngemäß nach dem dem Xen Entwickler Team:

"Xen Hypervisor, der leistungsstarke Open Source Industrie Standard für Virtualisierung, bietet ein mächtiges, gut funktionierendes und sicheres Feature Set für die Virtualisierung von x86, x86_64, IA64, PowerPC und anderen CPU Architekturen. Es unterstützt eine große Auswahl von Gast Betriebssystemen, unter anderem Windows®, Linux®, Solaris® und verschiedene Versionen von BSD Betriebssystemen."

Der Xen Hypervisor ist eine schlanker Softwarelayer, der eine Computer Architektur emuliert/nachbildet. Er wird vom Boot Loader gestartet und erlaubt es verschiedene Betriebssysteme gleichzeitig auf ihm laufen zu lassen. Ist der Xen Hypervisor einmal geladen, startet er "Dom0" (steht für "Domain 0"), die privilegierte/bevorzugte Domain, die in unserem Fall ein modifizierter Linux Kernel ist. Andere mögliche Dom0 Betriebssysteme sind NetBSD und OpenSolaris. Selbstverständlich muss die Hardware auch vom Kernel unterstützt werden, um Xen auszuführen. Ist Dom0 gestartet, können ein oder mehrere "DomU" Domains gestartet und von Dom0 aus kontrolliert werden.

Den Xen Host einrichten

Benötigte Pakete installieren

Ein Xen Paket ist im AUR verfügbar. xen-tools ist eine Sammlung einfacher Perlskripte, die es ermöglicht unproblematisch neue Gast Xen Domains zu erstellen. xen-tools ist ebenfalls im AUR verfügbar.

GRUB konfigurieren

Grub muss derart konfiguriert werden, dass der Xen Hypervisor gefolgt vom Dom0 Kernel gebootet wird. Hierzu fügt man folgendes zu /boot/grub/menu.lst hinzu:

title Xen with Arch Linux
root (hd0,0)
kernel /xen-version.gz dom0_mem=524288
module /vmlinuz26-xen-dom0 root=/dev/sda2 ro console=tty0
module /kernel26-xen-dom0.img

dom0_mem, console und vga können den Bedürfnissen des Nutzers angepasst werden. Um die DomUs zu starten kann der Standard Arch Kernel verwendet werden. Damit das funktioniert muss xen-blkfront in die MODULES Zeile in /etc/mkinitcpio.conf eintragen werden:

MODULES=(... xen-blkfront ...)

Nach einem Reboot startet man in den Xen Kernel. Anschliessend startet man xend:

#rc.d start xend

Es wird empfohlen eine feste Menge Speicher bereitzustellen, wenn man Xen nutzt. Nutzt man IO intensive guests ist man gut damit beraten einen kompletten CPU Kern für Dom0 zu reservieren (pin). Auf der XenCommonProblems Seite im englischen Wiki, unter "Can I dedicate a cpu core (or cores) only for dom0?" findet man weitere Informationen zu diesem Thema.

GRUB2 konfigurieren

Dies funktioniert genauso wie die Konfiguration von GRUB, mit dem Unterschied, das man multiboot anstelle von kernel verwendet. Das sieht dann folgendermaßen aus:

# (2) Arch Linux(XEN)
menuentry "Arch Linux(XEN)" {
   set root=(hd0,X)
   multiboot /boot/xen.gz dom0_mem=2048M
   module /boot/vmlinuz26-xen-dom0 root=/dev/sdaY ro
   module /boot/kernel26-xen-dom0.gz
}

Nach einem erfolgreichen Reboot in den Dom0 Kernel fahren wir wie folgt fort:

DomU Instanzen hinzufügen

Die Grundidee eine DomU hinzuzufügen ist: Den Dom0 Kernel (erlangen), Platz für die virtuelle Festplatte reservieren, eine Konfigurationsdatei für DomU erstellen und letztlich die DomU mit xm zu starten.

## /dev/sdb1 is an example of a block device
$ mkfs.ext4 /dev/sdb1    ## format partition
$ mkdir /tmp/install
$ mount /dev/sdb1 /tmp/install
$ mkdir -p /tmp/install/{dev,proc,sys} /tmp/install/var/lib/pacman /tmp/install/var/cache/pacman/pkg
$ mount -o bind /dev /tmp/install/dev
$ mount -t proc none /tmp/install/proc
$ mount -o bind /sys /tmp/install/sys
$ pacman -Sy -r /tmp/install --cachedir /tmp/install/var/cache/pacman/pkg -b /tmp/install/var/lib/pacman base
$ cp -r /etc/pacman* /tmp/install/etc
$ chroot /tmp/install /bin/bash
$ vi /etc/resolv.conf
$ vi /etc/fstab
   /dev/xvda               /           ext4    defaults                0       1
$ vi /etc/inittab
   c1:2345:respawn:/sbin/agetty -8 38400 hvc0 linux
   #c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux
   #c2:2345:respawn:/sbin/agetty -8 38400 tty2 linux
   #c3:2345:respawn:/sbin/agetty -8 38400 tty3 linux
   #c4:2345:respawn:/sbin/agetty -8 38400 tty4 linux
   #c5:2345:respawn:/sbin/agetty -8 38400 tty5 linux
   #c6:2345:respawn:/sbin/agetty -8 38400 tty6 linux
$ exit  ## exit chroot
$ umount /tmp/install/dev
$ umount /tmp/install/proc
$ umount /tmp/install/sys
$ umount /tmp/install

Falls man nicht von einer Neuinstallation aus startet und rsync von einem existierenden system aus rsync anwenden möchte:

$ mkfs.ext4 /dev/sdb1    ## format lv partition
$ mkdir /tmp/install
$ mount /dev/sdb1 /tmp/install
$ mkdir /tmp/install/{proc,sys}
$ chmod 555 /tmp/install/proc
$ rsync -avzH --delete --exclude=proc/ --exclude=sys/ old_ooga:/ /tmp/install/
$ vi /etc/xen/dom01     ## create config file
   #  -*- mode: python; -*-
   kernel = "/boot/vmlinuz26"
   ramdisk = "/boot/kernel26.img"
   memory = 1024
   name = "dom01"
   vif = [ 'mac=00:16:3e:00:01:01' ]
   disk = [ 'phy:/dev/sdb1,xvda,w' ]
   dhcp="dhcp"
   hostname = "ooga"
   root = "/dev/xvda ro"
$ xm create -c dom01

Hardware Virtualisierung

Möchte man Hardware in den DomUs virtualisieren, so muss die Hosthardware entweder Intel VT-x oder AMD-V (SVM) Virtualisierung unterstützen. Ob sie das tut findet man heraus indem man

grep -E "(vmx|svm)" --color=always /proc/cpuinfo

auf dem Hostsystem absetzt. Erhält man auf dieses Kommando hin keine Ausgabe, so steht Hardware Virtualisierung nicht zur Verfügung und die Hardware ist nicht im Stande Xen HVM guests auszuführen. Es ist aber auch möglich, dass die Host CPU eine der oben genannten Funktionen unterstützt, diese aber im BIOS deaktiviert sind. Um zu schauen, ob dem so ist begibt man sich während des Bootens in das BIOS Konfigurationsmenü und schaut ob sich dort eine Option mit Bezug auf die Unterstützung von Virtualisierung finden lässt. Existiert eine solche Option, aktiviert man diese, bootet das System erneut und wiederholt das oben genannte grep Kommando.

Arch als Xen guest (PV Modus)

Für Paravirtualisierung benötigt man einen Kernel in dem Xen guest Unterstützung (DomU) aktiviert ist. Beim Standard x86_64 Linux und kernel26-lts aus core ist die Unterstützung als modules aktiviert. Standard i686 Linux und kernel26-lts hingegen unterstützen aufgrund der voreingestellten HIGHMEM Option (https://bugs.archlinux.org/task/24207?project=1) DomU nicht. Um DomU mit i868 zu nutzen, kann man linux-xen oder kernel26-lts-xen aus dem [1] AUR installieren. Für Arch das Um Arch auf einem XenServer zu betreiben kann man sich wahlweise zusätzlich noch xe-guest-utilities aus dem AUR installieren.

Arch guest (DomU)

Um einen Login über die Konsole zu ermöglichen, muss man in /etc/innittab die Kommentarzeichen vor

h0:2345:respawn:/sbin/agetty -8 38400 hvc0 linux

entfernen. Danach passt man /boot/grub/menu.lst den eigenen Bedürfnissen an. Beispiele: x86_64 linux:

# (0) Arch Linux (DomU)
title  Arch Linux (DomU)
root   (hd0,0)
kernel /boot/vmlinuz-linux root=/dev/xvda1 ro console=hvc0
initrd /boot/initramfs-linux.img

x86_64 kernel26-lts:

# (0) Arch Linux LTS (DomU)
title  Arch Linux LTS (DomU)
root   (hd0,0)
kernel /boot/vmlinuz26-lts root=/dev/xvda1 ro console=hvc0
initrd /boot/kernel26-lts.img

i686 linux-xen:

# (0) Arch Linux Xen (DomU)
title  Arch Linux Xen (DomU)
root   (hd0,0)
kernel /boot/vmlinuz-linux-xen root=/dev/xvda1 ro console=hvc0
initrd /boot/initramfs-linux-xen.img

i686 kernel26-lts-xen:

# (0) Arch Linux LTS Xen (DomU)
title  Arch Linux LTS Xen (DomU)
root   (hd0,0)
kernel /boot/vmlinuz26-lts-xen root=/dev/xvda1 ro console=hvc0
initrd /boot/kernel26-lts-xen.img

Dann editiert man /etc/fstab und ändert sd* in xvd* (z.B. sda1 wird zu xvda1) Die Module "xen-blkfront xen-fbfront xenfs xen-netfront xen-kbdfront" müssen nun in die MODULES Zeile in /etc/mkinitcpio.conf eintragen werden:

MODULES=(... xen-blkfront xen-fbfront xenfs xen-netfront xen-kbdfront ...)

Anschliessend erneuert man die initramfs: For x86_64 linux:

mkinitcpio -p linux

x86_64 kernel26-lts:

mkinitcpio -p kernel26-lts

i686 linux-xen

mkinitcpio -p linux-xen

i686 kernel26-lts-xen:

mkinitcpio -p kernel26-lts-xen

Anmerkung: Man kann Xen guest support auch in seinen custom Kernel kompilieren (nicht als Module). Ist dies der Fall, braucht man keines der Xen Module in die /etc/mkinitcpio.conf einzutragen.

xe-guest-utilities (XenServer Tools)

Um die xe-guest-utilities zu benutzen muss man einen xenfs mount point in /etc/fstab eintragen:

xenfs                  /proc/xen     xenfs     defaults            0      0

dann trägt man xe-linux-distribution in die DAEMONS Zeile in der /etc/rc.conf ein.

Anschliessend beendet man guest und loggt sich auf dem Host als Root ein.

Auf dem Xen host (Dom0)

Ausgabe der <vm uuid>:

# xe vm-list

In den PV Modus wechseln:

# xe vm-param-set uuid=<vm uuid> HVM-boot-policy=""
# xe vm-param-set uuid=<vm uuid> PV-bootloader=pygrub

Jetzt kann man seinen VM guest booten und er sollte (hoffentlich) im PV Modus arbeiten.

Anmerkungen

  • pygrub zeigt kein Bootmenu an. Lzma komprimierte stock kernel werden von manchen pygrub Versionen nicht unterstützt.(https://bbs.archlinux.org/viewtopic.php?id=118525).
  • Um hwclock Fehlermeldungen zu vermeiden, setzt man HAEDWARECLOCK="xen" in /etc/rc.conf (Eigentlich kann man hier jeden Wert, ausser "UTC" und "localtime" eintragen.)
  • Möchte man zu Hardware VM zurückkehren, setzt man HVM-boot-policy="BIOS order"
  • tritt beim Booten von Xen eine Kernel Panic auf und es wird 'use apic="debug" and send error report' vorgeschlagen, kann man noapic in die Kernel Zeile in menu.lst setzen und es erneut versuchen.

Nützliche Pakete

  • Virtual Machine Manager - a desktop user interface for managing virtual machines: virt-manager
  • Open source multiplatform clone of XenCenter frontend (svn version): openxencenter-svn
  • Xen Cloud Platform frontend: xvp

Siehe auch


Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar.