6. A rendszermag foltozása (patching)

6.1. Egy folt alkalmazása

A rendszermag lépésenkénti fejlesztésének eszköze a foltozás. Például, ha v1.1.45-ös Linuxod van, és észreveszed, hogy létezik egy " patch46.gz " fájl ehhez, ez azt jelenti, hogy frissítheted az 1.1.46 verzióra a folt alkalmazásával. Először biztonsági másolatot ajánlott készíteni a forrásfáról (" make clean " majd ezután " cd /usr/src; tar zcvf old-tree.tar.gz linux ", ami egy tömörített tar archívumot készít).

Tehát folytatva a fenti példát, tegyük fel, hogy van egy " patch46.gz " fájl az /usr/src könyvtárban. Lépj be cd az /usr/src könyvtárba és add ki a " zcat patch46.gz [verbar] patch -p0 " (vagy " patch -p0 [lt ] patch46 " parancsot , ha a folt nincs tömörítve). Látni fogod, ahogy a feliratok elzúgnak (vagy elcsattognak, ha lassabb géped van), jelezve, hogy megpróbálják a kóddarabokat beilleszteni, és hogy ez sikerült-e vagy sem. Általában ez a folyamat túl gyors ahhoz, hogy elolvashasd és nem lehetsz biztos benne, hogy működött-e, ezért használd a -s kapcsolót a patch programhoz, ami azt jelzi a patch programnak, hogy csak a hibaüzeneteket írja ki (nem fogsz sokat kapni a "hé, a komputerem éppen valami változtatást csinál!" érzésből, de lehet, hogy épp ezt értékeled...) Azon dolgok megtekintéséért, amik nem mentek simán, lépj be az /usr/src/linux könyvtárba és keress .rej kiterjesztésű fájlokat. A patch régebbi verziói (azok a verziók, amiket alsóbbrendű fájlrendszeren fordítottak) a visszadobott dolgokat # kiterjesztéssel látják el. Használhatod a " find " parancsot, hogy keressen helyetted; a "find . -name '*.rej' -print" kiírja a standard kimenetre az összes .rej kiterjesztésű fájlt, ami az aktuális könyvtárban és alkönyvtáraiban van.

Ha minden rendben zajlott, adj ki egy " make clean ", " config ", and " dep " parancssorozatot, a 3. és 4. részben leírtak szerint.

Elég kevés kapcsolója van a patch parancsnak. Ahogy fentebb említettem, a patch -s minden üzenetet elnyom, kivéve a hibaüzeneteket. Ha valahol másutt tartod a rendszermag forrását, nem az /usr/src/linux könyvtárban, a patch -p1 (abban a könyvtárban) rendben megfoltozza a dolgokat. Egyéb patch kapcsolókat a jól dokumentált kézikönyv oldalakban keress.

6.2. Ha valami nem sikerül

(Figyelem: ez a rész leginkább a meglehetősen régi rendszermagokra vonatkozik)

A leggyakrabban előforduló probléma az volt, amikor egy folt módosította a " config.in " fájlt és az nem jól nézett ki, mivel megváltoztattad a beállításokat, hogy megfeleljenek a gépednek. Ezt már javították, de még belefuthatsz, ha régi rendszermagot fordítasz. A kijavításához nézd meg a config.in.rej fájlt, hogy mi maradt az eredeti foltból. A változásokat általában " + " és " - " karakterek jelzik a sorok elején. Nézd meg a szomszédos sorokat, és jegyezd meg, hogy " y "-al vagy " n " betűvel vannak jelölve. Most szerkeszd a config.in fájlt, és változtasd meg az " y "-t " n "-re és az " n "-et " y "-ra, amikor szükséges. Adj ki egy "patch -p0 < config.in.rej" parancsot és ha azt jelzi, hogy sikerült, akkor folytathatod a beállítást és fordítást. A config.in.rej fájl ottmarad, de törölhető.

Ha további problémákba ütközöl, akkor használaton kívüli foltot telepítettél. Ha azt mondja, hogy " previously applied patch detected: Assume -R? " (előzőleg már alkalmazott foltot észleltem), akkor valószínűleg olyan foltot próbáltál alkalmazni, ami a jelenlegi verziószám alatti; ha " y "-t válaszolsz, megpróbálja visszaállítani a forrásodat, és nagy valószínűséggel ez nem sikerül; ezért egy teljesen új forrásfára van szükséged (ami nem is olyan rossz ötlet első nekifutásra).

A folt visszavonásához használd a " patch -R " parancsot az eredeti folton.

A legjobb dolog, ha a foltozás tényleg rossz irányba megy, hogy újrakezdesz mindent egy tiszta, még nem használt forrásfával (például az egyik linux-x.y.z.tar.gz fájllal).

6.3. A .orig fájloktól történő megszabadulás

Már néhány foltozás után a .orig fájlok elkezdenek szaporodni. Például, egy 1.1.51-es fámat valamikor még az 1.1.48 tájékán takarítottam ki. A .orig fájlok törlésével majdnem fél MB hely szabadult fel. A "find . -name '*.orig' -exec rm -f {} ';' " parancs gondoskodik erről. A patch azon verziói, amik a # karaktert használják a visszautasítások fájlneveiben, a tilde (~) karakterrel jelzik a .orig fájlokat.

Vannak jobb módszerek is a .orig fájloktól történő megszabadulásra, amik függnek a GNU xargs parancstól: "find . -name '*.orig' | xargs rm" vagy az "elég biztonságos de kicsit bőbeszédűbb" módszer: find . -name '*.orig' -print0 | xargs --null rm --

6.4. Egyéb foltok

A Linus által terjesztett foltokon kívül léteznek mások is (én "nem szabványos" foltoknak hívom őket). Ha ezeket használod, a Linus-félék lehet, hogy nem működnek megfelelően. Elképzelhető, hogy vissza kell őket vonnod, kijavítani a forrást vagy a foltot magát, telepíteni egy új forrásfát vagy ezek kombinációját kell tenned. Ez nagyon bosszantó lehet, ezért ha nem akarod módosítani a forrást (egy nagyon rossz végeredmény lehetőségét vállalva), forgasd vissza a nem szabványos foltokat, mielőtt a Linus-féléket alkalmazod, vagy telepíts egy új forrásfát. Ezután láthatod, hogy a nem szabványos foltok működnek-e még. Ha nem, akkor vagy maradsz a régi rendszermagnál, játszhatsz a folttal vagy a forrással, hogy működjön, vagy vársz (esetleg rimánkodsz érte) a folt új verziójáig.

Milyen gyakoriak azok a foltok, amik nincsenek a szabvány rendszermagban? Valószínűleg hallottál róluk. Valamikor használtam a "noblink" foltot a virtuális konzoljaimhoz, mert utálom a villogó kurzort. (Ezt a foltot (legalábbis régen) gyakran frissítették az új verziókhoz). Azonban mióta a legtöbb új eszközmeghajtót modulként fejlesztik, a "nem szabványos" foltok kibocsátási üteme jelentősen csökken.