Openlab 01 - Workshop Virtualisierung/UML: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(non-root-network)
Zeile 142: Zeile 142:
 
Defaultroute eintragen
 
Defaultroute eintragen
 
  # route add default gw IP
 
  # route add default gw IP
 +
 +
===UML-Switch===
 +
Das Paket "uml-utilities" enthaelt ein Tool uml-switch, mit dem ein virtueller Switch erzeugt wird.
 +
 +
# uml-switch -tap <tap-device> [-hup] [-unix <file>]
 +
 +
Das Parameter "-hup" verwandelt den Switch in einen Hub und mit "-unix" kann man die Datei angeben, die der uml-switch benutzen soll, was sinnvoll ist, wenn man mehrere Instanzen startet.
 +
 +
Dem Switch wird im Hostsystem eine IP aus dem gewuenschten Bereich zugewiesen und kann so auch per NAT ein Weg ins reale Netz bieten.

Version vom 22. Januar 2009, 09:31 Uhr

< Openlab 01 - Workshop Virtualisierung

Inhaltsverzeichnis

UML - Usermode Linux

Hostsystem

Am Hostsystem muss man keine Aenderungen vornehmen. Aber es gibts zwei Punkte die man erwaehnen sollte.

SKAS-Patch

Der SKAS3-Patch wird auf den Kernel des Hostsystems angewant und bringt eine deutlich Geschwindigkeitssteigerung.

# wget http://www.finnie.org/software/uml/2.6.28-skas3.patch
# patch -p0 < 2.6.28-skas3.patch

TUN-Device

Damit sich das UML-System auch mit der Aussenwelt unterhalten kann, bietet sich eine Anbindung per TAP-Device an. Falls Euer Kernel keine TUN/TAP-Devices unterstuetzt, kann dies unter:

- Device Drivers -> Network device support -> Universal TUN/TAP device driver support

aktiviert werden.

Guestsystem

Das Gastsystem besteht aus zwei Teilen, dem UML-Kernel und einem Dateisystem. UML wird in Linux als eigenstaendige Architektur gehandelt und so ist dies beim compilen mit zu uebergeben.

Kernel

Den Kernel fuer das Guestsystem kann man aus den gleichen Quellen bauen, wie auch fuer das Hostsystem. Wichtig ist das Parameter "ARCH=um" beim compilen.

Kernel downloaden

# wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2

Archiv entpacken

# tar xvfj linux-2.6.28.tar.bz2

evtl. vorhandene vorherige Compilereste loeschen

# make mrproper ARCH=um

ncurses-menu zur Konfiguration

# make menuconfig ARCH=um

Den Kernel compilen

# make linux ARCH=um

Module compilen

# make modules ARCH=um

Kernel "strippen", 25M -> 2M

# strip vmlinux

Module in "root_fs" installieren

# make modules_install ARCH=um INSTALL_MOD_PATH=../root_fs

Filesystem

Als Dateisystem kommt der Einfach halt wegen ext2 zum Einsatz. Mit entsprechendem Support im Kernel kann man natuerlich auch ein anderes FS nehmen.

Wir erzeugen eine Datei "disk.img" mit der Groesse von 1GB.

# dd if=dev/zero of=disk.img bs=1024 count=$[1024 * 1024]

Darauf legen wir ein Ext2-Dateisystem an

# mke2fs -Fq disk.img

Ein Ordner zum FS mounten

# mkdir root_fs

"disk.img" nach "root_fs" mounten

# mount -o loop disk.img root_fs

debootstrap erzeugt in "root_fs" eine Installation von Debian etch

# debootstrap etch root_fs

Die fstab editieren und die entsprechenden Dateisysteme mit mountpoints eintragen

# vi root_fs/etc/fstab
 # /dev/ubd0  /  ext2  defaults  0  0
 # proc  /proc  proc  defaults  0  0

Falls nicht vorhanden, die "source.list" erzeugen

# touch /etc/apt/source.list

SWAP

swap-partition erzeugen

swap-Datei erzeugen (doppelte RAM-Groesse)

# dd if=/dev/zero of=swap bs=1024 count=$[2 * 256 * 1024]

In UML:

# mkswap /dev/ubdb
# swapon /dev/ubdb

Falls es das ubdb-Device nicht gibt:

# mknod /dev/ubdb b 98 16

COW - Copy-On-Write

COW ist eine Technik, mit der ein einziges UML-Image von mehreren Instanzen benutzt werden kann. Aenderungen werden dann in eine separate Datei geschrieben.

Host-FS

Um auf das Host-FS zuzugreifen kann innerhalb von UML folgendes benutzt werden:

# mount none /host -t hostfs

oder ein einzelnes Verzeichnis (eg. /home/user):

# mount none /host -t hostfs -o /home/user

UML starten

UML wird wie ein normales Program aufgerufen.

# ./vmlinux mem=256M ubd0=disk.img ubdb=swap eth0=tuntap,,,IP


Network

Zum Netzwerken kommt TUN/TAP zu Einsatz

Hostsystem

Auf dem Hostsystem sicherstellen, dass TUN/TAP-Support vorhanden ist.

Das TAP-Device dem Nutzer <uml-user> zuweisen

# tunctl -u <uml-user>

UML im nachhinein (hotplug) eine Netzwerkkarte unterschieben

# uml_mconsole UMID config eth0=tuntap,,,IP

Wenn UML als non-root gestartet wird, muessen die Netzwerkeinstellungen per Hand gemacht werden:

# ifconfig tap0 192.168.1.16 netmask 255.255.255.255 up
# bash -c echo 1 > /proc/sys/net/ipv4/ip_forward
# route add -host 192.168.1.17 dev tap0
# bash -c echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp
# arp -Ds 192.168.1.17 eth2 pub

Guestsystem

eth0 mit einer IP im Netzwerk hochfahren

# ifconfig eth0 IP+1 up

Defaultroute eintragen

# route add default gw IP

UML-Switch

Das Paket "uml-utilities" enthaelt ein Tool uml-switch, mit dem ein virtueller Switch erzeugt wird.

# uml-switch -tap <tap-device> [-hup] [-unix <file>]

Das Parameter "-hup" verwandelt den Switch in einen Hub und mit "-unix" kann man die Datei angeben, die der uml-switch benutzen soll, was sinnvoll ist, wenn man mehrere Instanzen startet.

Dem Switch wird im Hostsystem eine IP aus dem gewuenschten Bereich zugewiesen und kann so auch per NAT ein Weg ins reale Netz bieten.

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge