A Linux Kernel HOGYAN Brian Ward, bri@blah.math.tu-graz.ac.at 1997. május 26. Verzió: 0.80 Részletes útmutató kernel konfiguráláshoz, fordításhoz, frissítéshez és hibakereséshez x86 alapú gépeken. ______________________________________________________________________ Tartalom: 1. Bevezetés 1.1. Ezt olvasd el először! (Komolyan) 1.2. A stílusról 2. Fontos kérdések és válaszok 2.1. Egyáltalán mit csinál a kernel? 2.2. Miért kell frissíteni a kernelt? 2.3. Milyen hardvert támogatnak az újabb kernelek? 2.4. A gcc és libc melyik verziójára van szükség? 2.5. Mi a betölthető modul? 2.6. Mennyi lemezterületre van szükség? 2.7. Mennyi ideig tart? 3. Hogyan kell konfigurálni a kernelt ? 3.1. A forrás beszerzése 3.2. A forrás kibontása 3.3. A kernel konfigurálása 3.3.1. Kernel math emulation 3.3.2. Enhanced IDE/MFM/RLL disk/cdrom/tape support 3.3.3. Networking support 3.3.4. Limit memory to low 16MB 3.3.5. System V IPC 3.3.6. Processor type (386, 486, Pentium, PPro) 3.3.7. SCSI support 3.3.8. Network device support 3.3.9. Filesystems 3.3.9.1. De én nem tudom milyen fájlrendszer kell nekem! 3.3.10. Character devices 3.3.11. Sound card 3.3.12. Egyéb konfigurációs opciók 3.3.13. Kernel hackelés 3.4. Na most mi legyen? (A Makefile) 4. A kernel fordítása 4.1. Törlések és függőségek 4.2. Fordítási idő 4.3. A ``make'' egyéb opciói 4.4. A kernel installálása 5. A kernel patch-elése 5.1. Patch-elés 5.2. Ha valami nem megy 5.3. Az .orig fájloktól való megszabadulás 5.4. Egyéb patch-ek 6. További csomagok 6.1. kbd 6.2. util-linux 6.3. hdparm 6.4. gpm 7. Néhány kelepce 7.1. make clean 7.2. Nagy vagy lassú kernel 7.3. A kernel nem fordul le 7.4. Az új kernel nem bootol 7.5. Elfelejtetted futtatni a LILO-t, vagy egyáltalán nem bootol 7.6. Azt mondja `warning: bdflush not running' 7.7. Mond valamit ``undefined symbols''-okról és nem fordul le 7.8. Nem működik az IDE/ATAPI CD-ROM meghajtó 7.9. Furcsa üzenetek ``obsolete routing requests''-ről 7.10. A tűzfal (firewall) nem működik az 1.2.0 kernellel 7.11. ``Not a compressed kernel Image file'' 7.12. Problémák a konzollal 1.3.x-ra való frissítés után 7.13. Nem lehet semmit lefordítani kernel upgrade után 7.14. Korlátok megemelése 8. A 2.0.x kernelekre történő frissítés 9. Modulok 9.1. A segédprogramok telepítése 9.2. Kernellel terjesztett modulok 10. Egyéb konfigurációs opciók 10.1. Általános beállítások 10.2. Hálózati opciók 11. Tippek és trükkök 11.1. A make és patch parancsok kimenetének átirányítása 11.2. Feltételes kernel installálás 11.3. Kernel frissítések 12. Egyéb idevágó HOWTO-k, amik hasznosak lehetnek 13. Egyebek 13.1. A szerző 13.2. Tennivalók 13.3. Hozzájárulások 13.4. Copyright, licensz és ilyesmi ______________________________________________________________________ 1. Bevezetés Neked szól ez a doukumentum? Igen, ha illik rád a következők valamelyike: · ``Grrr''! Ennek a wizzo-46.5.6 programcsomagnak az 1.8.193-as kernel verzió kell, nekem meg még mindig csak 1.0.9-es van!" · Az újabb kernelek egyikében van egy olyan eszközmeghajtó, amelyre égetően szükséged van. · Tényleg fogalmad sincs arról, hogy hogyan kell kernelt fordítani. · ``Tényleg csak annyi az egész, amit a README-ben írnak?'' · Jöttél, láttál, nem sikerült. · Mutatnod kell valamit azoknak, akik ragaszkodnak hozzá, hogy Te installálj nekik kernelt. 1.1. Ezt olvasd el először! (Komolyan) A példák feltételezik hogy van a gépeden GNU tar, find, és xargs. Ezek eléggé szabványosak; ez nem okozhat problémát. Továbbá feltételezem, hogy ismered a géped fájlrendszerének felépítését; ha nem, akkor nagyon fontos, hogy legyen egy másolatod a mount parancs normál működés melletti outputjáról (vagy az /etc/fstab tartalma, ha el tudod olvasni). Ez az információ fontos, és csak akkor változik meg, ha újraparticionálják a merevlemezt, installálnak egy újat, újratelepítik a rendszert vagy valami hasonló. Az aktuális ``stabil'' kernel verzió a dokumentum megírásnak idején a 2.0.30 volt, tehát a hivatkozások és példák erre a verzióra vonatkoznak. Bár megpróbáltam annyira verziófüggetlen lenni, amennyire lehetséges, a kernel állandóan fejlesztés alatt áll, így minden újabb verzióban elkerülhetetlenül lesznek bizonyos különbségek. Ez sem okozhat nagy problémákat. A linux kernel forrásnak két változata van: ``stabil'' és ``fejlesztői''. A stabil verziók az 1.0.x -től kezdődtek és páros számot viselnek. Tehát az 1.0.x, az 1.2.x és a 2.0.x is stabil. Ezeket tartják a legstabilabb, legkevésbé hibás kernelnek a kibocsátás idején. A fejlesztői kernelek (1.1.x, 1.3.x, 2.1.x, stb.) tesztelésre valók és olyanoknak szánják, akik hajlandóak új és esetleg sok hibával teli kerneleket kipróbálni. Ne mond, hogy nem szóltam. 1.2. A stílusról Az a szöveg ami így néz ki, az vagy olyasmi ami megjelenik a képernyőn, vagy amit közvetlenül be kell gépelni, mint például egy parancs, vagy egy parancs opciói, vagy egy fájlnév. (A sima szöveges változatban nem látszik semmi különbség.) A parancsok álltalában `' jelek között vannak. 2. Fontos kérdések és válaszok 2.1. Egyáltalán mit csinál a kernel? A Unix kernel a közvetítő a programok és a hardver között. Menedzseli a memóriát az összes futó program (processz) számára és biztosítja, hogy mind egyenlően (vagy egyenlőtlenül, ha úgy tetszik) részesüljenek a processzor ciklusaiból. Továbbá egy kényelmes, hordozható felületet nyűjt a programoknak, amelyen át kommunikálhatnak a hardverrel. Ennél persze jóval több szót érdemelne a kernel működése, de ezeket az alapvető funkciókat a legfontosabb ismerni. 2.2. Miért kell frissíteni a kernelt? Az újabb kernelek álltalában többféle hardverrel tudnak együttműködni mint a régebbiek (azaz több eszközmeghajtójuk van). Lehet hogy az új kernelnek jobb a processz-kezelése, gyorsabb vagy stabilabb mint a régi verzió, és már ki van benne javítva az előző ismert hibája. A legtöbben az eszközmeghajtók és a kijavított hibák miatt frissítenek kernelt. 2.3. Milyen hardvert támogatnak az újabb kernelek? Lásd a Hardware-HOWTO-t. Továbbá megnézheted a `.config' fájlt a linux forrásában, vagy kiderül, ha kiadod a `make config', a `make menuconfig' vagy a `make xconfig' parancsot. Ez megmutatja az összes hardvert amit a szabványos kernel csomag támogat, de nem mindent amit a linux támogat. Sok elterjedt eszközmeghajtó (mint például a PCMCIA kártyák és némely szalagos egység meghajtója) betölthető modulként vannak megírva, amelyeket külön gondoznak és terjesztenek. 2.4. A gcc és libc melyik verziójára van szükség? Linus ajánl egy gcc verziót a linux forráshoz mellékelt README fájlban. Ha neked nincs meg ez a verzió, a gcc ajánlott verziójának dokumentációja megmondja, hogy kell-e frissíteni a libc-t. Ez nem egy bonyolult eljarás, de fontos betartani az utasításokat. 2.5. Mi a betölthető modul? Ezek a kernel program olyan részei, amelyek nincsenek közvetlenül beillesztve a kernelbe. Külön kell lefordítani, és szinte bármikor be lehet illeszteni a futó kernelbe illetve ki lehet venni onnan. A rugalmassága miatt már ez a legelterjedtebb módszer bizonyos kernel- szolgáltatások programozására. Sok népszerű eszközmeghajtó, mint például a PCMCIA meghajtók és a QIC-80/40 szalagos egység meghajtója betölthető modulként van megírva. 2.6. Mennyi lemezterületre van szükség? Ez az adott konfigurációtól függ. Először is a tömörített linux forrás majdnem 6 megabájt a 2.0.10 -es verziónál. A legtöbb helyen ezt a kicsomagolás után is megtartják. Kibontva 24 MB helyett foglal. De még nincs vége: ennél is több kell, hogy le is lehessen fordítani. Ez attól függ mennyi mindent akarsz betenni a kernelbe. Például az egyik gépemen van hálózat, a 3Com 3C509 meghajtója, három fájlrendszer, így összesen majdnem 30 MB lesz. A tömörített forrással együtt körülbelül 36 MB kell ehhez a konfigurációhoz. Egy másik gépen, hálózati eszköz támogatás nélkül (de hálózati támogatással) és hangkártya támogatással még többet foglal. Egy újabb kernelnek biztosan nagyobb a forrása mint egy réginek, és ha sok hardvered is van, akkor gondoskodj egy megfelelően nagy merevlemezről. (És a mai árak mellett csak ajánlani tudom, hogy egy újabb merevlemez beszerzéséval oldd meg a tárolási problémákat.) 2.7. Mennyi ideig tart? A többség számára a válasz: "elég sokáig". Alapvetően a gép sebessége és a memória mennyisége határozzák meg a fordítási időt, de kis mértékben függ a kernelbe konfigurált dolgok mennyiségétől is. Egy 486DX4/100-es gépen 16 MB RAM-mal egy 1.2-es kernel fordítása öt fájlrendszerrel, hálózati támogatással, hangkártya meghajtóval körülbelül 20 percig tart. Egy 386DX/40-en (8 MB RAM) hasonló konfigurációval majdnem másfél óra. Amíg a gép fordítja a kernelt főzz egy kávét, nézz tévét, kötögess vagy hódolj egyéb kedvteléseknek. Ha tényleg nagyon lassű géped van akkor megkérhetsz valakit, akinek gyors gépe van, hogy fordítsa le neked a kernelt. 3. Hogyan kell konfigurálni a kernelt ? 3.1. A forrás beszerzése A forrást anonymous ftp-vel lehet beszerezni az ftp.kernel.org-on a /pub/Linux/ könyvtárból, egy tükrözésről, vagy egyéb helyről. Általában linux-x.y.z.tar.gz a neve, ahol x.y.z a verziószám. Az újabb (jobb?) verzók és patch-ek általában `v2.0' és `v2.1' nevű alkönyvtárakban vannak. A legnagyobb szám a legújabb verzió (jelenleg v2.1), és ezek "fejlesztői verziók". Ha félsz az alfa és béta verzióktól, akkor inkább maradj egy stabil verziónál (v2.0). Nyomatékosan ajánlom, hogy használj egy tükör ftp-helyet az ftp.kernel.org helyett. Itt egy rövid lista a tükrözésekről: USA: sunsite.unc.edu:/pub/Linux/kernel USA: tsx-11.mit.edu:/pub/linux/sources/system UK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernel Ausztria: ftp.univie.ac.at:/systems/linux/sunsite/kernel Németország: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/Linus Németország: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/Linus Franciaország: ftp.ibp.fr:/pub/linux/sources/system/patches Ausztrália: sunsite.anu.edu.au:/pub/linux/kernel Magyarország: ftp.kfki.hu:/pub/linux/kernel ftp.aszi.sztaki.hu:/pub/Linux/kernel ftp.bme.hu:/pub/OS/Linux/kernel ftp.jate.u-szeged.hu:/pub/linux/kernel Általában a sunsite.unc.edu tükrözésein érdemes keresni. A /pub/Linux/MIRRORS fájl tartalmazza az ismert tükrözések listáját. Ha általános Linux információkat keresel, próbáld meg a következő címeken: http://www.linux.org (angolul), http://www.cab.u- szeged.hu/linux/ (magyarul). 3.2. A forrás kibontása Lépj be `root'-ként (vagy válts át su-val) és menj át (cd-vel) a /usr/src-be. Ha a linux telepítésekor a forrást is felrakattad (ahogy a legtöbben), akkor már lesz ott egy `linux' nevű könyvtár, ami tartalmazza az egész forrás-hierarchiát. Ha van elég lemezterületed és biztosra akarsz menni, akkor tartsd meg ezt a könyvtárat. A legjobb ha kideríted melyik verzió fut éppen és a könyvtárat annak megfelelően nevezed át. A `uname -r' parancs kiírja az aktuális verziószámot. Tehát ha az `uname -r' azt válaszolta, hogy `2.0.17', akkor nevezd át a `linux'-ot (`mv'-vel) `linux-2.0.17'-re. Ha szeretsz kockáztatni, akkor csak töröld ki az egész könyvtárat. A lényeg, hogy ne legyen `linux' nevű könyvtár a /usr/src-ben amikor kibontod a forrást. Most (még mindig a /usr/src-ben) bontsd ki a forrást a `tar zxpvf linux-x.y.z.tar.gz' paranccsal. (Ha csak egy `tar xpvf linux- x.y.z.tar' paranccsal.) Az archivum tartalma el fog száguldani a képernyőn. Amikor vége, lesz egy új `linux' könyvtár a /usr/src-ben. Menj bele és nézd át a README fájlt. Lesz benne egy `INSTALLING the kernel' című rész. Hajtsd végre az utasításait, ha szükséges -- például a szimbolikus linkek elkészítése a megfelelő helyre, stb. 3.3. A kernel konfigurálása Megjegyzés: Az itt következők egy része a Linus-féle README egy hasonló fejezetének megismétlése, részletezése. A /usr/src/linux-ból kiadott `make config' parancs elindít egy konfiguráló scriptet, amely sok kérdést tesz fel. A bash kell hozzá, ezért ellenőrizd, hogy létezik-e a /bin/bash, a /bin/sh a /bin/bash-ra mutat-e, vagy a $BASH tartalmazza-e a /bin/bash-t. A `make config'-nak van két könnyebben és kényelmesebben használható alternatívája. Azok akik X alatt dolgoznak, megpróbálhatják a `make xconfig'-ot, ha van Tk installálva. A `make menuconfig' azoknak való, akik jobban szeretnének egy szöveges menüt; (n)curses kell hozzá. Ezeknek a felületeknek van egy határozott elönyük: Ha elrontasz valamit a konfigurálás közben, akkor egyszerűen vissza lehet menni kijavítani. A kérdésekre általában igennel (`y' (yes)) vagy nemmel (`n' (no)) kell válaszolni. Az eszközmeghajtókhoz általában van `m' opció is. Ez azt jelenti ``modul'', azaz a rendszer le fogja fordítani, de nem közvetlenül a kernelbe, hanem betölthető modulként. Néhány nyilvánvaló és nem fontos opciót itt nem magyarázok el, néhány egyéb opció leírását lásd az ````Egyéb konfigurációs opciók'''' című fejezetben. A 2.0.x verziótól kezdve van egy `?' opció is. Ennek hatására az adott paraméter egy rövid leírását kapjuk. Ez a legnaprakészebb információ az adott opcióról. 3.3.1. Kernel math emulation Társprocesszor emuláció. Ha nincs matematikai társprocesszor a gépedben (egy sima 386 vagy 486SX esetén) akkor erre igennel kell válaszolni. Ha van társprocesszor és mégis igennel válaszolsz, ne aggódj -- a kernel használni fogja a társprocesszort és figyelmen kívül hagyja az emulációt. Az egyetlen következmény az, hogy a kernel nagyobb lesz, fogyasztva a memóriát. Úgy hallottam, hogy a társprocesszor emuláció lassú. Bár nincs sok köze ehhez a fejezethez, jó ha ez eszedbe jut, ha azt tapasztalod, hogy nagyon lassú az X. 3.3.2. Enhanced IDE/MFM/RLL disk/cdrom/tape support Megnövelt IDE/MFM/RLL disk/cdrom/szalagos egység támogatás. Erre valószínűleg szükség lesz. Ez azt jelent, hogy a kernel támogatni fogja a szabványos PC merevlemezeket; a legtöbb gépben ilyen van. Ebbe nem tartoznak bele az SCSI maghajtók, ezek konfigurálására később kerül sor. Amennyiben nem a fenti kell, választhatod még az `Old harddisk (MFM/RLL/IDE) driver'-t (régi MFM/RLL/IDE lemez meghajtó). Csak az egyiket lehet választani. A fő különbség az, hogy a régi meghajtó csak két lemezegységet tud kezelni egy csatolón, míg az előbbi egy második csatolót is tud kezelni illetve az IDE/ATAPI CD-ROM és szalagos egységeket is. Az új meghajtó 4k-val nagyobb, mint a régi és feltételezhetôen ``javított'', ami azt jelenti, hogy amellett, hogy több hibajavítást is tartalmaz, megnöveli a lemezek teljesítményét, különösen az újabb (EIDE) hardver esetén. 3.3.3. Networking support Hálózati támogatás. Elméletileg erre csak akkor kellene igennel válaszolni, ha géped egy hálózaton van, mint amilyen az Internet, vagy éppen SLIP, PPP, term, stb. segítségével telefonvonalon akarsz hálózatra kapcsolódni. De mivel sok programcsomag (mint például az X ablakozó rendszer) akkor is igényel hálózati támogatást, ha a gép nincs igazi hálózatra kötve, mindenképpen igennel kell válaszolni. Később megkérdezi, hogy akarsz-e TCP/IP támogatást; itt is y' a válasz, ha nem vagy teljesen biztos az ellenkezőjében. 3.3.4. Limit memory to low 16MB Memória korlátozása az alsó 16 MB-ra. Vannak hibás 386-os DMA vezérlők, amelyek nem tudnak 16 MB fölé eső memóriát megcímezni. Csak abban a ritka esetben kell igennel válaszolni, ha ilyened van. 3.3.5. System V IPC Az IPC (Interprocess Communication = ``processzek közötti kommunikáció'') egyik legjobb definicója a Perl könyv szómagyarázatában található. Nem meglepő, hogy néhány Perl programozó ennek segítségével küld üzeneteket processzek között, csakűgy mint sok más programcsomag (pl. a DOOM, hogy a legismertebbet említsem). Ezért nem ajánlatos n-nel válaszolni, hacsak nem tudod pontosan mit csinálsz. 3.3.6. Processor type (386, 486, Pentium, PPro) Processzor típusa. Régebben ez befordított bizonyos optimalizációt az adott processzorhoz; a kernel simán futott más processzorokon is, csak egy kicsit nagyobb volt. Az újabb kernelek esetén ez már nem így van, ezért annak a processzornak a tipusát kell beírni, amelyhez a kernel készül. Egy ``386-os'' kernel minden gépen menni fog. 3.3.7. SCSI support SCSI támogatás. Ha van SCSI eszközöd, válaszolj `y'-t. További kérdéseket fog feltenni CD-ROM támogatásról, a lemezegységek és az SCSI adapter típusáról. Lásd az SCSI-HOWTO-t részletes információért. 3.3.8. Network device support Hálózati eszköz támogatás. Ha van hálózati kártyád, vagy szeretnél SLIP-pel, PPP-vel vagy a párhuzmos porton át csatlakozni az Internethez, válaszolj igennel. A konfigurációs script megkérdezi a kártya tipusát és a használandó protokollt. 3.3.9. Filesystems Fájlrendszerek. A konfiguráló script ezek után megkérdi, hogy akarod- e használni a következő fájlrendszereket: Minix - Az újabb disztribúciók nem hoznak létre minix fájlrendszereket, és sokan nem is használják, de ennek ellénére érdemes lehet bekonfigurálni. Néhány ``mentőlemez''-program használja, és sok floppyn van minix fájlrendszer, mert floppyn sokkal kényelmesebb ezt használni (kevesebb helyet foglal maga a fájlrendszer). Extended (ext) - Ez volt az ext2 fájlrendszer első változata, ma már nem használják széles körben. Ha szükséged van rá, akkor valószínüleg tudsz is róla; ha nem tudod, akkor nincs is rá szükséged. Second extended (ext2) - Ezt széles körben használják az újabb disztribúciók. Valószínűleg ilyened van, ezért igennel kell válaszolni. xiafs - Egy időben elterjedt volt, de most nem ismerek senkit aki használja. msdos - Ha használni akarod a meglévő MS-DOS winchester particiókat, vagy DOS alatt formázott floppykat akarsz mountolni, akkor válaszolj igennel. umsdos - Ez a fájlrendszer kibővít egy MS-DOS fájlrendszert a szokásos Unix-szerű tulajdonságokkal, mint például a hosszú fájlnevek. Haszontalan olyanoknak (mint én), akik nem használnak DOS-t. /proc - Az egyik legnagyszerűbb dolog a tejpor feltalálása óta. (Az ötletet azt hiszem a Bell Labs-tól lopták szégyentelen módon.) A proc fájlrendszer nem arra való, hogy létrehozzák a lemezen; ez egy fájlrendszer felület a kernel és a processzek felé. Sok processz- listázó (mint a `ps') használja. Egyszer próbáld ki a `cat /proc/meminfo' vagy `cat /proc/devices' parancsokat. Néhány parancsértelmező (különösen az rc) használja a /proc/self/fd-t (más rendszereken /dev/fd néven ismert) I/O műveletekre. Majdnem biztosan igennel kell válaszolnod erre, sok fontos linux segédprogram támaszkodik rá. NFS - Ha a géped hálózatra van kötve és szeretnél más gépeken lévő fájlrendszerereket használni NFS-sel, akkor válaszd ki. ISO9660 - A legtöbb CD-ROM-on ez található. Ha van CD-ROM meghajtód és szeretnéd linux alatt használni, válaszd ki. HPFS - Az írás idején egy csak olvasható fájlrendszer OS/2 HPFS-hez. System V and Coherent - System V és Coherent partíciókhoz. (Ezek más PC-s Unix változatok.) 3.3.9.1. De én nem tudom milyen fájlrendszer kell nekem! Jól van, írd be, hogy `mount'. A kimenet valami ilyesmi lesz: blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) Nézd meg mindegyik sort. A `type' utáni szó a fájlrendszer típusa. Ebben a példában a / és a /usr fájlrendszerek típusa ext2 (second extended). Használok /proc fájlrendszert is, továbbá egy floppy be van mountolva msdos fájlrendszerként. Megpróbálkozhatsz a `cat /proc/filesystems' paranccsal, ha a /proc éppen támogatva van a futó kernelben és be van mountolva; ez ki fogja listázni az aktuális kernel fájlrendszereit. Ritkán használt, nem létfontosságú fájlrendszerek bekonfigurálása túlméretezett kernelt eredményezhet. A ``modulokról'' szóló fejezetből kiderül, hogy ezt hogy lehet elkerülni. A ````Néhány kelepce'''' címűből pedig az, hogy miért nemkívánatos a nagy kernel. 3.3.10. Character devices Karakteres eszközök. Itt állíthatók be a (párhuzamos) nyomtató, busz- egér (busmouse), PS/2 egér (sok notebook gép használ PS/2 egér protokollt a beépített trackballhoz), néhány szalagos egység és más hasonló ``karakteres'' eszközökhöz a meghajtók. Nyomj `y'-t a megfelelő helyen. 1. Megjegyzés: A selection egy program amely lehetővé teszi az egér használatát az X ablakozó rendszeren kívül is, virtuális konzolok közötti másolásra. Ha soros egered van, elég kellemes, mert jól megfér az X-el, de ha másmilyen, akkor trükközni kel. A selection támogatása valamikor konfigurációs opció volt, de ma már szabványos. 2. Megjegyzés: A selection már elavultnak számít. Az új program neve ``gpm''. Többet tud: például egér protokollok között fordítani, több egeret kezelni, stb. 3.3.11. Sound card Hangkártya. Ha nagyon vágysz arra, hogy halljad a biff-et ugatni, nyomj `y'-t, és a konfigurációs program részletesen ki fog kérdezni a hangkártyádról. Ha van hangkártyád, melegen ajánlom a Sound-HOWTO-t. 3.3.12. Egyéb konfigurációs opciók Nincs az összes konfigurációs opció felsorolva itt, egyrészt mert túl gyorsan változnak, másrészt mert magától értetődőek. (Például a ``3Com 3C509 support'' az említett ethernet kártyához való támogatást jelenti.) Axel Boldt (axel@uni-paderborn.de) összeállított egy meglehetősen széleskörű listát az összes opcióról (és egy módszert, amivel be lehet tenni őket a Configure scriptbe), amely a http://math-www.uni-paderborn.de/~axel/config_help.html címen található, vagy anonymous FTP-vel a ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.yz.tgz címen, ahol x.yz a verziószám. A későbbi kernelekben (2.0.x és e fölött) ez már be van integrálva a forrásba. 3.3.13. Kernel hackelés Linus írja a README-ben: A ``kernel hacking'' konfigurációs részletek általában nagyobb vagy lassabb (vagy mindkettő) kernelt eredményeznek, sőt akár kevésbé stabilabbá is tehetik a kernelt azáltal, hogy bekonfigurálnak néhány rutint, amelyek megpróbálják aktívan feltörni a hibás programrészleteket, hogy így találjanak problémákat. Ezért inkább `n'-t kell válaszolni az erre vonatkozó kérdésekre egy ``stabil'' kernel esetén. 3.4. Na most mi legyen? (A Makefile) A make menuconfig vagy a make xconfig után egy üzenet tudatja, hogy a kernel konfigurálása megtörtént és felszólít, hogy ``check the top- level Makefile for additional configuration'', stb. (``További konfiguráláshoz ellenőrizd a felsőszintű Makefile-t'') Nézz bele tehát a Makefile-ba. Valószínűleg nem kell megváltoztatni semmit, de megnézni sosem árthat. Az opciókat megváltoztathatod akkor is, amikor az új kernel már a helyén van az `rdev' paranccsal. 4. A kernel fordítása 4.1. Törlések és függőségek Amikor a konfiguráló script véget ér, azt is mondja, hogy add ki a `make dep' és a `make clean' parancsokat. A `make dep' ellenőrzi, hogy az összes függőség, mint például az include fájlok, a helyükön vannak-e. Nem tart sokáig, hacsak a géped nem nagyon lassú. Egy `make clean'-t is csinálni kell. Ez letörli az összes object fájlt és néhány egyéb dolgot, amit a régi verzió hátrahagy. Mindenesetre ne felejtsd el ezt a lépést, mielőtt megpróbálod újrafordítani a kernelt. 4.2. Fordítási idő A `make dep' és `make clean' után jöhet a `make zImage' vagy `make zdisk' (Ez az a rész, ami sokáig tart.) A `make zImage' lefordítja a kernelt és (többek között) egy `zImage' nevű fált hagy maga után a arch/i386/boot-ban. Ez az új tömörített kernel. A `make zdisk' ugyanezt teszi, de az új zImage-t rámásolja egy floppyra, amelyet addigra remélhetőleg már betettél az ``A:'' drive-ba. A `zdisk' nagyon kényelmes az új kernelek teszteléséhez. Ha lefagy (vagy egyszerűen csak nem működik jól), akkor csak kiveszed a floppyt és bootolhatsz a régi kernellel. Akkor is jól jön, ha véletlenül letörlöd a kernelt (vagy valami hasonló szörnyűség történik). Új rendszerek telepítésére is lehet használni; az egyik lemez tartalmát egyszerűen átmásolod a másikra. Minden valamirevaló újabb kernel tömörítve van, ezért van `z' a nevük előtt. A tömörített kernel automatikusan kicsomagolja magát, amikor végrehajtódik. 4.3. A ``make'' egyéb opciói A `make mrproper' alaposabb törlést végez. Néha szükség van rá, ajánlott minden patch alkalmával végrehajtani. A `make mrproper' a konfigurációs fájlt (.config) is letörli, ezért csinálj róla biztonsági másolatot, ha megtartásra érdemesnek találod. A `make oldconfig' megpróbálja egy régi konfigurációs fájl alapján konfigurálni a kernelt; elvégzi helyetted a `make config' lépést. Ha még sosem fordítottál kernelt vagy nincs régi konfigurációs fájl kéznél, akkor ne tedd, mert minden bizonnyal meg kell változtatni az alapértelmezett konfigurációt. A `make modules' leírása a modulokról szóló fejezetben található. 4.4. A kernel installálása Ha kész van a kernel és az úgy is működik, ahogy szeretnéd, itt az ideje installálni. A legtöbben a LILO-t (Linux Loader) használják erre célra. A `make zlilo' installálja a kernelt, lefuttatja rajta a LILO- t, és bootolásra kész állapotba hozza, DE CSAK AKKOR, ha a LILO a következőképpen van konfigurálva: a kernel /vmlinuz, a LILO az /sbin- ben van, és a LILO konfigurációs fájl (/etc/lilo.conf) tartalma is ennek megfelelő. Ellenkező esetben közvetlenül kell a LILO-t használni. Eléggé könnyű installálni és használni, de a konfigurációs fájl hajlamos összezavarni az embereket. Nézd meg a konfigurációs fájlban (a régebbi verzióknál /etc/lilo/config, az újaknál /etc/lilo.conf), hogy mi az aktuális beállítás. A konfigurációs fájl így néz ki: ... image = /vmlinuz label = Linux root = /dev/hda1 ... Az `image =' az aktuális kernelre mutat. A legtöbben /vmlinuz-t használnak. A `label' alapján dönti el a lilo, hogy melyik kernelt, vagy operációs rendszert indítsa el, és a `root' az adott operációs rendszert gyökérkönyvtára. Készíts biztonsági másolatot a régi kernelről és másold a frissen fordított zImage-t a helyére. (Például, ha `/vmlinuz'-t használsz, azt mondod, hogy `cp zImage /vmlinuz') Ezután futtasd a lilo-t -- az újabb rendszereken elég annyi, hogy `lilo', de régebbieken lehet, hogy /etc/lilo/install , vagy akár /etc/lilo/lilo -C /etc/lilo/config kell. Ha szeretnél többet tudni a LILO konfigurálásáról, vagy nincs is meg neked, akkor szerezd meg a legújabb verziót a kedvenc ftp helyedről és kövesd az utasításokat. Ha szeretnél egy régi kernelt bootolni a merevlemezről (így is megmenekülhetsz, ha az újat elrontottad), másold le a lilo konfigurációs fájlban az `image = xxx' sort és az utánna következő sorokat a fájl aljára, és változtasd meg az `image = xxx' sort `image = yyy'-ra, ahol `yyy' annak a fájlnak a teljes elérési útvonala, amelybe a régi kernelt mentetted. Azután változtasd meg a `label = zzz' sort `label = linux-backup'-ra és futtasd a lilo-t. Lehet, hogy be kell tenni egy `delay=x' sort is a konfigurációs fájlba, ahol x az az idő tizedmásodpercben megadva, amennyit a lilo vár mielőtt bootolna. Így meg lehet szakítani (például a shift billentyűvel) és be lehet írni a régi kernel címkéjét, ha valami kellemetlen történik az újjal. 5. A kernel patch-elése 5.1. Patch-elés A kernel inkrementális frissítéseit patch (``folt'') formában terjesztik. Például, ha neked a 2.0.30 verzió van meg, és észreveszed, hogy van hozzá valahol egy `patch-2.0.31.gz', akkor ez azt jelenti, hogy upgrade-elhetsz a 2.0.31 verzióra a patch alkalmazásával. Először talán készíts egy biztonsági másolatot a forrásról. (`make clean' aztán `cd /usr/src; tar zcvf old-tree.tgz linux' csinál neked egy tömörített tar archivumot.) A fenti példát folytatva, tegyük fel, hogy a `patch-2.0.31.gz' az /usr/src-ben van. Menj át az /usr/src-be (cd) és add ki a `zcat patch-2.0.31.gz | patch -p0' parancsot (vagy `patch -p0 < patch-2.0.31.gz', ha a patch nincs tömörítve). Egy csomó minden fog elsuhanni elötted a képernyőn (vagy épp elvánszorogni, ha annyira lassú a gép). Üzenetek jelennek meg arról, hogy a patch éppen mit csinál, és hogy sikerült-e neki vagy nem. Ez általában túl gyors ahhoz, hogy bármit is el lehessen olvasni. Ha nem vagy biztos benne, hogy sikerült-e, használd a patch -s opcióját, aminek hatására csak a hibaüzeneteket írja ki. Menj be a /usr/src/linux-ba és keress .rej (``reject'') kiterjesztésű fájlokat. A patch néhány verziója (olyan régebbi verziók, amelyeket gyengébb fájlrendszerhez fordítottak) # kiterjesztést ad a ``reject'' fájloknak. A `find' parancsot használhatod a keresésre: find . -name '*.rej' -print Ez kiírja a standard outputra az összes olyan fájl nevét, amely az aktuális könyvtárban, vagy az abból nyíló alkönyvtárakban van és .rej a kiterjesztése. Ha minden simán ment, akkor add ki a `make clean', `config', és `dep' parancsokat a 3. és 4. fejezetben leírtaknak megfelelően. A patch parancsnak elég sok opciója van. Ahogy az előbb is szó volt róla, a patch -s kikapcsolja az üzeneteket, a hibák kivételével. Ha a kernel forrását nem az /usr/src/linux-ben tartod, hanem valahol másutt, akkor a patch -p1 (az adott könyvtárban) fogja helyesen megpatchelni. A többi patch opció jól le van írva a manualban. A fenti folyamat akár automatizálható is a patch-kernel scripttel, ami szintén megtalálható a kernel forrásában. Meghatározza a kernel aktuális verziószámát, majd minden patch-et alkalmaz rá amit megtalál, s ami frissebb az aktuális kernel verziójánál. cd /usr/src . linux/scripts/patch-kernel A kernelforrás alapértelmezett könyvtára a /usr/src/linux, de első argumentumként más is megadható. Továbbá a patch-eket az aktuális könyvtárban keresi a script, hacsak a második argumantumban nem adsz meg egy másik könyvtárat. 5.2. Ha valami nem megy (Megjegyzés: ez a fejezet főként nagyon régi kernelekre vonatkozik) A leggyakrabban felmerülő probléma régebben az volt, hogy a patch módosított egy `config.in' nevű fájlt, és nem sikerült, mert a felhasználó megváltoztatta az opciókat, hogy illeszkedjen a gépéhez. Ezt azóta megoldották, de még lehet vele találkozni egy régebbi kibocsátás esetében. A következőképpen lehet megjavítani: Nézz bele a config.in.rej fájlba és keresd meg mi maradt az eredeti patch-ből. A változásokat általában sor eleji `+' and `-' jelek jelzik. Nézd meg a körülötte lévő sorokat és jegyezd emg, hogy az állásuk `y' vagy `n'. Utánna szerkeszd át a config.in-t, és változtasd meg a `y'-t `n'-ra és az `n'-t `y'-ra a megfelelő helyeken. Addj ki egy patch -p0 < config.in.rej parancsot, és ha sikerül (nincs hibaüzenet), akkor lehet folytatni a konfigurálással és fordítással. A config.in.rej fájl megmarad, de le lehet törölni. Ha további problémák bukkannak elő, akkor lehet, hogy rossz sorrendben alkalmaztad a patch-okat. Ha azt mondja, hogy `previously applied patch detected: Assume -R?', akkor lehet, hogy az aktuális verzió előtti patchot próbálsz felrakni. Ha `y'-t válaszolsz, akkor megpróbálja lerontani a forrást, és nagy valószínűséggel kudarcot vall. Így aztán szerezni kell egy teljes vadonatúj forrást. (Lehet, hogy mindjárt ezzel kellett volna kezdeni.) Egy patch-et visszacsinálni a `patch -R' parancsal lehet. Ha a patch-ek tényleg nem működnek, akkor legjobban teszed, ha beszerzel egy érintetlen forrást (például egy linux-x.y.z.tar.gz fájlt) és elkezded elölről. 5.3. Az .orig fájloktól való megszabadulás Már néhány patch után az .orig fájlok kezdenek felhalmozódni. Például egyszer volt egy 1.1.51 forrásom, ami az 1.1.48. óta nem volt megtisztogatva. Az .orig fájlok letörlése több mint fél megát szabadított fel. Egy find . -name '*.orig' -exec rm -f {} ';' elintézi. A patch azon verziói, amelyek #-al jelölik a ``reject'' fájlokat, tildét használnak .orig kiterjesztés helyett. Van egy jobb módja is az .orig fájloktól való megszabadulásnak, amihez kell a GNU xargs: find . -name '*.orig' | xargs rm vagy a ``hosszú de biztos'' módszer: find . -name '*.orig' -print0 | xargs --null rm -- 5.4. Egyéb patch-ek Linus Torvalds által terjesztette patch-eken kívül vannak másmilyenek is (nevezzük őket ``nem szabványos''-nak). Ha ezeket felrakod, akkor lehet, hogy a Linus féle patch-ek nem fognak jól működni, és akkor vagy visszacsinálod őket és megjavítod a forrást vagy a patchet, vagy felraksz egy új forrást, vagy a fentiek valamilyen kombinációja. Ez nagyon idegesítő lehet, tehát ha nem akarod módosítani a forrást (kockáztatva egy nagyon rossz végkimenetelt), csináld vissza a nem szabványos patcheket mielőtt felrakod Linus-éit, vagy rakj fel egy új forrást. Így ellenőrízheted, hogy a nem szabványos patch-ek működnek-e még. Ha nem, akkor vagy be kell érned egy régi kernellel, vagy addig bütykölöd vagy a forrást vagy a patch-et amíg nem működik, vagy vársz (esetleg könyörögsz), hogy kijöjjön a patch egy új verziója. Mennyire elterjedtek a nem szabványos patchek? Valószínűleg fogsz róluk hallani. Régebben használtam a noblink patchet a virtuális konzolokon, mert utálom a villogó kurzort. (Ezt gyakran frissítik (vagy legalábbis frissítették) a kernel új verzióihoz). De mivel a legtöbb új eszközmeghajtót betölthető modulnak fejlesztik, a nem szabványos patch-ek gyakorisága jelentősen csökken. 6. További csomagok A linux kernelnek sok olyan szolgáltatása van, amelyet nem említenek meg magában a forrásban. Ezeket a szolgáltatásokat általában külső programcsomagokon keresztül használnak. A leggyakoribbakból néhány: 6.1. kbd A linux konzolnak talán több szolgáltatása van, mint amennyit megérdemel. Többek között betűkészletet tud váltani, átállítja a billentyűzetet, átváltja a video módot (az újabb kerneleknél), stb. A kbd csomagban olyan programok vannak, amelyekkel a felhasználó végezheti el mindezeket, plusz sok betűkészlet és beállítások szinte minden billentyűzethez. Ugyanazokról a helyekről lehet beszerezni, mint a kernel forrást. 6.2. util-linux Rik Faith (faith@cs.unc.edu) összeállított egy linux segédprogramokból álló nagy gyűjtemény, melynek neve, valami különös véletlen folytán, util-linux. Ennek karbantartója azóta Nicolai Langfeldt (util- linux@math.uio.no). Megszerezhető anonymous ftp-vel a sunsite.unc.edu-ról a /pub/Linux/system/misc könyvtárból. Tartalmazza többek között a setterm, rdev, és ctrlaltdel programokat, a kernellel kapcsolatosak közül. Ahogy Rik mondja, ne rakd fel ész nélkül. Nem kell mindent installálni, ami a csomagban van, és könnyen okozhat komoly problémákat, ha megteszed. 6.3. hdparm Mint sok csomag, ez is egy kernel patch és hozzávaló segédprogramok gyüjteménye volt valaha. A patch bekerült a hivatalos kernelbe, a programokat, amelyekkel optimalizálni és bütykölni lehet a merevlemezt, külön terjesztik. 6.4. gpm gpm annyit tesz, mint ``general purpose mouse'' (``általános célú egér''). Ezzel a programmal szöveget lehet másolni (``cut and paste'') az egyik virtuális konzolról a másikra, és még sok minden mást lehet csinálni, sokféle egértípussal. 7. Néhány kelepce 7.1. make clean Ha az új kernel egy rutinszerű kernelfrissítés után elkezd nagyon vad dolgokat művelni, akkor könnyen lehet, hogy elfeljtetted kiadni a make clean parancsot az új kernel lefordítása előtt. A tünetek változatosak lehetnek: egyszerűen összeomlik, furcsa I/O problémák jönnek elő vagy csak nagyon lassú lesz. Ne felejtsd el a make dep-et se. 7.2. Nagy vagy lassú kernel Ha a kernel sok memóriát foglal el, túl nagy, és/vagy egy örökkévalóságig tart lefordítani akkor is, ha a vadonatúj 786DX6/440 gépeddel esel neki, akkor valószínűleg túl sok fölösleges dolog (eszközmaghajtók, fájlrendszerek, stb.) van belekonfigurálva. Ha nem használod, akkor ne is konfiguráld be, mert foglalja a memóriát. A túl nagy kernel legszembetűnőbb tünete a memória és diszk közötti túlzott swappelés. Ha a merevlemez sokat zörög, és nem egy régi Fujitsu Eagles, ami kikapcsoláskor olyan hangot ad, mint egy sugárhajtású repülőgép leszálás közben, akkor nézd át a kernel konfigurálást. Megtudhatod, hogy mennyi memóriát használ a kernel, ha fogod a gépedben levő összes memória mennyiségét és kivonod belőle a ``total mem'' mező értékét a /proc/meminfo-ból, vagy a `free' outputjából. Megtuthatod még úgy is, hogy kiadod a `dmesg' parancsot (vagy megnézed a kernel log fájlt, bárhol is legyen a gépeden -- általában ez a /var/log/messages). Lesz benne egy ilyen sor: Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data) A 386-osom (amelyen egy kicsit kevesebb plusz dolog van bekonfigurálva) ezt írja ki: Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data) Ha nem bírsz élni nagy kernel nélkül, de a gép nem engedi, akkor próbáld ki a `make bzimage'-t. Könnyen lehet, hogy akkor a LILO egy új verzióját is installálnod kell. 7.3. A kernel nem fordul le Ha nem fordul le, akkor valószínűleg nem sikerült egy patch, vagy a forrás valahogy megsérült. Lehet, hogy nem jó a gcc adott verziója, vagy az is lehet sérült (például az include fájlok lehetnek hibásak). Ellenőrizd, hogy a szimbólikus linkek, amelyeket Linus említ a README- ben jól vannak-e beállítva. Általában elmondható, hogy ha a szabványos kernel nem fordul le, akkor valami komoly baj van a rendszerrel, és valószínűleg újra kell installálni bizonyos programokat. Vagy talán egy 1.2.x kernelt fordítassz egy ELF fordítóval (gcc 2.6.3 és a fölött). Ha rengeteg ez-meg-az undefined üzenetet kapsz fordítás közben, akkor lehet, hogy ez a baj. A megoldás a legtöbb esetben nagyon egyszerű. Másold a következő sorokat a arch/i386/Makefile elejére: AS=/usr/i486-linuxaout/bin/as LD=/usr/i486-linuxaout/bin/ld -m i386linux CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include Azután csinálj make dep-t és zImage-t újra. Ritka esetekben előfordul, hogy a gcc hardver okok miatt száll el. A hibaüzenet valami olyasmi lesz, hogy ``xxx exited with signal 15'' és általában nagyon rejtélyesen néz ki. Talán nem is említeném, he nem történt volna meg velem is egyszer -- A cache memória hibás volt és a gcc időnként véletlenszerűen elszállt. Először próbáld meg újrainstallálni a gcc-t, ha ilyen gond merül fel. Csak akkor kell gyanakodni, ha a kernel hiba nélkül lefordul kikapcsolt külső cache, kevesebb RAM, stb. mellett. Az embereket általában nyugtalanítja, ha felvetődik, hogy a hardverük hibás lehet. Nos, nem én találtam ki. Itt van hozzá egy FAQ: http://www.bitwizard.nl/sig11/. 7.4. Az új kernel nem bootol Nem futtattad a LILO-t, vagy rosszul van konfigurálva. Egyszer az ``fogott'' meg, hogy hiba volt a konfig fájlban. `boot =/dev/hda1' volt benne `boot = /dev/hda' helyett. (Ez elsőre nagyon idegesítő lehet, de ha már van egy működő konfig fájl, nem kell hozzányúlni.) 7.5. Elfelejtetted futtatni a LILO-t, vagy egyáltalán nem bootol Hoppá! A legjobb amit ilyen helyzetben tehetsz az, hogy floppyról bootolsz és csinálsz egy másik bootolható floppyt (ahogy a `make zdisk' is csinálná). Tudnod kell, hogy hol van a root (/) fájlrendszer és az milyen típusú (pl. második kiterjesztett, minix). Az alábbi példában azt is tudni kell, hogy melyik fájlrendszeren van a linux forrás /usr/src/linux, annak a típusa és hogy rendszerint hova van mountolva. A következő példában a root a /dev/hda1, az /usr/src/linux a /dev/hda3 fájlrendszeren van, normálisan az /usr-re mountolva. Mindkettő ext2 fájlrendszer. A működő kernel a /usr/src/linux/arch/i386/boot-ban van és a neve zImage. Az alapötlet az, hogy ha van egy működőképes zImage, akkor lehet azt használni az új floppyn. Egy másik módszerről, ami vagy jobban műkődik, vagy nem (attól függően, hogy pontosan hogyan rontottad el a rendszert) a példa után lesz szó. Először bootolj egy boot/root lemezpárosról vagy mentőlemezről és mountold föl azt a fájlrendszert, ami a működő kernelt tartalmazza. mkdir /mnt mount -t ext2 /dev/hda3 /mnt Ha a mkdir azt mondja, hogy a könyvtár már létezik, ne törődj vele. Menj be abba a könyvtárba, amelyben a működő kernel volt. Ne feledd, hogy /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot Helyezz egy formattált lemezt az ``A:'' meghajtóba (ne a boot vagy root lemezt!), másold a kernelt a lemezre és konfiguráld a root fájlrendszernek megfelelően: cd /mnt/src/linux/arch/i386/boot dd if=zImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1 Menj a root könyvtárba és csatold le a normálisan /usr fájlrendszert. cd / umount /mnt Ezek után a megszokott módon lehet bootolni erről a floppyról. Ne felejtsd el futtatni a LILO-t (vagy amit rosszul csináltál) az újrabootolás után. Ahogy az előbb említettem, van egy másik lehetőség. Ha van egy működő kernel a gyökérkönyvtárban (például /vmlinuz), akkor azt is lehet használni egy bootlemezen. Feltéve, hogy minden változatlan, /vmlinuz a kernel, a következő változtatásokat kell eszközölni a fenti példán: legyen /dev/hda3 helyett /dev/hda1 (a root fájlrendszer) az /mnt/src/linux-t mountold az /mnt-re, és az if=zImage paramétert írd át if=vmlinuz-re. A megjegyzést a /mnt/src/linux levezetéséről figyelmen kívül lehet hagyni. A LILO használata nagy merevlemezekkel (több, mint 1024 cilinder) gondot okozhat. Lásd a LILO mini-HOWTO-t vagy a dokumentációt segítségért. 7.6. Azt mondja `warning: bdflush not running' Ez súlyos probléma lehet. Az 1.0 kernel verzió kibocsátása után (1994 április 20. táján) felfrissítették/lecserélték az `update' nevű programot, amely rendszeresen kiüríti a fájlrendszer puffereit. Szerezd meg a `bdflush' forrását (meg kell lennie ugyanott, ahol a kernel forrásnak), és installáld fel. (Ezt még a régi kernelt futtatva ajánlatos megtenni.) `update' néven installálja magát. Az újrabootolás után a kernel nem fog többet panaszkodni. 7.7. Mond valamit ``undefined symbols''-okról és nem fordul le Valószínüleg ELF fordítód van (gcc 2.6.3 és afölött) és 1.2.x (vagy korábbi) kernel forrás. A szokásos megoldás az, hogy az alábbi sorokat bemásolod a arch/i386/Makefile elejére: AS=/usr/i486-linuxaout/bin/as LD=/usr/i486-linuxaout/bin/ld -m i386linux CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include Ez lefordítja az 1.2.x kernelt az a.out könyvtárakkal. 7.8. Nem működik az IDE/ATAPI CD-ROM meghajtó Különös módon sokan nem tudják használni az ATAPI meghajtókat, talán mert több oka lehet a hibának. Ha a CD-ROM meghajtó az egyetlen eszköz egy adott IDE csatolón, akkor a jumpereknek ``master'' vagy ``single'' állásban kell lenniük. Valószínűleg ez a leggyakoribb hiba. A Creative Labs (és mások is) IDE csatolókat építenek a hangkártyákra. Ebből következik az az érdekes probléma, hogy egyes gépeken csak egy csatoló van, másokon kettő beépítve az alaplapra (általában IRQ15), ezért a soundblaster csatolót a harmadik IDE portra teszik (IRQ11, állítólag). Ez problémákat okoz a linuxszal, mivel az 1.2.x kernelek nem támogatják a harmadik csatolót (az 1.3.x valamelyik tagjától kezdve már van,de az fejlesztői és nem detektálja automatikusan). Ezt többféleképpen lehet kikerülni. Ha már van második IDE port, könnyen lehet, hogy nem is használod, vagy még nincs rajta két eszköz. Vedd le az ATAPI meghajtót a hangkártyáról és rakd a második csatolóra. Ezután ki lehet kapcsolni a hangkártya csatolóját és még egy IRQ-t is megspórolsz. Ha nincs második IDE csatoló, akkor jumperold a hangkártya IDE csatolóját (ne a hangkártya hang részét) az IRQ15-re (második IDE csatoló). Ennek működnie kell. Ha valamilyen okból nélkülözhetetlen az ún. ``harmadik'' csatoló, vagy más problémák vannak, szerezz egy 1.3.x kernelt ( az 1.3.57-ben van, például) és olvasd el a drivers/block/README.ide-t. Ott sokkal több információ van. 7.9. Furcsa üzenetek ``obsolete routing requests''-ről Szerezd be a route program, és minden más útvonalválasztást manipuláló program egy új verzióját. Az /usr/include/linux/route.h (ami valójában az /usr/src/linux-ban van) megváltozott. 7.10. A tűzfal (firewall) nem működik az 1.2.0 kernellel Upgrade-elj legalább az 1.2.1 verzióra. 7.11. ``Not a compressed kernel Image file'' Nem tömörített kernel fájl. Ne a /usr/src/linux könyvtárban keletkező vmlinux fájlt használd kernelnek. Az [..]/arch/i386/boot/zImage a jó. 7.12. Problémák a konzollal 1.3.x-ra való frissítés után Az /etc/termcap fálban a konzol termcap bejegyzésben írd át a dumb szót linux-ra. Lehet, hogy egy terminfo bejegyzést is kell csinálni. 7.13. Nem lehet semmit lefordítani kernel upgrade után A linux kernel forrás tartalmaz számos include fájlt (a .h végű fájlnevek) amelyekre a szabványos include fájlok hivatkoznak. A hivatkozások általában így néznek ki (ahol xyzzy.h egy fájl az /usr/include/linux-ban): #include Normális esetben van egy linux nevű link az /usr/include-ban, amely a kernel forrás include/linux könyvtárára mutat (általában /usr/src/linux/include/linux). Ha ez a link nincs a helyén, vagy rossz helyre mutat, akkor a legtöbb programot egyáltalán nem lehet lefordítani. Ha letörölted a kernel forrást, mert túl sok helyet foglalt, akkor nyilvánvaló, hogy ez a gond. Lehet baj a hozzáférési jogosultságokkal is. Ha a root umask-ja alapértelmezés szerint nem engedi meg, hogy a többi felhasználó lássa a fájljait és a kernel forrást a p (preserve file modes) opció nélkül csomagoltad ki, akkor a felhasználók a C fordítót sem fogják tudni használni. Bár a chmod paranccsal is meg lehet ezt oldani, könnyebb újra kicsomagolni az include fájlokat. Ezt ugyanúgy kell csinálni, ahogy az elején kicsomagoltuk az egész forrást, csak még egy paraméter kell használni: blah# tar zxvpf linux.x.y.z.tar.gz linux/include Megjegyzés: a ``make config'' létrehozza a /usr/src/linux linket, ha nincs meg. 7.14. Korlátok megemelése A következő példa parancsok hasznosak lehetnek azoknak, akik szeretnék tudni hogyan lehet bizonyos, a kernel szabta korlátokat megemelni. echo 4096 > /proc/sys/kernel/file-max echo 12288 > /proc/sys/kernel/inode-max echo 300 400 500 > /proc/sys/vm/freepages 8. A 2.0.x kernelekre történő frissítés A kernel 2.0.x verziója elég sok változást hozott a kernel installálásában. A forrásban található Documentation/Changes fájl tartalmazza a 2.0.x verzióra való átálláshoz szükséges tudnivalókat. Valószínűleg frissíteni kell több fontos programcsomagot, mint például a gcc, libc, és a SysVInit, és lehet, hogy meg kell változtatni néhány rendszerfájlt is. Ezekre készülj fel. De semmi pánik! 9. Modulok A betölthető kernel modulok memóriát takaríthatnak meg és megkönnyíthetik a konfigurálást. A modulok köre egyre bővül, magában foglal többek között fájlrendszereket, ethernet-kártya meghajtókat, szalagos egység és nyomtató meghajtókat. 9.1. A segédprogramok telepítése A modulok használatához szükséges segédprogramokat ugyanonnan lehet megszerezni, ahonnan a kernel forrást is, modules-x.y.z.tar.gz néven. Válaszd a legnagyobb x.y.z verziószámot, ami még kisebb-egyenlő a kerneled verziószámánál. Csomagold ki a `tar zxvf modules- x.y.z.tar.gz' paranccsal, menj be a könyvtárba, amit létrehoz (modules-x.y.z), nézd át a README fájlt és hajtsd végre az installálási utasításokat (ami általában elég egyszerű, például make install). Ezután kell hogy legyenek insmod, rmmod, ksyms, lsmod, genksyms, modprobe és depmod nevű programok az /sbin könyvtárban. Ha akarod, kipróbálhatod őket az insmod-ban található ``hw'' példa- meghajtóval. Ebben az alkönyvtárban, az INSTALL fájlban olvashatóak a részletek. Az insmod beilleszt egy modult a futó kernelbe. A moduloknak általában drv_hello.o, ezt a `insmod drv_hello.o' paranccsal lehet beilleszteni. Az lsmod kilistázza az éppen használt modulokat. Az output így néz ki: blah# lsmod Module: #pages: Used by: drv_hello 1 `drv_hello' a modul neve, egy lap (``page'', 4k) memóriát használ és egyetlen másik kernel modul sem támaszkodik rá pillanatnyilag. A `rmmod drv_hello' távolítja el a modult. Figyeljük meg, hogy az rmmod egy modul nevet vár, nem egy fájlnevet. Az előbbit az lsmodlistájából lehet megtudni. A többi modul segédprogram is dokumentálva van a man­ ual oldalakon. 9.2. Kernellel terjesztett modulok A 2.0.30 verziótól kezdve majdnem minden elérhető modul formában is. Használatuk a következő: ne konfiguráld bele a kernelbe, azaz ne mondj rá y-t a `make config' alatt. Fordíts egy új kernelt és bootolj vele újra. Menj be megint az /usr/src/linux-ba és add ki a `make modules' parancsot. Ez lefordítja az összes olyan modult, amely nem szerepelt a kernel konfigurációban és linkeket helyez el rájuk az /usr/src/linux/modules könyvtárban. Lehet őket közvetlenül innen is használni, vagy kiadhatod a `make modules_install' parancsot, ami elhelyezi őket a /lib/modules/x.y.z könyvtárban, ahol x.y.z a kernel verziója. Ez különösen a fájlrendszerek esetén lehet kényelmes. Bizonyos fájlrendszereket általában ritkán használnak. Például ha a kezembe kerülne egy msdos floppy, akkor annyit tennék, hogy insmod /usr/src/linux/modules/msdos.o, aztán rmmod msdos ha végeztem. Ez az eljárás kb. 50k memóriát szabadít fel a szokásos működés közben. Egy megjegyzést kell tenni a minix fájlrendszerrel kapcsolatban: a ``mentőlemeznek'' készített kernelbe mindig közvetlenül bele kell fordítani. 10. Egyéb konfigurációs opciók Ez a fejezet bizonyos, a konfigurációról szóló fejezetben nem említett opciók leírását tartalmazza. Az eszközmeghajtók nagy része nincs itt felsorolva. 10.1. Általános beállítások Normal floppy disk support (``Normál floppy lemez támogatás''). - Elolvashatod a drivers/block/README.fd fájlt is; ez különösen IBM Thinkpad felhasználóknak lehet fontos. XT harddisk support (``XT merevlemez támogatás'') - ha akarod használni azt a 8 bites XT vezérlőt, ami csak a port fogja a sarokban. PCI bios support (``PCI BIOS támogatás'') - kipróbálhatod, ha PCI alaplapod van, de légy óvatos, néhány régi PCI alaplap lefagy ezzel az opcióval. A PCI busz Linux alatti használatáról több információ található a PCI HOWTO-ban. Kernel support for ELF binaries (``ELF bináris támogatás'') - Az ELF egy erőfeszítés a bináris programok architektúrák és operációs rendszerek közötti hordozhatóságának megteremtésére. A Linux is ebbe az irányba halad, ezért ez minden bizonnyal kell. Set version information on all symbols for modules - a múltban a kernel modulokat újra le kellett fordítani minden új kernelhez. Ha y- t választasz, akkor lehetővé teszi egy másik verzió alatt lefordított modulok használatát. Több információ a README.modules-ben van. 10.2. Hálózati opciók A hálózati opciók a NET-3-HOWTO-ban (vagy a NET-valami-HOWTO-ban) vannak leírva. 11. Tippek és trükkök 11.1. A make és patch parancsok kimenetének átirányítása Ha szeretnéd nyomonkövetni, hogy mit művelnek a `make' vagy `patch' parancsok, átirányíthatod a kimenetüket egy fájlba. Először derítsd ki milyen shellt használsz: `grep root /etc/passwd' és keress valami olyasmit, hogy `/bin/bash'. Ha sh-t vagy bash-t használsz, akkor a (command) 2>&1 | tee (output file) parancs fog egy másolatot küldeni a (command) parancs kimenetéről az `(output file)' fájlba. csh vagy tcsh esetén használd a (command) |& tee (output file) parancsot. A zsh-t használókat nem éri váratlanul, hogy a fentiek közül bármelyik helyes ;-) rc esetén (megjegyzés: nem hiszem, hogy rc-t használsz): (command) >[2=1] | tee (output file) 11.2. Feltételes kernel installálás A floppy-k használatán kívül még több módszer van arra, hogy anélkül próbáljuk ki az új kernelt, hogy a régihez hozzányúlnánk. Sok más UNIX változattól eltérően a LILO képes arra, hogy bárhonnan a merevlemezről elindítson egy kernelt. (Ha nagy (500 MB vagy nagyobb) merevlemezed van, olvasd el a LILO dokumentácíót, mert ez gondot okozhat). Ha az alábbiakhoz hasonlót fűzöl a LILO konfigurációs fájl végére, akkor úgy választhatsz egy frissen fordított kernelt, hogy nem nyúlsz a régi /vmlinuz-hoz: (persze előbb futtatni kell a lilo-t.) image = /usr/src/linux/arch/i386/boot/zImage label = uj_kernel A legkönnyebben úgy lehet a LILO-t az új kernel indítására utasítani, hogy lenyomod a shift billentyűt bootoláskor (amikor csak annyi van a képernyőn, hogy LILO). Megjelenik egy prompt, ekkor be lehet írni, hogy `uj_kernel', hogy az új kernelt indítsa. Ha több különböző kernel forrását szeretnéd megtartani a gépeden egyszerre (ez nagyon sok helyet foglal, légy óvatos), akkor a legegyszerűbb elnevezni az őket tartalmazó könyvtárakat /usr/src/linux-x.y.z, formában, ahol x.y.z a kernel verziója. Ekkor egy szimbólikus linkkel lehet választani közöttük. Például az `ln -sf linux-1.2.2 /usr/src/linux' parancs az 1.2.2 verzió forrását teszi aktuálissá. Mielőtt létrehozol egy ilyen szimbólikus linket, bizonyosodj meg arról, hogy az ln utolsó argumentuma nem egy létező könyvtár (régi szimbólikus link is lehet), mivel az eredmény nem az lenne amire számítasz. 11.3. Kernel frissítések Russell Nelson (nelson@crynwr.com) összefoglalja az új kernelverziók változásait. Ezek rövidek, érdemes beléjük pillantani egy upgrade előtt. Letölthető anonymous ftp-vel a ftp.emlist.com/pub/kchanges címről, vagy a következő URL-ről: http://www.crynwr.com/kchanges 12. Egyéb idevágó HOWTO-k, amik hasznosak lehetnek · Sound-HOWTO: hangkártyák és segédprogramok · SCSI-HOWTO: minden az SCSI vezérlőkről és eszközökről · NET-2-HOWTO: hálózat · PPP-HOWTO: hálózatra kapcsolódás PPP-vel · PCMCIA-HOWTO: noteszgépekhez való meghajtók · ELF-HOWTO: ELF: mi ez egyáltalán, konvertálás · Hardware-HOWTO: a támogatott hardverek áttekintése · Module-HOWTO: további információ a kernel modulokról · Kerneld mini-HOWTO: a kernel démonról · BogoMips mini-HOWTO: ha kiváncsi vagy 13. Egyebek 13.1. A szerző A Linux Kernel-HOWTO angol eredetijének szerzője és karbantartója Brian Ward (bri@blah.math.tu-graz.ac.at). Kérem küldjetek véleményt, kiegészítéseket, javításokat. (Főleg a javítások a legfontosabbak nekem). (A fordító megjegyzése: természetesen angolul írjatok neki, magyarul nem tud :-) Vethetsz egy pillantást a honlapomra az alábbi címek valamelyikén: http://www.math.psu.edu/ward/ http://blah.math.tu-graz.ac.at/~bri/ Bár igyekszem nagyon figyelmes lenni a levelezéssel, vedd figyelembe, hogy nagyon sokat kapok minden nap, ezért eltarthat egy darabig, amíg válaszolok. Különösen, ha kérdéssel keresel meg, légy szíves próbálj meg minél világosabban és részletesebben fogalmazni. Ha arról írsz, hogy egy hardver-elem nem működik (vagy valami hasonló), tudnom kell mi a hardver-konfiguráció. Ha egy hibát jelentesz, ne csak annyit írj, hogy ``megpróbáltam ezt vagy azt, de hibát jelzett''; tudnom kell, mi volt a hiba. Azt is szeretném tudni, hogy a kernel, a gcc és a libc melyik verzióját használod. Ha csak annyit mondasz, hogy ezt vagy azt a disztribúciót használod, az nekem nem mond sokat. Az nem baj, ha egyszerű kérdést teszel fel; ne feledd: ha nem kérdezel, nem is kapsz választ! Mindenkinek szeretném megköszönni, akitől visszajelzést kaptam. Ha írsz nekem és nem kapsz választ elfogadható időn belül (három hét vagy több), akkor lehet, hogy véletlenül letöröltem a leveledet, vagy ilyesmi (bocs). Kérem próbáld meg újra. Sok levelet kapok olyasmiről, ami valójában hardver probléma vagy téma. Ez rendben van, de ne feledd, hogy nem ismerem a világ összes hardverjét és nem tudom, mekkora segítséget tudok nyújtani. A gépeken, amelyeket személyesen használok vannak IDE és SCSI diskek, SCSI CD- ROM-ok, 3Com és WD ethernet kártyák, soros egerek, PCI-s alaplapok, NCR 810 SCSI-vezérlők, AMD 386DX40 Cyrix társprocesszorral, AMD 5x86, AMD 486DX4, és Intel 486DX4 processzorok. (Ez csak egy áttekintés arról, hogy miket használok és ismerek, és határozottan nem egy ajánlás, de ha olyat akarsz, kérdezz bátran :-) ). A 0.1 verzió 1994 október 3.-án készült. Ez a dokumentum elérhető SGML, PostScript, TeX, roff és sima szöveges formátumban. 13.2. Tennivalók A ``Tippek és trükkök'' fejezet egy kissé rövid. Remélem ki tudom bővíteni mások javaslatai alapján. A ``További csomagok'' is. Több hibakeresési és "katasztrófa" elhárító információ kell. 13.3. Hozzájárulások Linus README-jének egy kis része (kernel hackelés) át lett véve. (Kösz, Linus!) uc@brian.lunetix.de (Ulrich Callmeier): patch -s és xargs. quinlan@yggdrasil.com (Daniel Quinlan): sok javítás és kiegészítés nat@nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p, sok egyéb dolog boldt@math.ucsb.edu (Axel Boldt): összegyüjtötte a kernel konfiguráció opcióinak leírását a hálózaton aztán átadta nekem a listát lembark@wrkhors.psyber.com (Steve Lembark): többszörös boot ötlet kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): néhány javítás és javaslat rmcguire@freenet.columbus.oh.us (Ryan McGuire): kiegészítések a make opcióihoz dumas@excalibur.ibp.fr (Eric Dumas): francia fordítás simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): japán fordítás jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): spanyol fordítás mva@sbbs.se (Martin Wahlen): svéd fordítás vamosi@freeside.elte.hu (Vámosi Zoltán): magyar fordítás bart@mat.uni.torun.pl (Bartosz Maruszewski): lengyel fordítás donahue@tiber.nist.gov (Michael J Donahue): sajtóhibák, a ``szeletelt kenyér verseny`` győztese. rms@gnu.ai.mit.edu (Richard Stallman): ``szabad'' dokumentáció koncepciója és a terjesztési engedély dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): NFS esr@snark.thyrsus.com (Eric Raymond): vegyes apróságok Azok is nagy segítségemre voltak, akik kérdésekkel és problémákkal kapcsolatban levelet küldtek. 13.4. Copyright, licensz és ilyesmi Copyright © Brian Ward, 1994-1997. Hungarian translation © Vámosi Zoltán, 1997. Ez a dokumentum szabadon másolható és terjeszthető, ha a copyright és az engedély szövegét minden másolaton megőrzik. E dokumentum módosított változatai a változatlan másolatokkal megegyező feltételek alapján másolhatók és terjeszthetők, ha a módosított változatot is az ezzel az engedéllyel megegyező feltételekkel terjesztik. A fordítások is a ``módosított változat'' kategóriájába tartoznak. Garancia: Nincs. Ajánlások: Az üzleti célú terjesztés megengedett és támogatott, de gyomatékosan ajánlott, hogy a terjesztő lépjen kapcsolatba a szerzővel a terjesztés előtt, a dolgok naprakészségének biztosítása végett. (Küldhetsz egy példányt abból, amit csinálsz, ha már úgyis csinálod). A fordítóknak is ajánlott kapcsolatba lépni a szerzővel mielőtt lefordítják. A nyomtatott változat jobban néz ki. A papírt használd fel újra.