Zaporedne nadgradnje jedra se distribuirajo kot popravki (patches). Na
primer, če imate različico 1.1.45 in opazite, da obstaja nekje datoteka ,,patch46.gz``
za njo, to pomeni, da lahko z uporabo programa patch nadgradite jedro na verzijo
1.1.46. Morda boste najprej želeli napraviti rezervno kopijo drevesa izvorne
kode (komprimiran arhiv naredite z ,,make clean`` in potem ,,cd /usr/src; tar
zcvf old-tree.tar.gz linux``).
Nadaljujmo zgornji primer in predpostavimo, da imate datoteko ,,patch46.gz``
v imeniku /usr/src. Naredite cd /usr/src in potem ,,zcat patch46.gz | patch
-p0`` (ali ,,patch -p0 < patch46``, če popravek ni komprimiran). Na zaslonu
bodo mimo vas letele stvari, ki vam bodo sporočale, da patch poskuša uporabiti
določene popravke in uspeh teh poskusov. Navadno se vse odvija prehitro, da
bi lahko brali. Če niste prepričani, ali je šlo vse po sreči, boste morda uporabili
zastavico -s za program patch, kar pove patchu naj sporoča le sporočila o napakah
(v tem primeru ne boste imeli občutka ,,Hej, moj računalnik za spremembo nekaj
počne!``, a boste morda vseeno raje storili tako). Če vas zanima, kateri deli
se niso popravili povsem gladko, napravite cd /usr/src/linux in poiščite datoteke
s podaljškom .rej. Nekatere starejše verzije patcha pustijo podaljšek #.
Za iskanje uporabite ,,find``:
# find . -name '*.rej' -print
To izpiše vse datoteke s podaljškom .rej, ki prebivajo v trenutnem imeniku
ali podimenikih, na standardni izhod.
Če je šlo vse kot po maslu, napravite ,,make clean``, ,,config``, in ,,dep``
kot je opisano v razdelkih
,,Kako zares sestaviti jedro`` in
,,Prevajanje jedra``.
Ukaz patch ima še precej dodatnih izbir. Zgoraj smo že omenili patch -s,
ki zadrži izpis vseh sporočil, razen napak. Če imate izvorno kodo jedra v kakšnem
drugem imeniku kot /usr/src/linux, uporabite v tem imeniku patch -p1. Ostale
izbire najdete z man patch.
(Opomba: Ta razdelek se nanaša predvsem na zelo stara jedra.)
Najpogostejši problem, ki se je včasih pojavljal, je bil, ko je popravek
spremenil datoteko ,,config.in`` in ta ni bila čisto prava, saj ste spremenili
izbire, da bi opisali opremo svojega stroja. To se je uredilo, a lahko v starejših
izdajah še vedno srečate. Popravite pa tako, da pogledate datoteko config.in.rej
tako, da odgovarja originalnemu popravku. Popravki bodo navadno označeni s
simboloma ,,+`` in ,,-`` na začetku vrstice. Glejte okoliške vrstice in se
spomnite, ali so bile nastavljene kot ,,y`` ali kot ,,n``. Zdaj popravite config.in
in spremenite ,,y`` v ,,n`` in obratno, kjer je to primerno. Naredite:
# patch -p0 < config.in.rej
in če patch sporoči, da je uspel, lahko nadaljujete z nastavitvami in prevajanjem.
Datoteka config.in.rej vam bo ostala, a jo lahko pobrišete.
Če imate še vedno probleme, ste morda namestili popravek prek vrste. Če
patch pravi ,,previously applied patch detected: Assume -R?``, verjetno poskušate
namestiti popravek, ki je starejši od trenutne verzije jedra; če odgovorite
z ,,y``, bo patch poskušal podgraditi vašo izvorno kodo, in najverjetneje mu
bo spodletelo. Potrebovali boste popolno čisto novo drevo izvorne kode (kar
je morda itak dobra ideja).
Za razveljavitev popravkov uporabite ukaz ,,patch -R`` na originalnem popravku.
Najboljša stvar, ki jo lahko naredite, ko ne morete uporabiti popravkov,
je, da začnete znova s čistim drevesom izvorne kode (na primer, z eno od datotek
linux-x.y.z.tar.gz), in znova začnete.
.orig
Po nekaj popravkih se bodo začele kopičiti datoteke .orig . Npr. neko drevo
jedra 1.1.51, ki sem ga nekoč imel, je bilo zadnjič očiščeno pri verziji 1.1.48.
Odstranitev datotek .orig je prihranila več kot pol megabyta.
Zadevo uredite z ukazom:
# find . -name '*.orig' -exec rm -f {} ';'
Verzije programa patch, ki uporabljajo # za zavrnitvene datoteke, uporabljajo
za podaljšek tildo (,,.~``) namesto ,,.orig``.
Obstajajo tudi boljši načini za odpravo datotek .orig, ki slonijo na GNU
xargs:
# find . -name '*.orig' | xargs rm
ali ,,precej varna, a malo bolj izčrpna`` metoda:
# find . -name '*.orig' -print0 | xargs --null rm --
Razen Linusovih, obstajajo tudi drugi popravki (rekel jim bom ,,nestandardni``). Če jih uporabite, Linusovi popravki morda ne bodo delovali pravilno in jih boste morali obnoviti, urediti izvorno kodo popravka, namestiti novo drevo izvorne kode ali kombinacijo naštetega. To lahko postane zelo frustrirajoče, zato, če ne želite spreminjati izvorne kode (z morda slabim izidom), napravite rezervne kopije nestandardnih popravkov, preden uporabite Linusove, ali le namestite novo drevo. Potem lahko pogledate, če nestandardni popravki delujejo. Če ne, morate ostati pri starem jedru in se igrati s popravki ali izvorno kodo, da bi dosegli delovanje, ali čakati (morda celo prosjačiti) za novo verzijo popravkov.
Kako pogosti so popravki, ki niso v standardnih distribucijah? Verjetno
boste slišali o njih. Jaz uporabljam popravek noblink za moje navidezne zaslone,
ker sovražim utripajoče kazalce (ta popravek je (ali je vsaj bil) redno osvežen
ob vsaki novi izdaji jedra). Z razvojem vse več novejših gonilnikov naprav
kot modulov pa uporaba ,,nestandardnih`` popravkov znatno upada.