Da ich auf der Arbeit einen Windows Rechner benoetige, aber nicht hauptsaechlich auf ihm arbeiten moechte, habe ich angefangen ein wenig mit XEN herumzuexperimentieren. In ruhigeren Minuten habe ich angefangen meine lieblings Linux Distribution Debian auf eine 2te Festplatte zu installieren und XEN dort einzurichten. Gluecklicherweise habe ich dafuer auch genau die passende Hardware gehabt. Als mein Arbeitsrechner dient ein ASUS P5B Mainboard mit einem Intel Core2Duo E6320. Diese beiden Komponenten (Mainboard und CPU) unterstuetzen Intels Hardwarevirtualisierung. Dies ist unabdingbar um Windows unter XEN zum laufen zu bekommen, da der Windows Kernel nunmal closed Source ist und an ihm hier fuer keine Veraenderung vorgenommen werden kann. Die folgende Anleitung kann ich leider nicht noch einmal durchfuehren um ihre Richtigkeit zu ueberpruefen (ob ich ausversehen nicht ein Paket vergessen habe zu erwaehnen etc). Ich gebe aber gegen Ende des Tutorials die Seiten an, von denen ich meine Infos bezogen habe, damit jeder auch die Moeglichkeit hat, XEN einwandfrei zu benutzen.
Um euch schon mal ein klein wenig zu zeigen, wie ich XEN auf meinem PC auf der Arbeit nutze, habe ich hier einen Screenshot bereitgestellt. Als Wirtssystem laeuft wie erwaehnt Debian Etch mit KDE und fuer XEN wird aus dem Repository XEN 3.0.3 benutzt. Das rechte Fenster ist mein Windows auf dem ich Arbeiten muss und das linke Fenster ein Windows auf dem ich Konfigurationen testen kann. (Bild anklicken um zu vergroessern)
Als Voraussetzung fuer dieses Tutorial ist wie immer ein wenig Ahnung von dem, was ihr genau tut. Wichtig ist allerdings auch, dass ihr gewillt seid, euch ein wenig naeher mit dieser Materie zu beschaeftigen und mit zu denken. Aber diesmal ist nicht nur eure Einstellung gefragt, sondern auch die richtige Hardware. Ohne CPU und Mainboard die Hardwarevirtualisierung unterstuetzen koennt ihr kein Windows unter XEN installieren.
Wichtig fuer das verwenden von XEN ist zu wissen, dass nur die CPU bei der Hardwarevirtualisierung nicht emuliert wird. Die restlichen Komponenten des Computers (bsp Netzwerkkarte) werden wieder emuliert und somit ist der Geschwindigkeitsvorteil durch die Hardwarevirtualisierung meist wieder verloren (zumindest durch eigene Erfahrungen).
Der einzige Bootloader der XEN starten kann, ist (bisher) meines Wissens nach Grub. Die folgenden Eintraege werden automatisch bei der Installation der Pakete vorgenommen (bis auf das dom0_mem=512M).
Dieser startet XEN in der Zeile Kernel und gibt mit dem Parameter dom0_mem=512M an, dass unser Wirtssystem 512MB RAM bekommen soll. In der naechsten Zeile Module wird unser Debian dann von XEN gestartet, welches dann als Dom0 (ausgeschrieben Domain-0) angesehen wird. Dies ist die privilegierte Domain die durch den xend Kontrolle ueber XEN hat (also unser Wirtssystem). Weitere Betriebssysteme die virtuell gestartet werden, heissen DomU (ausgeschrieben Domain-unprivilegiert). Diese sind unsere Gastsysteme. Wichtig fuer das Verstaendnis hier bei ist es, zu wissen, wie eine CPU aufgebaut ist (http://de.wikipedia.org/wiki/Ring_%28CPU%29). XEN laeuft hierbei im Ring0 (also im innersten Bereich unserer CPU) und besitzt alle Rechte in der CPU. Wirts- und Gastsystem laufen beide in Ring1 und haben dementsprechend weniger Rechte als XEN selber. Damit unser Wirtssystem mit XEN kommunizieren und Befehle erteilen kann, verwendet dieser den xend. Das sei nur als kleine Erklaerung zur funktionsweise von XEN erwaehnt. Falls ihr gerne noch mehr wissen moechtet, kann ich euch nur diesen Wiki Eintrag empfehlen, welcher XEN sehr gut erklaert.
Wie bereits vorher erwaehnt, verwende ich fuer die Nutzung von XEN Debian Etch. Bevor wir nun anfangen, muessen wir also als erstes die benoetigten Pakete installieren. Da ich einen Core2Duo nutze, habe ich die Architektur amd64 verwendet.
Wenn wir dieses nun installiert haben, muessen wir erstmal XEN konfigurieren (wir wollen ja auch Netzwerk mit unserer VM haben), um ein virtuelles Windows in XEN zu installieren.
In der Datei /etc/xen/xend-config.sxp muessen wir eigentlich nur ein paar Aenderungen vornehmen, damit wir Netzwerk in unserer VM haben. Um Netzwerk in einer VM verfuegbar zu machen, gibt es eigentlich mehrere Moeglichkeiten. Ich nutze das Netzwerk via bridge. Hierbei wird aus unserer physikalischen Netzwerkkarte und den virtuellen (unser Wirtssystem bekommt hierbei auch eine Virtuelle) ein "virtueller Switch" (so kann man sich das eigentlich am besten vorstellen). Falls es euch genauer interessiert, wie dies genau funktioniert, koennt ihr es hier sehr schoen nachlesen.
Diese paar Zeilen muesst ihr nun in die oben genannte config eintragen (oder besser gesagt auskommentieren, da sie schon in der Config enthalten sind):
# da bei mir die eth1 genutzt wird und nicht eth0, muss dieses hier
# explizit in der Zeile angegeben werden
#
(network-script 'network-bridge netdev=eth1')
# If you are using only one bridge, the vif-bridge script will discover that,
# so there is no need to specify it explicitly.
#
(vif-script vif-bridge)
Wie schon in den Kommentaren erwaehnt, nutze ich eth1 als Netzwerkschnittstelle und muss diese deshalb explizit angeben. Falls ihr eth0 nutzt, reicht ein einfaches (network-script network-bridge).
Nun muesst ihr neustarten und den XEN-Kernel, der jetzt neu in eurem Bootmenue sein sollte, laden. Wenn ihr diesen geladen habt, solltet ihr nun sehr viele Netzwerkschnittstellen besitzen. Ein Aufruf von:
# es soll von d gestartet werden (die windows cd)
boot='d'
# vnc soll ausgeschaltet sein
vnc=0
vncviewer=0
# dieses startet ein Fenster mit unserer VM als Inhalt
sdl=1
# wenn wir unsere VM runterfahren, soll die Domain aufgeloest werden
on_poweroff='destroy'
Die Kommentare sollten als Erklaerung genuegen. Die mac-Adresse wird hier direkt angegeben (Zeile vif = ...), da sie sich ansonsten bei jedem start der VM aendert. Bei Windows macht dieses zwar keine Probleme, doch solltet ihr z.B. Debian noch einmal in einer VM installieren und die mac-Adresse nicht hier angeben, aendert sich eure Netzwerkschnittstelle bei jedem starten der VM in der Form ethX+1.
Nun koenntet ihr theoretisch schon eure VM starten und Windows installieren. Damit ihr den Befehl dafuer nicht immer manuell eingeben muesst, schreiben wir uns ein kleines Skript dafuer (und noch aus einem anderen Grund). Wir erstellen nun die Datei start_win.sh:
TUX@RECHNER:~$ touch /home/TUX/xen/start_win.sh
und geben ihr als Inhalt:
#!/bin/bash
xm create /home/TUX/xen/vm/windows.xm
#damit wird festgelegt, dass der CAP Wert bei 50% liegt
#das bedeutet, die VM darf max 50% CPU Leistung fuer sich beanspruchen
xm sched-credit -d win -c 50
Das Kommando xm sched-credit -d win -c 50 ist der eigentliche Grund fuer dieses Skript. Dieses besagt, dass die VM nur maximal 50% unserer CPU Leistung nutzen darf. Da ich mein Debian Etch zum Arbeiten nutze und nur fuer einige kleinere Aufgaben Windows nutzen muss, soll dieses nicht zu viel CPU Leistung haben. Leider kann man dieses bei der Debian Etch Version von XEN noch nicht in die Config Dateien der einzelnen VMs einbringen, weshalb dieses immer manuell eingegeben werden muss (oder wie wir es jetzt tuen via Skript).
Nun starten wir unser virtuelles Windows. Dazu fuehren wir als root unser Skript aus:
RECHNER:/home/Tux# sh /home/TUX/xen/start_win.sh
Nun koennt ihr euer Windows installieren. Wenn ihr damit fertig seid, aendert in eurer Config Datei /home/TUX/xen/vm/windows.xm folgendes:
# Laufwerke
disk = [ 'file:/home/TUX/xen/images/windowshdd.img,ioemu:hda,w' ]
# damit Windows direkt gestartet wird
boot='c'
Damit habt ihr das virtuelle CD-Laufwerk entfernt und die Bootreihenfolge veraendert. Nun koennt ihr euer Windows unter XEN einwandfrei nutzen.
Falls mir Probleme bekannt sein sollten (und deren Loesungen) werde ich sie in dieser Rubrik auffuehren. Solltet ihr Probleme haben oder geloest haben, koennt ihr sie mir gerne zuschicken. Ich nehme diese gerne in dieser Rubrik auf. Die eMail Adresse kann im Impressum eingesehen werden.
Ich habe festgestellt, dass die grafische Ausgabe der VM unter XEN einwandfrei funktioniert, wenn ihr eure Maus via PS/2 Anschluss nutzt. Unter USB gab es Probleme mit der Maus (sie hing z.B. in einer Ecke fest und lies sich nicht dort weg bewegen). Dieses Problem koennt ihr auch durch folgende Eintraege in eurer VM Config Datei umgehen:
# USB wird aktiviert
usb = 1
# als Maus wird Tablet genommen
usbdevice = 'tablet'
Durch diese Eintraege wirkt allerdings die Maus sehr traege, was bei Doppelklicken sehr nervig ist.