Ü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

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

Anbieter von UML-Servern

Links

FAQ


KategorieHardwareVirtualisierung

UserModeLinux (zuletzt geändert am 2007-12-23 22:46:22 durch localhost)