Linuxhotel UML-Images unter Debian Sarge oder Etch nutzen
Debian Sarge:
aptitude install uml-utilities screen xterm
Debian Etch:
aptitude install uml-utilities screen xterm user-mode-linux
Leider fehlt bei Debian Sarge (3.1) das Paket 'user-mode-linux'. Aber in Debian Etch (4.0) ist das Paket enthalten, und läßt sich auch problemlos in Debian Sarge einbinden:
/etc/apt/sources.list
:
deb http://debian/debian etch main contrib non-free deb http://debian/debian-security etch/updates main contrib non-free
/etc/apt/preferences
:
Package: user-mode-linux Pin: release a=testing Pin-Priority: 500 Package: * Pin: release a=testing Pin-Priority: 40
aptitude update aptitude install user-mode-linux
Im Linuxhotel erstellte tgz-Datei im Verzeichnis /srv auspacken oder:
Verzeichnis für UML erstellen und für eigenen Nutzer vorbereiten
mkdir /srv/uml cd /srv/uml chown nutzer /srv/uml
Innerhalb des Linuxhotel Netzwerks Debian-Sarge UML Image und Skript laden
wget http://debian/uml/debian-sarge-root.img.gz wget http://debian/uml/copy-uml.sh chmod +x copy-uml.sh
Auspacken:
gunzip debian-sarge-root.img.gz
Wie man ein solches Image selbst erstellt ist grob unten unter der Überschrift gast_system_bauen beschrieben
/etc/network/interfaces
:
auto tap0 iface tap0 inet static address 10.0.0.1 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255 pre-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE tunctl_user uml-net
/etc/network/options
:
ip_forward=yes
Virtuelles tap0 Interface starten:
sysctl -w 'net.ipv4.ip_forward=1' ifup tap0
/etc/default/uml-utilities
:
UML_SWITCH_OPTIONS="-tap tap0" UML_SWITCH_USER="uml-net"
uml-switch neu starten:
/etc/init.d/uml-utilities restart
Achtung: Die Reihenfolge ist wichtig. Erst das tap-device starten, dann den uml-switch neu starten
Als normaler Nutzer virtuelle Maschiene ldap1
erzeugen und starten:
cd /srv/uml ./copy-uml ldap1 ./ldap1.sh
Linuxhotel UML-Images unter SuSE nutzen, getestet unter SuSE 10.2 ( 10.0 und 10.1 liefen auch )
Vorsicht Baustelle: Anleitung für SuSE noch nicht reboot-fest ;-(
uml-utilities yast2-uml
Unter openSuSE 10.1 und 10.2 ist uml_switch kaputt ( keine TUNTAP Unterstützung einkompiliert ). Daher habe ich nicht das Orginal genommen, sondern gebastelt: erst das Paket aus den Quellen neu gebaut, installiert, dann das binary uml_switch noch mal erzeugt und damit das bestehende aus dem Paket überschrieben:
Als root:
Pakete installiert: ncurses-devel readline-devel glibc-devel gcc
Als nutzer:
cd mkdir -p $HOME/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS} echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros wget http://download.opensuse.org/distribution/SL-10.1/inst-source/suse/src/uml-utilities-20040406-11.src.rpm rpm -ihv uml-utilities-20040406-11.src.rpm cd rpm/SPECS rpmbuild -ba uml-utilities.spec cd ../SOURCES tar xjf uml_utilities_20040406.tar.bz2 cd tools/uml_router/ make clean make
Als root:
rpm -e uml-utilities rpm -ihv /home/xxx/rpm/RPMS/i586/uml-utilities-20040406-11.i586.rpm cp -p /home/xxx/rpm/SOURCES/tools/uml_router/uml_switch /usr/bin/uml_switch
Entscheidend ist, daß beim Bauen die Datei /usr/include/linux/if_tun.h
existiert und benutzt wird. Wahrscheinlich ist es gar nicht nötig, das Paket neu zu bauen, das uml_switch Binary reicht …
Im Linuxhotel erstellte tgz-Datei im Verzeichnis /srv auspacken oder:
Verzeichnis für UML erstellen und für eigenen Nutzer vorbereiten
mkdir /srv/uml cd /srv/uml chown nutzer /srv/uml
Innerhalb des Linuxhotel Netzwerks Debian-Sarge UML Image und Skript laden
wget http://debian/uml/debian-sarge-root.img.gz wget http://debian/uml/copy-uml.sh chmod +x copy-uml.sh
Auspacken:
gunzip debian-sarge-root.img.gz
useradd uml-net tunctl -u uml-net -t tap0 ifconfig tap0 10.0.0.1 broadcast 10.0.0.255 netmask 255.255.255.0 test -e /etc/sysconfig/SuSEfirewall2.pre-uml || perl -pi.pre-uml -e ' s/^\s* FW_DEV_DMZ="[^"]*" /FW_DEV_DMZ="tap0"/x s/^\s* FW_ROUTE="[^"]*" /FW_ROUTE="yes"/x s/^\s* FW_MASQUERADE="[^"]*" /FW_MASQUERADE="yes"/x ' /etc/sysconfig/SuSEfirewall2 rcSuSEfirewall2 restart mkdir -p /var/run/uml-utilities/ startproc -g users /usr/bin/uml_switch -tap tap0 -unix /var/run/uml-utilities/uml_switch.ctl chown uml-net:users /dev/net/tun chown uml-net /var/run/uml-utilities/ chmod ug+rw /dev/net/tun chmod ug+rw /var/run/uml-utilities/uml_switch.ctl
Unter http://packages.debian.org/testing/misc/user-mode-linux i386-Paket runterladen
alien --to-tgz user-mode-linux_2.6.18-1um-1_i386.deb tar xzf user-mode-linux-2.6.18-1um.tgz ./usr/bin/linux.uml mv usr/bin/linux.uml /srv/uml/
oder per 'mount -o loop' aus dem Image rauskopieren
ln -s /usr/bin/xterm /usr/local/bin/x-terminal-emulator
Als normaler Nutzer virtuelle Maschiene ldap1
erzeugen und starten:
cd /srv/uml ./copy-uml ldap1
In der neuen Datei ldap1.sh
linux
durch ./linux.uml
ersetzen.
vi ldap1.sh
Und los:
./ldap1.sh screen -x ldap1
Viel Glück …
Benötigte Pakete:
kernel-patch-skas kernel-package kernel-source-2.6.8 libncurses5-dev cpp cpp-3.3 dpkg-dev gcc gcc-3.3 patch libc6-dev libncurses5-dev linux-kernel-headers make fakeroot
Aktueller Kernel von http://www.kernel.org
Mit einem modernem Gast-Kernel 1) ist das nicht mehr nötig, der Host-Kernel muß nicht mehr angepasst werden 2). Wer es trotzdem machen möchte: So wird in einen ganz normalen Debian Kernel der bei Debian Sarge mitgelieferte skas-patch integriert:
tar xjf kernel-source-2.6.8.tar.bz2 cd kernel-source-2.6.8 make oldconfig make-kpkg --rootcmd fakeroot --initrd --append_to_version -3-k7-skas --revision iw1 --added-patches skas buildpackage
Heraus kommen .deb-Pakete, die man einfach installieren kann:
dpkg -i ../kernel-source-2.6.8-3-k7-skas_iw1_all.deb
Evtl. muß man sich jetzt noch um dem Bootloader kümmern. Dann neu booten.
update-grub
bzw.
lilo
Es ist zu empfehlen, einen Debian Mirror oder einen apt-proxy zu Nutzen, sonst muß man neben den genannten Paketen auch noch das komplette Gast-System aus dem Netz laden.
Für debian sarge und etch empfehle ich den fertigen User Mode Linux Kernel aus debian etch ( z.Zt: testing http://packages.debian.org/testing/misc/user-mode-linux )
Selber bauen:
cd /usr/src wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.7.tar.bz2 tar xjf linux-2.6.14.7.tar.bz2 cd linux-2.6.14.7 make-kpkg clean make mrproper ARCH=um cp arch/um/defconfig .config vi .config
CONFIG_HOSTFS=m CONFIG_MAGIC_SYSRQ=y
An dieser Stelle könnte man hostfs auch rauslassen, damit es nicht ganz so einfach ist aus dem UML-Käfig auszubrechen. Trotzdem sollte UML im produktivem Einsatz nur in einer chroot-Umgebung laufen.
make oldconfig ARCH=um
Die hier auftauchenden Fragen habe ich 3) auf den default-Werten gelassen. Für Athlon geht es wohl grade nicht
make-kpkg --rootcmd fakeroot --arch um --append_to_version -k7 --revision iw1 buildpackage dpkg -i ../kernel-uml-2.6.14.7_iw1_i386.deb
Eigentlich gibt es dafür den Befehl rootstrap. Ich habe mit der Version aus Debian Sarge aber vor einiger Zeit keine gute Erfahrung gemacht, daher hier die Anletung wie man das selbst macht:
Beim nachfolgenden debootstrap sollte man einen geeigneten Debian-Mirror oder apt-proxy angeben.
mkdir /var/lib/uml cd /var/lib/uml dd if=/dev/zero of=debian-sarge-root.img bs=1M count=0 seek=1024 dd if=/dev/zero of=swap.img bs=1M count=0 seek=256 /sbin/mkfs.ext3 -F debian-sarge-root.img /sbin/mkswap swap.img mkdir /mnt/uml mount -o loop debian-sarge-root.img /mnt/uml
cd /mnt/uml debootstrap sarge . http://debian/debian cd dev mknod ubd0 b 98 0 mknod ubd1 b 98 16 mknod ubd2 b 98 32 mknod ubd3 b 98 48 mknod ubd4 b 98 64 mknod ubd5 b 98 80 mknod ubd6 b 98 96 mknod ubd7 b 98 112 cd .. cat <<FSTAB > etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass> /dev/ubd0 / ext3 defaults 1 1 proc /proc proc defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 /dev/ubd1 swap swap defaults 0 0
FSTAB perl -i -p -e 's/(ca:\d+:ctrlaltdel:\/sbin\/shutdown.*)-r/$1-h/' etc/inittab perl -i -p -e 's/^(([3456]):\d+:respawn:.*tty\2$)/#$1/' etc/inittab cp /etc/apt/sources.list etc/apt
chroot /mnt/uml mount /proc base-config
In User-Mode-Linux gab es bis Kernel 2.6.14 4) Probleme 5) mit dem Thread Local Storage (TLS) . Lösung: ausschalten. Entweder in dem man das Verzeichnis /lib/tls
umbenennt und für spätere Software-Upgrades sperrt:
export LD_ASSUME_KERNEL=2.4.1 mkdir /lib/tls.off cd /lib/tls for f in *; do dpkg-divert --rename --local --divert /lib/tls.off/$f --add /lib/tls/$f; done unset LD_ASSUME_KERNEL
Kernel im Gastsystem installieren: eigentlich braucht 6) man nur die Module. Will man die aber ordentlich über die Paketverwaltung bekommen, muß man das ganze UML-Kernel-Paket installieren.
aptitude install module-init-tools user-mode-linux
Leider liegen die Kernel-Module jetzt im Verzeichnis /usr/lib/uml/modules
. Ich verschiebe sie auf Debian-Art nach /lib/modules
:
cd /usr/lib/uml/modules for i in `find 2.6.18 -type d`; do mkdir -p /lib/modules/${i#./} ; done for i in `find 2.6.18 -type f`; do dpkg-divert --rename --local --divert /lib/modules/${i#./} --add /usr/lib/uml/modules/${i#./} ; done
Nun kann man noch weitere Konfigurationen in der chroot-Umgebung vornehmen, und sie dann verlassen:
umount /proc logout umount /mnt/uml
/etc/network/interfaces
:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.2 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255 gateway 10.0.0.1
/etc/hostname
:
uml
/etc/resolv.conf
:
search villa.local linuxhotel.de nameserver 192.168.1.7 nameserver 192.168.1.1
linux umid=uml mem=64M ubd0=debian-sarge-root.img ubd1=swap.img con0=fd:0,fd:1 con=pts eth0=daemon,,unix,/var/run/uml-utilities/uml_switch.ctl
Wichtige Meldungen:
Checking for the skas3 patch in the host...found
oder
UML running in SKAS0 mode
..
Netdevice 0 : daemon backend (uml_switch version 3) - unix:/var/run/uml-utilities/uml_switch.ctl
..
Virtual console 1 assigned device '/dev/pts/4'
..
Man kann sich nun mit dem Befehl
screen /dev/pts/4
am User-Mode-Linux als root anmelden
Mit dem Befehl uml_mconsole uml cad
kann man den UML-Rechner herunterfahren
Debian:
uml-utilities screen xterm
Außerdem braucht man die folgenden, wie oben erzeugten Pakete …
kernel-image-2.6.8-3-k7-skas_iw1_i386.deb kernel-uml-2.6.14.7-uml_iw1_i386.deb
… und ein Dateissystemimage, z.B. das unter gast_system_bauen erzeugte debian-sarge-root.img
Das Netzwerk wird wie unter netzwerk_einrichten beschrieben eingerichtet.
Weiterhin benötigt man ein Verzeichnis in einer Partition mit ausreichend Platz für mehrere Kopien der Dateisystemimages.
cd /var/lib/uml dd if=/dev/zero of=swap.img bs=1M count=0 seek=256 mkswap swap.img
Das Dateisystemimage sollte man vor Veränderungen schützen. Änderungen werden im Betrieb nur an cow-Dateien vorgenommen.
chgrp uml-net . chmod g+w . chown root:uml-net debian-sarge-root.img swap.img chattr +i debian-sarge-root.img usermod -aG uml-net nutzerxy
Jetzt kann man als normaler Benutzer cow-Dateien vom root-Image und Kopien von der swap-Datei anlegen. Das folgende Skript copy-uml.sh
dient dem Anlegen eines neuen Satzes dieser Dateien ( root-Image, swap-Datei und start-skript ):
#!/bin/bash ORIGROOT=debian-sarge-root.img ORIGSWAP=swap.img if test -z "$1"; then echo usage: $0 uml-name exit 1 fi if test ! -r $ORIGROOT then echo Datei $ORIGROOT fehlt exit 1 fi if test ! -r $ORIGSWAP then echo Datei $ORIGSWAP fehlt exit 1 fi uml_mkcow $1.cow $ORIGROOT cp --sparse=always $ORIGSWAP $1.swap cat <<START > $1.sh #!/bin/bash BASENAME=\`basename \$0\` UML=\${BASENAME%%.sh} screen -S \$UML -d -m linux umid=\$UML mem=64M ubd0=\$UML.cow ubd1=\$UML.swap con0=fd:0,fd:1 con=xterm eth0=daemon,,unix,/var/run/uml-utilities/uml_switch.ctl START chmod +x $1.sh
Testsystem erzeugen:
chmod +x copy-uml.sh ./copy-uml.sh uml
Testsystem starten:
./uml.sh
z.B. auf 2GB:
resize2fs -p vishnu-ubd2.img 2G
Image und kernel-binary in ein Verzeichnis kopieren
yast -i uml-utilities ./linux-2.6.14.7 ubd0=vishnu-ubd0.img con=xterm