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 🙂
Non male, non male, anche se già dalla prossima versione il 3.0 sarà accessibile a tutti 😛
Che intendi per “accessibile”? Mi sfugge qualcosa?
Grazie, A,
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
Parli per Sid però 😉
su fedora basta fare
yum update kernel
invio
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.
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
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
Scusa ma per sfruttare tutti n.cores disponibili per la compilazione come si fa ??
tipo make blabla -j 4
??
@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