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 patch
u 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 patch
a 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.