Kernel/Aggiornamento

From Gentoo Wiki
< Kernel
Jump to: navigation, search
This page is a translated version of the page Kernel/Upgrade and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français • ‎italiano • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Questo articolo descrive la procedura per l'aggiornamento ad un nuovo kernel.

Installazione ed uso di un nuovo kernel

L'aggiornamento del kernel potrebbe essere una buona idea quando dei nuovi sorgenti sono stati rilasciati. I nuovi sorgenti del kernel sono a volte installati durante l'aggiornamento del sistema tramite il seguente comando

root #emerge --ask --update --deep --with-bdeps=y --newuse @world

Ovviamente i sorgenti del kernel possono essere installati direttamente usando il seguente comando (si sostituisca "gentoo-sources" con "hardened-sources" quando si sta usando un profilo hardened):

root #emerge --ask --update --deep --with-bdeps=y --newuse sys-kernel/gentoo-sources

L'installazione di nuovi sorgenti del kernel non fornisce all'utente un nuovo kernel. E' necessario produrre ed installare un nuovo kernel dai nuovi sorgenti e quindi riavviare il sistema per eseguire effettivamente il nuovo kernel.

La generazione di un nuovo kernel dai nuovi sorgenti è lo stesso processo di creazione di un kernel durante l'installazione del sistema. La differenza è che si potrebbe usare la configurazione del vecchio kernel per creare la configurazione del nuovo kernel. L'uso della vecchia configurazione permette l'utente di evitare di esplorare tutte le opzioni del kernel nuovamente (come make menuconfig)

La configurazione del kernel è salvata in un file nominato .config nella directory che contiene il kernel stesso. Un nuovo kernel potrebbe avere opzioni e funzionalità che un vecchio kernel non possedeva, o potrebbe non avere funzionalità o opzioni possedute da un vecchio kernel. La configurazione del kernel specifica quali funzionalità e opzioni di un kernel debbano essere abilitate o meno, quali includere nel kernel, o quali dovranno essere incluse come moduli che potranno essere caricate in un kernel in esecuzione on demand. Quindi il file di configurazione di un nuovo kernel potrebbe avere nuove voci di configurazioni non presenti nel vecchio kernel, e potrebbe non avere alcune voci presenti invece nel file di configurazione del vecchio kernel.

Per far fronte a tali cambiamenti del file di configurazione, il file di configurazione del vecchio kernel deve essere convertito in una configurazione utilizzabile con il nuovo. Questo articolo mostra come creare un nuovo kernel da nuovi sorgenti del kernel con la conversione del file di configurazione provenienti dal vecchio kernel.

Creare un backup della configurazione del kernel corrente

E' importante fare un backup della configurazione del kernel in modo che le configurazioni precedenti non siano perse. Dopo tutto, molti utenti dedicano molto tempo a definire la migliore configurazione per il sistema, e perdere queste informazioni non è sicuramente desiderato.

Generare un backup della configurazione corrente del kernel è facile:

root #cd /usr/src/linux
root #cp .config ~/kernel-config-`uname -r`

A condizione che il collegamento simbolico ai sorgenti del kernel sia stato creato correttamente, questo comando copia lla configurazione del kernel correntemente usato nella home directory dell'utente root, rinominando il file di configurazione in kernel-config- seguito dalla versione del kernel Linux attualmente in esecuzione.

Impostare il link simbolico ai sorgenti del nuovo kernel

Il link simbolico/usr/src/linux dovrebbe sempre puntare alla directory contenente i sorgenti del kernel attualmente in esecuzione. Questo può essere fatto in uno dei tre dei seguenti modi:

  1. Installare i sorgenti del kernel con la clausola USE="symlink"
  2. Impostare il link con eselect
  3. Aggiornare manualmente il link simbolico

Installare i sorgenti del kernel con la USE flag "symlink"

Questo implicherà che /usr/src/linux punti alla directory dei sorgenti del nuovo kernel.

Se necessario, il link può essere comunque modificato successivamente con uno degli altri due metodi.

Configurazione del link con eselect

Per impostare il link simbolico con eselect:

root #eselect kernel list
Available kernel symlink targets:
 [1] linux-3.14.14-gentoo *
 [2] linux-3.16.3-gentoo

Questo comando genera la lista dei kernel disponibili. L'asterisco indica quale sia la directory dei sorgenti selezionata.

Per cambiare i sorgenti del kernel, per esempio alla seconda voce:

root #eselect kernel set 2

Aggiornamento manuale del link simbolico

Per impostare il link simbolico manualmente:

root #ln -sf /usr/src/linux-3.16.3 /usr/src/linux
root #ls -l /usr/src/linux
lrwxrwxrwx 1 root root 19 Oct  4 10:21 /usr/src/linux -> linux-3.16.3-gentoo

Copia della configurazione del precedente kernel

La configurazione un precedente kernel necessita di essere copiata nella directory dei sorgenti del nuovo kernel. Questa può essere disponibile in più punti:

  • Nel filesystem procfs, se l'opzione Enable access to .config through /proc/config.gz è stata attivata nel kernel attualmente in esecuzione:
root #zcat /proc/config.gz > /usr/src/linux/.config
  • Dal vecchio kernel. Questo funziona solo quando il vecchio kernel è stato compilato con CONFIG_IKCONFIG:
root #/usr/src/linux/scripts/extract-ikconfig /path/to/old/kernel >/usr/src/linux/.config
  • Nella directory /boot, se la configurazione è stata precedentemente installata in questa posizione:
root #cp /boot/config-3.14.14-gentoo /usr/src/linux/.config
  • Nella directory del kernel attualmente in esecuzione:
root #cp /usr/src/linux-3.14.14-gentoo/.config /usr/src/linux/
  • Nella directory /etc/kernels/, se l'opzione SAVE_CONFIG="yes" è impostata nel file /etc/genkernel.conf e genkernel è stato usato per produrre il kernel attualmente in esecuzione:
root #cp /etc/kernels/kernel-config-x86_64-3.14.14-gentoo /usr/src/linux/.config

Configurazione del nuovo kernel

Per usare la configurazione di un vecchio kernel con uno nuovo, è necessario che questa sia prima convertita. La conversione può essere effettuata eseguendo make silentoldconfig oppure, in alternativa, make olddefconfig.

make silentoldconfig

La seguente configurazione è tipo la configurazione testuale effettuata con make config. Per le nuove opzioni di configurazione, verrà richiesto all'utente di prendere una decisione. Per esempio:

root #cd /usr/src/linux
root #make silentoldconfig
Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] (NEW)

La stringa "(NEW)"" alla fine della linea sottolinea che questa opzione è nuova. Nelle parentesi quadre a sinistra della stringa ci sono le possibili risposte Yes (Sì), no (o), module (modulo) oppure ? per visualizzare l'aiuto. La risposta raccomandata (default) è in maiuscolo (in questo caso Y). L'aiuto riporta spiegazioni sull'opzione o sul driver.

Sfortunatamente make silentoldconfig non mostra molte informazioni per ogni opzione, come il contesto, e qualche volta è difficoltoso dare la giusta risposta. In questo caso, la migliore strada è ricordare il nome dell'opzione e ricontrollarla successivamente tramite uno dei strumenti grafici di configurazione del kernel.

make olddefconfig

Se tutte le nuovi opzioni di configurazioni possono essere impostate con il loro valore raccomandato (default) allora è possibile usare make olddefconfig:

root #cd /usr/src/linux
root #make olddefconfig

make help

E' possibile usare make help per vedere gli altri metodi di conversione:

root #make help

Compilazione

Important
Quando moduli esterni sono installati (come nvidia o zfs), è necessario eseguire make modules_prepare come descritto in sotto prima di generare il kernel. Alcuni moduli non possono essere installati o preparati prima che il kernel sia stato generato.
Important
Non dimenticare di configurare bootloader per considerare i file del nuovo kernel, e rigenerare il file initramfs se utilizzato.

Primo passo, seguire i passi nell'articolo manual configuration.

Reinstallare moduli kernel esterni

Ogni modulo esterno, come moduli kernel binari binary, necessitano di essere rigenerati per ogni nuovo kernel. Se il kernel non stato ancora generato, è necessario prima prepararlo per la generazione dei moduli esterni:

root #make modules_prepare

I pacchetti che contengono moduli kernel possono essere ricompilati usando il set @module-rebuild:

root #emerge --ask @module-rebuild

Risoluzione dei problemi di generazione

Quando si stanno sperimentando problemi durante la ricompilazione del kernel corrente, è potrebbe essere d'aiuto sanificare i sorgenti del kernel. Ci si assicuri prima di creare un backup del file .config dato che l'operazione lo elminerà. Ci si assicuri inoltre di non usare suffissi come .bak o ~ dato che make distclean eliminerà anche questi.

root #cp .config /usr/src/kernel_config_bk
root #make distclean
root #mv /usr/src/kernel_config_bk .config

Rimozione dei vecchi kernel

Si veda l'articolo Rimozione del kernel.

Risorse esterne