Bei XEN unterscheidet man zwischen Dom 0 und Dom U. Wobei Dom 0 der Hypervisor ist, also das Hauptsystem und alle weiteren Domänen aus Dom Us, den virtualisierten Systemen bestehen. Der Hypervisor kontrolliert alle anderen Systeme.
Ich verwende für das Grundsystem eine Ubuntu Serverinstallation ohne zusätzliche Pakete. Also nicht mit DNS oder LAMP installieren. Wahrscheinlich würde auch ein ganz normales Ubuntu funktionieren...
apt-get install vim ssh
Damit wir aus der Ferne arbeiten können.
Seit Gutsy haben sich einige Fehler eingeschlichen, wie wir später auch noch sehen werden. Für die Automatische XEN-Installation existiert jeweils ein Dummypaket welche alle nötigen Pakete nach lädt. Leider sind diese Pakete nicht immer vorhanden. In der Serverversion existiert z.B. nur ein Desktoppaket.
Für die Serverversion
apt-get install ubuntu-xen-server
Für die Desktopversion
apt-get install ubuntu-xen-desktop
Manuell
apt-get install linux-xen xen-utils-3.1 xen-tools bridge-utils xen-docs-3.1 xen-ioemu-3.1
Damit genügend Loopback-Devices erstellt werden können:
/etc/modules:
... loop max_loop=64 ...
In der xend Konfigurationsdatei /etc/xen/xend-config.sxp muss die Zeile (network-script network-bridge) aktiviert werden und die Zeile (network-script network-dummy) muss ausgeklammert werden.
Danach XEN mit /etc/init.d/xend restart neu starten.
Jetzt muss neu gestartet werden, damit der XEN-Kernel geladen wird.
Es gibt verschiedene Möglichkeiten um virtuelle Systeme zu installieren. Man kann für jedes System eigene Partitionen erstellen oder man kann die Dateisysteme in Imagedateien vorrätig halten. Anscheinend ist der Geschwindigkeitsvorteil bei physikalischen Partitionen nur marginal.
Erstellen wir zuerst ein Gastsystem auf der Basis eines Diskimages ähnlich wie bei VirtualBox.
mkdir /var/xen dd if=/dev/zero of=gast.img bs=1M count=1 seek=4095 dd if=/dev/zero of=swap.img bs=1M count=1 seek=512 mkfs.ext3 gast.img mkswap swap.img mount -o loop gast.img /mnt debootstrap gutsy /mnt cp -a /lib/modules/2.6.19-4-server/ /mnt/lib/modules
/mnt/etc/fstab:
proc /proc proc defaults 0 0 /dev/hda1 / ext3 defaults,errors=remount-ro 0 1 /dev/hda2 none swap sw 0 0
/mnt/etc/hostname
xen-gast1
/mnt/etc/hosts
127.0.0.1 localhost 127.0.1.1 xen-gast1
/mnt/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
# iface eth0 inet dhcp
iface eth0 inet static
address 192.168.2.21
netmask 255.255.255.0
gateway 192.168.2.1
cp /etc/apt/sources.list /mnt/etc/apt/
Jetzt benötigen wir noch eine XEN-Konfigurationsdatei für jeden Gast
/etc/xen/xen-gast1
kernel = "/boot/vmlinuz-2.6.22-14-xen" ramdisk = "/boot/initrd.img-2.6.22-14-xen" builder='linux' memory = 128 name = "xen-gast1" vcpus = 1 vif = [ 'bridge=xenbr0' ] disk = [ 'file:/var/xen/gast.img,hda1,w', 'file:/var/xen/swap.img,hda2,w' ] root = "/dev/hda1 ro" # extra = "3" für was ist das noetig?? # GUTSY BUGFIX: extra = ' TERM=xterm xencons=tty console=tty1'
GUTSY BUGFIX 2:
chroot /mnt update-rc.d -f hwclock.sh remove update-rc.d -f hwclockfirst.sh remove rm -f /etc/init.d/hwclock.sh /etc/init.d/hwclockfirst.sh /etc/udev/rules.d/85-hwclock.rules
GUTSY BUGFIX 3: /mnt/etc/udev/rules.d/70-persistent-net.rules:
...
# SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:16:3e:XX:XX:XX", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", NAME="eth0"
...
Falls der Kernel vom Dom0 hängen bleibt, muss vielleicht noch ACPI ausgeschaltet werden:
/boot/grub/menu.list:
... module /boot/vmlinuz-2.6.22-14-xen root=UUID=your-uuid-here ro console=tty0 acpi=off ...
Beim Starten darf die Gastpartition nicht mehr im Hauptsystem gmountet sein.
umount /mnt
Jetzt können wir unseren Gast starten:
xm create xen-gast1
Wobei der Name dem Namen der Konfigurationsdatei entspricht. Für weitere Operationen wird allerdings der Name aus der Konfigurationsdatei verwendet (name = “xen-gast1”). Daher sollten diese gleich sein um Probleme zu vermeiden.
Mit dem Kommando xm list können wir überprüfen, welche Domänen gerade laufen. Mit dem Kommando xm shutdown xen-gast1 können wir ein System sauber runterfahren.
Wenn der Platz einer virtuellen Partition knapp wird, so kann man das Dateisystem vergrössern. Dazu muss zuerst die Gast Domäne angehalten werden.
xm shutdown xen-gast1
Jetzt können wir die Datei um die gewünschte Grösse erweitern.
dd if=/dev/zero bs=1M count=1024 >> gast1.img resize2fs -fp gast1.img
Und die Gastdomäne wieder starten
xm create xen-gast1
apt-get install language-pack-de-baseInstall/Reconfigure localeconf:
apt-get install localeconf dpkg-reconfigure localeconf
Install/reconfigure locales:
apt-get install locales dpkg-reconfigure locales
Zuerst das richtige Zonenfile ins /etc linken:
ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime
Jetzt die Zeit neu synchronisieren, falls der NTP Dienst läuft, diesen zuerst stoppen.
/etc/init.d/ntp stop # nur nötig falls NTP am laufen ist ntpdate ntp.ubuntu.com /etc/init.d/ntp start
Und die aktuelle Zeit in die Systemuhr übertragen. Dies geht aber nur im Dom0!
/sbin/hwclock --systohc
Bisherige Installationen haben wir immer mit Bridging realisiert. Für NAT spricht der Vorteil, dass man intern ein virtuelles Netzwerk zur Verfügung hat. Ausserdem haben wir auf dem Hetzner XEN mit routing nicht zu laufen bekommen.
/etc/xen/xend-config.sxp:
... (network-script network-nat) (vif-script vif-nat) ...
/etc/init.d/xend restart
Jetzt müssen wir auch noch das Dom0 System fürs Masqerading vorbereiten:
#!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # erste Externe IP auf erste interne IP iptables -t nat -I PREROUTING -d XX.XX.XX.01 -j DNAT --to 10.0.0.1 iptables -t nat -I POSTROUTING -s 10.0.0.1 -j SNAT --to XX.XX.XX.01 # zweite Externe IP auf zweite interne IP iptables -t nat -I PREROUTING -d XX.XX.XX.02 -j DNAT --to 10.0.0.2 iptables -t nat -I POSTROUTING -s 10.0.0.2 -j SNAT --to XX.XX.XX.02
Um eine DomU zu erstellen können wir die xen-tools verwenden:
xen-create-image --hostname=gast1 --size=2Gb --swap=512Mb --memory=256Mb --ip=10.0.0.1 --netmask=255.255.255.0
Folgende Quellen dienten als Grundlage:
http://wiki.hetzner.de/index.php/Xen
http://wiki.ubuntuusers.de/Baustelle/Xen-Server_mit_Feisty
https://help.ubuntu.com/community/XenVirtualMachine/XenOnUbuntuFeisty
http://www.pro-linux.de/work/virtual-ha/virtual-ha5.html
http://www.drbd.org/
http://www.bndlg.de/kursangebote/aglinux/index.php/XEN-Installation
http://www.eadz.co.nz/blog/article/xen-gutsy.html