Gentoo Logo

Guida all'aggiornamento del kernel Gentoo Linux

Indice:

1.  Introduzione

Il kernel è uno dei pochi pacchetti in portage che richiede un intervento manuale da parte dell'utente per completare un aggiornamento. 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 qui presenti possono essere applicate anche ad altri pacchetti presenti in portage.

2.  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 caratteristica o di un nuovo driver; un'altra può essere quella di correggere un'eventuale problema di sicurezza, oppure semplicemente quella di mantenere il sistema aggiornato.

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

3.  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 l'aggiornamento appare nell'elenco dell'aggiornamento di world. Ad esempio:

Codice 3.1: I sorgenti di un nuovo kernel segnalati da un update world

# emerge -Dup world
Calculating dependencies ...done!
[ebuild    NS ] sys-kernel/gentoo-sources-2.6.39-r3 [2.6.38-r6]

Nota: La presenza della sigla "NS" nell'output sopra indica che il kernel sarà installato in un nuovo slot, quindi i sorgenti del vostro vecchio kernel non verranno toccati sino a che non si deciderà di cancellarli manualmente.

A questo punto si può andare avanti ed installare l'aggiornamento, es.:

Codice 3.2: Aggiornare i sorgenti del kernel

# emerge -u gentoo-sources

I sorgenti del kernel saranno quindi installati in una subdirectory in /usr/src. Nell'esempio precedente verranno installati in /usr/src/linux-2.6.39-gentoo-r3

4.  Aggiornare il link simbolico /usr/src/linux

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

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

Codice 4.1: Esempio delle variabili USE in /etc/portage/make.conf

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

In alternativa, è possibile usare app-admin/eselect per modificare il collegamento simbolico.

Codice 4.2: Usare eselect per modificare il symlink

(Installare eselect se non è già stato fatto)
# emerge eselect
(Consultare la lista dei kernel disponibili)
# eselect kernel list
Available kernel symlink targets:
 [1]   linux-2.6.39-gentoo-r3
 [2]   linux-2.6.38-gentoo-r6 *
(Selezionare il giusto kernel)
# eselect kernel set 1
(Verificare la modifica effettuata)
# eselect kernel list
 [1]   linux-2.6.39-gentoo-r3 *
 [2]   linux-2.6.38-gentoo-r6

Se si preferisce fare tutto da sè il prossimo esempio mostra come far puntare il collegamento a linux-2.6.39-gentoo-r3:

Codice 4.3: Aggiornare il link simbolico /usr/src/linux manualmente

# cd /usr/src
# ln -sfn linux-2.6.39-gentoo-r3 linux

5.  Configurare, compilare ed installare il nuovo kernel

Per ognuna di queste operazioni fare riferimento alla guida presente nel Manuale Gentoo, in particolare alle sezioni Configurare il kernel e Configurare il Bootloader. Qui di seguito vengono delineate le operazioni necessarie:

Opzione 1: configurare automaticamente il kernel con GenKernel

Se si è utenti Genkernel, tutto quello che bisogna fare è ripetere i passi fatti la prima volta che si ha installato il kernel.

Eseguire semplicemente genkernel:

Codice 5.1: Avviare genkernel

# genkernel all

È possibile inoltre utilizzare dei parametri aggiuntivi per attivare particolari funzionalità di genkernel. Per esempio, se si desidera configurare alcune opzioni attraverso menuconfig e che genkernel aggiorni automaticamente la configurazione di grub, allora lanciare genkernel come segue:

Codice 5.2: Eseguire genkernel con alcuni comandi aggiuntivi

# genkernel --menuconfig --bootloader=grub all

Per approfondire l'argomento seguire la Guida a genkernel o fare 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, avviare menuconfig nella directory dei sorgenti:

Codice 5.3: Avviare menuconfig

# cd /usr/src/linux
# make menuconfig

Selezionare le voci che maggiormente si confanno alla propria configurazione hardware ed alle proprie necessità. Per saperne di più sulla configurazione del kernel fare riferimento al paragrafo intitolato Configurazione del kernel del Manuale Gentoo.

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

Codice 5.4: Compilare ed installare un nuovo kernel

# make && make modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.39-gentoo-r3

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

6.  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 (es. i driver ALSA, NVIDIA o ATI), bisognerà reistallarli dopo avere completato l'installazione del nuovo kernel. Tale procedura e' semplice e consiste nel riemergere gli eventuali pacchetti interessati. Per ulteriori informazioni fare riferimento al paragrafo Configurare il Kernel del Manuale Gentoo.

Gentoo fornisce un semplice strumento (sys-kernel/module-rebuild) che ricompila tutti i moduli del kernel installati con ebuild separati per il kernel in /usr/src/linux. Il suo uso è semplicissimo. Dopo averlo emerso, eseguire 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, eseguire module-rebuild rebuild, in modo da ricompilare i driver per il proprio nuovo kernel.

Per ulteriori informazioni, eseguire module-rebuild senza alcuna opzione per visualizzare una lista di comandi che possono essere passati al programma.

7.  Aggiornare la configurazione dei moduli

Se si utilizzano configurazioni specifiche per dei moduli in /etc/conf.d/modules potrebbe essere necessario aggiornarle.

Codice 7.1: Esempio di file /etc/conf.d/modules

# In questo modo il modulo ieee1394 verrà autocaricato solo con il kernel 2.6.38-gentoo-r6
modules_2_6_38_gentoo_r6="ieee1394"

# Per supportare l'autocaricamento con tutte le possibili versioni eliminare qualsiasi riferimento alla versione:
modules="ohci1394"

8.  Riavviare col nuovo kernel

Successivamente chiudere tutte le applicazioni e riavviare il sistema. Se sono state eseguito correttamente tutte le istruzioni della guida, il menu del proprio bootloader dovrebbe includere una voce con il nuovo kernel. Selezionarlo e far proseguire l'avvio del sistema.

Probabilmente il proprio sistema si avviera' col nuovo kernel e si potrà continuare a fare qualunque cosa si stava facendo prima. Se cosi' fosse allora l'aggiornamento del kernel e terminato ed e' andato a buon fine.

Se invece sono stati fatti degli errori ed il sistema non vorra' saperne di avviarsi col nuovo kernel, riavviare il sistema e dal menu' del bootloader scegliere il vecchio kernel, a questo punto si può riprendere da Configurare, compilare ed installare il nuovo kernel correggendo gli eventuali errori. In alcuni casi non ci sarà bisogno di riavviare per apportare qualche piccola modifica (es. se si ha dimenticato di installare i driver per la propria scheda audio o per la propria scheda di rete).

9.  Utilizzare kernel multipli

Probabilmente si avrà notato che quando si installano i sorgenti del nuovo kernel quelli del vecchio kernel non vengono rimossi. Questo 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 si avvierà il sistema si potrà scegliere, da una schermata del proprio bootloader, quale kernel avviare.

10.  Rimuovere i vecchi kernel

Nel momento in cui il nuovo kernel dovesse rispondere alle proprie necessità non c'è più alcun motivo per tenere le versioni vecchie del kernel. Per rimuovere semplicemente tutti i sorgenti per uno specifico kernel eccetto quello più recente è possibile utilizzare l'opzione prune di emerge. Ecco un esempio sempre con i gentoo-sources:

Codice 10.1: Effettuare il 'prune' delle vecchie versioni

# 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 tranquillamente utilizzando rm.

È anche possibile cancellare senza indugio ogni modulo utilizzato dal vecchio kernel, rimuovendo la directory che fa riferimento al kernel vecchio in /lib/modules/. Prestare comunque attenzione a non cancellare i moduli del kernel che si ha ancora intenzione di utilizzare!

Dopo la rimozione dei sorgenti e dei moduli si può montare la partizione /boot e rimuovere il file bzImage che fa riferimento al/ai kernel appena disinstallato/i. Bisogna anche modificare la configurazione del proprio bootloader in modo che non ci siano più riferimenti a questi kernel.

11.  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 viene copiato il file di configurazione da gentoo-sources-2.6.9-r1 a gentoo-sources-2.6.9-r2

Codice 11.1: Utilizzare il file di configurazione del vecchio kernel

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

Codice 11.2: Riutilizzare la configurazione del vecchio kernel con genkernel

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

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

Un metodo di aggiornamento molto più sicuro è quello di copiare la propria configurazione come mostrato in precedenza, ed eseguire semplicemente make menuconfig. In questo modo si evitano i problemi di make oldconfig menzionati in precedenza, in quanto make menuconfig caricherà la configurazione precedente il più possibile nel menu. Quello che occorrerà fare successivamente sarà navigare attraverso le opzioni alla ricerca di nuove sezioni, rimozioni, e così via. Usando menuconfig si guadagneranno i contesti dei nuovi cambiamenti, e si potranno individuare facilmente le nuove scelte e revisionarne le schermate di aiuto. È possibile perfino usare questo metodo per aggiornamenti come quello dalla versione 2.6.8 alla 2.6.9; basta assicurarsi di leggere attentamente le varie opzioni. Una volta completata l'operazione, compilare ed installare normalmente il proprio kernel.

12.  Problemi dopo un aggiornamento 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.



Stampa

Aggiornato il 24 luglio 2012

La versione originale di questo documento non è più mantenuta

Oggetto: Questo documento descrive i passaggi da seguire per aggiornare il kernel da una release ad un'altra.

Daniel Drake
Autore

Raffaele Camarda
Traduzione

Cristiano Chiucchiolo
Traduzione

Donate to support our development efforts.

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