user@blasterhome$ ~/Debian, Guide, How-To, Informatica, Kernel, Linux, Ubuntu/Compilare il kernel “alla Debian”.

| Se ci tieni a me, abbonati al feed

Compilare il kernel “alla Debian”.

aprile 3rd, 2008 Posted in Debian, Guide, How-To, Informatica, Kernel, Linux, Ubuntu

Aggiornamento (9 lug 2008): Aggiunta piccola postilla su come fixare gli headers del kernel. Grazie a telperion.

Aggiornamento (5 apr 2008): Effettivamente, come riportato da scimmia, per chi ricompila è meglio aggiungere make oldconfig.

Aggiornamento (4 apr 2008): Aggiornata la guida con alcuni piccoli consigli di LuNa

Questa è una piccola chicca che mancava nel panorama delle varie guide che propongo; non mi soffermerò a lungo nel descrivere i comandi perchè si suppone che se una persona ricompila il kernel, sia un pochino addentrata nel mondo linux e quindi sappia quello che sta facendo.

Innanzi tutto bisogna scaricare gli ultimi sorgenti del kernel Linux che andremo a compilare, e siccome io voglio fare sempre il super figo di turno che ha l’ultimo kernel disponibile sulla piazza iper aggiornato e mega alleggerito, andremo a scegliere l’ultima relase disponibile. Nella guida utilizzerò sudo anzichè su, perchè nella mia box utilizzo sudo, che ritengo migliore.

Prima però di scaricare, spostare, linkare, compilare e chi più ne ha più ne metta, installiamo le dipendenze necessarie:

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

Scaricheremo così tutto quello che ci serve per la compilazione. Se vogliamo configurare il kernel tramite xconfig o gconfig, abbiamo bisogno rispettivamente delle librerie di sviluppo QT o GTK, a seconda del caso.

A questo punto andiamo a prelevare il kernel Linux dal sito www.kernel.org; nella prima pagina ci viene chiarito tutto il possibile sulle versioni, quindi scelgiamo l’ultima stable (visto che non siamo suicidi, e non vogliamo compilare la release instabile), e copiatone l’indirizzo dalla “F” che vi si trova accanto, spostiamoci in /usr/src e scarichiamo lì i nostri sorgenti:

cd /usr/src

sudo wget http://www.kernel.org/pub/linux/kernel/v2.$numero/linux-$versione_kernel.tar.bz2

Comparirà quindi la famigerata barra d’avanzamento di wget. Una volta finito il download, diamo nel terminale un bel

sudo tar jxvf linux-$versione_kernel.tar.bz2

Ricordiamo che siamo fuori dalla nostra home, quindi mai omettere sudo.

Adesso, per semplicità, linkiamo la directory appena creata ad una immaginaria che riporta dentro quest’ultima, di nome “linux”. In questo modo il percorso dei sorgenti sarà /usr/src/linux-$versione_kernel, anche abbreviabile in /usr/src/linux.

sudo ln -s linux-2.6.19.1 linux

Spostiamoci dunque nella directory per andare poi a compilare.

cd linux

Adesso puliamo i sorgenti da residui di altre compilazioni. Se è la prima volta che compiliamo possiamo anche omettere questo passo:

sudo make-kpkg clean

Una volta completata la pulitura del codice, andiamo dunque a configurare tutto il necessario per far funzionare il nostro kernel in modo leggero e scattante.

sudo make oldconfig

Comando da non dare necessariamente. Personalmente, credo che nella prima compilazione non serva poi a molto; ma andiamo prima a spiegare cosa effettivamente fa: make oldconfig configura il kernel in base ai parametri di quello che si sta usando. È molto utile in caso di molte compilazioni, infatti mettiamo che io dopo questo kernel debba ricompilare per fare il figo con un’eventuale ultima versione ancora più recente. Dando make oldconfig potrò importare la mia vecchia configurazione evitandomi la rogna di disattivare moduli già eliminati in precedenza. Io credo che questo aiuti anche un processo di scrematura crescente, in quanto vedo che ad ogni ricompilazione cresce il livello di consapevolezza di quello che serve o non serve. Con make oldconfig posso far ripartire la scrematura dal punto in cui l’avevo interrotta, con la sola aggiunta delle novità, che potrò disattivare sotto forma di domanda in seguito. Per chi invece compila per la prima volta, l’oldconfig non credo serva a molto; in fondo i kernel precompilati delle varie distribuzioni cercano di adattarsi a qualsiasi utilizzo e macchina, quindi le loro configurazioni sono molto standardizzate e non penso che vi sia stato tolto qualcosa. Anzi, in questi casi solitamente si aggiunge roba esterna.

sudo make menuconfig

Questo comando presenterà un’interfaccia ncurses, ma personalmente preferisco qualcosa di grafico che rende di più l’idea di quello che debbo settare, quello che manca, quello che ho già fatto… quindi utilizzo xconfig. Gconfig credo sia molto immaturo rispetto alla sua controparte QT, quindi consiglio xconfig anche agli gnomer come me. Da notare che entrambe le interfacce grafiche hanno bisogno delle rispettive librerie di sviluppo.

Per configurare il kernel non è necessario avere nessun requisito particolare; bisogna solo conoscere molto bene il proprio hardware, questo se si intende fare una scrematura consistente dei moduli disponibile, e snellire in modo ingente il kernel; se non si possiede un’estrema conoscenza dell’hardware (io stesso non sono un grande conoscitore del mio computer parte per parte), si può comunque tantare una densa scrematura, anche se non andando in profondità, poichè si rischia di eliminare qualche pezzo di kernel fondamentale. Il risultato, eliminando parti vitali del kernel, sarà l’immancabile Kernel Panic.

Il secondo requisito è la pazienza di Giobbe, per due motivi: per quanto riguarda il primo, nel mio caso il kernel ci mette un’ora buona a compilare tutto. Se si sbaglia e si va in Kernel Panic, si deve ricompilare tutto da capo, e quindi significa che abbiamo buttato un’ora per un kernel che non funziona. Il secondo motivo lo si capisce subito guardando la lista dei moduli: in questo caso, per una scrematura di buon livello, si impiega una mezz’ora. La lista è veramente gigante ed include l’ultimo hardware, comanche dei driver vecchi di dieci anni come quelli per le EEPROM.

Abbiamo configurato tutto? Ma proprio tutto, non omettendo nulla? Ok, è ora quindi di passare all’effetiva compilazione alla cui conclusione vi è l’automatico impacchettamento del kernel, in un pacchetto installabile comodamente con dpkg. Facile eh? :D

Puliamo ancora.

sudo make-kpkg clean

A questo punto vi è il comando cruciale, nel quale io, andando a memoria, dimentico sempre qualcosa: questo infatti compila e impacchetta il kernel secondo le opzioni che gli vengono date.

sudo make-kpkg --revision 1.bt --append-to-version -bt --initrd kernel_image kernel_headers

Soffermiamoci dunque a vedere che significa quello che abbiamo appena digitato.

–revision 1.bt assegna un numero di revisione al mio kernel impacchettato, in modo che io abbia tutte le mie versioni belle numerate e catalogate, secondo ordine crescente. Può essere tranquillamente cambiato.

–append-to-version -bt cambierà nome al kernel, infatti dopo la versione ci sarà il mio suffisso -bt. Esempio: 2.6.22-bt. Anche questo può essere cambiato, mettendo qualunque cosa dopo il trattino.

–initrd dice a make-kpkg di creare per il kernel compilato anche una immagine initial ram disk. Questa è fondamentale per chi, come me, dimentica di settare qualcosa come statico invece che come modulare. Senza initrd possono capitare due cose: avete settato quello che c’era da settare come statico, e va tutto liscio, con anche due secondi in meno al boot, o vi viene restituito un Panic grosso come una casa. Ciò è dovuto al fatto della mancata impostazione come statici dei moduli che provvedono al controllo del disco fisso. Se siete guru della compilazione kernel, omettete l’initrd… ma io non posso farne a meno: senza initrd il mio PC non parte :D

kernel_image e kernel_headers compilano e pacchettizzano rispettivamente kernel e headers del kernel. Non c’è molto da descrivere, è così e basta :)

Se volete, potete anche inserire un modules_image, che compilerà eventuali moduli inseriti a parte e non in mainline.

Una volta lanciato il comando, liberate la ram e attendete guardando una puntata de “La Signora in Giallo” o leggendo un fumetto. Ogni tanto guardate cosa sta facendo il terminale, tanto per essere sicuri che non dia qualche tipo di errore; circa un’ora dopo tornate a vedere come siete messi. Se ha finito di fare le sue cose, date questi due comandi:

cd ..

sudo dpkg -i *.deb

Il primo ci sposterà in /usr/src, perchè come sanno bene i pacchettizzatori, i pacchetti deb vengono creati nel livello superiore. Non chiedetemi perchè, visto che non lo so.

Il secondo comando installerà il nostro bel kernel compilato di fresco, e aggiornerà GRUB permettendoci così al riavvio di scegliere il nostro kernel con il nostro suffisso customizzato. :D

Telperion mi ha inoltre segnalato che i kernel_headers prodotti da kernel package ultimamente non vanno. Per fixare possiamo benissimo usare la sua guida.

Se fila tutto liscio fino a GDM (o KDM), possiamo dire di aver compilato un kernel funzionante! Auguri a chi compila per la prima volta!

———————————————————-

P.S.: I comandi sono presi e liberamente interpretati dalla guida del bravo imu, la quale però mancava dell’initrd e di alcune chicche come il sudo :)

  • http://mazzjoe.netsons.org mazzjoe

    Ottima guida, salvata su delicious… solo che la paura del kernel panic me la fa fare sotto.. vorrei tanto compilare il kernel per il mio portatile, permettendo di risparmiare batteria, ma il listone dell’hardware mi fa paura…

  • http://mazzjoe.netsons.org mazzjoe

    Ottima guida, salvata su delicious… solo che la paura del kernel panic me la fa fare sotto.. vorrei tanto compilare il kernel per il mio portatile, permettendo di risparmiare batteria, ma il listone dell’hardware mi fa paura…

  • http://dottorblaster.it/ Bl@ster

    @ mazzjoe: Grazie del complimento. Non ti preoccupare per il kernel panic, in fondo puoi sempre entrare dal vecchio kernel. ;)

  • http://blaster.netsons.org Bl@ster

    @ mazzjoe: Grazie del complimento. Non ti preoccupare per il kernel panic, in fondo puoi sempre entrare dal vecchio kernel. ;)

  • http://opensource2007.netsons.org LuNa

    nota: modules_image che ti serve ? se non hai altri moduli al di fuori del main line che vuoi compilare (cosa che qui non è spiegata) non serve.
    nota2: se non ti serve tutto il kernel scompattato (un casino di files e spazio su disco) appendi un kernel_headers e puoi anche portarti via i sorgenti del kernel, per compilare moduli bastano e avanzano gli headers.

  • http://opensource2007.netsons.org LuNa

    nota: modules_image che ti serve ? se non hai altri moduli al di fuori del main line che vuoi compilare (cosa che qui non è spiegata) non serve.
    nota2: se non ti serve tutto il kernel scompattato (un casino di files e spazio su disco) appendi un kernel_headers e puoi anche portarti via i sorgenti del kernel, per compilare moduli bastano e avanzano gli headers.

  • http://dottorblaster.it/ Bl@ster

    @ LuNa: Grazie delle preziose precisazioni. In effetti quì come compilare i moduli esterni non c’entra molto ;)

  • http://blaster.netsons.org Bl@ster

    @ LuNa: Grazie delle preziose precisazioni. In effetti quì come compilare i moduli esterni non c’entra molto ;)

  • Anonimo

    begin{itemize}
    item su debian, se l’utente è nel gruppo src puoi fare tutto senza usare sudo (a parte l’installazione) e a me sembra cosa buona e giusta,
    item i sorgenti sono pacchettizati anche su debian, quindi si possono apt-gettare senza problemi, e averli patchati dai debian mantainer,
    item può essere utile partire dal config del kernel che si sta usando (che funziona sicuro) dando make oldconfig oppure da un config salvato all’uopo da una nostra altra compilazione precedente; lo si salva con il nome .config nella dir dei sorgenti e poi si da make menuconfig e si parte con l’ulteriore configurazione (io prendo sempre il mio `.config’ precedente e lo importo, dando poi make-kpkg blablabla è lo script stesso a proporre sotto forma di eleganti domande la configurazione della sola parte nuova),
    item varie ed eventuali.
    end{itemize}

  • davide (scimmia)

    \begin{itemize}
    \item su debian, se l’utente è nel gruppo src puoi fare tutto senza usare sudo (a parte l’installazione) e a me sembra cosa buona e giusta,
    \item i sorgenti sono pacchettizati anche su debian, quindi si possono apt-gettare senza problemi, e averli patchati dai debian mantainer,
    \item può essere utile partire dal config del kernel che si sta usando (che funziona sicuro) dando make oldconfig oppure da un config salvato all’uopo da una nostra altra compilazione precedente; lo si salva con il nome .config nella dir dei sorgenti e poi si da make menuconfig e si parte con l’ulteriore configurazione (io prendo sempre il mio `.config’ precedente e lo importo, dando poi make-kpkg blablabla è lo script stesso a proporre sotto forma di eleganti domande la configurazione della sola parte nuova),
    \item varie ed eventuali.
    \end{itemize}

  • http://dottorblaster.it/ Bl@ster

    @ scimmia:
    1) Mettiamo che l’utente non sia nel gruppo src, si deve usare sudo. Non mi piace addare utenti a gruppi sulla mia macchina ;)
    2) Io penso che il kernel vanilla faccia più figo 8) 3) Questo è vero, ma spesso la vecchia configurazione corrisponde ad una scrematura quasi nulla :D

    Grazie del commento :)

  • http://blaster.netsons.org Bl@ster

    @ scimmia:

    1) Mettiamo che l’utente non sia nel gruppo src, si deve usare sudo. Non mi piace addare utenti a gruppi sulla mia macchina ;)

    2) Io penso che il kernel vanilla faccia più figo 8)

    3) Questo è vero, ma spesso la vecchia configurazione corrisponde ad una scrematura quasi nulla :D

    Grazie del commento :)

  • http://opensource2007.netsons.org LuNa

    non l’avevo notato ….
    make oldconfig è indispensabile, o che fai tutte le volte ti risetti da zero tutto ? mi sembra da pazzi.
    di buon occhio scimmia ;)

  • http://opensource2007.netsons.org LuNa

    non l’avevo notato ….
    make oldconfig è indispensabile, o che fai tutte le volte ti risetti da zero tutto ? mi sembra da pazzi.
    di buon occhio scimmia ;)

  • http://dottorblaster.it/ Bl@ster

    Aggiunte alcune precisazioni fatte da scimmia.

  • http://blaster.netsons.org Bl@ster

    Aggiunte alcune precisazioni fatte da scimmia.

  • http://opensource2007.netsons.org LuNa

    uhm, non sono così convinto. make oldconfig si che riprende le impostazioni che usi ora, nel caso di un vanilla nuovo appena estratto dal tarball, io non lo ometterei a maggior ragione. Comunque, mi documento :)

  • http://opensource2007.netsons.org LuNa

    uhm, non sono così convinto. make oldconfig si che riprende le impostazioni che usi ora, nel caso di un vanilla nuovo appena estratto dal tarball, io non lo ometterei a maggior ragione. Comunque, mi documento :)

  • http://dottorblaster.it/ Bl@ster

    Lo ho infatti aggiunto spiegando quello che fa. Chi lo vuole usare lo usi ;)

  • http://blaster.netsons.org Bl@ster

    Lo ho infatti aggiunto spiegando quello che fa. Chi lo vuole usare lo usi ;)

  • http://www.osrevolution.netsons.org imu

    $ make oldconfig …
    siete troppo attaccati al passato. Liberate la mente dal 2.6X è stata introdotta la feature di prendere le impostazioni del kernel corrente da “/boot/config-$(uname -r)”. Diciamo che serve o dovrebbe servire nel caso abbiate bisogno di usare o provare settaggi differenti dal corrente kernel, anche se io userei direttamente la funziona “Load an Alternate Configuration File”. Molto meno impegnativa e più intuitiva.

  • http://www.osrevolution.netsons.org imu

    $ make oldconfig …
    siete troppo attaccati al passato. Liberate la mente dal 2.6X è stata introdotta la feature di prendere le impostazioni del kernel corrente da “/boot/config-$(uname -r)”. Diciamo che serve o dovrebbe servire nel caso abbiate bisogno di usare o provare settaggi differenti dal corrente kernel, anche se io userei direttamente la funziona “Load an Alternate Configuration File”. Molto meno impegnativa e più intuitiva.

  • http://paso.wordpress.com/ Paso

    Ho una domanda che non mi è chiara, non mi intendo molto di kernel…
    Mettiamo che io seguo la tua guida, lo compilo e lo installo. Ma se per caso sbaglio qualche parametro durante la configurazione al peggio cosa mi può succedere? se ho capito bene, al massimo non riesco ad avviare linux con il kernel appena compilato, quindi mi basta riavviare ed usare quello precedentemente installato e sono a posto? giusto?
    Sai, nel caso mi venisse in mente di compilarlo non vorrei mai fare danni :)

  • http://paso.wordpress.com/ Paso

    Ho una domanda che non mi è chiara, non mi intendo molto di kernel…
    Mettiamo che io seguo la tua guida, lo compilo e lo installo. Ma se per caso sbaglio qualche parametro durante la configurazione al peggio cosa mi può succedere? se ho capito bene, al massimo non riesco ad avviare linux con il kernel appena compilato, quindi mi basta riavviare ed usare quello precedentemente installato e sono a posto? giusto?
    Sai, nel caso mi venisse in mente di compilarlo non vorrei mai fare danni :)

  • http://dottorblaster.it/ Bl@ster

    @ Paso: È esattamente come hai detto tu. Hai sempre la possibilità di bootare dal vecchio kernel per ricompilare ;)

  • http://blaster.netsons.org Bl@ster

    @ Paso: È esattamente come hai detto tu. Hai sempre la possibilità di bootare dal vecchio kernel per ricompilare ;)

  • pol

    ascolta, ottima guida ma….quando avvio il kernel:
     
    1) l’audio non va, mi dice impossibile trovare plugin gstreamer ecc ecc
    2) non mi trova la scheda video nvidai 7800 (non c’è in DRIVER HARDWARE)

  • pol

    ascolta, ottima guida ma….quando avvio il kernel:
     
    1) l’audio non va, mi dice impossibile trovare plugin gstreamer ecc ecc
    2) non mi trova la scheda video nvidai 7800 (non c’è in DRIVER HARDWARE)

  • http://dottorblaster.it/ Bl@ster

    Il problema è tuo, e non del kernel. Sia per l’audio che per il video, i driver che ti servono sono specifici per il kernel e vengono distribuiti in moduli a parte; nella guida di imu c’è scritto come trattare per i driver nvidia. Per l’audio penso ti basti ricompilare alsa con l’opzione della tua scheda audio. Se passi nel canale saremo felici di darti una mano. ;)

  • http://blaster.netsons.org Bl@ster

    Il problema è tuo, e non del kernel. Sia per l’audio che per il video, i driver che ti servono sono specifici per il kernel e vengono distribuiti in moduli a parte; nella guida di imu c’è scritto come trattare per i driver nvidia. Per l’audio penso ti basti ricompilare alsa con l’opzione della tua scheda audio. Se passi nel canale saremo felici di darti una mano.

    ;)

  • pol

    canale?!?!?! ehm cioè?
     
    se vuoi ho msn……..

  • pol

    canale?!?!?! ehm cioè?
     
    se vuoi ho msn……..

  • http://dottorblaster.it/ Bl@ster

    Ok, aggiungimi in msn, il contatto lo trovi nell’about.

  • http://blaster.netsons.org Bl@ster

    Ok, aggiungimi in msn, il contatto lo trovi nell’about.

  • pol

    ok!
    ora sto ricompilando…ho aggiunto nei modules alsa e nvidia :D
     
    sperem!
     
    studio e poi ti aggiungo!!
     
    io sono garrett ECC ECC in msn ;)

  • pol

    ok!
    ora sto ricompilando…ho aggiunto nei modules alsa e nvidia :D
     
    sperem!
     
    studio e poi ti aggiungo!!
     
    io sono garrett ECC ECC in msn ;)

  • telperion

    Attenzione che come ripetutamente segnalato nel mio bog dal kernel-2.6.24
    make-kpkg
    produce pacchetti kernel_headers non validi, che si installano non danno errori, ma non vi consentono di compilare nulla.

    Bisogna pertanto lasciare in /usr/src tutti i sorgenti del kernel compilati cosi come sono.

  • telperion

    Attenzione che come ripetutamente segnalato nel mio bog dal kernel-2.6.24
    make-kpkg
    produce pacchetti kernel_headers non validi, che si installano non danno errori, ma non vi consentono di compilare nulla.

    Bisogna pertanto lasciare in /usr/src tutti i sorgenti del kernel compilati cosi come sono.

  • http://dottorblaster.it/ Bl@ster

    @telperion: Speriamo si risolva presto.

  • http://blaster.netsons.org Bl@ster

    @telperion: Speriamo si risolva presto.

  • telperion
  • telperion
  • http://dottorblaster.it/ Bl@ster

    @telperion: aggiunto link alla guida. Grazie.

  • http://blaster.netsons.org Bl@ster

    @telperion: aggiunto link alla guida. Grazie.

  • http://blaster.netsons.org/2008/11/laptop-nuovo-vita-nuova/ Laptop nuovo, vita nuova! | Bl@ster’s Home

    [...] kernel 2.6.27.4 invece è completamente funzionante. Per chi volesse compilarlo, rimando alla guida ancora validissima scritta da [...]

  • http://www.commenti-tecnologia.com/informatica/laptop-nuovo-vita-nuova/ Laptop nuovo, vita nuova! · Commenta la tecnologia, la telefonia, i software

    [...] kernel 2.6.27.4 invece è completamente funzionante. Per chi volesse compilarlo, rimando alla guida ancora validissima scritta da [...]

  • LuCa

    Saluti a tutti.
    Chiedo a voi che la sapete lunga… esiste da qualche parte una documentazione ufficiale per la configurazione del kernel?
    Oppure bisogna accontentarsi delle poche righe di spiegazione disponibili durante la configurazione?

    Pensavo di trovare quello che cercavo in Kernel.org o siti simili, ma niente…
    :(

    LuCa

  • LuCa

    Saluti a tutti.
    Chiedo a voi che la sapete lunga… esiste da qualche parte una documentazione ufficiale per la configurazione del kernel?
    Oppure bisogna accontentarsi delle poche righe di spiegazione disponibili durante la configurazione?

    Pensavo di trovare quello che cercavo in Kernel.org o siti simili, ma niente…
    :(

    LuCa

  • http://dottorblaster.it/ Bl@ster

    @LuCa: Non ti do nulla di certo, ma dato che sono solito spulciarmi gli stringatissimi changelog forniti da kernel.org, non dovrebbe esistere una documentazione ufficiale sui moduli; magari sul wiki di kernelnewbies.org c’è quello che ti serve.

  • http://blaster.netsons.org/ Bl@ster

    @LuCa: Non ti do nulla di certo, ma dato che sono solito spulciarmi gli stringatissimi changelog forniti da kernel.org, non dovrebbe esistere una documentazione ufficiale sui moduli; magari sul wiki di kernelnewbies.org c’è quello che ti serve.

  • http://nicolagreco.com Nicola

    Ti penso ogni volta che compilo :D

  • http://nicolagreco.com Nicola

    Ti penso ogni volta che compilo :D

  • http://dottorblaster.it/ Bl@ster

    @Nicola: Beh, grazie :D

  • http://www.dottorblaster.it Bl@ster

    @Nicola: Beh, grazie :D

  • Pietropaolo

    Ma questo articolo fa cagare! Sei solo un pezzo de merda, blaster. Smettila di copiare cazzate e spacciarle per tue. Soprattutto perche, voi de linox siete solo dei pezzenti che non se possono permette' de compra' i computer decenti…risparmiate un po' de soldi e andateve a fa un sistema vista o windows sette invece de spara' cazzate che confondono la gente….che poi e' pure privo de logica, come fa una cosa gratuita, fatta senza guadagni ad essere meglio di una cosa seria, fatta da una societa' vera?

    Fottetevi tutti. Windows Rulez. Owned!

blog comments powered by Disqus