Debian Lenny paravirtualisert unter XVM

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:

  1. Installation eines vollständig virtualisierten (HVM) Debian Linux direkt ab Boot-CD
  2. Installation eines paravirtualisierten Linux (PVM) auf eine zweite Disk aus dem HVM-Linux sowie einige Anpassungen an der Konfiguration
  3. Trennen der zweiten Disk aus dem HVM-Linux und konfigurieren eines paravirtualisierten Systems mit dieser Disk
  4. 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

Bootscreen von Lenny in XVM

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.

debootstrap bei der Arbeit

Irgendwann sollte ‚Base system installed successfully‘ stehen und wir können weiterfahren.

  1. 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/
    
  2. 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
  3. 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
    
  4. 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*
  5. 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
  6. 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.

Dieser Beitrag wurde unter OpenSolaris, OpenSolaris Fileserver veröffentlicht. Setze ein Lesezeichen auf den Permalink.
Warning: count(): Parameter must be an array or an object that implements Countable in /home/httpd/vhosts/blog-it.ch/httpdocs/wp-includes/class-wp-comment-query.php on line 405