Linux 3.0, compilare il kernel su Ubuntu

L’installazione di un kernel nuovo può avere diversi motivi, sia per verificare le prestazioni e la funzionalità sul proprio pc o server, sia per uniformarsi a quello che sarà entro breve l’andamento delle distribuzioni.

Di solito si aspetta che la propria distro pubblichi nei repositories i pacchetti aggiornati, oppure si aggiunge un repo ppa che abbia compilato e reso pubblici i pacchetti per le diverse architetture.

Di guide se ne incontrano molte, le più classiche sono quelle (a volte non aggiornate) che adottano la ‘Debian/Ubuntu way‘, il modo cioè di compilare e avere i pacchetti .deb per installarli e ridistribuirli.

In questo post vorrei solo riportare i passi seguiti per la compilazione su Ubuntu 11.04 Natty, in particolare su architettura amd64

È chiaro che il processo è abbastanza lungo (circa 2 ore), e il pc/server che useremo deve essere aggiornato e avere i pacchetti adatti al build.

Per installare il necessario useremo i meta-pacchetti e linkiamo /bin/bash a /bin/sh

$ sudo apt-get update && sudo apt-get upgrade
$ sudo ln -sf /bin/bash /bin/sh

$ sudo apt-get install build-essential
$ sudo apt-get build-dep linux
$ sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Scarichiamo quindi i sorgenti del kernel e scompattiamoli in /usr/src

$ sudo su -

DA QUI IN POI SIAMO l’utente ‘root’

# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.bz2
# tar jxvf linux-3.0.tar.bz2
# ln -s linux-3.0 linux

Siamo pronti quindi a lanciare la compilazione alla “Ubuntu Way”:

Qui useremo le impostazioni del kernel in uso (.config) e le passeremo al nuovo:

# cp /boot/config-`uname -r` ./.config
# make menuconfig

–> “Load an Alternate Configuration File”

salviamo la configurazione e compiliamo aggiungendo una stringa che ci permetterà di identificare la nostra versione, nel mio caso ‘adoldo-custom’ 🙂

# make-kpkg clean
# fakeroot make-kpkg --initrd --append-to-version=adoldo-custom kernel_image kernel_headers

A fine processo avremo nella directory precedente, /usr/src, i due pacchetti binari:

linux-headers-3.0.0-adoldo-custom_3.0.0-adoldo-custom-10.00.Custom_amd64.deb (6,8MB)
linux-image-3.0.0-adoldo-custom_3.0.0-adoldo-custom-10.00.Custom_amd64.deb (40MB)

che installeremo con:

# dpkg -i linux*custom*deb

Al riavvio verifichiamo la “nostra” versione

$ uname -a
Linux kjbx-l1 3.0.0-adoldo-custom #1 SMP Tue Aug 2 11:10:55 CEST 2011 x86_64 x86_64 x86_64 GNU/Linux

$ cat /proc/version
Linux version 3.0.0-adoldo-custom (root@kjbx-l1) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) ) #1 SMP Tue Aug 2 11:10:55 CEST 2011

Ho uploadato su UbuntuOne i due pacchetti nel caso voleste provarli.

linux-headers-3.0.0-adoldo-custom_3.0.0-adoldo-custom-10.00.Custom_amd64.deb
linux-image-3.0.0-adoldo-custom_3.0.0-adoldo-custom-10.00.Custom_amd64.deb

Enjoy 🙂

 

← Previous post

Next post →

10 Comments

  1. Non male, non male, anche se già dalla prossima versione il 3.0 sarà accessibile a tutti 😛

  2. Che intendi per “accessibile”? Mi sfugge qualcosa?
    Grazie, A,

  3. Parlando de Debian, a me sembra più che accessibile:
    dbradders@Casa:~$ uname -a
    Linux Casa 3.0.0-1-686-pae #1 SMP Sun Jul 24 14:27:32 UTC 2011 i686 GNU/Linux

  4. Parli per Sid però 😉

  5. su fedora basta fare

    yum update kernel

    invio

  6. anche su ubuntu/debian ‘apt-get’ o ‘aptitude’ lo fanno, si tratta solo di avere i repo giusti.
    In questo caso si parla però di compilazione e creazione del pacchetto deb, cosi come per fedora/centos sarebbe un rpmbuild, insomma molti modi per arrivare al centro del “nocciolo” 😉
    Non credo poi che sia una priorità assoluta avere il 3.0 o meno, ma questo è solo il mio punto di vista.

  7. Ciao, sono alle prime armi e ho 2 errori seguendo la tua guida:
    1)quando do make menuconfig
    ho:
    make: *** Nessuna regola per generare l’obiettivo “menuconfig”. Arresto.
    Allora ho fatto:
    cd linux-3.0/ (e dopo ho provato anche in cd linux)
    e di nuovo make menuconfig
    tutto ok, ma se quando faccio “Load an Alternate Configuration File” mi appare la finestra con .config ma mi dice che il file non esiste.

    Grazie, ciao
    Fabio

  8. Ciao,
    se hai scompattato i sorgenti in /usr/src devi posizionarti li, togliere i vecchi riferimenti del link ‘linux’ e ricrearlo:
    ln -s linux-3.0 linux
    Il comando per copiare il file di configurazione è questo, in pratica puoi prendere dalla dir /boot il file config-xx-xx del tuo kernel e copiarlo come .config in /usr/src/linux/
    cp /boot/config-`uname -r` ./.config
    A quel punto da /usr/src/linux puoi lanciare il comando “make menuconfig”, caricare il file .config e salvare.

    PS: è uscito il kernel 3.0.1:

    ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.0.1.tar.bz2

    ciao,
    Antonio

  9. Scusa ma per sfruttare tutti n.cores disponibili per la compilazione come si fa ??
    tipo make blabla -j 4
    ??

  10. antonio.doldo

    @gianluca
    Si, certamente.
    La compilazione da sorgenti, compresa quella del kernel, può avvenire in modalità multithread. Se ti interessa, qui ci sono alcuni links sull’argomento:
    http://www.xappsoftware.com/wordpress/2012/09/06/how-to-boost-compiling-process-parallel-compiling/
    http://wiki.linuxquestions.org/wiki/Compile_a_kernel
    http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/ch05s04.html

    Ciao,
    Antonio

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.