XEN: Domain anlegen

Zuerst legt man zwei Partitionen (oder wenn man LVM nutzt zwei logical Volumes) an, im folgenden hdax und hday genannt, und formatiert hdax mit dem Dateisystem des geringsten Misstrauens (z.B. ext3: mkfs.ext3 /dev/hday) und hday wird als Swap vorbereitet mkswap hday.
Falls man die Domain über drbd Spiegeln möchte sollte man hdax durch ein drbd-Device substituieren.

Danach mountet man hdax nach /mnt/ und installiert mit debootstrap (das Paket muss man beim ersten ‘mal installieren) ein Debian Basissystem.

mount /dev/hdax /mnt
debootstrap sarge /mnt http://ftp.debian.de/debian/
chroot /mnt base-config new

Nachdem das Basis-System nun installiert ist, muss man noch einige Dateien anpassen.

/mnt/etc/fstab

/dev/hda1       /       ext3    defaults        0       1
proc            /proc   proc    defaults        0       0
none            /tmp    tmpfs   defaults        0       0
/dev/hda2       none    swap    sw

Wenn man das vorgeschlagene Netzwerksetup nutzt die /mnt/etc/network/interfaces so, wobei x für eine für jede Domain eindeutige Nummer steht.

auto eth0
iface eth0 inet static
        address 10.0.5.x
        netmask 255.255.255.0
        network 10.0.5.0
        broadcast 10.0.5.255
        gateway 10.0.5.1

auto eth1
iface eth1 inet static
        address 10.0.10.x
        netmask 255.255.255.0
        network 10.0.10.0
        broadcast 10.0.10.255

Falls man für das VPN noch andere netze nutzt sollte man entweder die Netzmasken anpassen, oder bei eth1 noch passenden up route add -net einfügen.

Man kann nun noch die /mnt/etc/resolv.conf und die /etc/mnt/hostname anpassen, und danach mit umount /mnt die Partition aus dem Dateisystem aushängen.

Dann legt man in dem Verzeichnis /etc/xen/ eine Datei mit dem “Namen” (z.B. alpha, oder philipinen, oder asterix ..) der Domain an.
Der Inhalt sollte in etwa so seien:

#  -*- mode: python; -*-
#============================================================================
# Python configuration setup for 'xm create'.
# This script sets the parameters used when a domain is created using 'xm create'.
# You use a separate script for each domain you want to create, or 
# you can set the parameters for the domain on the xm command line.
#============================================================================

#----------------------------------------------------------------------------
# Kernel image file.
kernel = "/boot/xen/domU/vmlinuz-2.6.11.12-xenU"

Gibt den Pfad zu dem Kernel für diese Domain an

# Optional ramdisk.
#ramdisk = "/boot/initrd.gz"

# The domain build function. Default is 'linux'.
#builder='linux'

# Initial memory allocation (in megabytes) for the new domain.
memory = 48

Gibt den zugeteilten RAM in MB an. Achtung: jedes MB Arbeitsspeicher kann nur einmal verteilt werden.

# Which CPU to start domain on? #cpu = -1 # leave to Xen to pick

#----------------------------------------------------------------------------
# Define network interfaces.

# Number of network interfaces. Default is 1.
nics=2

# Optionally define mac and/or bridge for the network interfaces.
# Random MACs are assigned if not given.
vif = [ 'bridge=xen-inetbr', 'bridge=xen-intbr' ]

Gibt die beiden Bridges an die intern als eth0 und eth1 erscheinen werden.

#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
# Each disk entry is of the form phy:UNAME,DEV,MODE
# where UNAME is the device, DEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write.

disk = [ 'phy:hdax,hda1,w', 'phy:hday,hda2,w' ]

Ordnet die Blockdevices (Partitionen) der Domain zu, Muster phy:Partition-auf-dem-Server,Partition-in-der-Domain,w-für-schreibzugriff.

#----------------------------------------------------------------------------
# Set the kernel command line for the new domain.
# You only need to define the IP parameters and hostname if the domain's
# IP config doesn't, e.g. in ifcfg-eth0 or via DHCP.
# You can use 'extra' to set the runlevel and custom environment
# variables used by custom rc scripts (e.g. VMID=, usr= ).

# Set if you want dhcp to allocate the IP address.
#dhcp="dhcp"
# Set netmask.
#netmask=
# Set default gateway.
#gateway=
# Set the hostname.
#hostname= "vm%d" % vmid

# Set root device.
root = "/dev/hda1 ro"

# Root device for nfs.
#root = "/dev/nfs"
# The nfs server.
#nfs_server = '169.254.1.0'  
# Root directory on the nfs server.
#nfs_root   = '/full/path/to/root/directory'

# Sets runlevel 4.
#extra = "4"

#----------------------------------------------------------------------------
# Set according to whether you want the domain restarted when it exits.
# The default is 'onreboot', which restarts the domain when it shuts down
# with exit code reboot.
# Other values are 'always', and 'never'.

#restart = 'onreboot'

Nun sollte man mit xm create $name die Domain starten können.
Mit xm console $name bekommt man direkten Konsolenzugriff, alternativ falls der sshd schon läuft kann man natürlich auf die neue Domain auch per ssh zugreifen.

Ab jetzt unterscheidet sich die Arbeit in der Domain eigentlich nicht mehr von einem echten Server (bis halt auf die Tatsache das man in der Domain keinen Kernel & Bootloader braucht. Die Module sollte man falls man sie braucht natürlich nach /lib/modules kopieren, und auch die zum Kernel passende Version).

2 Kommentare

  1. Und schon wieder was zu meckern. ;)

    Das debootstrap lässt du die Daten nach /mnt/debian schieben, versuchst das chroot aber nach /mnt. Mich würde wundern, wenn das klappen würde. ;)

  2. hmm, ich hätte das ganze “live” schreiben sollen, damit ich es nicht aus meiner Doku & Erinnerungen wieder zusammenstückeln muss :-)

Comments are closed.