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 različico 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
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 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:
in če# patch -p0 < config.in.rej
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 različice 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 tako ali tako 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 različici 1.1.48. Odstranitev datotek .orig
je
prihranila več kot pol megabyta.
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
``.
Obstajajo tudi boljši načini za odpravo datotek .orig
, ki
slonijo 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, 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 različico 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.