Aktualizacja jądra w systemie Gentoo
1.
Wprowadzenie
Jądro jest jednym z niewielu rodzajów pakietów w portage, które wymagają
interwencji użytkownika do zakończenia procesu aktualizacji. Portage ściągnie i
zainstaluje źródła jądra, jednak od tego momentu to użytkownik przed
osiągnięciem jakichkolwiek zauważalnych zmian musi skompilować jądro
samodzielnie.
Chociaż ten przewodnik jest przeznaczony dla użytkowników aktualizujących jądro
z jednej wersji do drugiej, może być również użyteczny dla użytkowników
przechodzących z jednego rodzaju jądra na inny.
W tym dokumencie jako przykładu użyto pakietu gentoo-sources, jednak
tych instrukcji można również użyć do innych pakietów, które znajdują się w
naszym drzewie.
2.
Po co aktualizować jądro systemu?
Generalnie aktualizacje jądra nie przynoszą większych zmian. Jest jednak klika
powodów, dla których je wciąż przeprowadzamy.
Jednym z nich jest chęć poznania nowych funkcji lub skorzystania z nowego
sterownika, kolejnym jest potrzeba ochrony przed słabymi punktami w
bezpieczeństwie lub ostatecznie, posiadanie stabilnego i aktualnego systemu.
Nawet jeśli nie zechcemy aktualizować jądra za każdym razem gdy wyjdzie nowa
wersja, zalecane jest robienie tego od czasu do czasu. W przypadku gdy nowe
aktualizacje wnoszą poprawki związane z bezpieczeństwem aktualizacja jest
bezwzględnie zalecana.
3.
Pobieranie nowych źródeł poprzez Portage
Jądro systemu aktualizujemy tak samo jak inne programy - używając emerge.
Prawdopodobnie zechcemy to zrobić, gdy pozycja ta pojawi się na liście
aktualizacji world. Na przykład:
Listing 3.1: Nowe źródła jądra pojawiły się na liście aktualizacji |
# emerge -Dup world
Calculating dependencies ...done!
[ebuild NS ] sys-kernel/gentoo-sources-2.6.9-r2 [2.6.8-r5]
|
Uwaga:
Etykieta "NS" w powyższym wyniku polecenia oznacza, że nowe jądro zostanie
zainstalowane w nowym slocie. Znaczy to tyle, że źródła starego jądra będą w
systemie dopóki nie usuniemy ich ręcznie.
|
Aktualizację można zainstalować np. tak:
Listing 3.2: Aktualizacja źródeł jądra |
# emerge -u gentoo-sources
|
Źródła zostaną zainstalowane jako podkatalog w katalogu /usr/src. W
powyższym przykładzie będzie to katalog
/usr/src/linux-2.6.9-gentoo-r2.
4.
Aktualizacja dowiązania symbolicznego /usr/src/linux.
Gentoo wymaga, aby dowiązanie symboliczne /usr/src/linux
prowadziło do jądra, którego aktualnie używamy.
Portage może automatycznie zaktualizować dowiązanie symboliczne kiedy
zainstalujemy nowe źródła jądra przy użyciu polecenia emerge. Musimy jedynie
dodać flagę symlink do zmiennej USE w pliku /etc/make.conf.
Listing 4.1: Przykład zmiennej USE w pliku /etc/make.conf |
USE="symlink x86 3dnow 3dnowex X aac aalib adns alsa apache2"
|
Do modyfikacji dowiązania symbolicznego możemy również użyć
app-admin/eselect.
Listing 4.2: Użycie eselect |
# emerge eselect
# eselect kernel list
Available kernel symlink targets:
[1] linux-2.6.9-gentoo-r1
[2] linux-2.6.9-gentoo-r2
# eselect kernel set 1
|
Jeśli koniecznie chcemy wykonać powyższą operację ręcznie, poniższy przykład
pokazuje jak zrobić dowiązanie do linux-2.6.9-gentoo-r2:
Listing 4.3: Aktualizacja dowiązania symbolicznego/usr/src/linux ręcznie |
# cd /usr/src
# ln -sfn linux-2.6.9-gentoo-r2 linux
|
5.
Konfiguracja, kompilacja i instalacja nowego jądra.
Przy każdej z tych operacji powinniśmy się odnosić do instrukcji, które zawarte
są w Podręczniku Gentoo wzorując
się na rozdziałach Konfiguracja jądra i Konfiguracja bootloadera.
Poniżej napisane jest w skrócie jak to zrobić.
Opcja 1: Automatyczna konfiguracja jądra przy pomocy genkernel
Jeżeli używamy genkernel, musimy jedynie powtórzyć to co robiliśmy gdy pierwszy
raz instalowaliśmy jądro systemu.
Po prostu uruchamiamy genkernel w normalny sposób:
Listing 5.1: Uruchamianie genkernel |
# genkernel all
|
Możemy również użyć dodatkowych parametrów jeżeli zechcemy skonfigurować
dodatkowe opcje jądra przy pomocy menuconfig i chcemy by genkernel
automatycznie zaaktualizował konfigurację gruba, wtedy uruchamiamy genkernel w
podany niżej sposób:
Listing 5.2: Uruchamianie genkernel z parametrami |
# genkernel --menuconfig --bootloader=grub all
|
Więcej informacji znajdziemy w opisie konfiguracji genkernel lub w Podręczniku Gentoo. Dużą część opcji
możemy ustawić w pliku konfiguracyjnym genkernela, czyli
/etc/genkernel.conf.
Opcja 2: Konfiguracja ręczna
Aby rozpocząć uruchamiamy menuconfig w katalogu źródeł jądra:
Listing 5.3: Uruchamianie menuconfig |
# cd /usr/src/linux
# make menuconfig
|
Wybieramy opcje, które są wymagane przez urządzenia i środowisko, w którym
będziemy pracować. Po dodatkowe informacje dotyczące konfiguracji jądra,
zaglądamy do rodziału Konfiguracja Jądra w Podręczniku Gentoo.
Następnie kompilujemy jądro i kopiujemy je na partycję /boot. Ponownie
korzystamy z instrukcji zawartych w
Podręczniku Gentoo w rozdziale Konfiguracja bootloadera. Jeżeli
/boot znajduje się na oddzielnej partycji, upewniamy się iż jest
ona zamontowana przed skopiowaniem skompilowanego jądra do niej! Nie zrobienie
tego powinno powstrzymać nas od uruchamiania systemu z nowym jądrem.
Listing 5.4: Kompilacja i instalacja nowego jądra |
# make && make modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.9-gentoo-r2
|
Na koniec powinniśmy zaktualizować konfigurację programu ładującego dodając
pozycję dotyczącą nowego jądra (nie kasujmy jeszcze starej!) i odmontujemy
partycję /boot. Ponownie odnosimy się do Podręcznika Gentoo po dokładniejsze
instrukcje opisanego tutaj postępowania.
6.
Ponowna instalacja zewnętrznych modułów
Jeśli używamy dodatkowych modułów, które nie są zawarte w źródłach jądra (np.
ALSA czy sterowniki graficzne NVIDIA lub ATI), ale znajdują się w portage, muszą
być ponownie zainstalowane po każdej aktualizacji jądra systemu. Jest to tak
samo proste jak ponowna instalacja innych pakietów. Więcej informacji na ten
temat znajdziemy w Podręczniku
Gentoo, czytając rozdział o Konfiguracji jądra.
W celu przebudowania wszystkich modułów zainstalowanych za pomocą osobnych
ebuildów można skorzystać z prostego programu przygotowanego specjalnie w tym
celu. Nosi on nazwę sys-kernel/module-rebuild i reinstaluje moduły dla
jądra, którego źródła wskazywane są przez dowiązanie symboliczne
/usr/src/linux. Korzystanie z programu jest proste. Po
zainstalowaniu go, wystarczy wpisać polecenie module-rebuild populate,
aby wypełnić bazę danych zawierającą listę wszystkich zainstalowanych pakietów z
dodatkowymi modułami jądra. Następnie trzeba wpisać
module-rebuild rebuild, aby program przebudował wszystkie sterowniki.
Więcej informacji na temat programu module-rebuild można uzyskać
uruchamiając go bez żadnych parametrów.
7.
Uruchamianie systemu z nowym jądrem
Następnie zamykamy wszystkie aplikacje i uruchamiamy ponownie system. Jeśli
postępowaliśmy zgodnie z instrukcjami, które są zamieszczone powyżej na liście
programu ładującego zobaczymy pozycję odnoszącą się do nowego jądra. Wybieramy
ją i uruchamiamy system.
Jeżeli wszystko dobrze skonfigurowaliśmy system uruchomi się z nowym jądrem bez
żadnych problemów i będziemy mogli się do niego zalogować oraz rozpocząć pracę.
I na tym kończy się proces aktualizacji jądra.
Jeżeli popełniliśmy błąd i system nie wystartował z nowym jądrem, wtedy po
prostu uruchamiamy go ponownie wybierając w programie ładującym wpis, który
odpowiada ostatnio działającej wersji jądra. Następnie przechodzimy z powrotem
do Konfiguracji, kompilacji i instalacji nowego jądra
- wprowadzamy odpowiednie poprawki, aby naprawić błędy. W niektórych przypadkach
(np. gdy po prostu nie zaznaczyliśmy sterownika karty sieciowej, urządzenia
audio itp.) nie będziemy musieli nawet uruchamiać ponownie komputera, aby to
zrobić.
8.
Uruchamianie wielu jąder
Podczas instalacji nowych źródeł, źródła jądra którego aktualnie używaliśmy nie
zostają usunięte. Jest to zamierzone działanie i pozwala w prosty sposób
przełączać się, uruchamiając różne jądra.
Przełączanie między różnymi jądrami jest związane z pozostawieniem źródeł jądra
w /usr/src oraz pozostawieniem pliku obrazu bzImage w
partycji /boot (nawiązując do wpisów w konfiguracji bootloadera).
Za każdy razem gdy będziemy uruchamiali system, będziemy proszeni o wybór
wersji jądra, która ma być użyta.
9.
Usuwanie starego jądra.
Kontynuując poprzedni wątek, po aktualizacji możemy być całkowicie zadowoleni z
nowego jądra i nie potrzebować starej wersji. Prostym sposobem na usunięcie
wszystkich źródeł z wyjątkiem tych najnowszych jest użycie opcji prune
emerge'a. W dalszym ciągu w przykładzie używamy gentoo-sources:
Listing 9.1: Usuwanie starych wersji |
# emerge -P gentoo-sources
|
W większości przypadków, pliki tymczasowe używane podczas kompilacji będą
nadal zapisane w odpowiednim podkatalogu w katalogu /usr/src.
Bezpiecznym rozwiązaniem jest usunięcie ich poprzez użycie polecenia
rm.
Możemy również bezpiecznie usunąć moduły, które były używane przez poprzednie
jądro. Można to osiągnąć poprzez usunięcie właściwych katalogów w
/lib/modules odnoszących się do jądra, które właśnie usuwamy.
Należy uważać, aby nie usunąć modułów należących do jądra aktualnie używanego!
Na koniec możemy zamontować partycję /boot i usunąć pliki
bzImage. Powinniśmy także wyedytować konfigurację programu
ładującego tak, aby nie było już odwołań do tych jąder.
10.
Zaawansowane: Użycie starego pliku .config do konfiguracji nowego jądra.
Czasami możliwe jest zaoszczędzenie czasu jeżeli użyjemy ponownie pliku
konfiguracyjnego ze starego jądra podczas konfiguracji nowego. Zauważmy jednak,
że jest to generalnie niebezpieczne - między kolejnymi wydaniami, wprowadzanych
jest zbyt wiele zmian, aby uznać taką metodę za rzetelną.
Jedyną sytuacją kiedy takie postępowanie jest uzasadnione jest przypadek gdy
aktualizujemy jądro z jednej wersji Gentoo do innej. Dla przykładu, różnice
pomiędzy gentoo-sources-2.6.9-r1, a gentoo-sources-2.6.9-r2 będą
bardzo małe, więc użycie opisywanej metody nie powinno przysporzyć problemów.
Jednak nie jest wskazane używanie tej metody w przypadku aktualizacji z wersji
np. 2.6.8 do 2.6.9, gdyż różnice pomiędzy oficjalnymi są zbyt duże. Opisana
poniżej metoda nie wykazuje tych zmian, co często prowadzi do dodatkowych
problemów dla użytkownika poprzez wyłączenie opcji, których wcale nie chciał
wyłączać.
Aby ponownie użyć starego pliku .config po prostu kopiujemy go w o
odpowiednie miejsce i uruchamiamy polecenie make oldconfig. W tym
przykładzie, skopiujemy ten plik z gentoo-sources-2.6.9-r1 i
zaimportujemy go do gentoo-sources-2.6.9-r2.
Listing 10.1: Ponowne użycie starej konfiguracji |
# cd /usr/src/linux-2.6.9-gentoo-r2
# cp ../linux-2.6.9-gentoo-r1/.config .
# make oldconfig
|
Listing 10.2: Ponowne użycie starej konfiguracji dla genkernela |
# cd /etc/kernels
# cp kernel-config-x86-2.6.9-gentoo-r1 kernel-config-x86-2.6.9-gentoo-r2
# genkernel all
|
W tym momencie możemy zostać poproszeni o udzielenie odpowiedzi na kilka pytań
dotyczących konfiguracji, która zmieniła się pomiędzy tymi dwoma wydaniami.
Kiedy to zrobimy, będziemy mogli skompilować i zainstalować jądro w taki sposób
w jaki zazwyczaj to czynimy, pomijając jednak proces konfiguracji uruchamiany
poleceniem menuconfig.
Znacznie łatwiejszą i bezpieczniejszą metodą aktualizacji jądra jest proste
skopiowanie pliku konfiguracyjnego tak jak to opisaliśmy powyżej, a następnie
uruchomienie make menuconfig. Dzięki temu można ominąć problemy związane
z make oldconfig opisane wcześniej. make menuconfig załaduje
poprzednią konfigurację do menu. Następnie wystarczy przejrzeć kolejno wszystkie
opcje pod kątem zmian, usuniętych czy dodanych sterowników. Dzięki
menuconfig można łatwo zapoznać się ze szczegółami wszystkich zmian
dzięki wbudowanej pomocy. Można korzystać z tej metody nawet do aktualizacji tak
znaczących jak z 2.6.8 do 2.6.9. Warto przejrzeć wszystkie opcje bardzo uważnie
żeby nie pominąć czegoś ważnego. Następnie kompiluje się i instaluje jądro tak
jak zwykle.
11.
Problemy po aktualizacji jądra?
W szybko rozwijanym jądrze Linuksa nieuniknione jest, że zmiany poczynione
między jedną wersją a drugą będą sprawiały jakieś problemy. Jeżeli mamy jakieś
rozwiązania pojawiających się problemów z ostatnimi wersjami jąder wspieranych przez Gentoo
należy napisać raport o tym rozwiązaniu do nas.
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|