Következő Előző Tartalom

5. A kernel foltozása

5.1 A foltozás

A kernel inkrementális frissítéseit foltok (patch) formájában terjesztik. Például, ha neked a 2.2.9 verzió van meg, és észreveszed, hogy van hozzá valahol egy patch-2.2.10, akkor ez azt jelenti, frissíthetsz a 2.2.10 verzióra foltozással. Először talán készíts egy biztonsági másolatot a forrásról. (A `make clean' aztán a `cd /usr/src; tar zcvf old-tree.tar.gz linux' csinál neked egy tömörített tar archívumot.)

A fenti példát folytatva, tegyük fel, hogy a `patch-2.2.10.gz' az /usr/src könyvtárban van. Menj át (cd-vel) az /usr/src-be, és add ki a `zcat patch-2.2.10.gz | patch -p0' parancsot, (vagy a `patch -p0 < patch-2.2.10' parancsot, ha a folt 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 kapcsolóját, aminek hatására csak a hibaüzeneteket írja ki. Ekkor nem lesz meg ``hejj, de szorgosan dolgozik a számítógépem'' érzésed, de talán így jobban kedveled... Menj be a /usr/src/linux-ba és keress .rej (``reject'') kiterjesztésű fájlokat, ezekből kiderül, ha valami nem ment simán. 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, 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-ban tartod, hanem valahol másutt, akkor a patch -p1 (az adott könyvtárban) fogja a foltozást helyesen végrehajtani. A többi patch opció jól le van írva a kézikönyvoldalon.

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 foltbó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 meg, hogy az állásuk `y' vagy `n'. Utána szerkeszd át a config.in-t, és változtasd meg a `y'-t `n'-re és az `n'-t `y'-ra a megfelelő helyeken. Adj ki egy

 
    patch -p0 < config.in.rej 
parancsot, és ha sikerül (nincs hibaüzenet), akkor lehet folytatni a konfigurálással és a 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 foltokat. Ha azt mondja, hogy `previously applied patch detected: Assume -R?', akkor lehet, hogy az aktuális verzió előtti foltot 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 foltozást visszacsinálni a `patch -R' parancsal lehet.

Ha a foltok 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 foltozás 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. A

 
    find .  -name '*.orig' -exec rm -f {} ';' 
parancs elintézi a dolgot. A patch azon verziói, amelyek #-el jelölik a ``reject'' fájlokat, tildét használnak az .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 foltok

Linus Torvalds által terjesztett foltokon kívül vannak másmilyenek is, (nevezzük őket ``nem szabványos''-nak). Ha ezeket felrakod, akkor lehet, hogy a Linus féle foltok nem fognak jól működni, és akkor vagy visszacsinálod őket, és megjavítod a forrást vagy a foltot, 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 foltokat mielőtt felrakod Linuséit, vagy rakj fel egy új forrást. Így ellenőrizheted, hogy a nem szabványos foltok 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 foltot amíg nem működik, vagy vársz (esetleg könyörögsz), hogy kijöjjön a folt egy új verziója.

Mennyire elterjedtek a nem szabványos foltok? Valószínűleg fogsz róluk hallani. Régebben használtam a ``noblink'' foltot 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 foltok gyakorisága jelentősen csökken.


Következő Előző Tartalom