HowTo: Xen4 HVM mit Routing und Installation von CD/DVD-Image unter Debian Squeeze

 
Aufsetzend auf meinen vorherigen Blog-Eintrag der sich mit dem Installieren und Einrichten eines Xen4 mit paravirtualisierten Maschine auf einem Debian Squeeze beschäftigte, möchte ich nun zeigen wie man mehr oder weniger hübsch eine HVM bei eingerichtetem Routing erstellen kann. In diesem HowTo setze ich einen lauffähigen Xen4 vorraus.

 

Installation

Sofern noch nicht geschehen bitte noch das Paket für die HVM Unterstützung für Xen4 installieren:

root@xenhost:$ apt-get install xen-qemu-dm-4.0

 

Erstellen einer VM

Nachdem wir alle benötigten Pakete installiert haben erzeugen wir ein File das unsere HVM später als Festplatte nutzen soll:

root@xenhost:$ dd if=/dev/zero of=/home/xen/domains/vserver/disk.img bs=1k seek=10240k count=1

Dieser Befehl erzeugt uns im Verzeichnis /home/xen/domians/vserver/ eine Datei mit dem Namen disk.img und einer Größe von 10GB. Sollte eine andere Größe gewünscht sein, so einfach den Wert seek anpassen.

Nun benötigen wir noch eine Installations-CD z.b. die des Debian Squeeze und legen diese in ein Verzeichniss das wir später wiederfinden. 😉

root@xenhost:$ cd /home/xen/ && wget http://cdimage.debian.org/debian-cd/6.0.1a/i386/iso-cd/debian-6.0.1a-i386-CD-1.iso

Nachdem wir nun eine Festplatte und eine Installations-CD haben, müssen wir Xen nurnoch dazu bewegen, das er diese beiden in einer HVM begegnen lässt. 🙂

Darum erstellen wir in dem Ordner /etc/xen/ eine datei die uns als Konfiguration für eine HVM dienen soll, zur Vereinfachung hier eine Beispiel-Konfiguration von mir: (Einträge die evtl. angepasst werden müssen din fett markiert.

# Kerneleinstellungen
kernel       = ‚/usr/lib/xen-4.0/boot/hvmloader‘
builder      = ‚hvm‘
device_model =’/usr/lib/xen-4.0/bin/qemu-dm‘

memory       = ‚1024
vcpus        = ‚2

# Laufwerke
disk         = [ ‚file:/home/xen/domains/vserver/disk.img,ioemu:hda,w‘,’file:/home/xen/debian-6.0.1a-i386-CD-1.iso,hdc:cdrom,r‘ ]
#disk         = [ ‚file:/home/xen/domains/vserver/disk.img,ioemu:hda,w‘ ]

# Hostname
name         = ‚vserver

#  Networking
vif          = [ ‚type=ioemu, mac=00:16:3E:46:7B:99, vifname=vif-vserver, ip=188.40.38.125, bridge=eth0′ ]

# Behaviour
boot         = ‚dc‘

# VNC
vfb          = [ ‚type=vnc,vnclisten=0.0.0.0,vncunused=0,vncdisplay=1,vncpasswd=passwortvnc‚ ]

Erschlagen von einer relativ (!) großen Konfigurationsdatei wollen wir uns nun die einzelnen Gruppierungen ansehen:

Kerneleinstellungen:

  • kernel, builder und device_model: hierbei sagen wir Xen eigentlich nur, dass die erstellte VM vom Typ HVM sein soll und somit auch die richtigen Komponenten lädt
  • memory: hier geben wir an wieviel Arbeitsspeicher dieser VM zugewiesen werden soll
  • vcpus: ähnlich wie bei memory weisen wir hier die virtuellen CPUs, also in den meißten Fällen Kerne des Prozessors der VM zu.

Laufwerke: Hier werden unsere beiden erzeugten bzw. heruntergeladenenen Dateien in die VM eingebunden. Der Eintrag vor dem Komma gibt hierbei die Festplatte und der Zweite das Image-File unserer Debian Installations-Cd an und weist ihr verschiedene EInstellungen zu

Hostname: dieser Punkt sollte bereits bekannt sein und gibt der HVM lediglich einen Namen an derer wir sie später wiedererkennen und ansprechen können

vif:

  • type: ‚ioemu‘ ist in diesem fall nötig, da wir eine HVM und keine normale paravirtualisierten Maschine erstellen und somit auch Laufwerke und Festplatten in gewisser weise emultiert werden müssen
  • mac: dies ist die MAC-Adresse welche unsere virtuelle Netzwerkkarte später erhält. Die letzten 3 paare können beliebig verändert werden und es sollten nicht mehrere VMs mit der gleichen MAC läufen.
  • vifname: diese einstellung ist notwendig um später das Routing ans laufen zu bekommen, wichtig hierbei ist das man den hostnamen nach diesem muster anfügen sollte: vif-<hostname der hvm>
  • ip: die IP die später unsere HVM erhalten soll
  • bridge: auch diese EInstellung ist nötg um ein funktionierendes Routing zu erstellen

boot: dieser Parameter gibt die Boot-Reihenfolge, ähnlich wie man es auch im BIOS jedes Rechners einstellen kann an. ‚d‘ steht hierbei für die CD und ‚c‘ für die Festplatte

vfb: hier richten wir ein das wir später über den Port 5901 eine VNC-Verbindung über den Host zur VM aufbauen können. Das passwort welches hierbei gesetzt wird lautet im Beispiel „passwortvnc“

Nachdem wir unsere VM-Konfiguration erfolgreich erstellt haben erzeugen wir diese wie gewohnt mit:

root@xenhost:$ xm create /etc/xen/vserver.cfg

Nun sollte die VM laufen und bei folgendem Aufruf angezeigt werden:

root@xenhost:$ xm list

ACHTUNG: Bis hierhin haben wir zwar ein Netzwerk, doch mit diesem kommen wir nicht ins Internet! Installationen können also nur von CD durchgeführt werden

 

Das Problem mit dem Routing und der schlechte Workaround

In den aktuellen Xen Utilities ist leider ein Bug der das Routing im ursprünglichen Sinne leider nicht zulässt.

Im wiki von Debian findet man folgenden Workaround: http://wiki.debian.org/Xen#A.22network_routing_for_hvm_guests:.22

Da ich in nächster Zeit versuchen werde ein Script zu schrieben, welches die ganze Sache vereinfacht gehe ich hier nicht nocheinmal auf die Punkte im Wiki ein. Sollte es Probleme geben einfach melden!

 

HowTo: Xen4 auf Hetzner EQ4 mit Debian Squeeze

 
Nach einer langen Nacht und viel Frustration  hab ich es endlich geschafft eine Xen4-VM auf dem neusten Debian Squeeze zu installieren.

Für meine Installation von Xen nutzte ich ein frisch installiertes System mit dem Standard-Image „Debian-60-squeeze-64-minimal“ von Hetzner und Grub2 als Bootloader.

Zuerst einmal rate ich jedem ein Backup wichtiger Daten durchzuführen sofern zuvor keine Neuinstallation des Betriebssystem durchgeführt wurde, sondern auf ein bestehendes System aufgesetzt wird.

 

Installation

Bevor wir groß konfigurieren und VMs anlegen können müssen wir das System erstmal lauffähig installieren. Dazu nutzen wir einfach die Pakete aus dem Debian Repository:

Für ein 32 Bit System:

root@xenhost:$ aptitude -P install xen-hypervisor-4.0-i386 linux-image-xen-686

Für ein 64 Bit System:

root@xenhost:$ aptitude -P install xen-hypervisor-4.0-amd64 linux-image-xen-amd64

(Optional) Für die Unterstützung von HVM, also voll virtualisierten Maschinen wie es Windows benötigt, muss noch folgendes Paket installiert werden:

root@xenhost:$ aptitude install xen-qemu-dm-4.0

Bis hierhin sollte es keine Probleme geben. Nun müssen wir das ACPI in den Grub default Einstellungen deaktivieren, da es hierbei momentan einen Software-Fehler gibt. Dazu setzen wir einfach folgenden Wert in der Datei /etc/default/grub auf:

GRUB_CMDLINE_LINUX_DEFAULT=“acpi=off“

Anschließend muss noch der Xen-Kernel als erster Eintrag eingestellt werden:

root@xenhost:$ mv -i /etc/grub.d/10_linux /etc/grub.d/50_linux && update-grub2

Nun sollte das wichtigste eingerichtet sein und es steht erstmal ein Neustart an um zu testen ob der Server mit dem neuen Xen-Kernel starten kann:

root@xenhost:$ reboot

Sollte der Server nun auch nach mehreren Minuten nicht wieder laufen, dann bitte noch einmal alle zuvor beschriebenen Punkte durchgehen und prüfen das kein Fehler gemacht wurde. Sollte man sicher sein alles wie beschrieben gemacht zu haben hilft meist nurnoch ein Support-Ticket. Bei manchen Servern kommt es manchmal vor, dass sich das BIOS des Server verstellt hat o.Ä. und somit verhindert, dass der Server erfolgreich mit Xen4 startet.

 

Konfiguration

Nun solltet Ihr ein lauffähiges Xen4 besitzen, was nurnoch einige wenige Einstellungen benötigt bis wir auch schon die erste VM erstellen können. 🙂
Zunächst sollten wir das Start- und Stopp-Verhalten der VMs ändern, sodass das System nicht versucht unsere VMs bei einem Shutdown oder Neustart zu speichern, um diese beim booten wiederherzustellen. (Dieses Feature ist sehr Fehleranfällig und hat sehr oft Probleme, desweiteren sollten Systeme immer so eingerichtet werden, dass Sie ohne Probleme herunter und wieder hochgefahren werden können!)
Um dies zu bewerkstelligen setzen wir einfach folgende Werte in der Datei /etc/default/xendomains auf:

XENDOMAINS_RESTORE=false
XENDOMAINS_SAVE=““

So weit so gut. Um nun auch unsere zusätzlichen IPs für die virtuellen Maschinen nutzen zu können, benötigt es lediglich zwei kleine Änderungen in der Datei /etc/xen/xend-config.sxp in der wir folgende Werte ändern/setzen:

(vif-script vif-route)
(network-script ’network-route netdev=eth0′)

Diese Einstellungen allein reichen aus um den VMs das nutzen der zusätzlichen IPs zu ermöglichen, Einstellungen in der Netzwerkkonfiguration von Debian sind nicht notwendig.
Anschließend starten wir Xen neu um die Einstellungen zu übernehmen:

root@xenhost:$ /etc/init.d/xend restart

 

Erstellen einer VM mittels Xen-Tools

Um möglichst komfortabel die Konfigurations- und Image-Dateien anzulegen und eine neue VM mit bereits installiertem Debian zu erzeugen empfiehlt sich das Nutzen der Xen-Tools. Diese installieren wir wieder ganz einfach aus den Repository von Debian:

root@xenhost:$ aptitude install xen-tools

Wer bereits Xen-Tools der früheren Xen-Version 3.x genutzt hat glaubt nun sicher er könne einfach die gleichen Parameter ausführen um eine neue VM zu erzeugen. Doch Pustekuchen, zur Installation einer VM mit Debian Squeeze haben sich die Parameter teilweise geändert oder werden anders genutzt.
Lange Rede, kurzer Sinn. Hier ist ein Beispiel-Aufruf um eine VM mit vorinstallierten Debian Squeeze zu erstellen:

root@xenhost:$ xen-create-image --hostname=vserver --size=10Gb --swap=1024Mb --ip=188.40.38.123 --netmask=255.255.255.192 --gateway=188.40.38.75 --dir=/home/xen/linux --force --memory=1024Mb --kernel=/boot/vmlinuz-2.6.32-5-xen-amd64 --dist=squeeze --mirror=http://ftp2.de.debian.org/debian/ --passwd --install-method=debootstrap

Nun noch kurz zur Erklärung der wichtigstens Parameter:

  • hostname: der Hostname, so wie er später in der Auflistung der einzelnen VMs angezeigt wird
  • size: die Größe der virtuellen Festplatte auf der das neue Debian installiert wird
  • swap: die Größe des Swap-Spaces die für die Nutzung der neuen VM angelegt wird
  • ip: die IP unter welcher die VM später zu erreichen ist
  • netmask: die Netzwerkmaske in der die zuvor definierte IP liegt
  • gateway: das Gateway das die VM zugewiesen bekommt. in unserem Fall ist das die IP des Servers auf dem Xen4 läuft
  • dir: der Ordner in der alle Daten der VM gespeichert werden
  • memory: der Arbeitsspeicher welcher der VM zugewiesen sein soll
  • dist: welches Debian soll installiert werden
  • mirror: der Mirror um die notwendigen Dateien für die installation eines neuen Debian zu holen
  • passwd: ruft anschließend im terminal eine Passwortänderungs-Prompt auf um das Root-Passwort für die neue VM zu setzen
  • install-method: legt die installationsweise fest, in unserem Fall aus den Debian-Repository

Nach kurzer Zeit sollten dann die virtuellen Festplatten und die Konfigurationsdatein angelegt, das neue root-Passwort gesetzt und das Terminal bereit für neue Eingaben sein.

Der letzte Schritt um die VM nun in Betrieb zu nehmen ist ein einfacher Aufruf der Xen dazu anweist die neue VM in seine Verwaltung aufzunehmen: (Bitte „vserver“ mit dem zuvor von euch festgelegten Hostname austauschen)

root@xenhost:$ xm create /etc/xen/vserver.cfg

Mit diesem Befehl könnt ihr dann alle erzeugten VMs und ihren Status einsehen:

root@xenhost:$ xm list

Hat auch dies ohne Probleme funktioniert und Ihr könnt Eure VM in der Liste sehen könnt Ihr euch einfach auf die Konsole eurer VM verbinden und loslegen:

root@xenhost:$ xm console vserver

 

Ich hoffe ich konnte euch mit diesem kleinen HowTo weiterhelfen und auch die eine oder andere Unverständlichkeit beisteigen. Nun wünsche ich viel Spaß mit eurem neuen Xen4-Server und bin für Hinweise zu Fehlern oder Verbesserungen immer dankbar!