salta alla navigazione

Kernel Debian Way –revision 2.imu 13 dicembre 2006 - 2:12

Inviato da Antonio De Luci (imu) in : Debian, Kernel, Linux, O.S. Revolution, Only Nerd , trackback

kernel debian way

Questa vuole essere una seconda revisione ( –revision 2.imu) di una mia semplice guida di qualche anno fa che potete ancora trovare sia sul mio sito che su pollycoke .

Perchè compilare il kernel alla DebianWay ?

Prima di iniziare a lanciare comandi incomprensibili installa questo, fai così, spostati lì, estrai qui, credo sia meglio spiegare perchè su una distro basata su debian e debian stessa, sia meglio se necessario ricompilare alla debianway invece che con il metodo tradizionale, calcolando anticipatamente che oggigiorno i kernel delle distro sono sempre più completi e quasi sempre usando nel mio caso una Debian SID si ha le ultime versioni già pacchettizzate nei repository ufficiali.

Casi per i quali bisogna ricompilare il kernel:

Se rientrate in uno di questi casi allora continuate a seguire la guida, naturalmente questa non sostituisce un ottimo Kernel-howto reperibile in rete oppure un bel ” man make-kpkg ” dove spiega per filo e per segno le eventuali opzioni da usare, che comunque vi invito a cercare il primo e leggervi il secondo.

Cosa ci serve per procedere ?

Installazione Tools :

# apt-get install build-essential kernel-package libncurses-dev linux-kernel-headers

Dopo l’installazione di questi pacchetti essenziali, io uso sistemare alcune informazioni che comunque è possibile omettere e che non implicano il corretto funzionamento della guida ma che secondo me danno un tocco di classe al tutto e personalizzano la creazione dell’immagine kernel creata da noi.

I file da personalizzare e controllare sono due :

  1. /etc/kernel-img.conf
  2. /etc/kernel-pkg.conf

/etc/kernel-img.conf serve per l’installazioni o rimozioni delle immagini kernel create, dentro il file ci sono una lista di opzioni che nell’installazione o rimozione vengono controllate ed eseguite, e di solito non dovreste modificare nulla tranne in casi particolari per tutte le opzioni vi rimando a ” man kernel-img.conf, adesso elenchiamo quelle di default e le commentiamo :
do_symlinks = yes
Di Default lo script post installazione dell’immagine kernel creata controlla nella radice del filesystem ( chiamata root e indicata con ” / ” assolutamente da non confondere son la Home di root ” /root ” ) creando o aggiornando i due link simbolici dei kernel /vmlinuz & /vmlinuz.old , linkando il kernel compilato a /vmlinuz e spostando il link del precedente su /vmlinuz.old .
relative_links = yes
Controlla semplicemente che i links ai kernel siano relativi o assoluti e se relativi che siano funzionanti esempio:
link relativo /vmlinuz -> boot/vmlinuz-2.6.19
link assoluto /vmlinuz -> /boot/vmlinuz-2.6.19
do_bootloader = no
Settato su no previene l’avvio tramite lo script postinst del boot loader
warn_initrd = yes
Settato su yes avvisa nel caso usando un kernel con immagine initrd il boot loader non sia settato a dovere con l’inclusione del link a /initrd.img o /initrd.img.old per i kernel che la usano ( si solito tutti i kernel di default delle distro usano initrd/initramfs)
link_in_boot = no
Settato su NO non crea i link del kernel in /boot anche perchè si farebbe troppa confusione.
postinst_hook = update-grub
Questa opzione fa si che si aggiorni il boot loader solo dopo aver installato il kernel e creato i link almeno nel nostro caso, ma potrebbe anche eseguire un comando.
postrm_hook = update-grub
Questa opzione serve a eseguire un comando dopo che l’immagine kernel è stata rimossa, nel nostro caso aggiornare il boot loader

/etc/kernel-pkg.conf serve alla personalizzazione ed identificazione dell’immagine kernel creata, di solito si modificano le opzioni di default se si creano pacchetti deb per i repository ufficiali, oppure è anche possibile, inserire molte delle opzioni del file precedente come al solito vi rimando a ” man kernel-pkg.conf, adesso elenchiamo quelle di default e le commentiamo :

maintainer := imu Kernel Package Maintainer

email := imu@altervista.org

Serve a indicare il maintener e la sua email ed appena compilato il kernel ed installato lo potete visualizzare tramite ” apt-cache show nome_vostro_kernel ”

priority := Low

Serve a settare la priorità del kernel lasciatela come la trovate questa voce oppure leggetevi un altra guida sulle priorità dei pacchetti debian .
Dopo aver concluso queste personalizzazioni, passiamo all’installazione del kernel per semplicità e perchè in realtime sto scrivendo questa guida e mi accingo a compilare ultimo kernel vanilla stable 2.6.19.1 :) , principalmente faro riferimento ad esso, inserendo comunque le opzioni necessarie per l’installazione dei sorgenti Debian .

Installazione Kernel Vanilla

Posizionatevi sempre nella dir /usr/src del vostro sistema, quello sarà il punto di partenza.
Scarichiamo il kernel
# wget -c http://www.kernel.org/..../ultimo_stable
Scompattiamolo
# tar jxvf linux-2.6.19.1.tar.bz2
Creamo il link simbolico al nostro kernel
# ln -s linux-2.6.19.1 linux

Installazione Kernel Debian

Cerchiamo l’ultima versione disponibile
# apt-cache search linux-source
dopo aver scelto dall’elenco, installiamolo
# apt-get install linux-source-ULTIMO_REPERIBILE
Scompattiamolo
# tar jxvf linux-source-2.6.18.tar.bz2
Creamo il link simbolico al nostro kernel
# ln -s linux-source-2.6.18 linux

Continuiamo per entrambi

A questo punto il kernel è pronto ed aspetta voi, ma in questa guida avevo precedentemente accennato alla creazione tramite il DebianWay di moduli esterni al kernel e che come esempio avrei preso il modulo nvidia proprietario, bene questo è il momento di installarlo, perchè dopo questo passaggio inizia la compilazione.
Dovete sapere però come funziona, adesso cerchiamo nei nostri repository ufficiali ( o non ) il sorgente sempre dell’ultima versione del modulo o per dirla facile driver, tranne per alcuni casi particolari dove è richiesta una versione specifica , installandolo avrete un tarball in /usr/src composto da nome_modulo-kernel-source nel nostro caso nvidia-kernel-source o se usate i legacy nvidia-kernel-legacy-source, il quale andrà scompattatato e si andrà a posizionare nella dir /usr/src/modules che se non esiste verrà creata automaticamente.
Perchè avviene questo e invece non viene creata una dir con il nome_modulo, semplicemente perchè ne esistono un bel po’. Quando la compilazione del kernel sarà finita, lo script si occuperà di controllare se esiste /usr/src/modules e se la verifica risulta positiva, di compilare *tutto* quello che trova al suo interno, nel nostro caso troverà Nvidia.
Spero di essermi espresso chiaramente, intanto andiamo avanti e continuiamo l’avventura.

Da qui o usiamo kernel Vanilla o Debian dobbiamo fare gli stessi passi

installiamo i sorgenti ( chiusi ) nvidia
# apt-get install nvidia-kernel-source
Scompattiamoli
# tar zxvf nvidia-kernel-source.tar.gz
Entriamo in linux il link precedentemente creato
# cd linux
lanciamo il primo comando della debianway in questo caso inutile perchè tutti i sorgenti sono vergini, ma obbligatorio nel caso si ricompila per l’ennessima volta.
# sudo make-kpkg clean
Ora configuriamo il nostro kernel, le possibilità di scelta sono menuconfig, xconfig, gconfig, io userò la prima della lista basata su ncurses, ma se qualcuno vuole usare le versioni grafiche basate rispettivamente su QT e GTK si ricordi di installare i pacchetti necessari che io non ho mensionato :)

Consigli per una corretta configurazione del kernel :

  1. In primis conoscenza del proprio hardware in tutto e per tutto
  2. Conoscenza del proprio sistema Linux
  3. Discreta conoscenza della lingua inglese, per settare le opzioni ed aiutarsi con l’help

In caso contrario LASCIATE PERDERE ….

Opzioni assolutamente essenziali da settare statiticamente nel kernel, per non andare incontro ad un kernel panic:

  1. Supporto per i controller ata,sata dischi in generale
  2. Filesystem in uso ( /ext2/ext3/reiserfs/xfs/ etc. etc.)

Per le opzioni da settare modularmente:

  1. Tutto quello che volete ( schede di rete,schede audio,supporto usb, etc. etc.)

Quello che non dovete settare per niente:

  1. TUTTO QUELLO CHE NON VI SERVE
  2. Nel nostro caso che compiliamo Nvidia dal closed source non sognatevi nemmeno di settare le opzioni:
    nVidia Framebuffer Support
    nVidia Riva support
    Altrimenti al controllo dell’avvio della compilazione lo script troverà le suddette opzioni e non vi compilerà nvidia.

Ora proseguiamo e diamo :
# make menuconfig
Una volta configurato a dovere salviamo ed usciamo, e come da manuale debian ripetiamo il comando:
# make-kpkg clean
Ora siamo pronti a lanciare la compilazione e pacchettizzazione del nostro kernel + nvidia , a make-kpkg passerò dei comandi e spiegherò a cosa servono e come è possibile applicarli a nostro favore, per la lista completa ” man make-kpkg”.
# make-kpkg --revision 1.imu --append-to-version -p4 kernel_image modules_image
Ora parte la compilazione e ulteriore pacchettizzazione quindi rilassatevi e predete nota che spiego le opzioni :

--revision 1.imu
Come dice la parola stessa sto assegnando al mio kernel un identificativo di revisione, questo serve a sapere quante volte abbiamo rifatto quel kernel magari per perfezionarlo, o per includere delle patch oppure per aggiungere qualcosa che si siamo dimenticati.
Questa opzione è molto pericolosa e dovete stare attenti a non confondervi, perchè in caso di reinstallazione di un nuovo kernel anche se identificato con una revisione maggiore, il precedente verrà sovrascritto.
Ma questa opzione potrebbe tornarci molto utile e vi spiego perchè, se per caso, nella precedente installazione avete dimenticato per distrazione il supporto per un modulo ( driver), oppure volete affinare il kernel in uso per perfezionarlo, o proprio per esagerazione vorreste levare qualcosa che avete scoperto non vi serve a nulla, questa opzione è quella più adatta ai vostri scopi, proprio perchè sovrascrive tutto, ed’effettivamente non serve nemmeno riavviare il sistema.Naturalmente verremo avvertiti durante l’installazione della sovrascrizione e vi verrà chiesto di interrompere l’operazione, ma se l’avete usata questa opzione lo avete fatto proprio per questo :D , io infatti una seconda revisione la faccio solo per sovrascrivere la prima, con l’accortezza di lanciare appena reinstallato ” # depmod -ea && ldconfig ” .
Faccio un esempio per chiarirmi, avevo creato un immagine kernel, appena avviato il sistema e fatto il login grafico, mi sono accorto che non riusucivo a navigare, controllando nel terminale, mi sono accorto che avevo dimenticato di aggiungere il modulo della mia scheda di rete, allora ho rieseguito la procedura standard del Debianway,rifatto la configurazione aggiungendo il modulo, ricompilato con una revisione maggiore lo stesso kernel, sovrascritto il precedente, lanciato il comando di prima e riconfigurato la rete . Sono corso a leggere le news :D
P.S. fatene buon uso
Dimenticavo se omesso di default è 10.00.Custom.
--append-to-version -p4
Questa opzione la ci puo’ servire in due casi, il primo è semplicemente aggiungere un riconoscimento al kernel creato infatti il nostro kernel ora si chiamera 2.6.19.1-p4 ( pentium 4), ed effettivamente serve per differenziare i vari kernel, il secondo proprio per questa sua caratteristica può servire a non sovrascrivere un kernel precedente della stessa versione.
kernel_image
Serve per compilare e pachettizzare l’immagine del kernel.
modules_image
Serve a creare e pacchettizare tutti i moduli che si trovano in /usr/src/modules che anche se pacchettizzati separatamente dal kernel, dipendono e vengono inclusi modularmente nel kernel stesso una volta installati.

Se avete finito di creare il vostro kernel e vi è stato restituito il prompt del terminale, possiamo andare avanti, ricordatevi che siete dentro /usr/src/linux , quindi non provate a cercare nessun kernel nella directory corrente perchè, tutti i pacchetti debian vengono automaticamente posizionati nella dir superiore dal punto in cui vengono creati, quindi cercatelo in /usr/src ed installatelo in questo modo:
# dpkg -i linux-image-2.6.19.1-p4-1.imu_i386.deb
Aspettate che finisca fino all’aggiornamento del boot loader e installate anche nvidia così:
# dpkg -i nvidia-kernel-2.6.19.1-p4-1.imu_i386.deb

N.B. nvidia potrebbe darvi errore di installazione, se nel sistema non è precedentemente installato nvidia-glx che a sua volta dipende da uno dei qualsiasi nvidia-kernel-xxx, quindi nel caso basta solo installarlo .

Sembra strano ma abbiamo finito il viaggio negli abissi del DebianWay, ora non resta che riavviare il sistema e godersi il proprio kernel.

Commenti»

1. Bl@ster's Home » Compilare il kernel “alla Debian”. - 3 aprile 2008- 18:03

[...] I comandi sono presi e liberamente interpretati dalla guida del bravo imu, la quale però mancava dell’initrd e di alcune chicche come il [...]

Usa WordPress WordPress 2.5
2. Mario - 6 giugno 2009- 22:48

ma lo devo fare per forza su debian

Usa Safari Safari 530.5 con Mac OS Mac OS X