Xen: CentOS7 DomU auf Debian Dom0
Ich habe kürzlich beschlossen etwas über meinen Linux-Tellerrand zu schauen und habe mich mal ein wenig mit CentOS beschäftigt. Anfangs war auch alles ziemlich einfach, VirtualBox und los. Aber auf Dauer macht sowas nicht glücklich, also habe ich mich entschlossen es auf Xen-Basis nochmal zu probieren. Die erste Ernüchterung Xen auf CentOS 7-Basis geht nicht. CentOS 6.5 würde gehen, aber ich habe mich entschieden dann doch auf den bewährten Debian-Unterbau zu setzen.
Da die ausgetrampelten Pfade bereits verlassen waren habe ich auch gleich auf libvirt-Unterstützung gesetzt. An sich wird es damit, z.B. via virt-manager, noch leichter DomUs einzurichten. CentOS 7 war aber auch hier für ein paar Überraschungen gut. Gibt man einfach nur die URL zum Installer an bleibt die Maschine beim Booten einfach stehen, weil sie gern ein paar Downloads tätigen will, die Netzwerkkarte aber nicht eingerichtet ist.
Mittels folgendem Befehl geht es dann aber doch (das LVM-Laufwerk für die Maschine (/dev/vg0/mrwhite) muss zuvor per Hand angelegt werden):
virt-install –paravirt –name=mrwhite –ram=32768 –vcpus=8 -f /dev/vg0/mrwhite –network=bridge:xenbr0 –location=http://mirror.centos.org/centos/7/os/x86_64/ -x “ip=xxx.xxx.xxx.xxx netmask=255.255.255.xxx gateway=xxx.xxx.xxx.xxx dns=xxx.xxx.xxx.xxx" –graphics=none
Nach einigen Sekunden beschwert sich CentOS zwar es könne den grafischen Installer nicht laden, bietet dann aber an entweder im Textmode oder via VNC weiterzumachen. Ich habe mich (ausgetrampelte Pfade ade) für VNC entschieden. Ab hier ist dann die Installation ganz einfach, oder doch nicht?
Überlässt man die Partitionierung dem CentOS-Installer bootet anschließend die Maschine nicht. pygrub hat hier einige Probleme. Daher sollte man die Partitionierung selbst übernehmen und zumindest /boot auf eine ext[2,3,4]-Partition legen. Das löst aber leider nicht alle Probleme. pygrub würde weiterhin kein Bootlaufwerk finden (POST operation failed: xend_post: error from xen daemon: (xend.err “Boot loader didn’t return any data!")
), damit es klappt sind noch ein paar kleine Anpassungen nötig.
Zunächst werden wir daher eine kleine chroot
-Einlage hinter uns bringen. Meine CentOS-Partitionen liegen alle auf dem gleichen LVM-Volume. Um sie mounten zu können muss ich zunächst dafür sorgen die einzelnen CentOS-Partitionen einzeln ansprechbar zu machen. Hier leistet kpartx
gute Dienste:
apt-get install kpartx
kpartx -a /dev/vg0/mrwhite
mount /dev/mapper/vg0-mrwhite1p2 /mnt
mount /dev/mapper/vg0-mrwhite1p1 /mnt/boot
mount –bind /dev /mnt/dev
mount –bind /proc /mnt/proc
mount –bind /sys /mnt/sys
chroot /mnt /bin/bash
Im chroot angekommen können wir uns nun um die nötigen Anpassungen an Grub kümmern, damit wir unsere Maschine endlich starten können:
sed -i ‘s/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/’ /etc/default/grub
sed -i ‘s/default="\${next_entry}"/default="0″/’ /etc/grub.d/00_header
sed -i ‘s/${sixteenbit}//’ /etc/grub.d/10_linux
grub2-mkconfig -o /boot/grub2/grub.cfg
Anschließend können wir unter chroot wieder verlassen, alles unmouten und die Maschine starten:
exit
umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt
virsh start mrwhite
Mittels kpartx -d /dev/mapper/$foobar
können die gemappten LVM-Partitionen wieder ausgekoppelt werden.
Durch die Änderungen an der Grub-Konfiguration sollten auch spätere Kernelupdates kein Problem sein, allerdings sollte sicherheitshalber vor einem Neustart der Maschine geprüft werden ob die Änderungen noch bestehen. Falls es doch mal schief geht wiederholt man den Prozess halt einfach.
Als Alternative zu den oben aufgeführten Änderungen an der DomU kann man auch eine gepatchte pygrub-Version verwenden: http://bugs.xenproject.org/xen/bug/39