Verwalten von Xen mit Xen-Tools, Xen-Shell und Argo

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man xen-tools, xen-shell und Argo auf einem Debian System installiert und verwendet. Alle drei Pakete stellen nützliche Tools für die Verwaltung von virtuellen Xen Maschinen bereit. Xen-tools ist eine Sammlung an Perl Skripten, mit denen Du Xen Gastdomains ganz einfach erstellen, aktualisieren und löschen kannst. Die Xen-Shell stellt den Besitzern von Xen Domains ein Kommandozeilen-Interface bereit, damit sie ihre Xen Domains ohne Hilfe des Server Administrators verwalten können. Mit Argo kannst Du Xen Domains durch ein Web Interface oder durch ein Menü in der Kommandozeile kontrollieren. Alle drei Pakete sind für Debian Systeme entwickelt worden, könnten aber auch auf anderen Distributionen funktionieren.

Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ich gehe davon aus, dass Du Xen 3 bereits auf Deinem Debian System (es funktioniert nicht mit Xen 2!) installiert hast, zum Beispiel aus den Quellen, wie in Kapitel 4 dieser Anleitung gezeigt wird: http://www.howtoforge.com/debian_sarge_xen_3.0.3. Bei mir haben die xen-tools nicht mit der Binary Xen Installation (Kapitel 5) funktioniert, vielleicht klappt es aber bei Dir. Auf meiner Xen Installation aus den Quellen funktionierten die xen-tools bei mir ausgezeichnet.

Der Hostname meiner Xen dom0 Domain ist in dieser Anleitung server1.example.com, ihre IP Adresse ist 192.168.0.100 und das Gateway ist 192.168.0.1. Ich möchte meine Gastdomains im /vserver/images Verzeichnis ablegen. Diese Werte können bei Dir anders ein.

Bitte pass auf, dass Du eine Zeile wie diese in /etc/hosts hast:

vi /etc/hosts


[...]
192.168.0.100 server1.example.com server1 [...]

2 Xen-Tools

Obwohl Debian Pakete für for xen-tools und xen-shell auf http://www.steve.org.uk/apt/ verfügbar sind, habe ich mich dafür entschieden, xen-tools und xen-shell aus den Quellen zu installieren, da das xen-tools Debian Paket bei mir ungültige Xen Konfigurationsdateien geschrieben hat, was nicht der Fall war, als ich die Quellen verwendet habe.

Zuerst installieren wir einige Voraussetzungen für xen-tools:

apt-get install libtext-template-perl perl-doc

Dann installieren wir xen-tools wie folgt:

cd /tmp
wget http://xen-tools.org/software/xen-tools/xen-tools-2.7.tar.gz
tar xvfz xen-tools-2.7.tar.gz
cd xen-tools-2.7
make install

Als Nächstes bearbeiten wir /etc/xen-tools/xen-tools.conf. Diese Datei beinhaltet die Standard Werte, die vom xen-create-image Skript verwendet werden, sofern Du keine anderen Werte in der Kommandozeile festlegst. Folgende Werte habe ich verändert und die anderen so gelassen:

vi /etc/xen-tools/xen-tools.conf


[...]
gateway = 192.168.0.1 netmask = 255.255.255.0 passwd = 1 kernel = /boot/vmlinuz-2.6-xenU #initrd = /boot/initrd.img-2.6.16-2-xen-686 mirror = http://ftp2.de.debian.org/debian/ [...]
Mit der passwd = 1 Zeile kannst Du ein Root Passwort festlegen, wenn Du eine neue Gastdomain erstellst. In der kernel Zeile musst Du den domU Kernel bestimmen, den Du für Deine Gastdomains verwenden möchtest. Wenn Deine Gastdomains keine Ramdisk brauchen um zu starten, dann kommentiere die initrd Zeile aus (das musste ich bei meiner Installation tun), anderenfalls bestimme die richtige Ramdisk. Definiere in der mirror Zeile einen Debian Spiegel, der sich in Deiner Nähe befindet.

Gib Acht, dass Du ein Gateway und eine Netzmaske bestimmst. Wenn Du dies nicht in der Kommandozeile festlegst wenn Du xen-create-image verwendest, haben Deine Gastdomains keinen Netzwerkbetrieb, selbst wenn Du eine IP Adresse festgelegt hast!

Lass uns nun unsere erste Gastdomain vm03.example.com mit der IP Adresse 192.168.0.103 erstellen:

xen-create-image --hostname=vm03.example.com --ip=192.168.0.103
--netmask=255.255.255.0 --gateway=192.168.0.1 --dir=/vserver/images
--dist=sarge --debootstrap

Die --netmask und --gateway Optionen sind hier überflüssig, da wir die gleichen Angaben in /etc/xen-tools/xen-tools.conf festgelegt haben. Sie zeigt jedoch, dass Du die gewünschten Einstellungen entweder in der Kommandozeile oder in /etc/xen-tools/xen-tools.conf festlegen kannst.

Dieser Befehl erstellt nun die Gastdomain vm03.example.com mit Debian Sarge unter Verwendung von Debians debootstrap Tool. Das kann einige Minuten in Anspruch nehmen. In der Zwischenzeit kannst Du eine andere Kommandozeile öffnen und Folgendes ausführen

tail -f /var/log/xen-tools/vm03.example.com.log

um herauszufinden, was sich hinter den Kulissen abspielt.

Nachdem die neue Gastdomain erstellt wurde, überprüfe /etc/xen/vm03.example.com.cfg. Sie sollte nun wie folgt aussehen (ich habe die Kommentare raus genommen):

vi /etc/xen/vm03.example.com.cfg


kernel  = '/boot/vmlinuz-2.6-xenU'
memory = '128' root = '/dev/sda1 ro' disk = [ 'file:/vserver//images/domains/vm03.example.com/disk.img,sda1,w', 'file:/vserver//images/domains/vm03.example.com/swap.img,sda2,w' ] name = 'vm03.example.com' vif = [ 'ip=192.168.0.103' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Wir können unsere neue virutelle Maschine wie folgt starten:

xm create -c /etc/xen/vm03.example.com.cfg

Mit dem xen-create-image Befehl kannst Du fast alle Einstellungen in der Kommandozeile festlegen. Sieh Dir dies an

man xen-create-image

um mehr herauszufinden. Hier ist ein weiteres Beispiel:

xen-create-image --size=2Gb --swap=128Mb --hostname=vm04.example.com
--ip=192.168.0.104 --netmask=255.255.255.0 --gateway=192.168.0.1 --dir=/vserver/images
--dist=sarge --debootstrap --fs=ext3 --kernel=/boot/vmlinuz-2.6-xenU --memory=32Mb
--image=sparse --mirror=http://ftp2.de.debian.org/debian/ --passwd

Damit wird die virtuelle Domain vm04.example.com. /etc/xen/vm04 erstellt. example.com.cfg sollte danach wie folgt aussehen (auch hier habe ich die Kommentare weg gelassen):

vi /etc/xen/vm04.example.com.cfg


kernel  = '/boot/vmlinuz-2.6-xenU'
memory = '32' root = '/dev/sda1 ro' disk = [ 'file:/vserver//images/domains/vm04.example.com/disk.img,sda1,w', 'file:/vserver//images/domains/vm04.example.com/swap.img,sda2,w' ] name = 'vm04.example.com' vif = [ 'ip=192.168.0.104' ] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
So kannst Du die neue virtuelle Maschine starten:

xm create -c /etc/xen/vm04.example.com.cfg

Es gibt noch drei weitere Skripte, die in xen-tools enthalten sind:

Mit xen-update-image kannst Du Pakete in Gastdomains aktualisieren, z.B. wie folgt:

xen-update-image --dir=/vserver/images vm03.example.com

xen-list-images zeigt alle Gastdomains, die mit xen-create-image erstellt worden sind:

xen-list-images

Die Ausgabe sieht wie folgt aus:

server1:~# xen-list-images
Name: vm03.example.com
Memory: 128
IP: 192.168.0.103

Name: vm04.example.com
Memory: 32
IP: 192.168.0.104

Mit xen-delete-image kannst Du Gastdomains entfernen, die mit xen-create-image erstellt worden sind:

xen-delete-image --dir=/vserver/images vm03.example.com


3 Xen-Shell

Xen-shell stellt ein besonderes Kommandozeilen-Interface zur Verfügung, das Benutzern erlaubt, sich mit dem Hostsystem (dom0) via SSH zu verbinden und ihre eigene virtuelle Xen Maschine zu kontrollieren. Diese Kommandozeile kennt nur Befehle, die benötigt werden um die virtuelle Maschine zu verwalten. Sie kann also nicht für andere Aufgaben verwendet werden. Sie erlaubt dem Besitzer außerdem ein neues Image seiner virtuellen Maschine zu erstellen (wenn er sein derzeitiges vermasselt hat), d.h. sie wird zurückgesetzt.

Damit eine virtuelle Maschine einem Benutzer zugewiesen werden kann, muss sie den gleichen Namen wie der Benutzer haben. Wenn Du zum Beispiel einen Benutzer bob hast, dann muss diese virtuelle Maschine auch bob heißen, an Stelle von vm03.example.com, etc.

Um dies zu demonstrieren, erstelle ich zunächst einen Benutzer bob und weise ihm ein Passwort zu:

useradd -d /home/bob -m -g users -s /bin/bash bob
passwd bob

Nun erstelle ich eine virtuelle Maschine namens bob:

xen-create-image --hostname=bob --ip=192.168.0.105 --netmask=255.255.255.0
--gateway=192.168.0.1 --dir=/vserver/images --dist=sarge --debootstrap

Dann fahren wir die Gastdomain hoch, um zu sehen, ob sie funktioniert:

xm create -c /etc/xen/bob.cfg

und fahren sie wieder runter:

xm shutdown bob

Als Nächstes installieren wir einige Voraussetzungen für xen-shell:

apt-get install sudo libterm-readline-gnu-perl

Danach installieren wir xen-shell wie folgt:

cd /tmp
wget http://xen-tools.org/software/xen-shell/xen-shell-0.5.tar.gz
tar xvfz xen-shell-0.5.tar.gz
cd xen-shell-0.5
make install

Nun müssen wir bobs Login Shell von/bin/bash zu /usr/bin/xen-login-shell ändern:

chsh -s /usr/bin/xen-login-shell bob

(Dieser Schritt ist optional wenn Du mit dem nano Text Editor zufrieden bist:

Als Nächstes ändere ich Debians Standard Text Editor zu vi:

update-alternatives --config editor

<-- 3 (/usr/bin/nvi)

)

Nun bearbeiten wir /etc/sudoers indem wir visudo verwenden. Wir müssen bob erlauben die Befehle /usr/sbin/xm und /usr/bin/xen-create-image zu verwenden, die Root Privilegien verlangen:

visudo


[...]
User_Alias XENUSERS = bob Cmnd_Alias XEN = /usr/sbin/xm Cmnd_Alias XENIMG = /usr/bin/xen-create-image XENUSERS ALL = NOPASSWD: XEN,XENIMG
Dies ist notwendig, da bob sonst nicht in der Lage sein wird, die reimage Funktion der xen-shell nutzen zu können.

Um die reimage Funktion nutzen zu können, brauchen wir außerdem ein Shell Skript namens image.sh in bobs home dir /home/bob. Dieses Skript muss die Befehle enthalten, die ausgeführt werden, um neue Gastdomains für bob zurückzusetzen oder zu erstellen. Der Inhalt ist Dir überlassen. Es könnte zum Beispiel so aussehen:

vi /home/bob/image.sh


#!/bin/sh
/usr/bin/sudo /usr/bin/xen-create-image --hostname=bob --ip=192.168.0.105 --netmask=255.255.255.0 --gateway=192.168.0.1 --dir=/vserver/images --dist=sarge --debootstrap --force
(Du solltest im Skript vollständige Pfade verwenden und musst den xen-create-image Befehl mit /usr/bin/sudo aufrufen, sonst darf bob xen-create-image nicht ausführen.)

Wir müssen das Skript ausführbar machen:

chmod 755 /home/bob/image.sh

Nun kann bob einen SSH Client seiner Wahl verwenden (wie PuTTY für Windows) und sich mit dom0 verbinden (192.168.0.100). Wenn alles klappt, sieht bob die xen-shell:


Folgende Befehle sind in der xen-shell verfügbar:
  • boot - Damit kannst Du Dein Xen Gastsystem starten.
  • console / serial - Mit diesen beiden, identischen Befehlen kannst Du auf Deine Xen Gastsystem-Konsole zugreifen, indem sie Dir erlauben Dich anzumelden wenn Dein Netzwerkbetrieb zusammengebrochen ist oder wenn Du den OpenSSH Server deaktiviert hast.
  • exit / quit - Diese beiden Befehle verlassen die Shell und speichern alle Befehle, die Du eingegeben hast in der ~/.xen-shell History-Datei.
  • help [command1 command2] - Wenn er ohne Parameter aufgerufen wird, zeigt der Hilfe-Befehl eine Liste verfügbarer Befehle sowie eine einzeilige Beschreibung dieser. Wenn Du für einen bestimmte Befehl Hilfe benötigst, kannst Du "help command" verwenen um Dir mehr Details anzeigen zu lassen.
  • passwd - Wenn sich der Client mit dem Hostsystem via OpenSSH verbindet, unter Verwendung eines Text-Passwortes, dann wird dieser Befehl erlauben, das Passwort zu ändern. Der Befehl ist deaktiviert/entfernt, wenn das Home Verzeichnis des Benutzers die Datei ~/.ssh/authorized_keys enthält - da angenommen wird, dass eine key-basierte Authentifizierung vorausgesetzt wird.
  • rdns [ip hostname] - Befehl erlaubt Dir entweder Deine derzeit Reverse DNS Einstellungen anzusehen oder sie zu aktualisieren. Rufe rdns ohne Parameter auf um Dein derzeitiges Setup anzusehen, oder führe "rdns 1.2.3.4 foo.bar.com" aus um den Reverse DNS für die IP 1.2.3.4 einzurichten. Merke: Du kannst nur den Reverse DNS für IPs einstellen, die Du kontrollierst, die in der Ausgabe von rdns aufgelistet sind. Sieh Dir die Installationsseite an, um zu sehen was benötigt wird, um dies vollständig zu implementieren.
  • reboot - Damit kannst Du Dein laufendes Xen Gastsystem neu starten.
  • reimage - Nach der Bestätigunsaufforderung und dem Countdown von 10 Sekunden, wird dieser Befehl Dein Xen Gastsystem löschen und eine neue Installation mittels Verwendung von xen-tools vollführen.
  • shutdown - Dieser Befehl beendet Dein derzeit laufendes Xen Gastsystem. Es bleibt runter gefahren bis Du einen Start-Befehl ausführst.
  • status - Dieser Befehl zeigt Dir den derzeitigen Status Deines Xen Gastsystems, was entweder "running/booted", oder "shutdown" sein wird. Aus Informationsgründen wird er Dir auch die Uptime des Hostsystems anzeigen.
  • uptime - Dieser Befehl ähnelt dem Statusbefehl und zeigt Dir die Uptime Deines Xen Gastsystems zusammen mit der Uptime des Hostsystems.
  • version - Dies zeigt Dir die Version der Xen shell an, die installiert ist, was die CVS Revision Nummer ist.

0 Kommentar(e)

Zum Posten von Kommentaren bitte