{{tag>Noyau Debian}}
Article en cours de restructuration !
====== Compilation d'un noyau à la sauce Debian ======
**Article écrit par Arnaud Fontaine, Cédric Lignier et Patrice Vetsel, wikisé et relu par Arnaud Fontaine \\
Remis à jour le 29/07/2008 pour une //Lenny// par LeDub**
Ce document est très largement inspiré de [[http://newbiedoc.sourceforge.net/system/kernel-pkg.html.en|celui-ci]] ainsi que celui de [[http://nicolaxx.free.fr/docs/noyau/noyau.htm|Nicolas Boos]]. Avant de commencer la lecture de cet article, je vous conseille fortement de lire les documentations portant sur le noyau et en particulier le [[http://www.traduc.org/|Kernel-HOWTO]] que vous pourrez trouver sur [[http://www.traduc.org/|Traduc.org]]. N'oubliez pas non plus les pages de manuels pour obtenir de plus amples informations sur un paquet précis.
Vous vous demandez certainement pourquoi vous devriez recompiler votre noyau. Les réponses possibles à cette question peuvent être que vous souhaitez disposer d'une version plus récente du noyau, améliorer la rapidité d'amorçage de votre système (les images des noyaux de Debian ne sont pas très légers car ces noyaux sont compilés dans le but de satisfaire le plus d'utilisateurs possibles) ou tout simplement ajouter le support d'un périphérique non pris en charge par défaut.
Debian permet de compiler son noyau //proprement// grâce à la commande **make-kpkg**. Nous allons donc utiliser cette méthode propre à Debian pour compiler notre noyau et en expliquer les étapes. Cet article est plutôt centré sur le noyau 2.6, néanmoins les commandes restent les même et nous préciserons tout au long de l'article si certains détails concernent uniquement le 2.6. Ainsi vous pourrez utilisez cet article pour compiler les deux versions actuellement maintenus du noyau.
===== Description =====
Le noyau représente le coeur du système d'exploitation. En conséquence il est la partie la plus importante du système. C'est lui qui est l'aspect le moins apparent pour l'utilisateur, à l'opposé le serveur graphique qui représente l'aspect le plus proche de l'utilisateur final. C'est le noyau qui gère vos //« périphériques et qui fournit aux programmes utilisateur une interface simplifiée avec le matériel »// (//Systèmes d'exploitation//, Andrew Tanenbaum). Ainsi Linux représente le noyau, même si on a pour habitude de parler de Linux pour désigner le système entier, mais ceci reste un abus de langage.
Une distribution Debian GNU/Linux possède de nombreux avantages en termes de configuration et d'outils d'administration. Pour l'installation du noyau Linux il existe des paquets très utiles qui vont vous permettre d'installer votre noyau très rapidement.
La compilation d'un nouveau noyau peut rendre votre système non-amorçable ! La compilation d'un nouveau noyau sur votre système peut, si elle est mal employée, rendre votre système inutilisable. Si vous ne comprenez pas une partie de cet article, je vous déconseille vivement de le lire en entier. Lisez également la section suivante pour prévoir ce genre de problème.
===== Créer une disquette d'amorçage =====
La première chose à faire est de créer une disquette d'amorçage afin de pallier à toutes mauvaises manipulations qui pourraient empêcher le démarrage de votre système. La commande permettant de créer cette disquette est la suivante (cas où vous avez installé une Lenny //testings// avec le noyau 2.6) :
# ls -la /boot/vmlinuz*
# -rw-r--r-- 1 root root 1455800 avr 19 04:35 /boot/vmlinuz-2.6.24-1-686
ce qui donne
# mkboot /boot/vmlinuz-2.6.24-1-686
Il vous suffit d'adapter cette ligne de commande à votre configuration et de configurer votre BIOS afin qu'il puisse amorçer un système d'exploitation à partir d'une disquette. Si vous ne disposez pas de Lilo mais de GNU Grub, vous pouvez utiliser le script **grub-install** qui fait partie du paquet **grub** de cette manière :
# grub-install '(fd0)'
===== Pré-requis =====
Vous devez bien connaître le type de matériel que vous possédez sur votre machine pour déterminer les options de configuration à utiliser avec votre futur noyau. Pour découvrir les options de configuration du noyau et pour savoir lequelles activer, consulter l'annexe.
==== Les paquets nécessaires ====
Afin de pouvoir compiler votre noyau, quelques paquets sont nécessaires.
Nous allons utiliser les sources du noyau de Debian, qui diffèrent des sources officielles du noyau Linux par des patchs appliqués par les mainteneurs du paquet.
De plus l'interface de configuration du noyau en mode graphique a quelque peu changé pour le 2.6 : vous pouvez choisir entre une interface **QT** (**KDE**) ou **GTK** (**Gnome**/**Xfce**) en plus celle du mode console appelée **Ncurses**.
Pour la version 2.4, vous aviez le choix entre la version **TK** et **Ncurses**.
Indépendamment de votre préférence quant à l'interface de configuration choisie, vous devez installer :
# aptitude install build-essential fakeroot kernel-package
Pour l'utilisation de l'interface **GTK**, vous devez installer
# aptitude install libglib2.0-dev libgtk2.0-dev
Pour **TK**, c'est
# aptitude install tk-dev
Pour **QT**,
# aptitude install libqt3-mt-dev
Pour **Ncurses**
# aptitude install libncurses5-dev
Le paquet **kernel-package** est un paquet indispensable pour compiler son noyau à la sauce Debian. La lecture du fichier //README.gz//, contenu dans ce paquet, est très instructif. Vous pouvez le visualiser en tapant la commande suivante :
$ zmore /usr/share/doc/kernel-package/README.gz
==== Mise en place des sources du noyau ====
Maintenant que vous avez installé les paquets nécessaires à la compilation d'un noyau à la sauce Debian, vous avez deux possibilités pour mettre en place les sources de votre futur noyau.
Soit vous utilisez les sources du noyau disponibles en paquet Debian (portant l'extension //.deb//), soit depuis les archives officielles du noyau disponibles au format //.tar.gz// ou //.tar.bz2// à [[http://www.kernel.org/|cette adresse]].
Vous avez donc le choix car, de toutes façons, nous allons décrire ces deux possibilités.
Afin d'éviter de travailler sous //root//, nous allons compiler le noyau à partir d'un utilisateur normal. Pour ce faire il doit appartenir au group //src// :
# adduser VOTRE_UTILISATEUR src
Ajout de l'utilisateur « VOTRE_UTILISATEUR » au groupe « src »...
Ajout de l'utilisateur VOTRE_UTILISATEUR au groupe src
Terminé.
Pour que ce réglage soit pris en compte, il est nécessaire de déconnecter puis reconnecter votre compte. Vous pouvez aussi faire un :
$ su - VOTRE_UTILISATEUR
Entrez votre mot de passe comme demandéMot de passe : ******
Pour vérifier vous pouvez taper la commande suivante :
$ id
uid=1000(VOTRE_UTILISATEUR) gid=1000(VOTRE_UTILISATEUR)
groupes=20(dialout),24(cdrom),25(floppy),29(audio),40(src),44(video),46(plugdev),106(netdev),109(powerdev),1000(VOTRE_UTILISATEUR)
Il est impératif que votre compte soit dans le groupe //src//, les autres groupes peuvent être différents
=== Sources disponibles en paquets au format Debian ===
Pour connaître la liste des différentes versions de paquets des sources du noyau Linux, il vous suffit simplement d'utiliser la commande **aptitude search**, ainsi :
# aptitude search linux-source
v linux- -
v linux-source-2.6 -
p linux-source-2.6.22 - Linux kernel source for version 2.6.22 with Debian patches
p linux-source-2.6.24 - Linux kernel source for version 2.6.24 with Debian patches
Notez que le résultat de la commande précédente est donné suivant la version //unstable// ou //Lenny// de Debian, cela peut bien sûr être différent selon la version de Debian GNU/Linux dont vous disposez. Nous installons donc la version 2.6.24 :
# aptitude install linux-source-2.6.24
Cette dernière étape a pour effet de placer une archive nommée ''linux-source-2.6.24.tar.bz2'' dans le répertoire ''/usr/src''.
Linus Torvalds conseille de ne pas compiler le noyau dans le répertoire ''/usr/src''. Voici un [[http://lists.insecure.org/linux-kernel/2000/Jul/4404.html|extrait du courriel]] qui explique pourquoi il ne faut pas compiler son noyau dans ce répertoire :
I would suggest that people who compile new kernels should:
- NOT do so in /usr/src. Leave whatever kernel (probably only the
header files) that the distribution came with there, but don't touch
it.
- compile the kernel in their own home directory, as their very own
selves. No need to be root to compile the kernel. You need to be root
to _install_ the kernel, but that's different.
- not have a single symbolic link in sight (except the one that the
kernel build itself sets up, namely the "linux/include/asm" symlink
that is only used for the internal kernel compile itself).
And yes, this is what I do. My /usr/src/linux still has the old 2.2.13
header files, even though I haven't run a 2.2.13 kernel in a _loong_
time. But those headers were what glibc was compiled against, so those
headers are what matches the library object files.
And this is actually what has been the suggested environment for at
least the last five years. I don't know why the symlink business keeps
on living on, like a bad zombie. Pretty much every distribution still
has that broken symlink, and people still remember that the linux
sources should go into "/usr/src/linux" even though that hasn't been
true in a _loong_ time.
Pour les anglophobes, voici une traduction de cet extrait :
Je suggère aux personnes qui compilent un nouveau noyau de :
- ne pas le faire dans /usr/src. Quelque soit le noyau provenant de votre
distribution (probablement les fichiers d'entêtes uniquement),
mais en tout cas n'y touchez pas.
- compiler le noyau dans leur propre répertoire personnel. Il est inutile
d'être root pour compiler le noyau. Vous avez besoin d'être root
pour installer le noyau, mais c'est différent.
- ne pas avoir l'intention de faire un lien symbolique (excepté celui que le
noyau créé lui-même, à savoir le lien "linux/include/asm" qui est utilisé
uniquement pour la compilation interne du noyau).
Et bien sûr, c'est ce que je fais. Mon /usr/src/linux a encore les
fichiers d'entêtes de mon ancien 2.2.13, bien que je n'ai pas utilisé
le noyau 2.2.13 depuis très longtemps. Mais ces entêtes étaient ceux
qu'avait compilé la glibc, donc ces entêtes sont ceux qui correspondent
aux fichiers de la bibliothèque objet.
Et c'est en fait ce qui a été l'environnement suggéré depuis au moins cinq
ans. Je ne sais pas pourquoi l'habitude de faire des liens symboliques
est restée ainsi. De nombreuses distributions ont ce lien symbolique cassé,
et les gens se souviennent que les sources du noyau devraient être dans
"/usr/src/linux" même si ce n'est pas vrai depuis très longtemps.
Avec votre utilisateur, placez vous dans votre répertoire personnel ''${HOME}'' puis créez un répertoire ''src/'', décompactez l'archive contenant les sources du noyau :
$ mkdir ${HOME}/src && cd ${HOME}/src/
$ tar -xvf /usr/src/linux-source-2.6.24.tar.bz2
Vous obtenez un répertoire ''${HOME}/src/linux-source-2.6.24''. Nous allons faire un lien symbolique pointant sur le répertoire précédemment créé et nous placer enfin dans le répertoire des sources :
$ ln -s ${HOME}/src/linux-source-2.6.24 ${HOME}/src/linux
Vous pouvez passer dès maintenant à la section suivante concernant la //Configuration du noyau//.
=== Sources traditionnelles du noyau Linux ===
Une fois récupérée, sur [[http://www.kernel.org/|Kernel.org]] ou tout autre miroir, l'archive contenant les sources du noyau ''linux-2.6.24.tar.bz2'', il vous reste à la décompresser dans votre répertoire ''${HOME}/src/'' et ça sans être //root// :
$ mkdir ${HOME}/src && cd ${HOME}/src/
$ tar -xvf linux-source-2.6.24.tar.bz2
Vous pouvez remarquer qu'un répertoire ''{HOME}/src/linux/'' contenant les sources du noyau a été créé. Une fois que tout cela vous semble correct, vous pouvez passer à la section suivante.
===== Configuration du noyau =====
==== Choisir les options de son noyau ====
Avant de passer à la compilation proprement dite de votre noyau, vous allez dans un premier temps devoir choisir les options que vous allez y inclure. C'est un peu un choix à la carte. Vous ne prennez ce dont vous avez besoin.
Les options du noyau peuvent s'intégrer de deux manières différentes :
* Soit directement : on dit alors que l'on met l'option en //dur//.
* Elles peuvent être //externes// au noyau : on dit alors que l'on met l'option en //module//.
Les options en modules permettent d'alléger votre noyau.
Il faut savoir que plus un noyau a une taille importante et plus le démarrage sera long.
Mais alors pourquoi ne pas mettre toutes les options du noyau en modules ? Et bien à causes de plusieurs raisons simples à comprendre :
* Certaines options n'existent qu'en dur.
* Certaines options doivent figurer obligatoirement en dur.
Il faut donc faire très attention, lors du choix de ces options, de bien mettre celles qui sont vitales en dur.
==== Configuration proprement dite ====
Cette configuration peut-être intégrée à la phase de création du fichier ''.deb'' (création du paquet contenant le noyau) via l'utilisation de l'option ''–config'' de la commande ''make-kpkg'' présentée dans le paragraphe suivant.\\
Afin de choisir les options que vous souhaitez inclure ou non dans votre noyau. Il est préférable de configurer les options via une interface graphique ou console plutôt que d'éditer le fichier de configuration ''${HOME}/src/linux/.config''.
Si vous voulez simplement mettre à jour votre noyau, vous pouvez très bien utiliser le fichier de configuration de la version actuelle en copiant le fichier ''/boot/config*'' vers ''${HOME}/src/linux/.config''
Il existe plusieurs interfaces de configuration du noyau comme on a pu le voir précédemment. Le choix dépend des bibliothèques que vous avez installées. Voici la liste des principales interfaces de configuration disponibles que j'ai retenues :
* **menuconfig** : Interface utilisant la bibliothèque **Ncurses**, donc avec des menus en mode console.
* **config** : Interface utilisant la bibliothèque **QT** (noyau 2.6) ou **TK** (noyau 2.4), donc en mode graphique.
* **gconfig** : Interface utilisant la bibliothèque **GTK**, cette interface est disponible uniquement pour la version 2.6, elle est en mode graphique.
Dans votre ''${HOME}/src/linux/'', tapez ''make'' suivi d'un des trois arguments précédemment décrit, soit :
$ cd ${HOME}/src/linux/
$ make menuconfig
Pour une configuration du noyau via l'interface **Ncurses**, ''make config'' pour une configuration par l'interface **GTK**.
Si vous avez choisi d'utiliser l'interface **Ncurses**, alors vous pourrez naviguer au sein des menus à l'aide des touches de direction, appuyez sur la touche Espace plusieurs fois sur une option de support de matériel afin de la mettre en dur, en module, ou de l'enlever du noyau.
On notera une grande différence entre la présentation des options du noyau de la série 2.4 et 2.6. En effet, cela est beaucoup mieux organisé dans la dernière série.
Afin d'obtenir plus de renseignements sur les options du noyau, vous pouvez consulter l'annexe de cet article. N'oubliez pas de sauvegarder la configuration avant de quitter.
Afin de connaître précisément votre matériel, vous pouvez utiliser les commandes ''lspci'', ''lshw'', sans oublier l'arborescence ''/proc/''
$ lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8363/8365 [KT133/KM133] (rev 03)
00:01.0 PCI bridge: VIA Technologies, Inc. VT8363/8365 [KT133/KM133 AGP]
00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40)
00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 06)
00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 16)
00:07.3 USB Controller: VIA Technologies, Inc. USB (rev 16)
00:07.4 Host bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40)
00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
00:0a.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
00:0c.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 07)
00:0c.1 Input device controller: Creative Labs SB Live! MIDI/Game Port (rev 07)
00:0d.0 Ethernet controller: Davicom Semiconductor, Inc. Ethernet 100/10 MBit (rev 31)
01:00.0 VGA compatible controller: nVidia Corporation NV10DDR [GeForce 256 DDR] (rev 10)
**Fichier de configuration de votre noyau :** Le fichier de configuration de votre noyau se nomme ''.config''. La configuration du noyau étant une opération longue et fastidieuse, je vous recommande vivement de copier ce fichier dans un autre répertoire pour éviter de devoir tout recommencer du début si, par mégarde, vous détruisiez le répertoire ''${HOME}/src/linux/''.
===== La commande make-kpkg =====
Maintenant que votre noyau est configuré, nous allons décrire les différentes options de la commande **make-kpkg** qui est le coeur de la méthode Debian pour la compilation d'un noyau. Elle permet la construction d'un paquet Debian contenant l'image du noyau et les modules.
==== Les options importantes ====
Voici une liste des options importantes de la commande **make-kpkg** :
=== append-to-version ===
Cette option est très intéressante, voire indispensable. Vous pouvez obtenir le numéro de version de votre noyau en tapant la commande :
$ uname -a
Cette option permet d'ajouter une chaîne de caractères de votre choix permettant d'identifier votre noyau. Cela vous évite d'éditer le ''Makefile'' des sources du noyau. Ainsi il est très pratique de faire ceci :
--append-to-version=.`date +%y%m%d`
Utiliser ''date'' permet de spécifier le jour de la compilation de votre noyau.
Cette chaîne sera aussi ajoutée à la fin du nom du répertoire des modules, par exemple: ''/lib/modules/2.4.20.030810''. Ainsi les modules de chaque noyau compilés iront dans un répertoire dédié et on évite les conflits et les écrasements de fichiers entre les compilations.
Je vous conseille d'utiliser la date sous le format ''aammjj'' (argument ''+%y%m%d''), qui permet de lister les différents noyaux dans l'ordre du plus récent au plus ancien à l'amorçage du système.
=== config gconfig|menuconfig|xconfig ===
Cette option vous évite de taper par exemple ''make xconfig'' pour la configuration de votre noyau. En spécifiant ''**--config xconfig**'' le menu de configuration du noyau en mode graphique sera lancé juste avant la compilation du noyau faite par les cibles que nous décrirons dans la suite de cet article.
=== initrd ===
Cela permet de créer un fichier ''initrd''. Cela est particulièrement utile si vous souhaitez utiliser des modules du noyau afin qu'ils soient pris en compte dès l'amorçage de l'image de votre noyau. \\
Notez que cette option nécessite les paquets ''**cramfsprogs**'' et ''**initrd-tools**'' que vous pouvez installer en tapant :
# aptitude install cramfsprogs,
Notez que cette option nécessite le paquet ''**initramfs-tools**'' , que vous pouvez installer en tapant :
# aptitude install initramfs-tools
=== rootcmd fakeroot|sudo ===
Cet option permet de spécifier la manière d'accéder aux privilèges de //root// afin d'effectuer la compilation du noyau. Étant donné que nous avons choisi d'installer le paquet ''**fakeroot**'', nous utiliserons donc l'option ainsi :
--rootcmd fakeroot
==== Les cibles importantes ====
Voilà les cibles importantes de la commande ''**make-kpkg**''.
Cette section est donc vraiment à lire.
=== clean ===
Cette cible s'invoque toute seule et permet de //« nettoyer le répertoire des sources du noyau de tous les fichiers créés par l'invocation de l'une des cibles données ci dessous, et effectue un make distclean »// (traduction de la partie du manuel consacré à cette cible ''**$ man make-kpkg**'').
=== kernel_doc ===
Cette autre cible compile et crée pour vous un paquet Debian contenant les documentations fournis avec le noyau.
=== kernel_image ===
Celle-ci permet de compiler le noyau, de créer un paquet Debian contenant tout ce qui est nécessaire à l'amorçage de votre système (modules du noyau, images de celui-ci, fichier de configuration du noyau...), et enfin de modifier votre chargeur d'amorçage afin qu'il prenne en compte votre nouveau noyau (il supporte notamment GNU/Grub et Lilo). La procédure permettant de configurer automatiquement de GNU/Grub lors de l'installation du nouveau noyau est décrite dans une autre documentation disponible sur Andesi.
=== kernel_source ===
Cette cible construit un paquet Debian des sources du noyau Linux que vous compilez. Cela est particulièrement utile si vous souhaitez réutiliser ultérieurement les sources du noyau que vous souhaiteriez conserver.
=== kernel_headers ===
Celle-ci a pour but de produire un paquet Debian contenant les entêtes du noyau Linux. Les entêtes peuvent être nécessaires pour compiler certains programmes.
=== binary ===
Cette cible //"construit les quatre paquets Debian du noyau en utilisant les cibles kernel_source, kernel_headers, kernel_doc et kernel_image"// (traduction de la partie du manuel consacré à cette cible *$ man make-kpkg).
=== buildpackage ===
Cela a pour conséquence d'utiliser la cible ''**clean**'' et ''**binary**'' décrite ci-dessous. Cette cible englobe donc toutes les autres cibles que nous avons décrites.
=== modules_image ===
Cette cible a pour but de produire un paquet Debian pour chaque module supplémentaire que vous avez installé et qui se trouve dans le répertoire ''/usr/src/modules/''.
===== Compilation et installation du noyau =====
Maintenant que nous avons vu les différentes options et cibles de la commande ''**make-kpkg**'', nous pouvons enfin compiler le noyau, sans création de l'''initrd'', à la sauce Debian en tapant la commande suivante :
$ cd ${HOME}/src/linux
$ make-kpkg clean
$ make-kpkg --rootcmd fakeroot --append-to-version=.`date +%y%m%d` --revision=2.6.24 kernel-image
Notez que si vous configurez une autre version de noyau vous devrez changer la valeur de l'option ''**--revision**''. \\
Pour créer le fichier ''initrd'', ajoutez l'option ''--initrd'' à la commande précédente. Ce qui donne
$ make-kpkg --rootcmd fakeroot --initrd --append-to-version=.`date +%y%m%d` \
--revision=2.6.24 kernel-image
Nous compilons donc le noyau en utilisateur normal grâce à l'option ''**--rootcmd**''. Une fois la compilation terminée, pour installer le nouveau noyau, en tant que **root**,
* placez vous dans le répertoire ''${HOME}/src/'',
* trouvez le paquet nommé ''kernel-image-2.6.24.*.deb''
* Utilisez ''dpkg -i'' pour installer ce précédent paquet
soit
# cd ${HOME}/src/
$ su
Mot de passe : ******
# ls *.deb
linux-image-2.6.24.080430_2.6.24_i386.deb
Évidemment faites correspondre le nom du fichier entre les commandes ''ls'' et ''dpkg -i''.\\
# dpkg -i linux-image-2.6.24.080430_2.6.24_i386.deb
Ce qui donne ce genre de message :
Sélection du paquet linux-image-2.6.24.080430 précédemment désélectionné.
(Lecture de la base de données... 36303 fichiers et répertoires déjà installés.)
Dépaquetage de linux-image-2.6.24.080430 (à partir de linux-image-2.6.24.080430_2.6.24_i386.deb) ...
Done.
Paramétrage de linux-image-2.6.24.080430 (2.6.24) ...
Hmm. There is a symbolic link /lib/modules/2.6.24.080430/build
However, I can not read it: Aucun fichier ou répertoire de ce type
Therefore, I am deleting /lib/modules/2.6.24.080430/build
Hmm. The package shipped with a symbolic link /lib/modules/2.6.24.080430/source
However, I can not read the target: Aucun fichier ou répertoire de ce type
Therefore, I am deleting /lib/modules/2.6.24.080430/source
Running depmod.
Running postinst hook script update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.24.080430
Found kernel: /boot/vmlinuz-2.6.18-6-686
Updating /boot/grub/menu.lst ... done
Vos messages peuvent ne pas être identiques à ceux-là.
L'installation de votre nouveau noyau est maintenant terminée, vous pouvez apprécier la simplicité et la puissance de cette commande spécifique à Debian\\
Vous pouvez également cumuler les cibles afin, par exemple, de créer un paquet contenant les documentations du noyau (cible ''kernel_doc'', les sources du noyau Linux (cible ''kernel_source'') et le reste (cible ''kernel_image'' par exemple) puis d'installer tout ceci ainsi :
$ cd ${HOME}/src/linux
$ make-kpkg clean
$ make-kpkg --rootcmd fakeroot --revision=2.6.24 --append-to-version=.`date +%y%m%d` kernel_doc kernel_source kernel_image
$ cd ${HOME}/src/
$ su
Mot de passe : ******
# ls *.deb
linux-image-2.6.24.080430_2.6.24_i386.deb
# dpkg -i linux-image-2.6.24.080430_2.6.24_i386.deb
Une fois encore, faites correspondre le nom du fichier ''.deb''.\\
FIXME **INUTILITÉ À CONFIRMER**\\
La commande ''**dpkg**'', qui va permettre l'installation du noyau, va vous poser quelques questions :
^ Installation du noyau (dpkg) ^^^
| kernel-image | Question | Réponse à apporter |
| dpkg | Would you like to create a boot floppy now? | //No// |
| dpkg | Install a boot block using the existing /etc/lilo.conf? | //No// |
| dpkg | Wipe out your old LILO configuration and make a new one? | //No// |
**FIN DU FIXME**\\
Si tout c'est bien passé, ''dpkg'' ne devrait pas vous retourner de message d'erreur. Un nouveau répertoire a été créé dans ''/lib/modules/'', il porte le nom de votre nouveau noyau :
# ls -la /lib/modules/
total 9
drwxr-xr-x 4 root root 1024 2008-04-30 12:32 .
drwxr-xr-x 12 root root 6144 2008-04-18 15:30 ..
drwxr-xr-x 3 root root 1024 2008-04-18 13:04 2.6.18-6-686
drwxr-xr-x 3 root root 1024 2008-04-30 12:32 2.6.24.080430
Dans notre exemple c'est le répertoire ''2.6.24.080430''.
===== Configuration du gestionnaire d'amorçage =====
Cette partie n'est que purement informative car l'utilisation de ''dpkg -i'' fait les modifications nécessaires au moins pour ce qui est de GNU Grub.\\
Pour preuve voici un extrait du résultat de ''dpkg -i''
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
==== Configuration de Lilo ====
Si vous utilisez Lilo, éditez le fichier ''/etc/lilo.conf'' et ajouter à la fin de ce dernier les lignes suivantes :
image=/boot/vmlinuz-2.6.24.080430
label=2.6.24.080430
read-only
Le paramètre //image// spécifie l'emplacement de l'image de votre nouveau noyau, qu'il faudra adapter à votre configuration.\\
Le paramètre //label// contient la description de votre noyau qui est affiché dans //LILO//. Attention, la taille de ce paramètre est limitée !
**Modification du fichier de configuration de LILO :** lors de l'installation de votre noyau sur votre Debian GNU/Linux //dpkg// vous a proposé de modifier le fichier de configuration de //LILO//. Je vous ai demandé de répondre //No// à cette question. En effet, il faut savoir que si vous aviez accepté ce choix, //dpkg// n'aurait pas réelement crée une nouvelle section dans le fichier de configuration de //LILO// comme nous venons de le faire,//dpkg// aurait simplement fait une copie de lien symbolique //vmlinuz// (qui pointe initialement vers le noyau d'installation de votre Debian GNU/Linux) en //vmilnuz.old//. Puis il aurait fait un nouveau lien symbolique //vmlinuz// qui aurait pointé vers votre nouveau noyau en modifiant ce qu'il faut dans le fichier ///etc/lilo.conf// pour pouvoir accéder à votre noyau de base.
C'est pratique lorsque l'on installe un seul noyau. Mais si l'on en installe plusieurs, on perd lors de l'amorçage du système le choix des autres noyaux.
Après avoir enregistré les modifications, n'oubliez pas de mettre à jour //LILO// à l'aide de cette commande :
# lilo -v
Il ne vous reste plus qu'à redémarrer votre machine sur votre nouveau noyau :
# reboot
==== Configuration de GNU Grub ====
Pour GNU Grub, il vous suffit d'éditer le fichier ''/boot/grub/menu.lst'' et d'ajouter les lignes suivantes :
title Debian GNU/Linux, kernel 2.6.24.080430
root (hd0,0)
kernel /boot/vmlinuz-2.6.24.080430 root=/dev/hda1 ro
savedefault
title Debian GNU/Linux, kernel 2.6.24.080430 (single-user mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.24.080430 root=/dev/hda1 ro single
Dans cet exemple, l'option\\
* **//title//** permet de donner le titre qui apparaîtra au lancement de GNU Grub.\\
* **//root//** permet de définir la partition racine (pour plus d'informations, consultez l'article au sujet de GNU Grub).\\
* **//kernel//** permet de donner l'emplacement de l'image en spécifiant grâce à //root// que la partition racine est ''/dev/hda1''.\\
N'oubliez pas d'adapter ces lignes au nom de fichier //vmlinuz// et à votre partition racine, généralement la même que celle contenant votre ancien noyau.
===== Aller plus loin dans la compilation du noyau =====
==== Présentation ====
''**make-kpkg**'' est un programme très puissant qui vous permet de faire beaucoup de choses lors de la compilation de votre noyau. Vous pouvez ainsi créer des paquets Debian pour installer certains modules, comme par exemple les pilotes //Nvidia//, qui ne sont pas inclus dans le noyau, ou encore patcher ce dernier pour lui ajouter de nouvelles options de configuration telle que l'utilisation d'image au démarrage.
Pour l'ajout de patches, vous devez installer un paquetage supplémentaire :
# aptitude install kernel-package
==== Ajouter des modules externes à son noyau ====
Dans cette section, nous allons voir différentes possiblités de la commande ''**make-kpkg**''.
=== Présentation ===
Le paramètre ''**--added_modules**'' indique à ''**make-kpkg**'' de générer des paquets Debian pour l'installation de modules installés séparement du noyau.
Attention : ces modules doivent être issus de paquets Debian.
Ce paramètre peut prendre plusieurs modules séparés par une virgule. Les noms des modules que vous pouvez ajouter sont ceux qui correspondent aux noms des répertoires présents dans ''/usr/src/modules/''.
=== Module : nVidia ===
Si vous êtes posseseur d'une carte graphique à base de chipset Nvidia GeForce vous pouvez compiler le driver de cette carte lors de la compilation de votre noyau. Vous devez télécharger le paquet nvidia-kernel-source :
# apt-get install nvidia-kernel-source
Une fois les paquets téléchargés, vous devez comme d'habitude les décompresser. Ces derniers s'installeront dans le répertoire ''/usr/src/modules/'' :
$ cd /usr/src
$ tar xfvz nvidia-kernel-src.tar.gz
$ tar xfvz nvifia-glx-src.tar.gz
Il ne vous reste plus qu'à ajouter lors de la compilation de votre noyau le paramètre :
--added_modules=nvidia-kernel
Reportez vous à l'article pour terminer l'installation de votre carte graphique. Vous pouvez également utiliser la cible ''**modules_image**'' qui généra également un paquet pour les modules des pilotes Nvidia. La principale différence que ''**--added_modules**'' permet d'ajouter des modules spécifiques tandis que la cible précédemment décrite compile tous les modules disponibles dans le répertoires ''/usr/src/''.
=== Module : ALSA (noyaux 2.4.x uniquement) ===
Si vous utiliser l'architecture //ALSA// pour votre carte son, et un noyau de la branche des 2.4 vous devez télécharger le paquet alsa-source :
# apt-get install alsa-source
**Alsa uniquement pour la branche 2.4 ?** Non car Alsa est intégré maintenant par défaut dans la branche 2.6 du noyau, mais pour la branche 2.4, cela nécessite d'installer des modules supplémentaires.
Une fois le paquet téléchargé, vous devez le décompresser :
$ cd /usr/src
$ tar xfvz alsa-source.tar.gz
Il ne vous reste plus qu'à ajouter lors de la compilation de votre noyau le paramètre :
--added_modules=alsa-driver
Reportez vous à l'article pour terminer l'installation de votre carte son.
==== Patcher son noyau ====
=== Présentation ===
Le paramètre ''**--added_patches**'' indique à ''**make-kpkg**'' d'inclure des rustines (ou patches) à votre noyau.
Attention : ces modules doivent être issus de paquets Debian.
Ce paramètre peut prendre plusieurs patches séparés par une virgule. Les noms des patches que vous pouvez ajouter sont ceux qui correspondent aux noms des répertoires présents dans ''/usr/src/kernel-patches/all/apply/''.
Lorsque vous patcher votre noyau, les nouvelles options de configuration disponibles sont automatiquement affichées et l'on vous demande si vous souhaitez les inclure à votre noyau.
=== Patch : debianlogo ===
Le patch //debianlogo// vous permet de remplacer le pingouin que vous trouvez au démarrage de votre Debian GNU/Linux par un beau logo aux couleurs de Debian. Pour cela vous devez télécharger le paquet ''**kernel-patch-debianlogo**'' :
# apt-get install kernel-patch-debianlogo
Il ne vous reste plus qu'à ajouter lors de la compilation de votre noyau le paramètre :
--added_patches=debianlogo
=== Patches : preempt et lowlatency (noyaux 2.4.x uniquement) ===
Les patches //preempt// et //lowlatency// vous permettent de donner plus de réactivité à votre station de travail qui utilise un noyau de la série 2.4.x. Les noyaux 2.6.x intégrent nativement cette option. Enfin il ne faut pas utiliser ces patches si votre Debian GNU/Linux est utilisé en tant que serveur. Vous devez télécharger les paquets kernel-patch-2.4-preempt et kernel-patch-2.4-lowlatency :
# apt-get install kernel-patch-2.4-preempt kernel-patch-2.4-lowlatency
Il ne vous reste plus qu'à ajouter lors de la compilation de votre noyau le paramètre :
--added_patches=preempt,lowlatency
===== Désinstaller =====
Vous pouvez supprimer aussi facilement que vous venez de l'installer le noyau que vous venez de configurez. Cependant, il ne faut pas que ce soit le noyau qui est en cours d'exécution car vous allez rendre votre système instable. Pour supprimer le noyau que je viens d'installer :
# apt-get remove --purge kernel-image-2.6.7-`date +%y%%m%d`
Retrouvez le nom du paquet de son noyau. On remarquera qu'il ne faut pas spécifier le nom du paquet Debian que l'on a utilisé lors de l'installation, mais qu'il faut respecter le format //kernel-image-//.
===== Annexes: =====
===Les options du Noyaux ===
[[Les options du Noyau]] sont disponibles dans dans un autre article.
===La page de man de make-kgpg===
[[http://olympus.het.brown.edu/cgi-bin/man/man2html?1+make-kpkg|disponible ici (en anglais)]]