Für die Monitoring-Software brauche ich eine Linux-Umgebung. Diese soll unter XVM (aka Xen) auf dem OpenSolaris Server laufen. Leider gibt es kein Tool, das direkt eine paravirtualisierte Debian-Umgebung aufsetzen kann, so sind einige Schritte nötig.
Um ein paravirtualisiertes Linux installieren zu können brauchen wir ein Linux. Das ist nicht ganz so sehr ein Huhn-Ei-Problem wie es danach klingt, lässt sich aber nur mit einer CPU mit Virtualisierungserweiterungen umgehen. Ganz grob sieht der Ablauf wie folgt aus:
- Installation eines vollständig virtualisierten (HVM) Debian Linux direkt ab Boot-CD
- Installation eines paravirtualisierten Linux (PVM) auf eine zweite Disk aus dem HVM-Linux sowie einige Anpassungen an der Konfiguration
- Trennen der zweiten Disk aus dem HVM-Linux und konfigurieren eines paravirtualisierten Systems mit dieser Disk
- Starten des paravirtualisierten Linux sowie einige letzte Anpassungen
Das klingt nicht nur aufwändig sondern ist es auch. Das gute daran ist, dass das einmal erstellte paravirtualisierte Linux beliebig oft geklont werden kann. Den ganzen Aufwand muss man also nur einmal betreiben.
Teil 1: Installation eines vollständig virtualisierten (HVM) Debian Linux
Als erstes bereiten wir die beiden Disks mit je 4GB in einem neuen ZFS Filesystem vor.
pfexec zfs create rpool/xvm pfexec zfs create rpool/xvm/debian-lenny pfexec zfs create -V 4G rpool/xvm/debian-lenny/tmpl-hvm pfexec zfs create -V 4G rpool/xvm/debian-lenny/tmpl-pvm
Nicht vergessen ein passendes ISO-Image, in meinem Fall debian-504-amd64-netinst.iso herunterzuladen und nach /xvm/debian-lenny/ zu verschieben.
Beim nächsten Schritt wird ein GUI benötigt. Also beachten, dass das aktuelle Terminal auch auf X11 ausgeben kann. Solange man auf dem OpenSolaris Desktop arbeitet ist das kein Problem, falls jedoch über ssh unbedingt die X11-Weiterleitung aktivieren (ssh -X). Wir starten nun also die Installation in der voll virtualisierten Umgebung. Dies klappt nur, wenn der Prozessor über die benötigten Erweiterungen verfügt und die netinst.iso auf dem System abgelegt ist:
thomas@srvt01:~$ pfexec virt-install -n lenny-tmpl-hvm -v -r 512 --vnc -f /dev/zvol/dsk/rpool/xvm/debian-lenny/tmpl-hvm -f /dev/zvol/dsk/rpool/xvm/debian-lenny/tmpl-pvm --cdrom /xvm/debian-lenny/debian-504-amd64-netinst.iso Starting install... Creating domain... 0 B 00:02 TigerVNC Viewer for X version 1.0.0 Copyright (C) 2002-2005 RealVNC Ltd. Copyright (C) 2000-2006 TightVNC Group Copyright (C) 2004-2009 Peter Astrand for Cendio AB See http://www.tigervnc.org for information on TigerVNC. Mon Jun 28 21:21:10 2010 CConn: connected to host localhost port 5900 CConnection: Server supports RFB protocol version 3.8 CConnection: Using RFB protocol version 3.8 TXImage: Using default colormap and visual, TrueColor, depth 24. CConn: Using pixel format depth 24 (32bpp) little-endian rgb888 CConn: Using Tight encoding
Das System kann nun ganz normal installiert werden, eine grafische Oberfläche benötigen wir nicht und auch sonst keine speziellen Einstellungen. Dieses System wird nur gebraucht um ein paravirtualisiertes Linux aufzusetzen. Bei mir stimmte die Tastenbelegung am ehsten, wenn ich das US-Layout ausgewählt hatte. Das spielt eigentlich keine Rolle, aber unbedingt beim vergeben des Kennworts beachten.
Nach ein paar Minuten und einem Reboot des Guests sollte Lenny einsatzbereit sein. Nun installieren wir noch debootstrap mit ‚apt-get install debootstrap‘ und sind bereit.
Teil 2: Installation des paravirtualisierten Linux
Die nächsten Schritte unbedingt genau befolgen, ansonsten kann es sehr mühsam werden, wenn die HVM-Domain mehrmals neu gestartet werden muss. Bei Problemen hilft oft der ‚virt-manager‘ weiter. Mit dem kann man Disks virtuellen Maschinen zuweisen, deren Konsole anschauen und auch interagieren.
Noch immer im virtualisieren Linux beginnen wir mit der Partitionierung der zweiten Festplatte ‚/dev/hdb‘. Eine einzelne aktive Linux-Partition reicht aus. Diese danach mit ‚mkfs.ext3 -L root /dev/hdb1‘ formatieren und mounten nach ‚/mnt‘.
Nach diesen Vorbereitungen beginnen wir mit der Installation eines paravirtualisierten Linux nach /mnt. Starten kann man diesen Prozess mit ‚debootstrap lenny /mnt‘. Dies dauert dann eine Weile, da viele Pakete aus dem Internet geladen werden.
Irgendwann sollte ‚Base system installed successfully‘ stehen und wir können weiterfahren.
- Kopieren der fehlenden Dateien in die neue Linux-Installation:
lenny-tmpl-hvm:~# cp /etc/apt/sources.list /mnt/etc/apt/ lenny-tmpl-hvm:~# cp /etc/network/interfaces /mnt/etc/network/
- Korrigieren der Datei /mnt/etc/inittab
Sämtliche Einträge der Art ‚…:/sbin/getty … tty..‘ können gelöscht und an deren Stelle eine einzelne Zeile eingefügt werden:1:2345:respawn:/sbin/getty 38400 hvc0
- Korrigieren der Datei /mnt/etc/fstab, dabei den Inhalt vollständig durch diesen Text hier ersetzen:
/dev/xvda1 / ext3 defaults 0 1 proc /proc proc defaults 0 1
- Jetzt löschen wir noch die Init-Scripte, die die Hardware-Uhr verändern wollen. Das schlägt innerhalb von Xen sowieso fehl:
lenny-tmpl-hvm:~# rm /mnt/etc/rcS.d/*clock*
- Zuletzt müssen wir noch einen Xen-Kernel installieren. Erst mit ‚chroot‘ in das neu vorbereitete Linux wechseln, den Paketcache aktualisieren und den Kernel, inklusive Grub, installieren:
lenny-tmpl-hvm:~# chroot /mnt lenny-tmpl-hvm:~# mount /proc lenny-tmpl-hvm:~# apt-get update lenny-tmpl-hvm:~# apt-get install grub linux-image-2.6-xen-amd64
- Bei mir hat grub jedoch keine /boot/grub/menu.lst geschrieben. Ein Aufruf von ‚update-grub‘ half auch nicht weiter. Also kurz von Hand die Datei mit folgendem Inhalt füllen:
title Debian root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-xen-amd64 root=/dev/xvda1 ro initrd /boot/initrd.img-2.6.26-2-xen-amd64
Möglicherweise muss der exakte Dateiname des Kernels angepasst werden.
Endlich geschafft, das komplett virtualisierte Linux kann heruntergefahren werden. Danach die zweite HD trennen mit:
pfexec virsh detach-disk lenny-tmpl-hvm hdb
Teil 3: Starten des paravirtualisierten Linux
Nun die Konfigurationsdatei für das neue Linux ablegen in der Datei lenny-tmpl-pvm.xml:
<domain type='xen'> <name>lenny-tmpl-pvm</name> <memory>524288</memory> <vcpu>1</vcpu> <bootloader>/usr/lib/xen/bin/pygrub</bootloader> <bootloader_args>-q</bootloader_args> <os> <type>linux</type> </os> <clock offset='utc'/> <on_poweroff>preserve</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <disk type='block' device='disk'> <driver name='phy'/> <source dev='/dev/zvol/dsk/rpool/xvm/debian-lenny/tmpl-pvm'/> <target dev='xvda' bus='xen'/> </disk> <interface type='ethernet'> <script path='/usr/lib/xen/scripts/vif-vnic'/> <target dev='vif2.0'/> </interface> <console type='pty'> <target port='0'/> </console> </devices> </domain>
Und endlich starten und gleich auf die Konsole verbinden:
thomas@srvt01:~$ pfexec virsh create lenny-tmpl-pvm.xml Domain lenny-tmpl-pvm created from lenny-tmpl-pvm.xml thomas@srvt01:~$ pfexec virsh console lenny-tmpl-pvm
Login mit „root“, ohne Passwort, sollte funktionieren. Bisher habe ich noch nicht herausgefunden, wie ich diese Konsole wieder beenden kann.
Was noch fehlt ist das korrigieren der selbstgebastelten menu.lst Datei von Grub. Dazu erst in /boot/grub/device.map die Zeile
(hd0) /dev/xvda
einfügen und mit ‚grub-install hd0‘ und ‚update-grub‘ die Konfiguration abschliessen:
lenny-tmpl-hvm:~# grub-install hd0 Searching for GRUB installation directory ... found: /boot/grub Installation finished. No error reported. This is the contents of the device map /boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (hd0) /dev/xvda lenny-tmpl-hvm:~# update-grub Searching for GRUB installation directory ... found: /boot/grub Searching for default file ... found: /boot/grub/default Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst Searching for splash image ... none found, skipping ... Found kernel: /boot/vmlinuz-2.6.26-2-xen-amd64 Updating /boot/grub/menu.lst ... done
Nicht vergessen ein Kennwort zu setzen, SSH zu installieren und geniessen. Jedoch würde ich erst dieses System klonen um bei weiteren Systemen diesen riesigen Aufwand nicht nochmals betreiben zu müssen.