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.