Openlab 01 - Workshop Virtualisierung/UML: Unterschied zwischen den Versionen
Zim (Diskussion | Beiträge) |
Zim (Diskussion | Beiträge) (COW) |
||
Zeile 94: | Zeile 94: | ||
Falls es das ubdb-Device nicht gibt: | Falls es das ubdb-Device nicht gibt: | ||
# mknod /dev/ubdb b 98 16 | # 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. | ||
===UML starten=== | ===UML starten=== |
Version vom 21. Januar 2009, 16:26 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"
# 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.
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
Guestsystem
eth0 mit einer IP im Netzwerk hochfahren
# ifconfig eth0 IP+1 up
Defaultroute eintragen
# route add default gw IP