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.

4 Argo

Argo hat einen Client, geschrieben in PHP, der ein Web Interface für Xen bereitstellt. Um diese PHP Skripte ausführen zu können, benötigen wir einen Web Servr mit PHP:

apt-get install apache2 apache2-doc

apt-get install libapache2-mod-php4 libapache2-mod-perl2 php4 php4-cli php4-common php4-curl php4-dev php4-domxml php4-gd php4-imap php4-ldap php4-mcal php4-mhash php4-mysql php4-odbc php4-pear php4-xslt

Folgende Frage wird Dir gestellt:

Continue installing libc-client without Maildir support? <-- Yes

Es gibt Debian Paket für Argo, die wir installieren können. Dazu bearbeiten wir /etc/apt/sources.list und fügen diese beiden Zeilen hinzu:

vi /etc/apt/sources.list


[...]
deb http://www.steve.org.uk/apt sarge main non-free contrib deb-src http://www.steve.org.uk/apt sarge main non-free contrib [...]
Dann führen wir Folgendes aus

apt-get update

und installieren Argo:

apt-get install argo-client-dialog argo-client-php argo-server

Um uns mit Argo verbinden zu können, müssen wir einen Benutzernamen und ein Passwort bereitstellen. Der Standard Benutzername ist "admin", das Standard Passwort ist "password". Beides wird in /etc/argo-server/argo-server.conf definiert. Wenn Du magst, kannst Du sie ändern:

vi /etc/argo-server/argo-server.conf


[...]
admin : verysecretpassword, * [...]
Als Nächstes müssen wir den Standard Apache vhost ändern, damit wir auf Argo mit einem Web Browser zugreifen können. Daher ersetzen wir den Standard Apache vhost wie folgt:

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
cat /dev/null > /etc/apache2/sites-available/default
vi /etc/apache2/sites-available/default

<VirtualHost *>
DocumentRoot /usr/share/argo/ ServerName xen ServerAlias xen.my.flat DirectoryIndex index.php # Logfiles ErrorLog /var/log/apache2/xen.log CustomLog /var/log/apache2/xen.log combined </VirtualHost>
und starten Apache neu:

/etc/init.d/apache2 restart

Dann starten wir Argo:

/etc/init.d/argo-server start

Nun kannst Du Deinen Browser auf http://192.168.0.100/ richten und Dich anmelden. Das Web Interface ist sehr einfach und überschaubar:





Das Argo Interface kannst Du auch in der Kommandozeile aufrufen, indem Du Folgendes verwendest

argo-dialog

Das Interface sieht wie folgt aus:






Viel Spaß!

5 Links