Debian XEN Installation

Aus Neobikers Wiki
Zur Navigation springen Zur Suche springen

Hier beschreibe ich (neobiker) meine erste XEN Installation mit Debian Sarge - vielleicht kann ja jemand was damit anfangen...(zum spicken).


Hinweis: Ich bin inzwischen auf Debian Etch umgestiegen, Details dazu gibt es hier.



Ausgangssituation unter Sarge (Etch siehe hier):

Intel P4 1.7 GHz, 750MB RAM, 2x 40 GB Disk, 2x 100 MBit Ethernet

AVM Fritzcard PCI


Zielsystem:

- Disks mit RAID1 gespiegelt, Partitionierung mit LVM

- XEN 3.0.2 Hypervisor Host-System ohne zusätzliche Funktionen!

- Development System (zum Kompilieren usw.)

- mehrere weitere virtuelle Systeme (Firewall, DMZ, usw.)


Debian Installation

Ich installiere ein neues Debian System mittels der Netinst Methode.

Debian Sarge 3.1r3 ISO-Image (laden und brennen): http://cdimage.debian.org/debian-cd/3.1_r3/i386/iso-cd/debian-31r3-i386-netinst.iso

Kernel 2.6 Installation:

boot: linux26

Installations-Dialog bis zur Partitionierung der Disks:

Language: English
Country: Germany
Keyboard Layout: German
Hostname: xen0
Domain name: neobiker.de

Die Partitionierung mit RAID1 und LVM ist nicht trivial. Wichtig ist die Reihenfolge:

1. Partitionierung der Disks
2. RAID Konfigurieren
3. LVM-Filesystem definieren
4. EXT3 Filesystem installieren
5. Mount Points eintragen

Ich partitioniere beide Disks mittels Manual partition disks wie folgt:

1. Disk hda Partitionieren
1.0 GB     RAID   <-- bootable YES
4.0 GB     RAID
30  GB     RAID
2.0 GB     swap

2. Disk hdc Partitionieren
1.0 GB     RAID   <-- bootable YES
4.0 GB     RAID
30  GB     RAID
2.0 GB     swap

Jetzt muss das RAID konfiguriert werden Configure software RAID:

create md device - RAID1 - 2 active - 0 spare

RAID Konfiguration: 2/0 (Disk/Spare)
   md0:  hda1 + hdc1
   md1:  hda2 + hdc2
   md2:  hda3 + hdc3

Jetzt können die RAID Devices #0 (ext3), #1 (ext3) und #2 (lvm) formatiert werden:

RAID 1 device #0
    #1   1GB  ext3    /boot
RAID 1 device #1
    #1   4GB  ext3    /
RAID 1 device #2
    #1  30GB  LVM

Man kann das natürlich auch alles in eine grosse Partition plus swap nehmen.

Die LVM Konfiguration von /dev/md2 als /data machen wir später von Hand.

Weiter mit dem Installations-Dialog:

Grub in MBR: YES
Finish Installation: Continue

Reboot des Rechners ...

Die Debian Konfiguration startet wieder automatisch, hier

Hardware Clock GMT: No
Timezone Europe/Berlin: YES
...
APT Configuration: FTP
Mirror Country: Germany
Debian Mirror: ftp.de.debian.org
Proxy:
...
Mail configuration: No Config at this time

Damit GRUB im Fehlerfalle auch von der 2. Platte booten kann, muss GRUB auch in den MBR der 2.ten Disk installiert werden:

grub

grub> device (hd0) /dev/hdc
grub> root (hd0,0)
grub> setup (hd0)

Netzwerk

Statische IP Konfiguration für Server (bei Servern immer). Ich füge gleich 2 Bridges für XEN hinzu, die können später verwendet werden.

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto eth0
iface eth0 inet static
        address 192.168.0.10
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

# oder alternativ eth0 über DHCP
# iface eth0 inet dhcp

# XEN bridge to Dom0, LAN (GREEN) and virtual firewall (GREEN)
auto xenbr0
iface xenbr0 inet manual
        bridge_ports none
        bridge_fd 1
        bridge_stp off
        bridge_hello 1
        down ifconfig xenbr0 down

# 2.nd XEN bridge -> between DMZ and virtual firewall (ORANGE)
auto xenbr1
iface xenbr1 inet manual
        bridge_ports none
        bridge_fd 1
        bridge_stp off
        bridge_hello 1
        down ifconfig xenbr1 down

Eine 2. IP Adresse könnte man auf die gleiche physikalische Netzwerkkarte eth0.0 legen (dito mit eth0.1, eth0.2 ...):

auto eth0:0
iface eth0:0 inet static
        address 192.168.0.11
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

Hostnamen definieren

Datei /etc/hosts editieren:

127.0.0.1       localhost.localdomain   localhost
192.168.0.10    xen0.neobiker.de     xen0
192.168.0.11    xen01.neobiker.de    xen01

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Namensauflösung

Ich benutze in meinem LAN neobiker.de einen eigenen Nameserver, der auch externe Adressen auflöst. Datei /etc/resolv.conf anpassen:

search neobiker.de
nameserver 192.168.0.2

Sonstige Konfigurationen

APT

Ich trage gleich ein paar wichtige Repositories in die Datei /etc/apt/sources.list ein:

# debian stable online quellen
deb     ftp://ftp.de.debian.org/debian/ stable main non-free contrib
deb-src ftp://ftp.de.debian.org/debian/ stable main non-free contrib

# debian security online quellen
deb     http://security.debian.org/ stable/updates main non-free contrib
deb-src http://security.debian.org/ stable/updates main contrib non-free
#deb     http://security.debian.org/ testing/updates main non-free contrib
#deb-src http://security.debian.org/ testing/updates main contrib non-free
#deb     http://security.debian.org/ unstable/updates main non-free contrib
#deb-src http://security.debian.org/ unstable/updates main contrib non-free

# debian volatile online quellen
deb     http://volatile.debian.net/debian-volatile sarge/volatile main
deb-src http://volatile.debian.net/debian-volatile sarge/volatile main

# backports repository
deb     http://www.backports.org/debian/ sarge-backports main contrib non-free

# weitere repositories, z.B. clamv updates
deb     ftp://ftp.de.debian.org/debian-volatile sarge/volatile main

# debian testing online quellen
deb     ftp://ftp.de.debian.org/debian testing main non-free contrib
deb-src ftp://ftp.de.debian.org/debian testing main non-free contrib

# debian unstable online quellen
#deb     ftp://ftp.de.debian.org/debian unstable main non-free contrib
#deb-src ftp://ftp.de.debian.org/debian unstable main non-free contrib

# c't repository für kernel binaries und quellen
#deb     ftp://ftp.heise.de/pub/ct/projekte/srv binary/
#deb-src ftp://ftp.heise.de/pub/ct/projekte/srv source/
#deb     http://www.heise.de/ct/ftp/projekte/vdr4 experimental/
#deb     http://www.heise.de/ct/ftp/projekte/vdr45 experimental/

# c't repository wie avm-module etc.
#deb     http://www.heise.de/ct/ftp/projekte/srv binary/
#deb     http://www.heise.de/ct/ftp/projekte/srv ipcop/

Über die Datei /etc/apt/preferences wird mittels Pinning bestimmten Paketen ein anderes Release zugewiesen - Default ist aber stable!

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=sarge
Pin-Priority: 900

Package: *
Pin: release a=sarge-backports
Pin-Priority: 600

Package: *
Pin: release a=testing
Pin-Priority: 500

Package: *
Pin: release a=unstable
Pin-Priority: -10

Package: *
Pin: release o=Debian
Pin-Priority: -10

Installation updaten

Jetzt kann die gesamte Installation aktualisiert werden:

apt-get update && apt-get dist-upgrade

Uhrzeit automatisch aktualisieren

Die Uhrzeit aktualisiere ich über ntpd.

apt-get install ntp ntpdate

LVM Konfiguration

Die grosse Partition soll für grössere Flexibilität mit LVM installiert werden. Evtl. ist LVM nachzuinstallieren (war zumindest bei mir nötig?!).

apt-get install lvm2 lvm-common

Jetzt die Konfiguration der LVM-Partition: Es wird ein physisches Volume angelegt, welches mehrere logische Volume-Gruppen aufnehmen kann. Wir legen nur eine Volume-Gruppe an:

pvcreate /dev/md2

vgcreate data /dev/md2

Dort (in der Volumegroup data) können jetzt die logischen Volumes installiert werden:

lvcreate -L 10G -n devel data
lvcreate -L 3G -n vm01 data
lvcreate -L 3G -n vm02 data

Eine Development Partition (10GB) und 2x 3GB Partitionen für virtuelle Maschinen vm01 und vm02.

Jetzt das Filesystem formatieren:

mkfs.ext3 /dev/data/devel
mkfs.ext3 /dev/data/vm01
mkfs.ext3 /dev/data/vm02

Die Konfiguration in /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/md1        /               ext3    defaults,errors=remount-ro 0       1
/dev/md0        /boot           ext3    defaults        0       2
/dev/hda5       none            swap    sw              0       0
#/dev/hdc5       none            swap    sw              0       0
/dev/hdd        /media/cdrom0   iso9660 ro,user,noauto  0       0
/dev/hdb        /media/cdrom1   iso9660 ro,user,noauto  0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
#/dev/data/devel /data/devel     ext3    defaults        0       0
/dev/data/vm01  /data/vm01      ext3    defaults        0       0
/dev/data/vm02  /data/vm02      ext3    defaults        0       0
/dev/data/vm03  /data/vm03      ext3    defaults        0       0

Und die Partitionen mounten

mkdir -p /data/devel /data/vm01 /data/vm02
#mount /data/devel
mount /data/vm01
mount /data/vm02

XEN Installation

Ich installiere zuerst die XEN-Binaries, da ich in dem Hypervisor-Hostsystem keine Development-Umgebung zum Übersetzen von Sourcen installieren möchte (und anderes Zeugs auch nicht). Ein paar weitere bereits installierte Pakete können auf dem reinen Hostsystem auch deinstalliert werden.

apt-get remove exim4 exim4-base lpr nfs-common portmap pidentd
apt-get remove pcmcia-cs pppoe pppoeconf ppp pppconfig

Zusätzlich braucht XEN aber noch ein paar weitere Pakete, welche wir in einer aktuelleren Version als Backport installieren. Dazu passen wir die Datei /etc/apt/preferences an und fügen folgende Definitionen hinzu:

Package: xen-3.0
Pin: release a=sarge-backports
Pin-Priority: 999

Package: linux-2.6
Pin: release a=sarge-backports
Pin-Priority: 999

Package: xen-tools
Pin: release a=sarge-backports
Pin-Priority: 999

Package: udev
Pin: release a=sarge-backports
Pin-Priority: 999

Package: lsb
Pin: release a=sarge-backports
Pin-Priority: 999

Package: module-init-tools
Pin: release a=sarge-backports
Pin-Priority: 999

Package: grub
Pin: release a=sarge-backports
Pin-Priority: 999

Jetzt die Pakete auf die neuen Versionen hochziehen:

apt-get update && apt-get dist-upgrade

Es gibt noch ein paar weitere Abhängigkeiten einiger Pakete, die installieren wir deshalb einzeln:

apt-get install screen ssh debootstrap python python2.3-twisted iproute 
apt-get install bridge-utils libcurl3-dev sysfsutils

apt-get install module-init-tools/sarge-backports
apt-get install grub/sarge-backports
apt-get install makedev/sarge-backports
apt-get install lsb-base/sarge-backports
apt-get install mdadm/sarge-backports

dpkg --purge hotplug

Hotplug brauchen wir nicht mehr, wir verwenden udev.

Jetzt installieren wir den XEN Hypervisor und den XEN-Kernel für Intel Pentium4:

apt-get install xen-tools/sarge-backports
apt-get install xen-hypervisor-3.0-i386 xen-utils-3.0

### folgender XEN Kernel läuft bei mir nicht, ich muss die Alternative nehmen ###
# apt-get install linux-image-2.6.16-2-xen-686

Alternativ kann man auch den original XEN-Kernel installieren:

cd /usr/src
wget http://bits.xensource.com/Xen/latest/xen-3.0.2-install-x86_32.tgz

tar xvzf xen-3.0.2-install-x86_32.tgz
cd xen-3.0.2-2-install

./install.sh

update-rc.d xend defaults 20 21
update-rc.d xendomains defaults 21 20

Aus Performance Gründen wird unter XEN 3.0.2 noch die TLS Librarie deaktiviert.

mv /lib/tls /lib/tls.disabled

Stattdessen soll laut XEN besser eine XEN-friendly libc6 Library verwendet werden, die läuft wohl aber erst ab Debian Etch.

apt-get install libc6-xen

XEN Boot-Einträge für GRUB

Die initrd für XEN muss erst noch angelegt (mkinitrd oder mkinitramfs) werden:

cd /boot
mkinitrd -o /boot/initrd-2.6.16-xen 2.6.16-xen

Zum booten muss grub noch entsprechende Einträge in der Datei /boot/grub/menu.list erhalten:

title           Xen 3.0-i386 / Debian GNU/Linux, kernel 2.6.16-xen-686
root            (hd0,0)
kernel          /xen-3.0-i386.gz
module          /vmlinuz-2.6.16-xen root=/dev/md1 ro console=tty0
module          /initrd-2.6.16-xen
savedefault
boot

title           Xen 3.0-i386 / RAID 1 von 2. Disk booten
root            (hd1,0)
kernel          /xen-3.0-i386.gz
module          /vmlinuz-2.6.16-xen root=/dev/md1 ro console=tty0
module          /initrd-2.6.16-xen
savedefault
boot

Jetzt kann ein reboot folgen und hoffentlich den XEN Hypervisor starten ...

reboot

XEN Konfiguration

Ich liste mal eine XEN Installation in eine eigene Partition und in eine Image Datei auf (wie beim c't Server die UML).

Konfig-Datei /etc/xen/devel für eine XEN-Installation in einer eigenen (LVM-) Partition /data/devel:

name="devel"
kernel="/boot/vmlinuz-2.6.16-xen"
root="/dev/hda1"
memory=256
disk=['phy:/dev/data/devel,hda1,w','file:/dev/hdc5,hda2,w']

# network
vif=[ 'mac=aa:00:00:00:00:01, bridge=xenbr0' ]
dhcp="dhcp"

extra="3"

Evtl. benötigt der Kernel eine Ramdisk zum booten, das hängt von den im Kernel fest einkompilierten Modulen (u.a. das Filesystem ab). Dann ist ein zusätzlich ein ramdisk Eintrag notwendig, z.B. wie:

name="devel"
kernel="/boot/vmlinuz-2.6.16-xen"
ramdisk="/boot/initrd.img-2.6.16-xen"
root="/dev/hda1"
memory=256
disk=['phy:/dev/data/devel,hda1,w','file:/dev/hdc5,hda2,w']

# network
vif=[ 'mac=aa:00:00:00:00:01, bridge=xenbr0' ]
dhcp="dhcp"

extra="3"

Konfig-Datei /etc/xen/vm01 für eine XEN-Installation in einer Image Datei unter /data/vm01:

name="vm01"
kernel="/boot/vmlinuz-2.6.16-xen"
root="/dev/hda1"
memory=256
disk=['file:/data/vm01/root.img,hda1,w','file:/data/vm01/swap.img,hda2,w']

# network
vif=[ 'mac=aa:00:00:00:00:02, bridge=xenbr0' ]

# 2 Netzinterfaces - für z.B. DMZ an xenbr1
#vif=[ 'mac=aa:00:00:00:00:02, bridge=xenbr0', 'mac=aa:00:00:00:01:02, bridge=xenbr1' ]

dhcp="dhcp"

# PCI-Card Delegation
# pci=['02:09.0']

extra="3"

Die virtuelle Maschine devel wird mittels

xm create -c devel

gestartet, und mit

xm shutdown devel

beendet.

Virtuelle Maschine installieren

Installation von XEN in eine eigene Partition

cd /data

debootstrap --arch i386 sarge devel http://ftp.de.debian.org/debian

chroot /data/devel
apt-setup

Installation von XEN in ein Image-File

cd /data/vm01

dd if=/dev/zero of=root.img bs=1024k count=2600
dd if=/dev/zero of=swap.img bs=1024k count=200

mkfs.ext3 root.img
mkswap swap.img

mkdir root
mount -o loop /data/vm01/root.img /data/vm01/root

debootstrap --arch i386 sarge root http://ftp.de.debian.org/debian

chroot /data/vm01/root
apt-setup

Weitere Konfigurationen

Jetzt muss APT in dieser virtuellen Maschine wieder angepasst werden (siehe weiter oben).

vi /etc/apt/sources.list

Alle testing durch stable ersetzen, oder besser die Konfiguration von oben übernehmen.

apt-get update && apt-get upgrade

apt-get install localeconf
   # Manage locale configuration files with debconf? <-- Yes
   # Environment settings that should override the default locale: <-- do not select anything
   # Replace existing locale configuration files? <-- Yes
   # Default system locale: <-- e.g. en_US ISO-8859-1

base-config

apt-get install ssh

Mit base-conf werden Timezone und User/Passwords konfiguriert.

Jetzt noch die /etc/fstab anpassen:

/dev/hda1   /          ext3    defaults      1       2
/dev/hda2   none       swap    sw            0       0
/dev/pts    devpts     gid=5,mode=620        0       0
none        /dev/shm   tmpfs   defaults      0       0

/etc/network/interfaces

auto lo
iface lo inet loopback
        address 127.0.0.1
        netmask 255.0.0.0

auto eth0
iface eth0 inet dhcp

# oder statisch
#iface eth0 inet static
#        address 192.168.2.25
#        netmask 255.255.255.0
#        network 192.168.2.0
#        broadcast 192.168.2.255
#        gateway 192.168.2.1
#        nameserver 192.168.2.2
# bei Problemen hilft evtl. auch:
#        post-up ethtool -K eth0 tx off

/etc/hosts

127.0.0.1       localhost.localdomain   localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Jetzt kann die chroot Umgebung wieder verlassen werden. Es müssen noch die XEN Kernel-Module in das Image kopiert werden.

exit

# partition /dev/devel
cp -dpR /lib/modules/2.6.16-xen /data/devel/lib/modules/
mv /data/devel/lib/tls /data/devel/lib/tls.disabled

# image file /data/vm01/root.img
cp -dpR /lib/modules/2.6.16-xen /data/vm01/root/lib/modules/
mv /data/vm01/root/lib/tls /data/vm01/root/lib/tls.disabled
umount /data/vm01/root

Jetzt sollten die virtuellen Maschinen devel und vm01starten (xm create -c devel) und können anschliessend ganz normal weiter konfiguriert/benutzt werden (Pakete installieren, updates etc.).

Die VMs die in einer Image Datei residieren (hier also vm01) benötigen das Loop Device zum starten. Dieses wird evtl. nicht automatisch beim booten geladen, also:

vi /etc/modules

# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a "#", and everything on the line after them are ignored.

ide-cd
ide-disk
ide-generic
psmouse
loop

Ausserdem werden je VM 2 Loop Devices benötigt, der Kernel unterstützt normalerweise nur 8 Loop Devices. Wenn die nicht ausreichen, kann man eine Kernel-Option max_loop verwenden:

Datei /etc/grub/menu.lst

title           Xen 3.0.2-2 / Debian GNU/Linux, kernel 2.6.16-xen
root            (hd0,0)
kernel          /xen-3.0.2-2.gz
module          /vmlinuz-2.6.16-xen root=/dev/md1 ro console=tty0 pciback.hide=(02:09.0) max_loop=16
module          /initrd-2.6.16-xen
savedefault
boot

Um PCI-Hardware in eine DomU zu delegieren (diese steht dann in den anderen VMs nicht zur Verfügung) wird der Parameter pciback.hide verwendet. Den Wert ermittelt man mit dem Kommando lspci.

Jetzt kommt einem evtl. noch der Autostart der VMs in die Quere. Deshalb stelle ich den ab. Aktiviert wird der automatische Start der VMs über Softlinks im Verzeichnis /etc/xen/auto.

Die XEN Konfiguration findet man in der Datei /etc/sysconfig/xendomains.

XENDOMAINS_SAVE=
XENDOMAINS_RESTORE=false
XENDOMAINS_AUTO=/etc/xen/auto
XENDOMAINS_AUTO_ONLY=true

Quellen

[1] Xen Users' Manual

[2] The Perfect Xen 3.0 Setup For Debian

[3] Xen from Backports on Debain

[4] Linux Server mit Debian