Xen 4.0 hat einige interessante Features eingeführt. Am Auffälligsten dürfte die Umstellung des vom Xen-Projekt gepflegten Dom0-Kernels auf “pvops” sein. Es handelt sich dabei um eine Technologie, mithilfe derer ein Kernel erkennt, ob er auf “nacktem Metall” (“bare metal” = direkt auf Hardware) oder auf dem Xen-Hypervisor läuft. Für unpriviligierte Domains (domU) ist dieses Feature bereits seit geraumer Zeit im Linux-Kernel enthalten, für dom0s is es neu und muss über den Kernel des Xen-Projektes installiert werden.
Ich habe einmal testweise ein Setup auf einer AMD64-Maschine erstellt, auf 32-Bit-Systemen sind lediglich einige Kleinigkeiten anders: Der Kernel muss PAE-Support haben und es muss zwingend ein Prozessortyp ausgewählt werden, der über Virtualisierungserweiterungen verfügt. Da heutzutage kaum Rechner als Xen-Host zum Einsatz kommen dürften, die nicht 64-Bit-tauglich sind, sollte sich die Frage nach pvops-Dom0s auf 32-Bit-Hardware kaum stellen.
Die Vorbereitung
Fürs Bauen des Kernels müssen zuerst einige Debian-Pakete nachinstalliert werden. Meine Testmaschine war ein recht blankes Netinstall, so dass diese Liste hoffentlich vollständig ist:
apt-get install build-essential libncurses5-dev python-twisted \
git-core zlib1g-dev gettext libX11-dev uuid-dev libssl-dev\
bin86 bcc flex bison python-dev bridge-utils
Auf 64-Bit-Systemen außerdem:
apt-get install libc6-dev-i386
Neuere Xen-Versionen benötigen Intels ACPI-Compiler. Den habe ich noch nicht in den Ubuntu-Paketlisten gefunden, stattdessen habe ich ihn aus den Quellen gebaut und mittels install installiert. Da nur ein einziges Binary benötigt wird, ist es leicht möglich, das temporäre Build-Verzeichnis in den Pfad aufzunehmen und so das System nicht zu verschmutzen. Bitte prüft vor der ACPICA-Installation, ob unter http://www.acpica.org/downloads/ neuere Versionen bereitstehen:
cd /usr/src wget http://acpica.org/download/acpica-unix-20100806.tar.gz tar xvzf acpica-unix-20100806.tar.gz cd acpica-unix-20100806/compiler make install -m 0755 iasl /usr/bin
Bau und Boot des pvops-Kernels
Wie eingangs erwähnt, ist Support für pvops-Dom0 noch nicht Teil des offiziellen Kernels. Es muss daher Jeremys 2.6.32er mit pvops-Patches ausgecheckt werden. Falls jemand abkürzen möchte, kann er hier die von mir verwendeten Sourcen herunterladen, diese beinhalten bereits eine .config.
cd /usr/src git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen cd linux-2.6-xen git reset --hard git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x
Beim Selbstbau dürfte es meist ganz gut passen, die Kernelconfig des Ubuntu als Basis zu verwenden und mit make oldconfig die Xen-spezifischen Punkte zu ergänzen. Wer dabei die richtigen Treiber statisch einbindet, braucht auch an der Initramfs-Konfiguration nichts zu modifizieren:
cd /usr/src cd linux-2.6-xen cp /boot/config-` uname -r ` .config make oldconfig
Zum Vergleich hier meine Xen-spezifischen Optionen:
CONFIG_XEN=y CONFIG_XEN_MAX_DOMAIN_MEMORY=32 CONFIG_XEN_SAVE_RESTORE=y CONFIG_SWIOTLB_XEN=y CONFIG_MICROCODE_XEN=y CONFIG_XEN_DOM0=y CONFIG_XEN_PRIVILEGED_GUEST=y CONFIG_XEN_DOM0_PCI=y CONFIG_XEN_PCI_PASSTHROUGH=y CONFIG_PCI_XEN=y CONFIG_XEN_PCIDEV_FRONTEND=y CONFIG_XEN_BLKDEV_FRONTEND=m CONFIG_NETXEN_NIC=m CONFIG_XEN_NETDEV_FRONTEND=m CONFIG_XEN_KBDDEV_FRONTEND=m CONFIG_HVC_XEN=y CONFIG_XEN_FBDEV_FRONTEND=m CONFIG_XEN_BALLOON=y CONFIG_XEN_SCRUB_PAGES=y CONFIG_XEN_DEV_EVTCHN=m CONFIG_XEN_BACKEND=y CONFIG_XEN_NETDEV_BACKEND=y CONFIG_XEN_BLKDEV_BACKEND=y CONFIG_XEN_BLKDEV_TAP=y CONFIG_XEN_BLKBACK_PAGEMAP=y CONFIG_XEN_PCIDEV_BACKEND=y CONFIG_XEN_PCIDEV_BACKEND_VPCI=y CONFIG_XENFS=m CONFIG_XEN_COMPAT_XENFS=y CONFIG_XEN_SYS_HYPERVISOR=y CONFIG_XEN_MCE=y CONFIG_XEN_XENBUS_FRONTEND=y CONFIG_XEN_GNTDEV=m CONFIG_XEN_S3=y CONFIG_ACPI_PROCESSOR_XEN=y CONFIG_XEN_PLATFORM_PCI=m
Wer möchte, kann meine Konfiguration komplett oder als unified diff (gegen Ubuntus 2.6.32-24 Kernel) herunterladen und diese verwenden. Das Bauen geht dann wie gewohnt, ich strippe die Kernelmodule und erstelle gleich eine GRUB-Konfiguration:
make
make install
make modules_install
find /lib/modules/2.6.32.18-xen0-pvops/ -name '*.ko' -exec strip --strip-unneeded {} \;
mkinitramfs -o /boot/initrd.img-2.6.32.18-xen0-pvops 2.6.32.18-xen0-pvops
update-grub
Der erste Neustart
Rebooten Sie nun den Rechner und wählen Sie den neuen pvops-Kernel als Startkernel aus. Die Maschine sollte problemlos hochfahren, tut sie das nicht, stehen die Chancen schlecht, dass dieser Kernel auch auf Xen sauber startet.
Installation von Xen und den Xen-Tools
Als dieses Tutorial erstellt wurde, war mit Xen 4.0.1 gerade die erste Maintenance-Release der 4.0er-Reihe erhältlich. Falls Sie noch 3.4.x oder 4.0.0 verwenden (und damit zufrieden sind): Aktualisieren Sie auf jeden Fall auf 4.0.1, weil hier einige Bugs im Zusammenspiel von Xen und dom0-pvops-Kerneln beseitigt wurden:
cd /usr/src wget http://bits.xensource.com/oss-xen/release/4.0.1/xen-4.0.1.tar.gz tar xvzf xen-4.0.1.tar.gz cd xen-4.0.1 make xen make install-xen make tools make install-tools PYTHON_PREFIX_ARG=
Es folgt die Erstellung einer Bootloder-Konfiguration, bitte die UUID entsprechend anpassen:
vim.tiny /etc/grub.d/50_xen
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Ubuntu 10.04 - Xen 4.0.1 - 2.6.32.18 pvops" {
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set dc50c3d6-787a-45d7-951b-20836d10443c
multiboot /boot/xen-4.0.1.gz dummy=dummy
module /boot/vmlinuz-2.6.32.18-xen0-pvops root=UUID=dc50c3d6-787a-45d7-951b-20836d10443c ro dummy=dummy
module /boot/initrd.img-2.6.32.18-xen0-pvops
}
chmod a+x /etc/grub.d/50_xen vim.tiny /etc/default/grub
GRUB_DEFAULT="Ubuntu 10.04 - Xen 4.0.1 - 2.6.32.18 pvops" GRUB_HIDDEN_TIMEOUT=30 GRUB_HIDDEN_TIMEOUT_QUIET=false
Anschließend nicht vergessen, die Grub-Konfiguration noch einmal neu aufzubauen:
update-grub
Ein Dateisystem für Xen: Einige Scripte benäötigen das alte /proc/xen. Dieses wird durch einen Eintrag in der /etc/fstab beim nächsten Neustart gemountet:
xenfs /proc/xen xenfs defaults
Dann benötigen wir noch zwei Module und deren Devices – die Module sollten in die /etc/modules eingetragen werden:
modprobe -v xen-evtchn modprobe -v xen-gntdev
mkdir /dev/xen mknod -m 0660 /dev/xen/gntdev c 10 57 mknod -m 0660 /dev/xen/evtchn c 10 58
Das war es: Beim nächsten Neustart startet der eben gebootete pvops-Kernel nicht auf nacktem Metall, sondern auf dem Hypervisor. Mit pvops-Kernel sollte es auch möglich sein, die beschleunigten Grafiktreiber von AMD und nVidia zu nutzen, ausprobiert habe ich dies nicht, weil bei mir Xen nur auf dem Server eingesetzt wird.
Auf die Konfiguration von pvops-DomUs gehe ich in den nächsten Tagen ein: Für diese halten aktuelle Distributionen oft passende Kernel bereit, ich werde jedoch auch zeigen, wie man mit einem frischen Vanilla-Kernel 2.6.35.x ein wenig mehr herausholt.
Vielen Dank an…
- …das offizielle Xen-Blog, an dessen Anleitung ich mich grob orientiert habe
- …die Mitarbeiter des Xen-Wikis, die viele wertvolle Informationen zu pvops zusammengetragen haben
Update, 31. August 2010
- bridge-utils zur Paketliste hinzugefügt
- Ergänzung zu /proc/xen
- Ergänzung zu fehlenden Devices und Modulen
Comments
4 responses to “Installation von Xen 4.0.1 mit pvops-Dom0 auf Ubuntu 10.04”
[…] WordPress 2.x.x. News und Kommentare können als RSS-2.0-Feed abonniert werden. « Installation von Xen 4.0.1 mit pvops-Dom0 auf Ubuntu 10.04 […]
Hi,
ich will ja nicht unken, aber wie wäre es mit RTFM make-kpkg?
Grüße
Ich würde noch die folgenden Zeilen in der Kernel-config ändern:
CONFIG_HZ_1000=y
CONFIG_HZ=1000
Grüße
Zu den 1000Hz: Your Mileage May Vary. Die Default-Config der Xen-Entwickler hat 250Hz.