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 celui-ci ainsi que celui de 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 Kernel-HOWTO que vous pourrez trouver sur 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 à 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 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 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 :

  1. -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 :

  1. -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.

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 :

  1. -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 :

  1. -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-<kernel-version>.

Annexes:

Les options du Noyaux

Les options du Noyau sont disponibles dans dans un autre article.

La page de man de make-kgpg

 
noyau/compilation-d-un-noyau-a-la-sauce-debian.txt · Dernière modification: 11/12/2010 17:06 par orgrim