UML: User Mode Linux (1. rész - a kezdetek)

Címkék

UML - Számos előnye van. Az egyik legnagyobb előnye a VmWare-rel szemben, hogy free, és kb. 45 másodperc alatt működésre lehet bírni (már ha le vannak töltve a szükséges alkatrészek). Ezt bárki el tudja végezni, nem kell hozzá Linux gurunak lenni.



Mit is jelent pontosan az User Mode Linux (UML)?

Az UML hasonlóan a VmWare-hez, egy "számítógép a számítógépben" dolgot biztosít a felhasználóinak. Segítségével több független Linux rendszert futtathatunk a gépünkön egy időben (a Linux rendszerünkön). A különbség a VmWare és az UML között az, hogy míg a VmWare több különböző OS futtatására is képes, addig az UML kizárólag a Linux kernel futtatását célozza meg.

Hogy miért User Mode Linux a neve? A név magáért beszél. A Linux kernelt az ún. "user space"-ben (felhasználói tér) futtatja. Az UML segítségével több Linux rendszer futhat a számítógépünkön, amelyek önálló filerendszerrel rendelkeznek, és a futtatáshoz nincs szükség "root" felhasználói fiókra. Az UML-ed egy saját világ lehet, konfigurálhatod a saját kerneled, beállíthatod a hálózatod, és minden egyéb dolgot művelhetsz, amit egyébként megtehetnél egy hagyományos módon futó Linux OS-sel. Tulajdonképpen úgy futtathatod az UML kernelt, mint bármely más parancsot, az UML kernel kommunikál a hoszt gép kernelével, módosított parancsokat küld a fő kernelnek. Egyedüli probléma a direkt hardver hozzáférés lehet, de erre is vannak megkerülő megoldások.

Az UML filerendszere jelenleg egy file formájában áll rendelkezésre (UML-enként egy, annyi ahány UML-t futtatsz). Mivel az UML filerendszere teljesen el van különítve a hoszt gép "éles" filerendszerétől, nem kell aggódnod attól, hogy a hoszt gép egészségében maradandó károkat okozol. Bármilyen hibát vétesz, az csak az UML-t érinti, és nem hat ki a hoszt gépre.

Mire is lehet felhasználni az UML-t?

Számos területen lehet használni az UML-t. Ha például programot fejlesztesz, és nem akarod a "beta" állapotú programodat az "éles" rendszeredbe telepíteni, akkor csak felhúzol egy UML-t, és futtatod azon. Szoftver fejlesztésénél nem kell több gépet használni, főleg otthon, nem kell több monitor, monitorswitch, nem fogyaszt a több gép több áramot, stb.Esetleg FTP szervert futtatsz, és nem akarod, hogy a felhasználó elérje a fő gépet? Futtasd az FTP szervert UML-ben, és biztos lehetsz benne, hogy nem fogja elhasználni az összes merevlemez területedet. Félsz a BIND biztonsági hibáitól? Futtasd a BIND-et UML-ben, és nem kell aggódnod, hogy elérik a hoszt gép filerendszerét. Természetesen minél több UML-t futtatsz, annál nagyobb erőforrással kell rendelkezned. Minden egyes UML-lel futtatsz egy virtuális kernelt, plusz a gépednek meg kell hajtania a fő kernelt, programok futnak az UML-e(ke)n, és programok futnak a hoszt gépen is. Ezt nem szabad figyelmen kívül hagyni. A legfontosabb tényező az UML használata során a memória. "RAM-ból sohasem elég" - hangzik az örök mondás. Ez itt fokozottan igaz.

Azért, hogy a gép nem feküdjön ki a több UML használata esetén sem, be lehet korlátozni, hogy az UML szálak mennyi RAM-ot használatnak. Ezt célszerű körültekintően meghatározni. Szerencsére a fő kernel az UML dolgait ugyanúgy ki tudja lapozni, mint bármely memóriarészt, és ezen felül minden egyes UML-nek is be lehet állítani lapozó-területet. Itt is él az általános szabály: a swap területekre ne válaszzunk túl nagy területet, mert csak "teleszemeteli" a rendszer.

Hogyan lehet kipróbálni az UML-t?

Az UML egyelőre még nincs olyan állapotban, hogy komolyabb rendszereket rá lehessen bízni, de számos beta teszter nyúzza folyamatosan. Az UML egyelőre nem része a stabil kernelnek, csak a fejlesztői kernelben található meg (2.5.34-től). Szóval a beüzemeléséhez két lépésre van szükség. Először fel kell telepíteni az UML kernel részét (nem kell aggódni, nem érinti a géped fő kernelét), majd a második lépésben az UML filerendszere kerül telepítésre. A Debian felhasználók könnyű helyzetben vannak:

apt-get install user-mode-linux

(vele együtt telepítésre kerül a uml-utilities csomag is)

Ezzel kész is a kernel-rész telepítése. Amint a kernel telepítés megtörtént, fel kell telepíteni a filerendszer részt is. A filerendszer kiválasztása függhet a disztribúciódtól, számos előre elkészített filerendszert lehet letölteni az UML projekt honlapjáról: http://user-mode-linux.sourceforge.net/. A jelölések a letöltéseknél egyértelműek: "md" a Mandrake-et (www.mandrake.com), rh a Red Hat-et (www.redhat.com), toms a Tom's Linux-ot (www.toms.net/rb/), co a Conectiva-t (www.conectiva.com), és a debian a Debian-t (www.debian.org) jelöli.

A filerendszer snapshotok .bz2 formátumban vannak, ezért a

bunzip2 fileneve

paranccsal ki kell bontani őket. Alapban az UML feltételezi, hogy futtatsz X-et a gépeden. A legegyszerűbben itt tudod kipróbálni az UML-edet. Az indításához nem kell más, mint be kell gépelni az alábbit:

linux ubd0=/elérési/út/ahova/kibontottad/a/root/fst

Ezzel el is kell indulnia az UML-nek. Amint az UML elindul meg fog nyílni egy konzolpár, és az egyiken az üdvözlő képernyőt láthatod. Két login account engedélyezett alapból. Az egyik a "root" (jelszó: root), a másik pedig az "user" névre hallgat (jelszó: user). Ugye nem kell mondanom, hogy az első a password váltás ;-) ? Bár az első bejelentkezéskor a rendszer úgyis erőszakolni fogja a jelszó megváltoztatását, úgyhogy készülj fel. Egy ilyen linux rendszer egyenértékű egy újonnan telepített Linux géppel (kisebb megszorításokkal). Ha mondjuk szoftverfejlesztő vagy, és nincs szükséged a hálózatra, akkor ez pont az, amire szükséged van. Ha kell a hálózat, akkor kicsit többet kell olvasnod hozzá.

Ha a gépeden nincs telepítve X, akkor a futtatáshoz szükséges instrukciókat megtalálod itt. Például, ha az UML-t a hoszt géped első virtuális terminálján akarod futtatni akkor ilyesmit kell gépelned:

linux ubd0=/elérési/út/ahova/kibontottad/a/root/fst
con=tty:/dev/tty1

Hogy is fut (látható, hogy nem kell hozzá "root" account)?

trey@sunshine:~$ linux ubd0=.uml/root_fs_debian2.2_small

Checking for the skas3 patch in the host...not found

Checking for /proc/mm...not found

tracing thread pid = 3962

Linux version 2.4.20-1um (mdz@mizar) (gcc version 3.2.3 20030221 (Debian prerelease)) #1 SMP Fri Feb 28 16:28:07 EST 2003

On node 0 totalpages: 8192

zone(0): 8192 pages.

zone(1): 0 pages.

zone(2): 0 pages.

Kernel command line: ubd0=.uml/root_fs_debian2.2_small root=/dev/ubd0

Calibrating delay loop... 3469.77 BogoMIPS

Memory: 29104k available

[...]

(none):~# uname -a

Linux (none) 2.4.20-1um #1 SMP Fri Feb 28 16:28:07 EST 2003 i686 unknown

uml



Egyelőre ennyi. A következő részben a hálózatbeállítással folytatjuk.

Felhasznált irodalom:

User Mode Linux HOWTO

User Mode Linux: Coming to a Kernel Near You, Part 1


Kapcsolódó cikkek:

Linux: UML beolvasztva a 2.5-be

Teszteljünk SMP kernel modulokat uniprocesszoros gépen az UML segítségével

Kapcsolódó oldalak:

http://user-mode-linux.sourceforge.net/

Jó szórakozást!

Hozzászólások

Sziasztok!

Aki kiprobalja az uml-t elosszor azt hiszi, hogy lassu. Ez azert van, mert az uml memoriafoglalashoz a $TEMP (default a /tmp) fs-en levo fajlokat hasznal. Ha ez a $TEMP disken van akkor ez nagyon lassu lehet. Celszeru ezert a $TEMP-et tmpfs-re rakni, ezaltal nagyban gyorsul majd az uml. A tmpfs csak annyi memoriat foglal amennyi szukseges, valamint a nem hasznalt reszei kiswapelhetok.

pelda fstab line:

tmpfs /var/run/uml tmpfs defaults,size=200M 0 0

En az alabbi initscriptet hasznalom uml futtatasara:

http://www.rit.bme.hu/~balsa/uml-init-sample

balsa

Jó ez a kis leírás... hasznos... :)

Hmmm... nekem ezt csinálja:

never@nevergone:~$ linux ubd0=~/uml/root_fs_debian2.2_small

Checking for the skas3 patch in the host...not found

Checking for /proc/mm...not found

tracing thread pid = 17158

Linux version 2.4.20-1um (mdz@mizar) (gcc version 3.2.3 20030221 (Debian prerelease)) #1 SMP Fri Feb 28 16:28:07 EST 2003

On node 0 totalpages: 8192

zone(0): 8192 pages.

zone(1): 0 pages.

zone(2): 0 pages.

Kernel command line: ubd0=/home/never/uml/root_fs_debian2.2_small root=/dev/ubd0Calibrating delay loop... 3980.77 BogoMIPS

Memory: 29104k 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...No, enabling workaround

Checking that host ptys support SIGIO on close...No, enabling workaround

POSIX conformance testing by UNIFIX

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: 0x0

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/never/.uml/fEy4vh/mconsole

Partition check:

ubda: unknown partition table

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.

VFS: Mounted root (ext2 filesystem) readonly.

INIT: version 2.78 booting

Activating swap...

Checking root file system...

Parallelizing fsck version 1.18 (11-Nov-1999)

fsck.ext2: No such file or directory while trying to open /dev/ubd/0

(null):

The superblock could not be read or does not describe a correct ext2

filesystem. If the device is valid and it really contains an ext2

filesystem (and not swap or ufs or something else), then the superblock

is corrupt, and you might try running e2fsck with an alternate superblock:

e2fsck -b 8193


fsck failed. Please repair manually and reboot. Please note

that the root file system is currently mounted read-only. To

remount it read-write:

# mount -n -o remount,rw /

CONTROL-D will exit from this shell and REBOOT the system.

Give root password for maintenance

(or type Control-D for normal startup):


------------

Jah, és nem nyílik meg egy másik konzol sem...

Ha bejelentkezek root -tként oda, majd ütok egy Ctrl-D -t, akkor újra kijelentkezik, majd be. Ha ezután adok neki egy Ctrl-C -t, akor:

Calculating module dependencies... depmod: Can't open /lib/modules/2.4.20-1um/modules.dep for writing

done.

Loading modules: cat: /etc/modules: No such file or directory

modprobe: Can't open dependencies file /lib/modules/2.4.20-1um/modules.dep (No such file or directory)

Checking all file systems...

Parallelizing fsck version 1.18 (11-Nov-1999)

Setting kernel variables.

grep: /proc/filesystems: No such file or directory

grep: /proc/filesystems: No such file or directory

/etc/init.d/rcS: [: -eq: unary operator expected

/etc/init.d/rcS: [: -eq: unary operator expected

Mounting local filesystems...

mount: mount point /dev/pts does not exist

mknod: /dev/initctl: Read-only file system

Setting up IP spoofing protection: FAILED

Configuring network interfaces: done.

Setting the System Clock using the Hardware Clock as reference...

hwclock is unable to get I/O port access: the iopl(3) call failed.

System Clock set. Local time: Sat Mar 15 17:01:23 CET 2003

/etc/init.d/rcS: /etc/nologin: Read-only file system

cp: /etc/nologin: No such file or directory

Cleaning: /tmp /var/lock /var/run/etc/init.d/rcS: /var/run/utmp: Read-only file

system

Initializing random number generator... rm: cannot unlink `/var/run/random-seed': Read-only file system

urandom start: failed.

done.

Recovering nvi editor sessions... done.

INIT: Entering runlevel: 2

Starting system log daemon: syslogdstart-stop-daemon: nothing in /proc - not mounted?

klogdstart-stop-daemon: nothing in /proc - not mounted?

.

Starting portmap daemon: portmapstart-stop-daemon: nothing in /proc - not mounted?

.

Starting NFS common utilities: statdstart-stop-daemon: nothing in /proc - not mounted?

lockdstart-stop-daemon: nothing in /proc - not mounted?

.

Starting internet superserver: inetd.

ln: cannot remove `/dev/MAKEDEV': Read-only file system

Not starting NFS kernel daemon: No exports.


---------

És itt nyit egy Virtual Console -t, de a dolog itt megáll, oda sem ír semmit...

Valami ilyesmi gondja lesz, mert bár eddig is láttam a file-rendszert, de pl. nem adott hozzáférést az /etc/fstab -hoz. Átírtam a tarlamát így, szerintem logikusan, de nem tetszik neki továbbra sem, a gond megmaradt:

/dev/ubd/0 / ext2 defaults,rw 1 1

proc /proc proc defaults

devpts /dev/pts devpts mode=0622 0 0

#/dev/ubd/1 wap swap defaults 0 0

-------------

Amúgy lehet alá más file-rendszert tenni, az ext2 -ön kívül? Mondjuk valami naplózót. Mert ez a rendszer egész hasznos nekem pl. a programozáshoz. Csak még a hálózattal kell valamit kezdenem, hogy legalább valam mc -m legyen, na meg a host-gépről át tudjam húzni a dolgokat a fejlesztésekhez.Sőt, azt is láttam, hogy X-et is tud kezelni, érdekes dolog lehet.

Amúgy tényleg egész jó lett ez a leírás... :)

>Amúgy lehet alá más file-rendszert tenni, az ext2 -ön kívül?

lehet

nezd meg milyen konfigokkal van a kernel leforditva:

linux --showconfig

>Csak még a hálózattal kell valamit kezdenem, hogy legalább valam mc -m legyen, na meg a host-gépről át tudjam húzni a dolgokat a fejlesztésekhez.

egyszeruen bemountolod a rootfs-t, es felmasolod:

mount -o loop root_fs /mnt

bemasolod

umount /mnt

vagy, megvarod a kovetkezo reszt, ami a halozatrol fog szolni. Vagy onszorgalombol utananezem a HOWTO-ban. Egyebkent tok egyszeru custom kernelt forgatni a dologhoz. Kb. annyi mint egy sima kernelt.

Csak egy valami érdekes... miért nyílik 2 új konzol, mikor még az is használható, amiből ezt az egészet indítottam... csak mert a két újat bezárni sem lehet...

Viszont ha mégis több kellene, lehet nyitni valahogy...?

Nah, meg megnövelni a filerendszer méretét, mert így alapban nem valami nagy. Vagy ha szükség van rá, automatikusan növeli magát, és ezzel a file -t is...?

>Viszont ha mégis több kellene, lehet nyitni valahogy...?

egyszeruen.

A megnyilo console-ok szamat az /etc/inittab fileba szabalyozod.

[...]

# Format:

# :::

1:2345:respawn:/sbin/getty 38400 tty1

2:23:respawn:/sbin/getty 38400 tty2

#3:23:respawn:/sbin/getty 38400 tty3

#4:23:respawn:/sbin/getty 38400 tty4

#5:23:respawn:/sbin/getty 38400 tty5

#6:23:respawn:/sbin/getty 38400 tty6

[...]

Igy most nekem ketto nyilik, de ha tobb kell akkor kiszedem a kommentet, es lesz tobb.

>Nah, meg megnövelni a filerendszer méretét,

ez sem bonyolult. Tegyuk fel hogy "regirootfs" a regi root fs-ed neve ami 150MB, es tegyuk fel hogy "ujrootfs" lesz az uj root fs-ed neve, ami legyen 1000MB neve.

Eloszor is letrehozol egy 1GB-os filet:

dd if=/dev/zero of=ujrootfs count=1 seek=1000 bs=1M

Mondjuk legyen reiserfs a filerendszere:

mkreiserfs -f ujrootfs

mount -o loop ujrootfs /mnt/ujrootfs

mount -o loop regirootfs /mnt/regirootfs

innetol kezdve egyszeruen atmasolsz mindent a regirol az ujra. Ezzel egy idoben filerendszert is valtottal ext2-rol, reiserre, es az egesz nem tartott tovabb 2 percnel. Ilyenkor ugye ertelemszeruen at kell irni a /etc/fstab filet is ext2-rol reiserfs-re.

Ennyi az egesz.

Jó ez az UML, de mivel tud kevesebbet, mint mondjuk egy Vmware, vagy egy Bochs? És mivel tud többet? Azon kívűl, hogy ez free, és mintha kisebb is lenne az elöbbieknél... :)

Nah, meg mikorra lehet várni majd a cikk folytatását...? :)

Amúgy pontosan az ilyen dolgok miatt várjuk páran a 2.6 -os stabil kernelt... :)

Valaki tudna nekem készíteni egy Uhu -s filerendszer-image -t X nélkül? Fejlesztéshez kellene, és nincs Uhu -m, sem szabad gépem, amire feltehetném...

Előre is kösz... :)

Atyavilág Trey, te ilyen kukkolóműsorokat szoktál nézni?! Értelmesebbnek hittelek. :>>

Használja még valaki?

A magyar ember jelképe a hátrafelé nyilazás. Vakon rohanunk a semmibe, miközben a múltunkat támadjuk.