Pakiety, które pozwalają na odnowienie jądra to łaty. Na przykład:
jeśli masz wersję 1.1.45 i znajdziesz plik o nazwie patch46.gz
to znaczy, że możesz odnowić swoje jądro do wersji 1.1.46. Możesz
zrobić kopię źródeł, które masz (make clean a potem
cd /usr/src; tar zcvf old-kernel.tar.gz linux)
Tak więc kontynuując powyższy przykład załóżmy, że masz plik
patch46.gz w katalogu /usr/src. Bedąc w katalogu
/usr/src wydaj polecenie zcat pacth46.gz | patch -p0
albo patch -p0 < patch46 jeśli łata nie jest
skompresowana. Zobaczysz teraz trochę ścieżek i nazw plików
oraz komunikatów przelatujących przez ekran, o tym co się udało a co
nie. Wszystko to przelatuje zbyt szybko, żeby nadążyć z
czytaniem, także właściwie nie wiesz czy się udało czy nie. Możesz
użyć parametru -s do polecenia patch, aby
poinformować je, żeby wyświetlało tylko komunikaty o błędach. Aby
zobaczyć czy coś poszło nie tak, poszukaj plików z rozszerzeniem
.rej w katalogu /usr/src/linux. Niektóre wersje
patch (starsze wersje, które mogły być skompilowane na gorszym
systemie plików) zostawiają błędy w plikach z rozszerzeniem
#. Możesz użyć polecenia find, aby znaleźć
te pliki:
cd /usr/src/linux; find ./ -name '*.rej' -print
Polecenie to wyświetli wszystkie pliki z rozszerzeniem rej znajdujące się w bieżącym katalogu i jego podkatalogach.
Jeśli wszystko poszło dobrze, wydaj teraz po kolei polecenia
make clean, make config i make dep tak jak opisano w
sekcjach 3 i 4.
Do polecenia patch jest trochę opcji. Jak już wspomniałem,
patch -s spowoduje wyświetlenie na ekran tylko wiadomości
o błędach. Jeśli trzymasz źródła w innym katalogu niż
/usr/src/linux, polecenie patch -p1 wydane w tym
katalogu, gdzie trzymasz źródła zrobi wszystko bez błędów. Inne
opcje polcenia patch są dobrze opisane w podręczniku "man".
(Uwaga: ta sekcja odnosi się w głównej mierze do starszych wersji jądra.)
Najczęstszym problemem było to, że kiedy polecenie patch
modyfikowało plik config.in nie wyglądał on tak jak
powinien, bo zmodyfikowałeś go, aby pasował do twojego komputera.
Zostało to już poprawione, ale w starszych wersjach błąd ten
pozostał. Aby to naprawić, przeczytaj plik config.in.rej
i zobacz co pozostało z oryginalnej łaty. Zmiany są zwykle
zaznaczane znakami + i - na początku linii. Spójrz na linie
otaczające tę zaznaczoną i przypomnij sobie, czy były one
ustawione na tak, czy na nie. Teraz w pliku config.in
zmień "y" na "n" i "n" na "y" tam gdzie trzeba. Wydaj polecenie
patch -p0 < config.in.rej a jeśli poinformuje cię, że
się powiodło, wtedy możesz kontynuować konfigurację i kompilację.
Plik config.in.rej pozostanie, ale możesz go skasować.
Jeśli odkryjesz dalsze problemy, mogłeś zainstalować jakąś łatę
nie w kolejności. Jeśli na ekranie pojawi się taka wiadomość:
previously applied patch detected: Assume -R? oznacza to,
że przypuszczalnie próbujesz nałożyć łatę o wersji mniejszej niż
źródła twojego jądra. Jeśli odpowiesz "y", polecenie patch
spróbuje zdegradować twoją wersję, i najprzypuszcalnie się to nie
powiedzie, przez co będziesz musiał zdobyć całkiem nowe źródła.
(co w sumie wcale nie jest takim złym pomysłem).
Aby odinstalować jakąś łatę użyj patch -R na oryginalnej.
Jak już się wszystko tak pomiesza, że nie będziesz mógł dojść do ładu, to najlepszym sposobem jest zdobyć nowe źródła jądra i zacząć od nowa.
Po zaledwie kilku łatach pliki .orig zaczynają niebezpiecznie
rosnąć. Na przykład: usunięcie plików .orig z wersji 1.1.51, która
była ostatnio czyszczona w wersji 1.1.48 spowodowało zwolnienie
ponad 500 kB dysku.
find . -name '*.orig' -exec rm -f {} ';'
Polecenie to spowoduje usunięcie wszystkich plików .orig z bieżącego katalogu i jego podkatalogów.
Wersje patch, które używają plików .# zamiast plików .rej, używają tyldy (~) zamiast plików .orig.
Są lepsze sposoby pozbycia się plików .orig, które zależą od
polecenia GNU xargs:
find . -name '*.orig' | xargs rm
lub metoda całkiem bezpieczna ale trochę "głośna" (dużo komunikatówna ekranie):
find . -name '*.orig' -print0 | xargs --null rm --
Są jeszcze inne łaty (tzw. niestandardowe), niż te które dystrybuuje Linus. Jeśli ich użyjesz łaty Linusa mogą nie działać i będziesz musiał je albo odinstalować, dopasować źródła albo łatę, zainstalować nowe źródła, albo jakaś kombinacja tego. Może to być trochę frustrujące, więc jeśli nie chcesz grzebać w źródłach (z możliwością narobienia niezłego bajzlu), odinstaluj niestandardowe wersje łat zanim zainstalujesz łatę Linusa, albo po prostu zainstaluj nowe źródła. Wtedy możesz zobaczyć czy łaty niestandardowe wciąż działają. Jeśli nie to albo utknąłeś ze starym jądrem i będziesz próbował zmusić jakoś źródło albo łatę, żeby zaczęła działać, albo będziesz czekał (pewnie błagał) o nową łatę.
Jak pospolite są te niestandardowe łaty?
Przypuszczalnie o nich usłyszysz. Ja używałem łaty "noblink" na
moich wirtualnych konsolach, bo nienawidzę mrugającego kursora. Ta
łata jest (a przynajmniej była) często odnawiana dla nowszych
wersji jądra. Z większością nowych sterowników jako ładowalne
moduły, chociaż częstotliwość niestandardowych łat znacznie spada.