Risolvere i problemi di compilazione per il kernel 2.6.33 RC 1 e successivi

Scritto il 22 dicembre 2009. Archiviato in Informatica, Informazione, Programmazione.

Pensavo che si trattasse di un mio errore, dovuto all’indicazione di un nome personalizzato per il kernel, invece è un bug noto che affligge i sistemi : per fortuna insieme al ticker è presente anche la soluzione. Si tratta di una modifica minimale, che però rallenta considerevolmente il processo d’aggiornamento dopo la prima installazione.

In pratica, se volete compilare l’ultimo kernel – che aggiunge delle feature piuttosto interessanti – dovrete incorrere in un problema legato al print della versione: nulla di trascendentale, ma almeno eviterete di fare come il sottoscritto che ha imprecato ripetutamente — prima di cedere a una ricerca su .

Scaricate i sorgenti e applicate tranquillamente (dal momento che funziona) l’ultima patch disponibile: non c’è alcuna differenza tra gli snapshot e la versione mainline, da questo punto di vista. In entrambi i casi sarete costretti a modificare un file.

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.33-rc1.tar.bz2
$ tar xjvf linux-2.6.33-rc1.tar.bz2
$ sudo mv linux-2.6.33-rc1 /usr/src/
$ cd /usr/src/
$ sudo ln -sf linux-2.6.33-rc1 linux
$ cd ~
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/next/patch-v2.6.33-rc1-next-20091219.bz2
$ tar xjvf patch-v2.6.33-rc1-next-20091219.bz2
$ sudo mv patch-* /usr/src/linux/
$ cd /usr/src/linux/
$ sudo patch -p1 < patch-*

Configurate il kernel come di consueto – eventualmente caricando anche un file di configurazione precedentemente salvato – e fate attenzione soltanto a non abilitare /dev tmpfs perché ho il dubbio che sia la causa dei problemi che ho avuto con /proc/mounts. Procediamo applicando le modifiche necessarie:

$ sudo make-kpkg clean
$ sudo make-kpkg debian
$ sudo gedit debian/ruleset/misc/version_vars.mk

Non ha importanza con quale editor decidiate di aprire il file: le stringe da sostituire si trovano dalla riga 141 in poi e si presentano come di seguito.

UTS_RELEASE_HEADER=$(call doit,if [ -f include/linux/utsrelease.h ]; then \
       echo include/linux/utsrelease.h; \
              else \
       echo include/linux/version.h; \

Rimuovete la parte evidenziata e sostituitela con ciò che segue: è essenziale effettuare questo passaggio per completare la creazione dei pacchetti che andremo successivamente a installare.

UTS_RELEASE_HEADER=$(call doit,if [ -f include/generated/utsrelease.h ]; then \
       echo include/generated/utsrelease.h; \
              elif [ -f include/linux/utsrelease.h ]; then \
       echo include/linux/utsrelease.h; \
              else \
       echo include/linux/version.h; \

Lasciate invariato il resto e salvate il file. Prima di procedere con la generazione dei pacchetti tenete presente i presupposti già considerati tempi addietro: il prossimo comando è diverso da quello standard perché non possiamo specificare un numero di revisione.

$ sudo fakeroot make-kpkg --initrd kernel_headers kernel_image
$ cd ..
$ sudo dpkg -i *.deb

Di diverso c’è poi soltanto la rimozione del parametro --revision che andrebbe in conflitto con il file creato contestualmente alla cartella /debian — che dobbiamo per forza generare prima. In apertura citavo il fatto che questo workaround rallenta l’aggiornamento del kernel: il problema è che occorre rimuovere intestazioni, pacchetti e moduli manualmente a causa dell’impossibilità di provvedere a un differente numero di versione.

Etichette: , , , · Trackback URL · () · Shortlink: http://wp.me/pgQGN-8O

I commenti sono disabilitati perché l'intervento corrente ha più di 15 giorni.

1,113

Torna all'inizio

↓ Espandi · Collassa ↑