Dokumentáció

UML: User Mode Linux (2. rész - a kapcsolat)

Címkék

Számos alapvetően új dolog kerül bele a remélhetőleg lassan megjelenő 2.6-os Linux kernelbe. Ezek egyike a beta tesztelők, szoftver fejlesztők, hoszting szolgáltatást üzemeltetők számára érdekesnek ígérező User Mode Linux (UML) lehet.

Az UML-ről szóló első cikkben megnéztük, hogy hogyan lehet az UML-t feltelepíteni. Ahogy ígértem, ma a hálózati beállításokkal, és az utolsó simításokkal fogunk megismerkedni.

Talán az első dolog, amit meg szeretnél valósítani az UML-eddel, hogy kapcsolatot alakíts ki a virtuálisan futó Linux-od, és a külvilág között. Ennek számos oka lehet. Az egyik, hogy rajta valamilyen izolált szervizt akarsz futtatni. Pl. BIND-et, ftp szervert, webszervert, vagy esetleg olyan veszélyes dolgot, mint a "freeshell" szolgáltatás. Azt szeretnéd, hogy a külvilágból a felhasználók elérjék a gépedet, oda mondjuk be tudjanak jelentkezni, azon dolgozhassanak, úgy mint az tennék egy hagyományosan telepített rendszeren, de még véletlenül se veszélyeztessék a fő rendszered biztonságát. Erre tökéletesen megfelel az UML (pláne most, hogy a kernel ptrace bugban szenved). Ha esetleg valami nem várt dolog miatt az UML-rendszered elszáll, nem kell mást tenned, mint azt a filet, amely az UML filerendszerét adja (root fs - ha nem érted olvasd el az első részt!) visszamásolod egy backup-ból, és újra futhat a rendszered. Nem egész fél perc alatt újra működőképes rendszerrel indulhat a szolgáltatás.Szóval kapcsolat. A modern Linux rendszereken (2.4-es kernel) az UML hálózati kapcsolathoz a az ún. TUN/TAP megoldást kell használni (ha régebbi kernelt futtatsz olvasd el a HOWTO ide vonatkozó részét. A 2.2-es kernelekhez az ethertap nevű megoldás kell). A TUN tulajdonképpen a TUNnelling-ből ered, a virtuális hálózat alapja, és a TCP/IP protokoll IP részét használja. A TAP az Ethernet része a dolognak, ha különböző hálózati csatolókat használsz, akkor különböző driverekre lesz szükséged. Az ezzel kapcsolatos információkat megtalálod a itt.

Számos lehetőség van arra, hogy felállíts egy hálózatot az UML-ben. Az egyik biztonságosabb mint a többi, a másik kevésbé. Hogy neked melyik kell, azt neked kell eldöntened. Most nézzük a legegyszerűbbet. Ha úgy döntesz, hogy a rendszered komolyabb hosztolásra fogod használni, akkor olvasd el a HOWTO 6.7-es szekcióját a "TUN/TAP with a preconfigured TAP device" résznél. Ha Red Hat-ot használsz, akkor olvasd el ezt a levelet. Ezekben sokkal biztonságosabb módját mutatják be a hálózati konfigurációnak, mint amit most csinálunk.

Az első dolog amit ellenőrizned kell az a /dev/net/tun eszközön levő jogok. Alapból a jog 700, viszont ez azt jelenti, hogy csak a root tudja használni az eszközt. Meg kell változtatnod a jogokat az eszközön, vagy létre kell hoznod egy csoportot és abba beletenned azt a felhasználót, aki használhatja az UML hálózatát (és ennek a csoportnak a jogait beállítani természetesen).

Ha ezzel készen vagy, akkor be kell töltened a tun.o-t, amely nem más mint a TUN eszköz kernel modulja. Ezt legegyszerűbben az

insmod tun.o

parancs kiadásával teheted meg (vagy editálod a /etc/modules filet (debian) és beleírod kézzel, hogy minden boot-kor automatikusan töltődjön) vagy szerkeszted a /etc/modules.conf vagy /etc/conf.modules filet, ez disztribúció függő, neked kell megtalálni a megoldást (alias char-major-10-200 tun).

Eddig így indítottuk az UML-t:

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

Most indítsuk el hálózati támogatással:

linux ubd0=/elérési/út/ahova/kibontottad/a/root/fst eth0=tuntap,,,10.0.0.5

Bootkor figyeljük az üzeneteket:

[...]

Initializing stdio console driver

Netdevice 0 : TUN/TAP backend - IP = 10.0.0.5

NET4: Linux TCP/IP 1.0 for NET4.0

[...]

Ha bebootolt az UML, nézd meg, hogy van-e loopback interfész

ifconfig

Ha nincs akkor húzd fel:

ifconfig lo 127.0.0.1 up

usermode:~# ifconfig

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

Hasonlóképpen kell eljárnunk az eth0 interfésszel is:

(figyelj oda arra, hogy az eth0 IP címe nem lehet ugyanaz, mint a virtuális hoszt IP címe!)

ifconfig eth0 10.0.0.6 up

Az IP címet úgy válasszuk meg, hogy az kapcsolódhasson az átjáróhoz (jelen esetben a default gateway a 10.0.0.5)

Következhet a tesztelés:

- pingeljük meg magunkat

- pingeljük meg az átjárót

- majd végül pingeljünk meg valakit az átjárón túl

- majd ha működik az internet kapcsolatunk, akkor pingeljünk meg valakit az interneten IP cím alapján


A név szerinti hivatkozáshoz szükség van a névfeloldásra:

szerkesszük meg a /etc/resolv.conf filet, és írjunk bele egy valós névszervert.

Ha kész, akkor próbáljunk meg megpingelni valaki az interneten a neve alapján (pl. ping www.bme.hu)

Ezek után már nincs más dolgunk, mint szépen befejezni a beállításokat. Beállítani a "basic networking"-et, stb.

Ha ez kész, akkor mennie kell az APT-nak is.

Szerkesszük meg a /etc/apt/sources.list file-t, és már telepíthetünk is bármit a rendszerünkre. Tökéletes teszt platform.

Debian felhasználóknak: többen kérdezték levélben, hogy hol vannak a telepítés után az UML kernel moduljai. Ők valószínűleg nem olvasták el körültekintően a README fileokat.

trey@sunshine:/usr/share/doc/user-mode-linux$ cat README.Debian | less

[...]

Kernel modules

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

Modules are installed in /usr/lib/uml/modules/. The easiest way to

get to them from within UML is to use hostfs, e.g.:

mkdir -p /lib/modules/`uname -r`/kernel

mount -t hostfs -o /usr/lib/uml/modules/`uname -r`/kernel

hostfs /lib/modules/`uname -r`/kernel

depmod -a

or copy them into your root filesystem (rootstrap can do this automatically).

[...]

A modulokat értelemszerűen be kell másolni a root fs-be. A root fs elkészítéséhez használhatod a rootstrap (köszönjük meg balsa-nak az infót ;-)) nevű programot, vagy egyszerűen mount-olva a root fs-t, azt szerkesztheted:

(kernelbe legyen loopback eszköz támogatás)

mount -o loop root_fs /ahova

cd /ahova

itt szerkeszted ami kell, pl. bemásolhatod a kernel modulokat

umount /ahova

Tulajdonképpen ennyi. Ez a két cikk nem volt más, mint egy kedvcsináló az UML-hez. Természetesen csak nagyon felületesen érintette a cikk az UML telepítését, beállítását, és feltételezte a cikk írója (én ;-)), hogy az alapvető Linuxos ismeretek megvannak. A telepítés és konfiguráció teljes leírására ott a HOWTO, mindenki olvassa el a neki szükséges részt.

A felhasznált irodalom:

User Mode Linux HOWTO

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


Ajánlott források:

UML honlap

UML a sourceforge-n

uml.openconsultancy.com



Jó szórakozást!

PKI és IPSEC

Címkék

A linux.hu-n olvasható egy bejelentés, mi szerint akit érdekelnek a fenti témák, van itt 1-1 nagyon jó oldal ahol össze van gyűjtve a témához kapcsolódó RFC és Draft.http://www.ietf.org/html.charters/ipsec-charter.html

http://www.ietf.org/html.charters/pkix-charter.html

Az egyik linux-os ipsec megoldás: http://www.freeswan.org

Az előbbi kiterjesztése x.509, extra chipers, NAT, stb. patchekkel: http://www.freeswan.ca/

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!

TCP ACK-ek priorizálása pf-fel és ALTQ-val

Címkék

Tegye fel a kezét aki ADSL kapcsolatot használ! Ugye találkoztunk olyan problémával, hogy ha egyidejűleg töltöttünk le, és töltöttünk fel adatot, akkor a letöltés drámaian lelassult?

Az ok: ha a TCP kapcsolatot arra használjuk, hogy csak egy irányba forgalmazunk adatot, (mint például FTP letöltésnél), akkor a TCP 'acknowledgement'-eket (ACK) a szemközti irányba el kell küldeni, mert különben a peer azt hiszi, hogy a csomagok elvesztek és újra kell küldeni őket. Ahhoz, hogy a maximális átviteli sebességet tartani tudjuk fontos, hogy az ACK-okat azonnal küldjük vissza.

Amikor az uplink telített valamilyen más kapcsolattal (például egy egyidejű feltöltéssel), az összes kimenő csomag egyenlő arányban késleltetve jut csak el a célig. Ennélfogva a konkurrens sávtelítettség az uplinken azt okozza, hogy az ACK csomagok késve jutnak el a peer-ig, ahonnan letöltünk, ezzel lényegesen csökken a letöltési sebesség. Ez hatványozottan jelentkezik az ADSL kapcsolatok esetén, aholis a feltöltési sebesség lényegesen alacsonyabb a letöltési sebességnél.A megoldás: priorizálással beállítjuk, hogy a payload nélküli TCP ACK csomagok elsőbbséget élvezzenek.

Hogy ezt hogyan csináljuk OpenBSD-vel?

Olvasd el az erről szóló cikket itt.

Linux kernel VM dokumentáció

Címkék

Mel Gorman az LKML-en bejelentette, hogy lassan elkészül a 2.4.20-as Linux kernel virtuális memória menedzsmentről (VM) készült dokumentációja. Még néhány javítás és kiegészítés van hátra, de tulajdonképpen késznek tekinthető a mű. A doksin a mai dátum van.Mel Gorman bejelentett egy részletes Linux VM (virtual memory - virtuális memória) dokumentációt, amely a jelenlegi stabil sorozat 2.4.20-as kernelének kódján alapul. Az első ismertető [pdf] [html] [txt] mélyrehatóan mutatja be azt, hogy valójában hogy is működik a Linux virtuális memória menedzsment, kitérve a a függvényekre és az algoritmusokra is.

A második rész [pdf] [html] [txt] pedig egy afféle kód magyarázat, kommentár a VM programozásról, amely segítségével fény derül a VM programozás rejtelmeire és stílusára.

ELF Virus író HOWTO

Címkék

Egy ideig általános nézet volt, hogy a Linux rendszerekre nem veszélyesek az ismert számítógépes vírusok, mert a dos/win32 kódú vírusok nem ``élnek" meg a Linux binárisokon. Backdoorok, worm-ok, és egyéb férgek természetesen léteznek a Linux/BSD/Unix rendszerekre. Erre jó példa volt a nyáron az OpenSSH-ban talált backdoor.De most úgy tűnik, hogy nincs messze az az idő amikor megjelennek az igazi vírusok is a Linux rendszereken. Alexander Bartolich készített egy ELF Virus író HOWTO-t, amelyben elolvashatjuk azt a technikát, amellyel az ELF binárisokra lehet vírusokat írni. A HOWTO több példa programsort is tartalmaz. Mielőtt még valaki azt hiszi, hogy ebből copy&paste készít egy vírust, az téved. A HOWTO nem egy "Construction Kit For Dummies", úgyhogy nem kell rettegni, hogy a script kiddie-k ebből fognak tanulni. A HOWTO legfrissebb verziója elérhető a LinuxSecurity oldalán itt.

Kernelforgatás (2.0-pre4)

Címkék

Az összes hozzászólást, valamint kritikát figyelembe véve némileg újraszerkesztettem a Kernelforgatás doksimat. Ezt már rc-nek is neveztem volna, de még mindig hiányzik a grub része.Kernelforgatás (2.0-pre4)

1. Mi a kernel?

A kernel az operációs rendszerek magja. Még Windows-ban is van. Ez biztosítja a programoknak az egységesített felületet, amin keresztül a hardware-el tudnak kommunikálni (ez a jó öreg DOS-nál annyi volt, hogy közvetlen hozzáférést adott az összes hardware-hez, aztán minden program oldja meg a saját meghajtóprogramjaival a dolgot, ahogy akarja:). Win9x-ben a kernel a C:WINDOWSSYSTEMKernel32.dll fájl, WinNT/2000/XP alatt pedig a C:WINDOWSSYSTEM32Kernel32.dll fájl szokott lenni. De most nézzük a Linuxot. Linuxban általában /vmlinuz fájl a kernel.

2. Jó ez nagyon szép, de mi a ráknak újat forgatni belőle?

A Windows azért olyan, amilyen, mert a Microsoft csinál egy általános kernelt, és minden gépen ugyan az a kernel fut, így lehet, hogy ami az egyik gépen bejön, az a másikon nem igazán. Linuxnál nem kell ilyenektől szenvedni. Bekonfigurálod a kernelt pont a te gépedhez (és igényeidhez) igazítva, és pontosan azt csinálja, amit te szeretnél (Na jó. Szép álom lenne, de jobban követi az utasításaid, mint a Windows).

3. A kernel beszerzése

"Be kell szerezni? De hát a win ben benne van ott nem kellet beszerezni." Igen. Ez igaz, viszont a win-ben mindig több hónapos, vagy éves kernelt használsz. Biztos lehetsz benne, hogy az azóta kiderült és közismert hibák nincsenek javítva benne. Linuxban mindig friss, ropogós stabil kernelt érdemes használni (figyelem ez nem a legmagasabb verziószámot, vagy az utolsó kiadási dátumot jelenti). A kernelt a kernel.org-on lehet letölteni. Ott megkeresed a The latest stable version of the Linux kernel is kezdetű sort. Kb így fog kinézni:

The latest stable version of the Linux kernel is: 2.4.20 2002-11-28 23:54 UTC F V VI Changelog

Itt nem a 2.4.20 feliratra kell klikkelni a letöltéshez, mivel az egy patch (patchekről olvasd el a függelékeket). A sor vége felé ott van egy Nagy F betű. Arra kell kattintani (kb. 25 mega).

4. A beszerzett kernel előkészítése.

Ha megvan a kernel, akkor lehetőleg lépj ki konzolba és ott root-ként belépve folytasd tovább (ennek az első fontos oka, hogy így csak a rendszergazda jogokkal rendelkező felhasználók férhetnek majd hozzá a kernelhez és a forráskódjához, valamint többször volt, hogy az x-win-es konzolok hibásan jelenítették meg a menuconfigot (a menüs rendszerű kernelkonfiguráló felület), az xconfig pedig elég átláthatatlan (ez a grafikus változata a konfiguráló felületnek), meg jobb is inkább a menuconfigot megszokni, mert az grafikus felület nélkül is használható).

Lépj be a /usr/src-ba:

cd /usr/src

Mozgassad ide a letöltött kernelt:

mv [/ahova/a/kernelt/töltötted/]linux-[kernelverzió].tar.gz ./

Tömörítsd ki a kernelt:

tar -zvxf linux-[kernelverzió].tar.gz

Így kapsz egy linux-[kernelverzió] könyvtárat. Erre én szoktam csinálni egy linket, hogy mindig elérhessem így is /usr/src/linux (ez nem kötelező lépés csak praktikus). Így:

ln -s /usr/src/linux-[kernelverzió] /usr/src/linux

Most lépj be a friss kernelt tartalmazó könyvtáradba!

cd /usr/src/linux

Most hogy a fölösleges cuccokat eltávolítsuk a kernelforrásból add ki ezt a parancsot:

make mrproper

5. A kernel konfigurálása

5.1. A kernelmodulokról

A kernelbe egy eszköz meghajtóprogramját több féle képen is bele lehet rakni. Lehet úgy, hogy mindig be legyen töltve (a kernel rendszerindításkor bekerül a memóriába), vagy lehet modulként tárolni. A modulok nem kerülnek bele a /vmlinuz-ba, hanem külön fájlokban tárolódnak el (/lib/modules/a-kernel-verziója/a-modulok) és csak akkor töltődnek be, ha egy program kéri rá őket, vagy te aktiválod őket az

insmod [modulneve]

paranccsal, vagy ha azt szeretnéd, hogy minden indításnál betöltődjenek, akkor be kell írni a modulnevét a /etc/modules-be.

A modulok eltávolítása, ha insmod-al töltötted be, akkor az

rmmod [modulneve]

parancsal történik, akkor is, ha a /etc/modules-ben szerepel. Valamint, ha azt sem akarod, hogy indításkor betöltődjön, akkor csak egyszerűen ki kell törölni a /etc/modules-ből a modul nevét.

5.2. Fixre vagy modulba?

Mikor melyiket kell használni?

Az esetek nagy részében a fixre való fordítást érdemes használni, amennyiben biztos vagy benne, hogy egy eszközt majdnem mindig használni akarsz (hálókártya meghajtóprogramja, ha állandóan hálón vagy, hangkártya meghajtóprogramja, ha állandóan zenét hallgatsz). Viszont, ha van olyan dolog, amit csak lehet, hogy fogsz használni, de nem akarsz olyankor azzal bajlódni, hogy újra forgass egy kernelt, akkor azt modulba rakod (ha mondjuk csak Linux van a gépeden, de lehet, hogy fog néha valamelyik haver hozni cuccot kivehető vinyón és nála még Windows van, akkor modulban felrakod a fat32, DOS és NTFS fájlrendszereket, és csak akkor töltöd be őket, ha helyzet van (mountoláskor maguktól is betöltődnek, ha szükség van rájuk)).

5.3. A menuconfig kasználata

És akkor most hogyan is megy ez a konfigurálás dolog?

Az eszköz-meghajtóprogramok között a föl le nyilakkal tudsz lépkedni, és a space gomb lenyomásával tudod kiválasztani, hogy ne legyen lefordítva a meghajtóprogram, modul legyen, vagy a kernelbe forduljon. A jobbra-balra gombokkal pedig azt tudod kiválasztani, hogy mi történjen a space lenyomására. A select a meghajtóprogramok állapotának az állítgatása. Az exit vagy visszalép a menüben egy szintet, vagy ha a menü gyökerében vagy, akkor kilép belőle, a help pedig segítséget ad arról a meghajtóprogramról, amin a kurzorod áll. Innen már sima ügy.

5.4. A menuconfig indítása

Ahhoz, hogy a menuconfigot elindítsad telepítve kell, hogy legyen egy ncurses nevű csomag a gépeden. Ennek a telepítése disztribúciókra lebontva a függelékek között olvasható Ncurses néven.

A menuconfig indításához a /usr/src/linux-ban a következő parancsot kell kiadni:

make menuconfig

Így egy első látásra talán barátságtalannak tűnő, de nagyon kezes menürendszerhez jutunk, amiben a meghajtóprogramok fő és alkategóriákra vannak osztva, hogy könnyebben megtalálhassuk őket.

5.5. xconfig

Van egy X11-et használó kernelkonfiguráló eszköz. Ezt a

make xconfig

paranccsal lehet elindítani, de mivel elég átláthatatlan, ezért használata ellenjavallt :)

5.6. A kernelkonfigurálásnál pár fontos dolog (eddigi tapasztalataim alapján)

Ha CD-t akarsz írni Linux alatt és ide cdíród van, akkor a következőkre lesz szükséged:

ATA/IDE/MFM/RLL support ---> IDE, ATA and ATAPI Block devices ---> SCSI emulation support

SCSI support ---> SCSI support ; SCSI CD-ROM support ; Enable vendor-specific extensions (for SCSI CDROM) ; SCSI generic support

Ha nincs más scsi eszközöd, akkor minden mást ki lehet szedni az scsi-ből. (ettől még nem fog menni az scsi emuláció, mert bele kell írni a következő sort a lilo.conf-ba: append=[hdb]=ide-scsi (a hdc-t a cdíród eszközének a nevével kell helyettesítened, amit a dmesg-ből tudhatsz meg)

Játékport:

Lehet, hogy tényleg nem fogod sokat használni, de ha néha akarod használni, akkor is bele kell forgatni a kernelbe a portot (a dzsojsztikot nem fontos :) , mert anélkül nekem nem ismerte fel a gémpadom.

Multimedia devices ---> Video For Linux

Na ezt érti félre mindenki. Ez nem ahhoz kell, hogy tudjál videót nézni Linux-on. Ez a tv kártyákhoz kell, tehát, ha nincs, akkor ne kapcsold be.

File systems ---> DOS FAT fs support ---> MSDOS fs support

vagy

File systems ---> DOS FAT fs support ---> VFAT (Windows-95) fs support

MSDOS fs support csak akkor kell, ha DOS-os particiót akarsz kezelni. Windows-al létrehozott FAT-os particióhoz (NT alapú Windows-ok NTFS-t használnak alapértelmezésnek) kivétel nélkül VFAT-ot kell használni. (DOS-nak tudok ajánlani egy nagyon jó alternatívát: FreeDOS. Még ma is fejlesztik)

File systems ---> Network File Systems ---> SMB file system support (to mount Windows shares etc.)

Ez kell ahhoz, hogy Windows megosztásokat tudjál használni Linux alatt (a hálózatban).

File systems ---> ISO 9660 CDROM file system support ---> Microsoft Joliet CDROM extensions

Ha CD-t akarsz használni linux alatt ezt mindenképp érdemes engedélyezni, mert a legtöbb cd író program alapértelmezésben használ Joliet kiterjesztést.

Sound --->

Ha nem találod a hangkártyád, akkor kapcsold be ezt: OSS sound modules

Input core support --->

Az ebben a menüpontban szereplő cuccok csak USB-s eszközökre vonatkoznak.

Talán ennyi jó tanács elég. És szorgosan olvasni a helpeket a kernelmenün belül!!!

6. Forgassunk kernelt!

Ha mindent beállítgattál konfigolás közben, a menü gyökerében nyomsz egy -et, és azt mondod neki, hogy (tehát mentse a "beállításokat). Ha úgy érzed, hogy valamit elszúrtál, akkor csak elindítod újra a make menuconfig-gal ezt a menüt és kilépésnél megint mentesz.

Most a következő parancsot kell kiadni:

make dep


6.1. Forgatási módok

Több alternatíva is létezik a kernel lefordítására. Ezek közül a 2 legfontosabb:

make bzImage

vagy

make bzlilo

A 2 között az a különbség, hogy míg a make bzImage csak lefordítja a kernelt, addig a make bzlilo be is másolja a megfelelő helyre, ugyanakkor a nevéből is adódóan ez csak akkor használható, ha a disztribúciónk lilo bootmanagert használ (mielőtt ezt a parancsot kiadnánk át kell nézni a lilo.conf-ot, tehát nehogy így vaktában lefuttasd! mindenkép olvasd el a lilo-ról szóló részét a doksink előtte!!!). Ha bzImage-vel forgatsz, akkor a [/ahol/a/kernel/forrása/van/]arch/i386/boot/bzImage -be kerül a kernel.

6.2. Hová kell rakni?

Én elsőnek fogom a disztróban eredetileg benne lévő kernelt (általában /vmlinuz) és átrakom /vmlinuz.orig-ba (mv /vmlinuz /vmlinuz.orig). Ha bzImga-et használtál, akkor ezután a [/ahol/a/kernel/forrása/van/]arch/i386/boot/bzImage-t másold be a /vmlinuz fájlba. Ezek után még a bootloaderrel is tudatosítani kell, hogy új kernelt kapott a rendszer. Ez a következő 2 pontban lesz részletezve.

6.3 lilo

Lilo esetén a make bzlilo futtatása a logikus, viszont előtte be kell írni a lilo konfigurációs fájljába pár dolgot. A /etc/lilo.conf-ban találod a lilo beállításait. Ezt szerkeszd a kedvenc szövegszerkesztőddel (nekem emacs).A vége felé találsz egy ilyet:

image=/vmlinuz

label=Linux

read-only

Ez után írd be ezeket:

image=/vmlinuz.old

label=LinuxOLD

read-only

optional

image=/vmlinuz.orig

label=LinuxORIG

read-only

optional

Mostmár futtathatod a make bzlilo-t és a kernel magától helyre kerül, valamint a lilo is tudomást vesz róla.

6.4. grub


6.5. Modulok forgatása

Ok a kernel a helyén bootolásra készen. Vagy mégsem?

A modulokat még nem fordítottuk le. Erre a következő parancs szolgál: make modules. Ezek után a modulokat installálni kell a /lib/modules-be. Szerencsére ezt nem kézzel, hanem a make modules_install paranccsal kell megtenni.

6.6. System.map

Ezek után a kernel forrásának a gyökérkönyvtárában találasz egy System.map nevű fájlt. Ezt be kell másolni a /boot-ba System.map-[kernelverzió] néven.

7. reboot

Ezek után reboot, és ha valami nem működne az új kernelben, akkor válaszd ki a LinuxORIG-ot bootolásnál.

8. Ha valami nem kűködik

Ez a Linux esetében is előfordulhat. Ha az új kernellel nem megy valami, akkor nézd a

dmesg

parancs kiadásával megnézheted, hogy miket töltött be a kernel, és hogy miket nem sikerült betöltenie, illetve milyen hibák történtek betöltés közben. Az egyszerűbb olvashatóság érdekében lehet a dmesg-et a következő módon is használni:

dmesg | less

dmesg | more

dmesg > [dmesgfájl]

Az első kettő a képrenyőn 2 féle képpen görgethető szöveget ad, a 3. pedig egy szövegfájlt készít, amit azután egy tetszőleges szövegszerkesztővel végig lehet böngészni.


Függelékek

A. A kernelverziókról

1. Fővonal

A linux kernelnél a verziószám sokat mond el az avatott szemnek a kernelről. Nézzük az aktuális kernel verziószámát:

2.4.20

Az első pont előtti szám a főverzió. Ez csak nagyon lényeges változásoknál változik (ez látszik abból is, hogy eddig csak 2-nél tart).

A 2. pont előtti szám akkor változik, ha új funkciók kerülnek be a kernelbe. Ha ez páros, akkor stabil, ha páratlan, akkor fejlesztői kernelről van szó.

A 3. pint előtti szám nagyobb hibajavításoknál és hasonló nem funkcionális frissítéseknél változik.

Ennek a változása előtt általában a kernel verziószáma egy kötőjel után kap alverziószámot, ami lehet -preX, vagy -rcX. A -preX olyan verzió, ami biztosan változni fog még, az -rcX, ha nem találnak benne hibát, akkor egyszerűen eltűnik és a kernel verziójának utolsó száma lép egyet.

2. A nemFővonalak

A kernel úgynevezett fővonalát Linus Torvalds tartja karban, ugyanakkor léteznek olyan vonalai a kernelnek, amiket más emberek tartanak karban. Ezek általában alapnak a fővonalat veszik (illetve annak utolsó stabil változatát). A legaktívabb ilyen fejlesztő Alan Cox (röviden ac). Az ő változtatásai a fővonalon általában bele is kerülnek a fővonalba. Az ac vonalba ugyanakkor nem csak ac fejlesztései kerülnek bele, hanem vannak, akik neki küldik el a változtatásaikat és ő illeszti be. Ac kernelverziói a kernel.org-on is megtalálhatóak. Az ő esetében a kernel a kötőjel után egy -acX kiegészítést kap.

Ac kernelén kívül még rengeteg létezik. Az hogy ezeket érdemes -e használni azt a honlapjukon található információk alapján könnyen el lehet dönteni.

Pár jelentősebb:

http://www.nsa.gov/selinux/

http://sourceforge.net/projects/wolk/

http://cipherfunk.org/files.html

http://members.optusnet.com.au/ckolivas/kernel/

Még többet találhatsz itt:

http://freshmeat.net/browse/143/?
filter=&orderby=popularity_percent_DESC&topic_id=143


B. Patchelés

1. Mik a patch-ek?

A patch-ek arra szolgálnak, hogy, ha új verzió jön ki a kernelből, ne kelljen letölteni az egész forrást, mivel általában nem a teljes forráskód változik, csak bizonyos részei. A patch tehát ezeket a változásokat tartalmazza. A patchekkel mindig csak a verziószámukhoz képest előző kernelverzióról lehet frissíteni.

2. A kernel patchelése

A patcheket 3 formában lehet megtalálni: tömörítetlenül, bz2-be vagy gz-be tömörítve (bz2-ben a legkisebbek a patchek). A 3 között csak a használatukhoz kiadandó parancs a különbség.

Elsőnek mind a 3 esetben be kell lépni a kernel könyvtárába.

A tömörítetleneknél a parancs:

cat [/ahol/a/patch/van/][patchfájlneve] | patch -p1

bz2-be tömörítetteknél (onnan lehet felismerni, hogy a fájl neve .bz2-re végződik):

bunzip2 -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1

gz-be tömörítetteknél (onnan lehet felismerni, hogy a fájl neve .gz-re végződik):

gunzip -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1

3. Patchelés visszavonása

Ha a patchelést vissza kéne vonnod, azt is meg teheted gond nélkül. Belépsz a kernel könyvtárába és a következő parancsot adod ki:

cat [/ahol/a/patch/van/][patchfájlneve] | patch -p1 -R

vagy

bunzip2 -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1 -R

vagy

gunzip -cd [/ahol/a/patch/van/][patchfájlneve] | patch -p1 -R


C. Ncurses

1. Az Ncurses-ról

Az Ncurses konzolos menük kirajzolására használt lib. Talán ennyi elég is róla.

2. Az Ncurses telepítése a nagyobb disztribúciókban

Debian:

apt-get install libncurses5-dev

SuSE:

YaST-al próbáld meg!

Red Hat:

7.x:

rpm --install ncurses-devel-[X]-[X].i386.rpm

(ha nem tudod honnan szerezd be a csomagot: http://rpmfind.net)

8.x:

apt-get install ncurses

Gentoo:

emerge -s ncurses


D. Kernel a Debian-ban (kernel-package)

1. A kernel-package csomag

A kernel-package csomag egy olyan extra lehetőséggel terjeszti ki a Debian-t, amivel talán egy másik disztribúció sem rendelkezik (kivéve esetleg a debian alapúakat:). Aki Debian-t használ az tudja, hogy az dpkg (apt-get) mennyire megkönnyíti az ember életét. Ezt a könnyedséget terjeszti ki a kernel-package csomag a kernel használatára is. Ezzel a csomaggal ugyan olyan .deb csomagokat csinálhatunk a kernelből, mint amilyen az összes többi csomag, így egy kernel telepítése, vagy eltávolítása másodpercek alatt és jelentősen kevesebb macerával mehet végbe.

2. make-kpkg

A kernel-package használata pofon egyszerű. Vagy le kell tölteni apt-get-el a fordítani kívánt kernel forráskódját

apt-get install kernel-source-[kernelverzio]

és aztán kitömöríteni és a konfigurálásban a már előzőekben leírtak szerint eljárni, vagy elő kell készíteni a kernel forrását, pontosan úgy ahogy a doksi elejében van leírva (kitömörítés, majd konfigurálás), de sem make dep-et, sem az után következő parancsokat nem kell lefuttatni. Egyszerűen csak be kell lépni a kernel forrásának a könyvtárába (/usr/src/linux), és ki kell adni ezt a parancsot:

make-kpkg kernel_image

Ez elkészít a kernel könyvtárához képest egy könyvtárral feljebb (../) egy debcsomagot, és innentől már csak ki kell adni a

dpkg -i [./ahol/a/csomag/van/]kernel-image-[kernelverzió]_10.00.Custom_i386.deb

parancsot, aztán rebootolni és már élvezhetjük is az új kernelünket.(ez az esetek többségében csak akkor működik, ha kézzel nem raktunk föl kernelt előtte)

3. Modulok a debian-ban

A Debian a kényelmünk érdekében a modulok kezelésére is tartalmaz egy hatalmas könnyítést. Nem kell az insmod-al, rmmod-al és a /etc/modules-el szórakozni, hanem csak ki kell adni a

modconf

parancsot és egy egyszerű menös rendszerrel lehet 1-1 enterrel és pár föl-le nyillal, valamint héha egy tabbal betöltögetni és eltávolítani a modulokat a memóriába/memóriából.


E. Erről a doksiról

1. Miért?

Ez a doksi eredetileg egy játékokkal foglalkozó weboldal fórumában íródott (http://www.mportal.hu/?action=forum_olvas
&base=mportal8&thread=203&hit2=25&page=1), azért, hogy azok is tudjanak kerneltforgatni, akiket a linuxos világ nagy része lamáknak nevez, pedig csak egyszerűen nem úgy születtek, hogy értenének a linuxhoz.

2. Jelmagyarázat

Azokat a részeket a kiadandó parancsokban, meg hasnlókba, amiket nem feltétéenül úgy kell pontosan kiadni, ahogy le van írva [ ] közé raktam.

3. Készítő(k)

A doksit BaliHB készítette (azaz én), de szeretnék köszönetet mondani az tanácsaikért és hathatós segítségeikért a következőknek:

A jelenlegi főnököm és munkatársaim

szogi

rengeteg fórum és cikkolvasó

2 Fejlesztés

A doksi folyamatos fejlesztés alatt áll. Vannak stabil, dev, pre és rc verziói is. A verziókról bővebben a kernelverziókról szóló függelékben olvashatsz :)

3. Készült

Készült: emacs, linux kernel, OpenOffice.org (office.fsf.hu-s magyarítás, valamint az ebből általm készített .deb csomag (http://savannah.nongnu.org/projects/ooodeb-hu/)), Debian, gnome-terminal, wmaker

felhasználásával.

Minőségét megörzi: amíg én vagy valaki fejleszti.

2002-02-15 00:03