Gentoo Logo

Aktualizacja jądra w systemie Gentoo

Spis treści:

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

(Dodajemy zmienną symlink)
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

(Jeżeli nie posiadamy eselect należy go najpierw
zainstalować)
# emerge eselect
(Przeglądanie dostępnych jąder)
# eselect kernel list
Available kernel symlink targets:
  [1]   linux-2.6.9-gentoo-r1
  [2]   linux-2.6.9-gentoo-r2
(Wybieramy odpowiednie jądro)
# 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.



Drukuj

Zaktualizowano 22 czerwca 2007

Podsumowanie: W dokumencie tym opisano proces aktualizacji jądra systemu.

Daniel Drake
Autor

Damian Kuras
Tłumaczenie

Waldemar Korłub
Tłumaczenie

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.