Gentoo Logo

Upozornění : Tento dokument již neplatí a není udržován.


Aktualizace jádra v Gentoo Linuxu

Obsah:

1.  Úvod

Jádro je jeden z mála balíků v Portage, které při aktualizaci vyžadují ruční práci. Portage sice stáhne a nainstaluje zdrojové kódy, poté je však na vás, abyste provedli samotnou kompilaci.

Přestože je tento návod určen uživatelům provádějícím pouze aktualizaci na novější verzi téhož jádra, ocení jej také uživatelé přecházející z jednoho balíku s jádrem na jiný.

Jako příklad zde budeme mluvit o balíčku gentoo-sources, popisované postupy však lze použít také pro jiná jádra dostupná přes Portage.

2.  Proč aktualizovat jádro?

Obecně aktualizace jádra na další postupnou verzi v rámci stejné hlavní řady nepřináší žádné zásadní změny. Pro aktualizaci jádra však existuje několik důvodů. Jedním z nich je potřeba použít určitou konkrétní novou funkci nebo ovladač; dalším důvodem je ochrana před bezpečnostními děrami nebo jen snaha udržet systém co nejvíce aktuální a v pořádku.

I když nechcete průběžně instalovat každou nově vydanou verzi jádra, doporučujeme aktualizaci provést alespoň občas. Důrazně doporučujeme provést aktualizaci okamžitě, pokud nová verze jádra opravuje nějaký bezpečnostní problém.

3.  Stažení nových zdrojových kódů prostřednictvím Portage

Zdrojové kódy jádra se aktualizují stejně jako jakýkoliv jiný balík - s použitím nástroje emerge. Pro aktualizaci jádra se většinou rozhodnete, když se nová verze zdrojových kódů objeví ve výpisu dostupných aktualizací pro váš systém. Například:

Výpis kódu 3.1: Nové zdrojové kódy jádra ve výpisu dostupných aktualizací

# emerge -Dup world
Calculating dependencies ...done!
[ebuild    NS ] sys-kernel/gentoo-sources-2.6.9-r2 [2.6.8-r5]

Poznámka: Označení "NS" v předchozím výpisu znamená, že zdrojové kódy nové verze jádra budou nainstalovány do Nového Slotu, tzn. že staré jádro bude zachováno do doby, než jej ručně odstraníte.

Nyní můžete pokračovat a provést instalaci, např.:

Výpis kódu 3.2: Aktualizace zdrojových kódů jádra

# emerge -u gentoo-sources

Zdrojové kódy jádra budou nainstalovány do vlastního podadresáře uvnitř /usr/src, v našem příkladu do /usr/src/linux-2.6.9-gentoo-r2.

4.  Aktualizace symbolického odkazu /usr/src/linux

V Gentoo je potřeba, aby symbolický odkaz /usr/src/linux ukazoval na zdrojové kódy právě bežícího jádra.

Portage může symbolický odkaz upravit automaticky při instalaci nových zdrojových kódů. Stačí, když přidáte klíčové slovo symlink do nastavení USE proměnné v /etc/make.conf.

Výpis kódu 4.1: Příklad nastavení USE proměnné v /etc/make.conf

(Přidáno klíčové slovo symlink)
USE="symlink x86 3dnow 3dnowex X aac aalib adns alsa apache2"

Symbolický odkaz můžete spravovat také pomocí nástrojů z balíčku app-admin/eselect:

Výpis kódu 4.2: Správa symlinku nástrojem eselect

(Nemáte-li eselect, nainstalujte jej)
# emerge eselect
(Zobrazení seznamu dostupných jader)
# eselect kernel list
Available kernel symlink targets:
  [1]   linux-2.6.9-gentoo-r1
  [2]   linux-2.6.9-gentoo-r2
(...a výběr toho správného :) )
# eselect kernel set 1

Pokud chcete symbolický odkaz nastavit sami, následující příklad vám ukáže, jak jej nastavit tak, aby ukazoval na linux-2.6.9-gentoo-r2:

Výpis kódu 4.3: Manuální aktualizace symbolického odkazu /usr/src/linux

# cd /usr/src
# ln -sfn linux-2.6.9-gentoo-r2 linux

5.  Konfigurace, kompilace a instalace nového jádra

Pro všechny možnosti odkazujeme na postupy uvedené v  Gentoo referenční příručce, zejména v kapitolách Konfigurace kernelu a Konfigurace bootloaderu. Níže uvádíme stručný přehled požadovaných úkonů:

Možnost 1: automatické nastavení jádra pomocí skriptu genkernel

Pokud používáte genkernel, stačí pouze zopakovat kroky, které jste prováděli během první instalace jádra do systému.

Běžným způsobem spusťte skript genkernel:

Výpis kódu 5.1: Spuštění skriptu genkernel

# genkernel all

Pro změnu funkce skriptu genkernel můžete použít některé další parametry. Např. pokud chcete dodatečně nastavit některé možnosti jádra pomocí menuconfig a pokud chcete, aby genkernel automaticky zaktualizoval nastavení zavaděče systému GRUB, potom spusťte genkernel takto:

Výpis kódu 5.2: Spuštění skriptu genkernel s nejběžnějšími parametry

# genkernel --menuconfig --bootloader=grub all

Více informací najdete v Gentoo Linux Genkernel Guide nebo v Gentoo Handbooku. Mnoho možností skriptu genkernel lze nastavit v konfiguračním souboru /etc/genkernel.conf

Možnost 2: ruční konfigurace

Nejdříve v adresáři se zdrojovými kódy jádra spusťte program menuconfig:

Výpis kódu 5.3: Spuštění menuconfig

# cd /usr/src/linux
# make menuconfig

Vyberte možnosti, které jsou vyžadovány pro váš hardware a operační prostředí. Další informace o nastavení jádra najdete v kapitole Konfigurace kernelu Gentoo Handbooku.

Dále zkompilujte jádro a zkopírujte jej do bootovacího oddílu na disku. Opět postupujte podle Gentoo referenční příručky, kapitoly Konfigurace bootloaderu. Pokud máte /boot na zvláštním oddílu, ujistěte se ještě před kopírováním, že je tento oddíl namountován! V opačném případě systém s novým jádrem nenastartuje.

Výpis kódu 5.4: Kompilace a instalace nového jádra

# make && make modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.9-gentoo-r2

Nakonec byste měli upravit nastavení zavaděče systému, tzn. přidat záznam pro nové jádro (zatím neodstraňujte záznamy, které patří předchozím verzím jádra!). Odmountujte oddíl /boot. Podrobné informace opět najdete v Gentoo referenční příručce.

6.  Rekompilace externích modulů

Pokud používáte také moduly, které nejsou obsaženy ve zdrojových kódech jádra, ale jsou dostupné jinde v Portage (např. ovladače ALSA či grafických karet NVIDIA nebo ATI), po instalaci nového jádra musíte tyto moduly znovu nainstalovat. Stačí jen znovu nainstalovat příslušné balíky prostřednictvím emerge. Více informací najdete v kapitole Konfigurace kernelu Gentoo handbooku.

K dispozici je jednoduchý nástroj sys-kernel/module-rebuild, který jaderné moduly vytvořené pomocí samostatných ebuildů znovu přeloží (používá se symlink /usr/src/linux). Použití je snadné — po instalaci spusťte module-rebuild populate, tím do interní databáze vložíte seznam balíčků, jež budou po aktualizaci jádra vyžadovat rekompilaci, a konečně po samotném upgradu jádra spusťte module-rebuild rebuild, který potřebné moduly znovu překompiluje.

Pro více informací spusťte module-rebuild bez dalších parametrů, obdržíte výpis podporovaných příkazů.

7.  Restart systému s novým jádrem

Ukončete všechny aplikace a restartujte počítač. Pokud jste postupovali přesně podle výše uvedeného postupu, v menu zavaděče systému by jako jedna z nabídek mělo být uvedeno nové jádro. Vyberte toto nové jádro a nechte systém nastartovat.

Doufáme, že váš počítač správně nastartoval s novým jádrem a vy se můžete přihlásit do systému a pokračovat ve své práci. Pokud tomu tak je, potom jste aktualizaci jádra úspěšně dokončili.

Pokud jste udělali nějakou chybu a systém s novým jádrem odmítá nastartovat, restartujte počítač a zvolte možnost v menu zavaděče systému, která náleží poslední funkční verzi jádra. Poté se vraťte ke kapitole Konfigurace, kompilace a instalace nového jádra a proveďte potřebné změny, abyste svou chybu opravili. V některých případech není nutné restartovat s minulou verzí jádra (např. pokud jste jen zapomněli do jádra přidat ovladač zvukové karty, síťové karty, atd.).

8.  Provoz více jader

Možná jste si všimli, že při instalaci zdrojových kódů nového jádra nejsou zdrojové kódy stávajícího jádra odstraněny. Je to tak schválně, abyste mohli přepínat mezi různými jádry.

Přepínání mezi jádry je jednoduché - pouze ponechte příslušné zdrojové kódy v adresáři /usr/src/, zkompilované jádro bzImage v oddílu /boot a v nastavení bootloaderu příslušný záznam. Při každém startu systému se poté zobrazí nabídka, ze které si vyberete tu verzi jádra, kterou chcete právě používat.

9.  Odstranění starších jader

Doufáme, že jste si s pomocí předchozích kapitol nastavili jádro ke své spokojenosti a tudíž dále nemusíte uchovávat jeho předchozí verze. Pro snadné odstranění zdrojových kódů konkrétního jádra kromě jeho nejnovější verze využijte přepínač prune příkazu emerge. V příkladu používáme jádro gentoo-sources:

Výpis kódu 9.1: Odstranění starších verzí

# emerge -P gentoo-sources

V příslušném podadresáři adresáře /usr/src pak většinou ještě zůstanou některé dočasné soubory, použité při kompilaci. Tyto soubory můžete bez obav smazat příkazem rm.

Stejně tak můžete bez obav smazat také všechny moduly, které byly tímto starším jádrem používány. To provedete odstraněním příslušných podadresářů v adresáři /lib/modules/. Při mazání dávejte pozor, abyste nesmazali moduly, které patří používaným jádrům!

Nakonec můžete namountovat oddíl /boot a smazat soubory bzImage těch jader, která ze systému odstraňujete. Konečně byste měli z konfiguračního souboru zavaděče smazat záznamy, které na tato jádra odkazují.

10.  Pokročilé: použití konfiguračního souboru starého jádra pro nastavení nového

Někdy si můžete ušetřit čas tím, že při nastavování nového jádra použijete konfigurační soubor starého jádra. Tento postup nemusí být vždy bezpečný — vzhledem k velkému množství změn mezi jednotlivými verzemi jádra nemusí být použití předchozí konfigurace spolehlivé.

Jediným případem, kdy je toto přebírání konfigurace vhodné, je aktualizace Gentoo jádra mezi revizemi téže verze. Například mezi gentoo-sources-2.6.9-r1 a gentoo-sources-2.6.9-r2 budou jen velmi malé rozdíly, a proto je většinou možné použít následující postup. Ovšem v případě, který je od začátku tohoto dokumentu popisován jako modelový příklad — přechod z 2.6.8 na 2.6.9 — tento postup není vhodný. Uživatelé si někdy neuvědomují, že vzhledem k velkým změnám mezi oficiálními verzemi jádra nelze níže uvedený postup vždy použít; tím se často dostávají do problémů, protože pak mají v jádru nechtěně zakázány některé volby.

Pro opětovné použití starého konfiguračního souboru .config jej zkopírujte a spusťte make oldconfig. V následujícím příkladu vezmeme konfiguraci z gentoo-sources-2.6.9-r1 a použijeme ji pro gentoo-sources-2.6.9-r2.

Výpis kódu 10.1: Opětovné použití staré konfigurace

# cd /usr/src/linux-2.6.9-gentoo-r2
# cp ../linux-2.6.9-gentoo-r1/.config .
# make oldconfig

Výpis kódu 10.2: Použití staré konfigurace s genkernelem

# cd /etc/kernels
# cp kernel-config-x86-2.6.9-gentoo-r1 kernel-config-x86-2.6.9-gentoo-r2
# genkernel all

V tuto chvíli můžete být dotázáni na nastavení voleb, které se proti minulé verzi změnily. Poté můžete zkompilovat a nainstalovat nové jádro běžným způsobem, bez nutnosti procházet celý proces nastavení jádra menuconfig.

Bezpečnější však bude, když nejprve zkopírujete starý konfigurační soubor a následně spustíte make menuconfig. Vyhnete se tak problémům, které s sebou nese make oldconfig, a zároveň z původní, staré konfigurace co nejvíce převezmete. Stále sice bude na vás projít celý strom nabídek, překontrolovat nové možnosti a odebrané funkce, avšak v rámci menuconfig uvidíte nové volby v jejich kontextu a snadno si přečtete jejich nápovědu. Tento postup je proto zpravidla bezpečný i pro upgrady mezi jednotlivými verzemi jádra, třeba z 2.6.8 na 2.6.9. Způsob kompilace a instalace kernelu se tímto postupem nijak nemění.

11.  Problémy po aktualizaci jádra?

Vzhledem k rychlému vývoji jádra Linuxu je nevyhnutelné, že některé změny provedené mezi vydáními mohou způsobit určité problémy. Pokud máte jakékoliv potíže s nejnovějšími verzemi jader podporovaných v Gentoo, pak nám své problémy prosím nahlaste.



Tisk

Aktualizace: 22. červen 2007

Původní verze tohoto dokumentu již není udržována

Shrnutí: Tento dokument popisuje proces aktualizace jádra na novější verzi.

Daniel Drake
Author

Lukáš Svoboda
Překladatel

Jan Kundrát
Překladatel

Donate to support our development efforts.

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