Upgrade del kernel Gentoo Linux Daniel Drake Raffaele Camarda Cristiano Chiucchiolo Questo documento descrive i passaggi da seguire per aggiornare il kernel da una release ad un'altra. 0.2 2006-01-06 Introduzione

Il kernel è uno dei pochi pacchetti in portage che richiede un intervento manuale da parte dell'utente per completare un upgrade. Portage può scaricare ed installare il nuovo kernel autonomamente, ma dall'utente stesso ne dipendono la configurazione e la compilazione.

Nonostante la guida sia scritta per gli utenti che intendono aggiornare il proprio kernel da una release ad un'altra, può comunque essere utile a tutti gli utenti che che passano da un particolare pacchetto del kernel ad un altro.

Il kernel utilizzato come esempio in questa guida è il gentoo-sources, in ogni caso le istruzioni che si applicano a questa versione del kernel Gentoo possono essere applicate anche ad altri flavour dei sorgenti presenti in portage.

Perché aggiornare il kernel?

Genericamente, l'aggiornamento del kernel da una release ad un'altra non porta nessun evidente cambiamento. Nonostante cio' ci sono diverse ragioni per aggiornare il kernel: una può essere quella di beneficiare dei vantaggi di una nuova feature o di un nuovo driver; un'altra può essere quella di correggere un'eventuale problema di sicurezza, oppure semplicemente quella di mantenere il sistema up-to-date.

Anche se si decidesse di non upgradare ad ogni revisione del kernel è comunque consigliato che questo venga aggiornato periodicamente. Inoltre è fortemente raccomandato che si aggiorni il kernel se questo porta alla risoluzione di eventuali problemi di sicurezza.

Ottenere i sorgenti aggiornati tramite portage

Il kernel si aggiorna esattamente come si aggiornerebbe un qualunque altro pacchetto - utilizzando emerge. Normalmente quindi si può decidere di aggiornare il kernel quanto update world ne notifica un aggiornamento. Ad Esempio:

# emerge -Dup world
Calculating dependencies ...done!
[ebuild    NS ] sys-kernel/gentoo-sources-2.6.9-r2 [2.6.8-r5]
La presenza della sigla "NS" nell'output appena sopra indica che il kernel sarà installato in un nuovo slot, quindi i sorgenti del vostro vecchio kernel non saranno toccati sino a che non deciderete di cancellarli manualmente.

A questo punto si può andare avanti ed installare l'update, e.g.:

# emerge -u gentoo-sources

I sorgenti del kernel saranno quindi installati in una subdirectory in /usr/src. Nel caso che stiamo prendendo in considerazione saranno installati in /usr/src/linux-2.6.9-gentoo-r2

Aggiornare il link simbolico /usr/src/linux

Gentoo necessita che il link simbolico /usr/src/linux punti ai sorgenti del kernel che si sta utilizzando sulla macchina.

Portage può aggiornare anche il link simbolico automaticamente quando si effettua l'update dei sorgenti. Tutto ciò che si deve fare è aggiungere la flag symlink alle variabili USE nel vostro /etc/make.conf.

(Aggiungere la parola symlink alle USE)
USE="symlink x86 3dnow 3dnowex X aac aalib adns alsa apache2"

Se, invece di appoggiarvi ad emerge, preferite fare tutto da voi il prossimo esempio vi mostra come:

# cd /usr/src
# ln -sfn linux-2.6.9-gentoo-r2 linux
Configurare, compilare ed installare il nuovo kernel

Per ognuna di queste operazioni dovreste fare riferimento alla guida presente nel Manuale Gentoo, in particolare alle sezioni Configurare il kernel e Configurare il Bootloader. Qui sotto eccovi una serie di hightlight delle operazioni necessarie:

Opzione 1: configurare automaticamente il kernel con GenKernel

Se siete utenti Genkernel, tutto quello che dovrete fare è ripetere i passi che avete fatto la prima volta che avete installato il kernel.

Eseguite semplicemente genkernel:

(Per kernel 2.4:)
# genkernel all

(Per kernel 2.6:)
# genkernel --udev all

Potete inoltre utilizzare dei parametri extra per attivare particolari funzionalità di genkernel. Per esempio, se desiderate configurare alcune opzioni attraverso menuconfig e desiderate che genkernel aggiorni automaticamente la configurazione di grub, allora lanciate genkernel come segue:

# genkernel --menuconfig --bootloader=grub all

Per approfondire l'argomento seguite la Guida a genkernel o fate riferimento al Manuale Gentoo. Molte delle opzioni di genkernel possono essere direttamente impostate nel suo file di configurazione: /etc/genkernel.conf

Opzione 2: Configurazione manuale

Per cominciare, avviate menuconfig nella directory dei sorgenti:

# cd /usr/src/linux
# make menuconfig

Selezionate le voci che maggiormente si confanno alla vostra configurazione hardware ed alle vostre necessità. Per saperne di più sulla configurazione del kernel fate riferimento al paragrafo intitolato Configurazione del kernel del Manuale Gentoo.

Adesso compilate il vostro kernel e copiate l'immagine nella vostra directory di boot. Fate riferimento alla guida nel Manuale Gentoo, in particolare al paragrafo Configurare il Bootloader. Se /boot dovesse essere una partizione dedicata accertatevi di averla montata prima di copiarvi il kernel appena compilato. Se non si fa questo non si avvia il sistema con il nuovo kernel.

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

Infine, si deve aggiornare la configurazione del bootloader, aggiungendo una voce per il nuovo kernel (non cancellate ancora le vecchie voci!) e smontare la partizione /boot, fate riferimento ancora una volta al Manuale Gentoo per una descrizione dettagliata di tale procedura.

Reinstallare eventuali moduli esterni

Se si utilizzano moduli del kernel che non sono distribuiti con i sorgenti del kernel ma che sono comunque presenti in portage (e.g. i driver ALSA, NVIDIA o ATI), dovrete reistallarli dopo avere completato l'intallazione del nuovo kernel. Tale procedura e' semplice e consiste nel riemergere gli eventuali pacchetti interessati. Per ulteriori informazioni fate riferimento al paragrafo Configurare il Kernel del Manuale Gentoo. Per essere sicuri che questi pacchetti vengano compilati verso i nuovi sorgenti in /usr/src/linux, prima disintallate i pacchetti e poi riemergeteli. Questa procedura vi garantira' che vengano compilati verso i nuovi sorgenti del kernel.

Esiste un semplice tool (sys-kernel/module-rebuild) che ricompila tutti i moduli del kernel installati con ebuilds separati (per il kernel attualmente in esecuzione, che non è necessariamente quello in /usr/src/linux). Il suo uso è semplicissimo. Dopo averlo emerso, esegui semplicemente module-rebuild-populate, per popolare il database con una lista di pacchetti che necessitano di essere ricompilati dopo aver aggiornato o ricompilato il kernel. Una volta finito di aggiornare o ricompilare il kernel, esegui module-rebuild rebuild prima di riavviare, in modo da ricompilare i driver per il tuo nuovo kernel.

Per ulteriori informazioni, esegui module-rebuild senza alcuna opzione, e vedrai una lista di comandi che possono essere passati alla utility.

Riavviare col nuovo kernel

Adesso chiudete tutte le applicazioni e riavviate il sistema. Se avete eseguito correttamente tutte le istruzioni della guida, il menu del vostro bootloader dovrebbe includere una voce con il nuovo kernel. Selezionatelo e fate proseguire l'avvio del sistema.

Probabilmente il vostro sistema si avviera' col nuovo kernel e voi potrete continuare a fare qualunque cosa stavate facendo prima. Se cosi' fosse allora l'aggiornamento del kernel e terminato ed e' andato a buon fine.

Se invece avete fatto degli errori ed il sistema non vorra' saperne di avviarsi col nuovo kernel, riavviate il sistema e dal menu' del bootloader scegliete il vecchio kernel, a questo punto potete riprendere da Configurare, compilare ed installare il nuovo kernel correggendo gli eventuali errori. In alcuni casi non avrete bisogno di riavviare per apportare qualche piccola modifica (e.g. se avete dimenticato di installare i driver per la vostra scheda audio o per la vostra scheda di rete).

Utilizzare kernel multipli

Probabilmente avrete notato che quando avete installato il nuovo kernel i sorgenti del vecchio kernel non sono stati rimossi. Questo vi consentira' di utilizzare senza problemi diversi kernel.

Utilizzare diversi kernel e' molto semplice lasciando i sorgenti in /usr/src/ e lasciando l'immagine del kernel (bzImage) in /boot. Ogni volta che avvierete il sistema potrete scegliere, da una schermata del vostro bootloader, quale kernel avviare.

Rimuovere i vecchi kernel

Potreste avere la necessita' di rimuovere il vostro vecchio kernel se il nuovo dovesse rispondere alle vostre necessita'. Per rimuovere semplicemente tutti i sorgenti del vecchio kernel potrete utilizzare l'opzione prune di emerge. Eccovi un esempio sempre con i gentoo-sources:

# emerge -P gentoo-sources

Nella maggior parte dei casi i file temporanei utilizzati durante la compilazione rimarranno nella directory dei sorgenti /usr/src. Potranno essere comunque rimossi utilizzando rm.

Potrete anche tranquillamente cancellare ogni modulo utilizzato dal vostro vecchio kernel, rimuovendo la directory che fa riferimento al kernel vecchio in /lib/modules/. Prestate comunque attenzione a non cancellare i moduli del kernel che avete ancora intenzione di utilizzare!

Dopo la rimozione dei sorgenti e dei moduli potete montare la partizione /boot e rimuovete il file bzImage che faccia riferimento al kernel che avete appena disinstallato. Dovrete anche modificare la configurazione del vostro bootloader in modo da evitare che ci siano voci che puntino a immagini che avete rimosso.

Utilizzare il vecchio .config per configurare il nuovo kernel

E' comunque possibile risparmiare tempo nell'installazione di un nuovo kernel utilizzando il file di configurazione del vecchio. Generalmente questa non e' una procedura sicura viste le modifiche che possono intercorrere tra una release e l'altra.

L'unica situazione appropriata e quando si aggiorna da una revisione all'altra del kernel Gentoo. Per esempio, i cambiamenti tra gentoo-sources-2.6.9-r1 e gentoo-sources-2.6.9-r2 saranno molto pochi, ed e' questo un caso in cui utilizzare il file di configurazione del vecchio kernel per il nuovo non causera' problemi di sorta. Invece non e' consigliato utilizzare questo metodo passando dal 2.6.8 al 2.6.9 ad esempio. In questo caso i cambiamente possono essere tali da non garantire il controllo sulla configurazione.

Per utilizzare il .config del vecchio kernel basta copiarlo nella directory dei sorgenti del nuovo kernel e poi dare un make oldconfig. Nell'esempio che segue copiamo il file di configurazione da gentoo-sources-2.6.9-r1 a gentoo-sources-2.6.9-r2

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

A questo punto potrebbe venirvi chiesto di configurare alcune opzioni che sono cambiate tra le due versione dei gentoo-sources. Una volta fatto questo, potrete compilare ed installare il vostro kernel come sempre, senza dover passare per menuconfig.

Problemi dopo un upgrade del kernel?

Con la velocita' con cui viene sviluppato il kernel linux, e' possibile che alcuni cambiamenti da una release all'altra diano qualche problema. Se si dovessero avere dei problemi aggiornando il kernel si consiglia di fare riferimento all'ultima versione di Guida ai Kernel Gentoo Linux e poi rendere noto il problema agli sviluppatori di Gentoo.