Inhaltsverzeichnis
Überblick
UML ist eine Funktion des Linuxkernels, mit der man einen LinuxKernel wie ein normales Programm unter Linux starten kann - so kann man also auch ohne VMware Linux unter Linux laufen lassen.
Für Kernel ab 2.2.15 oder später und allen 2.4er-Kerneln steht UML als KernelPatch zur Verfügung. Seit Linux 2.5.35 und somit auch in der stabilen 2.6.x Version ist UML fix im Kernelcode.
Ein Kernel mit UML läuft dann als Gast unter einem "normalen" Linuxkernel (Wirt). "Wirtkernel" muss nicht speziell angepasst werden.
Allerdings funktioniert der Patch vorwiegend nur auf der x86-Plattform. Der PPC-Patch ist in einer frühen 2.4-er-Version stecken geblieben, aber gerade vor Ende Oktober (2003?) gab es wieder PPCspezifisches Interesse in der UML-Mailinglist.
Homepage: http://user-mode-linux.sourceforge.net/
Community-Seite: http://www.usermodelinux.org/
Lizenz: GPL
Siehe auch: arcem, Bochs, CoLinux, DosBox, DosEmu, Hercules, pcemu, QEMU, VMware, Vserver, Xen
Start
Um UML zu starten gibt man nach der Installation nur "linux" ein. Man muß nicht root sein, um es laufen zu lassen. Man braucht ein Dateisystem, um UML laufen zu lassen. Diese kann man (muß aber nicht) sich fertig herunterladen.
Login
Die vorgefertigten Dateisysteme haben einen Account "root" und einen Account "user".
Probleme mit UML
Suse
System: Linux xxxxxx 2.4.20-4GB #1 Mon Mar 17 17:54:44 UTC 2003 i686 unknown unknown GNU/Linux (SUSE)
mare@lxmare:/usr/local/uml/linux-2.4.20> ./linux ubd0=root_fs_toms1.7.205 eth0=ethertap,tap0,FE:FD:00:00:00:01,192.168.0.1 Checking for the skas3 patch in the host...not found Checking for /proc/mm...not found tracing thread pid = 26075 Linux version 2.4.20-6um (mare@lxmare) (gcc version 2.95.3 20010315 (release)) #1 Don Jun 26 15:20:03 CEST 2003 On node 0 totalpages: 8192 zone(0): 8192 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: ubd0=root_fs_toms1.7.205 eth0=ethertap,tap0,FE:FD:00:00:00:01,192.168.0.1 root=/dev/ubd0 Calibrating delay loop... 2787.10 BogoMIPS Memory: 29168k available Dentry cache hash table entries: 4096 (order: 3, 32768 bytes) Inode cache hash table entries: 2048 (order: 2, 16384 bytes) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 8192 (order: 3, 32768 bytes) Checking for host processor cmov support...Yes Checking for host processor xmm support...No Checking that ptrace can change system call numbers...OK Checking that host ptys support output SIGIO...Yes Checking that host ptys support SIGIO on close...No, enabling workaround POSIX conformance testing by UNIFIX Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd VFS: Diskquotas version dquot_6.4.0 initialized devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au) devfs: boot_options: 0x1 JFFS version 1.0, (C) 1999, 2000 Axis Communications AB JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB. pty: 256 Unix98 ptys configured SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256). RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize loop: loaded (max 8 devices) PPP generic driver version 2.4.2 Universal TUN/TAP device driver 1.5 (C)1999-2002 Maxim Krasnyansky SCSI subsystem driver Revision: 1.00 scsi0 : scsi_debug, Version: 0.61 (20020815), num_devs=1, dev_size_mb=8, opts=0x0 Vendor: Linux Model: scsi_debug Rev: 0004 Type: Direct-Access ANSI SCSI revision: 03 blkmtd: error, missing `device' name Initializing software serial port version 1 mconsole (version 2) initialized on /home/mare/.uml/MQ0thw/mconsole Partition check: ubda: unknown partition table UML Audio Relay (host dsp = /dev/sound/dsp, host mixer = /dev/sound/mixer) Initializing stdio console driver Netdevice 0 (fe:fd:00:00:00:01) : ethertap backend - tap0, IP = 192.168.0.1 NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 2048 bind 2048) NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. VFS: Mounted root (ext2 filesystem) readonly. Mounted devfs on /dev
Kernel 2.4.20 - gepatcht mit uml-patch-2.4.20-6.bz2
inside uml: # ifconfig eth0 eth0 Link encap:10Mbps Ethernet HWaddr FE:FD:00:00:00:01 unspec addr:[NONE SET] Bcast:[NONE SET] Mask:[NONE SET] BROADCAST MULTICAST MTU:1484 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:5 # ifconfig eth0 192.168.0.2 * ifconfig tap0 arp mtu 1500 192.168.0.1 netmask 255.255.255.255 up * bash -c echo 1 > /proc/sys/net/ipv4/ip_forward * route add -host 192.168.0.2 dev tap0 * bash -c echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp # ifconfig eth0 eth0 Link encap:10Mbps Ethernet HWaddr FE:FD:00:00:00:01 inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1484 Metric:1 RX packets:120 errors:2 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:5 # ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=27.6 ms --- 192.168.0.1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 27.6/27.6/27.6 ms
Debian
Woody/Stable
Kernel 2.4.20 - gepatcht mit uml-patch-2.4.20-6.bz2
Kernel kompiliert mit
make menuconfig ARCH=um make linux ARCH=um
lässt sich kompilieren, und starten (-> netzwerk funktionierte jedoch nicht!)
eth0 Link encap:10Mbps Ethernet HWaddr 00:00:00:00:00:00 unspec addr:[NONE SET] Bcast:[NONE SET] Mask:[NONE SET] BROADCAST MULTICAST MTU:1484 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:5 # ifconfig eth0 10.10.10.10 etap_tramp : uml_net failed setreuid: Operation not permitted etap_tramp failed - errno = 22 SIOCSIFFLAGS: Invalid argument #
Lösung:
insmod netlink_dev
Debian Images: ließen sich installieren aber beim Booten bekommt "respawning too fast" anstelle des Login.
Ursache: In /etc/inittab und /etc/securetty fehlen die Einträge zu /dev/tty0.
Lösung:
einfügen in /etc/inittab: 0:2345:respawn:/sbin/getty 38400 tty0 einfügen in /etc/securetty: tty0 vc/0
Außerdem auf devfs achten, Debian bevorzugt devfs=nomount.
vc/0 ist das devfs-Äquivalent zu tty0
yeti . o O ( Es folgt 'ne kleine UML-Anwendung... oder eher ein Test? Der UML-Kernel wird readonly mit dem Root-Filesystem der drunterliegenden Ditribution gestartet. Statt Init ist die Bash als zu startender Prozeß angegeben. Hier könnte auch ein anderes Skript stehen... und genau das ist der Haken, mit dem ich einen Debian-in-UML-Installer in meiner kleinen UML-Umgebung anwerfe. Im folgenden Block die vierte Zeile ist der interessante Punkt, der Rest demonstriert nur, daß es klappt. Sicherheitshalber sollte dies nicht als Root gestartet werden. )
»Script« wurde gestartet: Fri Jun 27 03:43:40 2003 (yeti@kira:/3)~$ linux --version 2.4.20-6um (yeti@kira:/3)~$ linux devfs=mount con=null con0=fd:0,fd:1 root=/dev/root rootfsttype=hostfs ro init=/bin/bash Checking for the skas3 patch in the host...found Checking for /proc/mm...found Linux version 2.4.20-6um (yeti@kira) (gcc version 2.95.4 20011002 (Debian prerelease)) #1 SMP Mit Jun 25 14:28:19 CEST 2003 On node 0 totalpages: 8192 zone(0): 8192 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: devfs=mount con=null con0=fd:0,fd:1 root=/dev/root rootfstype=hostfs ro init=/bin/bash Calibrating delay loop... 1039.06 BogoMIPS Memory: 28948k available Dentry cache hash table entries: 4096 (order: 3, 32768 bytes) Inode cache hash table entries: 2048 (order: 2, 16384 bytes) Mount-cache hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 8192 (order: 3, 32768 bytes) Checking for host processor cmov support...No Checking for host processor xmm support...No Checking that ptrace can change system call numbers...OK Checking that host ptys support output SIGIO...Yes Checking that host ptys support SIGIO on close...No, enabling workaround POSIX conformance testing by UNIFIX os_set_fd_async : Failed to fcntl F_SETOWN (or F_SETSIG) fd 4 to pid -1608270800, errno = 1 All CPUs are go! Waiting on wait_init_idle (map = 0x0) All processors have done init_idle Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd VFS: Diskquotas version dquot_6.4.0 initialized Journalled Block Device driver loaded devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au) devfs: boot_options: 0x1 pty: 256 Unix98 ptys configured RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize loop: loaded (max 8 devices) Initializing software serial port version 1 mconsole (version 2) initialized on /home/yeti/.uml/oHzWwH/mconsole unable to open root_fs for validation Initializing stdio console driver NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP, IGMP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 2048 bind 2048) Linux IP multicast router 0.06 plus PIM-SM NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. Root-NFS: No NFS server available, giving up. VFS: Unable to mount root fs via NFS, trying floppy. VFS: Mounted root (hostfs filesystem) readonly. Mounted devfs on /dev init-2.05a# ls amd boot dev floppy initrd lost+found mnt proc sbin usr bin cdrom etc home lib mfs opt root tmp var init-2.05a# exit exit Kernel panic: Attempted to kill init! <6>Stopping all CPUs...done (yeti@kira:/3)~$ »Script« beendet: Fri Jun 27 03:44:03 2003
Sarge/Testing
- UML Pakete:
- user-mode-linux
- uml-utilities - User-mode Linux (utility programs)
- umlrun - Run commands inside User-Mode Linux
- umlrun-uml - Components of umlrun to be installed inside
Anleitung in /usr/share/doc/user-mode-linux/README.Debian
Sofern man "...respawning too fast" Meldungen bekommt, muss man das root_fs manuell mounten (mount -o loop <root_fs> <mnt>) und das Verzeichnis "<mnt>/lib/tls" entweder löschen oder verschieben. Zusätzlich sollte überprüft werden, ob die "/etc/inittab" einen Eintrag für "tty0" enthält.
Redhat9 und folgende
Initializing RT netlink socket Kernel panic: outer trampoline didn't exit with SIGKILL
Das passiert wenn der UML Kernel Patch in einer Version kleiner 2.4.20-4 zusammen mit RedHat9 bzw. Fedora eingesetzt wird. Laut den UML Entwicklern liegt das an einigen BackPorts des Redhat-Kernels. Das ganze ist ziemlich ärgerlich weil kaum eines des downloadbaren UML Images auf diesem Stand ist.
Programme
UML Builder - für RPMbasierte Distributionen.
Anbieter von UML-Servern
Links
FAQ
Wo ist der Unterschied zu kexec?
- kexec ersetzt den aktuellen, laufenden Kernel durch einen neuen, ersetzt damit den Reboot (und erspart damit die Zeiten, die der Rechner im BIOS verbringt). UML bootet ein zweites Linux in einem Hostsystem.