Retour

Compiler et installer simplement un nouveau kernel



Comment compiler et installer simplement sur une Ubuntu Edgy un nouveau kernel récupéré sur www.kernel.org/pub/linux/kernel/v2.6/.

Je précise que ceci n'est à faire que si vous en avez vraiment besoin, ou dans un but d'expérience. L'application de patchs ou la personnalisation du kernel ne seront pas abordées. À noter que la procédure est la même, sauf le lien dash, dans une Debian Etch.

Aussi, les linux-image-2.6.18.xxxxxx.Custom_i386.deb et linux-headers-2.6.18.xxxxxxx.Custom_i386.deb réalisés pourront être distribués sur d'autres machines.

On vérifie d'abord avec apt-cache policy que les paquets suivants sont installés :

apt-cache policy fakeroot kernel-package bzip2 libncurses5-dev 

Si ce n'est pas le cas, on les installe :

sudo aptitude install fakeroot kernel-package bzip2 libncurses5-dev

aptitude installera par la même occasion les autres paquets nécessaires.  Maintenant  on peut commencer. Pour simplifier les choses on va passer "root" par :

:~$ sudo -s 

/bin/sh est un lien vers dash, et certains ont rapporté avoir eu des problèmes lors des compilations. Dans le doute on va modifier cela (optionnel) et faire un lien de /bin/sh vers /bin/bash. On pourra revenir à l'état initial ensuite :

:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2006-10-25 08:52 /bin/sh -> dash
:~# mv /bin/sh /bin/sh_bad
:~# ln -s /bin/bash /bin/sh

On va dans /usr/src/ et on télécharge le kernel 2.6.18.2, ou un autre de votre choix :

:~# cd /usr/src
:/usr/src# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2

Lorsque le téléchargement sera terminé, s'affichera (taille du téléchargement variable) :

« linux-2.6.18.2.tar.bz2 » sauvegardé [41863580/41863580]

Si vous avez un lien linux vers un ancien kernel dans /usr/src/ ne pas oublier de le supprimer ( rm linux )avant de poursuivre.
On décompresse les sources et on crée un lien linux vers le nouveau kernel, lien que l'on n'oubliera pas de supprimer à son tour lorsque tout sera terminé :

:/usr/src# tar xjf linux-2.6.18.2.tar.bz2
:/usr/src# ln -s linux-2.6.18.2 linux

On descend dans le répertoire du nouveau kernel et on y copie la configuration du kernel utilisé actuellement, qui servira de base à la configuration du nouveau :

:/usr/src# cd linux
:/usr/src/linux# cp /boot/config-`uname -r` ./.config

(Si on avait voulu appliquer des patchs, c'est à ce moment qu'il aurait fallu le faire avec patch -p1 (voir le man) ).

On continue. On va utiliser l'interface menuconfig pour séléctionner ce fichier par le menu : " Load an Alternate Configuration File " :

:/usr/src/linux# make menuconfig

Voir copies d'écrans : menuconfig 1 menuconfig 2 menuconfig 3

choisir ensuite exit sur le premier écran puis Save. Doit s'afficher dans votre terminal :

# configuration written to .config
#

*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.

On peut passer maintenant à la construction du nouveau kernel :

:/usr/src/linux#  make-kpkg clean

la commande va construire le paquets du noyau à partir des sources, et clean  "efface tous les fichiers créés dans le répertoire des sources du noyau par la cible build, et lance un make distclean." Voir le man.
 
On va lancer maintenant fakeroot qui simule les privilèges du superutilisateur, avec construction de l'initrd.
Noter aussi que pour reconnaitre votre version du kernel, vous pouvez y ajouter après --initrd --append-to-version=- une notation de votre choix, avec des lettres ou des chiffres, mais sans caractères comme _. Dans cet exemple j'ai choisi de mettre cep11a :

:/usr/src/linux# fakeroot make-kpkg --initrd --append-to-version=-cep11a kernel_image kernel_headers

Au bout de longues minutes (heures suivant la puissance de la machine) vous pourrez enfin lire quelque chose comme :

make[1]: quittant le répertoire « /usr/src/linux-2.6.18.2 »
====== making target stamp-kernel-headers [new prereqs: linux-headers-2.6.18.2-cep11a linux-headers-2.6.18.2-cep11a]======
This is kernel package version 10.049ubuntu5.
echo done > stamp-kernel-headers
====== making target kernel_headers [new prereqs: stamp-configure stamp-prepare stamp-kernel-headers]======
This is kernel package version 10.049ubuntu5.

On liste ce qui a été construit :

:/usr/src/linux# cd ..
root@epi:/usr/src# ls -l
total 67020
lrwxrwxrwx  1 root src        14 2006-11-07 10:11 linux -> linux-2.6.18.2
drwxrwxrwx 21 root root     4096 2006-11-07 12:50 linux-2.6.18.2
-rw-r--r--  1 root src  41855741 2006-11-04 02:43 linux-2.6.18.2.tar.bz2
drwxr-xr-x 19 root root     4096 2006-10-25 08:51 linux-headers-2.6.17-10
drwxr-xr-x  4 root root     4096 2006-10-25 08:52 linux-headers-2.6.17-10-generic
-rw-r--r--  1 root src   7624950 2006-11-07 12:50 linux-headers-2.6.18.2-cep11a_2.6.18.2-cep11a-10.00.Custom_i386.deb
-rw-r--r--  1 root src  19046908 2006-11-07 12:43 linux-image-2.6.18.2-cep11a_2.6.18.2-cep11a-10.00.Custom_i386.deb

On voit que les nouveaux linux-headers et linux-image Custom sont bien là. On va pouvoir les installer avec dpkg -i :

:/usr/src# dpkg -i linux-image-2.6.18.2-cep11a_2.6.18.2-cep11a-10.00.Custom_i386.deb
:/usr/src# dpkg -i linux-headers-2.6.18.2-cep11a_2.6.18.2-cep11a-10.00.Custom_i386.deb

En même temps Grub a été mis à jour. On peut le vérifier :

:/usr/src# cat /boot/grub/menu.lst
. . .

title           Ubuntu, kernel 2.6.18.2-cep11a
root            (hd1,0)
kernel          /vmlinuz-2.6.18.2-cep11a root=UUID=455bdd5d-3e11-4dbd-b1a2-faca236ec0b6 ro vga=791 spalsh
initrd          /initrd.img-2.6.18.2-cep11a
savedefault
boot

title           Ubuntu, kernel 2.6.18.2-cep11a (recovery mode)
root            (hd1,0)
kernel          /vmlinuz-2.6.18.2-cep11a root=UUID=455bdd5d-3e11-4dbd-b1a2-faca236ec0b6 ro single
initrd          /initrd.img-2.6.18.2-cep11a
boot

Il ne reste plus qu'à rebooter pour vérifier que tout est ok. S'il y avait un problème, on  pourrait toujours démarrer sur l'ancien noyau en le séléctionnant dans le menu de grub. Après reboot : 

:~$ uname -r  ; cat /proc/version
2.6.18.2-cep11a
Linux version 2.6.18.2-cep11a (root@epi) (gcc version 4.1.2 20060928(prerelease) (Ubuntu 4.1.1-13ubuntu5)) #1 Tue Nov 6 10:32:03 CET 2006

Comme on peut le constater, tout est bon. On pourrait aussi voir s'il n'y a pas d'anomalies en utilisant la commande dmesg dans un terminal.




Retour



Valid HTML 4.01 Transitional        Valid CSS!