Zaporedne nadgradnje jedra se distribuirajo kot popravki (patches). Na
primer, če imate različico 1.1.45 in opazite, da je nekje
datoteka ,,patch46.gz
`` za njo, to pomeni, da lahko z uporabo
programa patch
nadgradite jedro na različico 1.1.46. Morda
boste najprej želeli narediti rezervno kopijo drevesa izvirne kode
(stisnjen arhiv naredite z ,,make clean
`` in potem
,,cd /usr/src; tar zcvf old-tree.tar.gz linux
``).
Nadaljujmo zgornji zgled 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 stisnjen).
Na zaslonu bodo letele mimo 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 utegnili prebrati. Č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 o napakah (v tem primeru boste sicer oropani za občutek,
da vaš računalnik za spremembo nekaj počne, a boste morda
vseeno raje storili tako). Če vas zanima, kateri deli se niso
popravili povsem gladko, naredite cd /usr/src/linux
in
poiščite datoteke s podaljškom .rej
. Nekatere starejše
različice 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 izvirno kodo jedra v kakem drugem imeniku kot
/usr/src/linux
, uporabite v tem imeniku patch -p1
.
Druge izbire najdete z man patch
.
(Opomba: Ta razdelek se nanaša predvsem na zelo stara jedra.)
Včasih je bil najpogostejši problem, da 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 v starejših izdajah še vedno naletite na te nevšečnosti.
Popravite jih tako, da si ogledate datoteko config.in.rej
tako,
da odgovarja prvotnemu popravku. Popravki bodo navadno označeni s
simboloma ,,+
`` in ,,-
`` na začetku vrstice. Oglejte si
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
nasprotno, kjer je primerno. Naredite:
in če# patch -p0 < config.in.rej
patch
sporoči, da mu je uspelo, lahko nadaljujete
nastavljanje in prevajanje. Datoteka config.in.rej
vam bo
ostala, a jo lahko zbrišete.
Če imate še vedno težave, 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 različice jedra; če odgovorite z
,,y
``, bo patch
poskušal podgraditi vašo izvirno
kodo in najverjetneje mu bo spodletelo. Potrebovali boste popolno
čisto novo drevo izvirne kode (kar je morda tako ali tako dobra
zamisel).
Za razveljavitev popravkov uporabite ukaz ,,patch -R
`` na
prvotnem popravku.
Najbolje, kar lahko naredite, ko ne morete uporabiti
popravkov, je, da začnete znova s čistim drevesom izvirne 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 različici 1.1.48. Odstranitev datotek .orig
je
prihranila več kot pol megabajta.
Zadevo uredite z ukazom:
# find . -name '*.orig' -exec rm -f {} ';'
Različice programa patch
, ki uporabljajo #
za
zavrnitvene datoteke, uporabljajo za podaljšek tildo
(,,.~
``) namesto ,,.orig
``.
Na voljo so tudi boljši načini za odpravo datotek .orig
, ki
temeljijo na GNU xargs
:
ali ,,precej varna, a malo bolj izčrpna`` metoda:# find . -name '*.orig' | xargs rm
# find . -name '*.orig' -print0 | xargs --null rm --
Razen Linusovih so na voljo tudi drugi popravki (rekel jim bom ,,nestandardni``). Če jih uporabite, Linusovi popravki morda ne bodo delovali pravilno in jih boste morali obnoviti, urediti izvirno kodo popravka, namestiti novo drevo izvirne kode ali kombinacijo naštetega. To lahko postane zelo naporno, zatorej, če ne želite spreminjati izvirne kode (z morda slabim izidom), naredite rezervne kopije nestandardnih popravkov, preden uporabite Linusove, ali le namestite novo drevo. Potem lahko preverite, ali nestandardni popravki delujejo. Če ne, morate ostati pri starem jedru in se igrati s popravki ali izvirno kodo, da bi dosegli delovanje, ali čakati (morda celo prosjačiti) za novo različico popravkov.
Kako pogosti so popravki, ki niso v standardnih distribucijah?
Verjetno boste slišali zanje. Jaz uporabljam popravek
noblink
za 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 se uporaba ,,nestandardnih`` popravkov znatno manjša.