6. Configuration du noyau Linux


6.1. Recompiler le noyau


6.1.1. Qu'est-ce que le noyau Linux ?


Le noyau est la couche de base d'un système d'exploitation. C'est le noyau qui gère la mémoire, l'accès aux périphériques (disque dur, carte son, carte réseau...), la circulation des données sur le bus, les droits d'accès, les multiples processus qui correspondent aux mutiples tâches que l'ordinateur doit exécuter en même temps, etc...

Par contre, le noyau ne gère pas le mail, l'affichage des pages Web, ou encore le traitement du texte. Ce sont des programmes ou applications qui s'en chargent. Ces programmes viennent se greffer sur le noyau, et elles doivent être adaptées à celui-ci.

Ce noyau de système d'exploitation a l'originalité d'être multi-utilisateurs et multi-tâches et de fonctionner sur de nombreuses plates-formes (Intel, Apple, Sparc, etc...). Il est conforme à la norme POSIX et est distribué sous Licence GPL. Il a la réputation d'être fiable, stable et sécurisé. Son appartenance au monde du libre garanti une correction rapide des erreurs qui pourraient être découvertes.

6.1.2. Pourquoi recompiler le noyau ?


Le noyau qui tourne en ce moment sur votre Linux fraîchement installé est le noyau fournit en standard dans la distribution Debian. C'est un noyau assez gros qui est destiné à pouvoir fonctionner sur la plupart des ordinateurs.

Ce que nous allons faire est personnaliser le noyau pour qu'il supporte nos périphériques et eux seulement. Plus le noyau est petit, plus le système d'exploitation est rapide. L'étape la plus difficile sera la configuration du noyau, pour qu'il supporte bien tous nos périphériques.

6.1.3. La numérotation des noyaux


Les noyaux Linux sont rigoureusement numérotés. Le numéro comporte 3 chiffres : les deux premiers chiffres correspondent au numéro de la branche, et le dernier chiffre correspond à la version du noyau dans cette branche. Par exemple, le fichier linux-2.4.20.tar.gz contient les sources de la version n°20 de la branche 2.4.

Il existe deux types de branches :

6.1.4. Quel noyau choisir ?


C'est très simple : il faut choisir, sauf cas particulier, le dernier noyau de la dernière branche stable. Au jour où j'écris ces lignes (Avril 2003), la dernière branche stable est la branche 2.4 et le dernier noyau de cette branche porte le numéro 20. Il faut donc installer le noyau 2.4.20. Pour avoir les dernières infos sur les versions des noyaux, vous pouvez aller sur le site officiel du noyau Linux :
The Linux Kernel Archives.

6.2. Les préparatifs


6.2.1. Se renseigner sur son chipset et son processeur


Pour bien configurer son noyau, il faut bien connaître le hardware de sa machine, et nottamment le modèle du chipset et le type de processeur. Pour connaître le type de processeur :

% cat /proc/cpuinfo

La ligne model name vous donnera le type de processeur de votre machine.

Pour connaître le modèle du chipset de votre machine :

% lspci

La première ligne devrait vous donner le modèle de votre chipset. Les lignes suivantes vous donneront plein d'autres informations intéressantes sur le hardware de la machine, et certaines de ces informations vous seront utiles lors de la configuration du noyau.

6.2.2. Droits et packages


La plus grande partie de la procédure ne nécessite pas d'être root. Cependant, il va falloir d'abord ajouter l'utilisateur que vous êtes au groupe src. En root, tapez :

# adduser toto src

toto est votre nom d'utilisateur. Pour que le changement soit effectif, il faut que l'utilisateur se déloggue puis se reloggue.

Pour la décompression et la configuration du noyau, installez les deux packages suivants :

# apt-get install bzip2 libncurses5-dev

6.2.3. Se procurer les sources du noyau


Maintenant que vous avez les droits et les packages nécessaires, vous allez repasser en simple utilisateur et télécharger les sources du noyau.

Si vous avez une connexion Internet rapide

Si vous avez déjà une connexion rapide à Internet qui marche, téléchargez les sources (32 Mo environ) sur un miroir du noyau Linux, par exemple le miroir de Belnet ftp://ftp.belnet.be/mirror/ftp.kernel.org/, et mettez-les dans le répertoire /usr/src :

% wget -P /usr/src ftp://ftp.belnet.be/mirror/ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz

Téléchargez également la signature cryptographique des sources, qui vous permettra par la suite de vérifier leur authenticité et leur intégrité :

% wget -P /usr/src ftp://ftp.belnet.be/mirror/ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz.sign

Pour vérifier l'authenticité et l'intégrité des sources du noyau (par exemple pour vérifier que les sources n'ont pas été modifiées par un pirate qui se serait introduit sur le site miroir), on va utiliser le programme GnuPG (alias GPG), qui est un équivalent libre de PGP, et qui est installé par défaut (package gnupg). Commencez par télécharger la clé publique de Linux Kernel Archives :

% gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E

Comme c'est la première fois que vous utilisez GPG, il crée le répertoire ~/.gnupg avec un fichier options, et vous demande de réexécuter la commande. Exécutez donc la même commande une deuxième fois.

Ensuite, vérifiez l'authenticité de la clé publique en comparant le fingerprint de la clé que vous avez téléchargé avec le fingerprint de la vraie clé de Linux Kernel Archives : ils doivent être strictement identiques !

Si les deux fingerprints sont identiques, alors c'est bien la vraie clé publique de Linux Kernel Archives que vous avez téléchargé dans votre trousseau de clés. Vous pouvez alors passer à la vérification des sources :

% cd /usr/src/
% gpg --verify linux-2.4.20.tar.gz.sign linux-2.4.20.tar.gz

Il doit normalement vous répondre que la signature est bonne (ce qui prouve l'authenticité et l'intégrité), mais que la clé n'est pas certifiée avec une signature de confiance.

Si vous n'avez pas de connexion Internet rapide

Si vous n'avez pas de connexion rapide à Internet, vous avez le choix entre :

6.2.4. Décompresser les sources


Vous devez donc maintenant avoir un fichier contenant les sources du noyau Linux dans le répertoire /usr/src/. Décompressez les sources, créez (ou mettez-à-jour) le lien symbolique /usr/src/linux qui doit pointer sur le nouveau répertoire contenant les sources du noyau, et placez-vous dans ce nouveau répertoire :

6.3. Configurer le noyau


6.3.1. Récupérer un fichier de configuration modèle


La configuration du noyau est stockée dans un fichier .config à la racine des sources du noyau. Ce fichier est lu et modifié par l'utilitaire de configuration du noyau, et il est lu lors de la compilation du noyau. Pour vous faciliter la tâche, j'ai mis à votre disposition un fichier de configuration type pour noyau 2.4 (ordinateur fixe avec une carte réseau, une carte son, des disques IDE, un graveur IDE et un lecteur DVD IDE). Je vous conseille de prendre ce fichier comme base de travail pour la configuration de votre noyau 2.4 :

% wget http://www.mytux.net/debian/console/config-2.4.x
% mv config-2.4.x .config

6.3.2. Lancer l'utilitaire de configuration


Pour lancer l'utilitaire de configuration du noyau, tapez, toujours en tant que simple utilisateur :

% make menuconfig

Vous arrivez alors dans l'interface de configuration du noyau. Vous pouvez naviguer avec les flèches et entrer dans les menus en appuyant sur Entrée.



6.3.3. En dur ou en modules ?


Techniquement, les modules sont des morceaux de noyau qui peuvent être insérés ou enlevés sans rebooter l'ordinateur. Cela présente l'avantage d'avoir un noyau de taille raisonnable tout en procurant une grande souplesse.

En pratique, un module est un pilote d'un périphérique ou d'une fonctionnalité. Par exemple, pour faire marcher une carte réseau, on a besoin d'insérer le module conçu pour cette carte réseau.

Pour certaines options du noyau, vous avez le choix entre mettre l'option en dur ou en modules. Nous allons mettre un maximum de périphériques en modules... mais pas tous !

Il y a deux types d'options pour la configuration du noyau (on passe d'une option à la suivante en appuyant sur Espace) :

6.3.4. Les options de configuration


Certaines options ne sont destinées qu'à faire apparaître de nouvelles options. C'est par exemple le cas du premier menu.

Dans tous les cas, n'hésitez pas à lire l'aide qui est attachée à chaque option. Vous y trouverez généralement des informations pertinentes vous permettant de juger si vous devez activer l'option ou pas. Pour cela, placez-vous sur une option et appuyez sur Tab jusqu'à être positionné sur Help et appuyez sur Entrée.

Nous allons maintenant passer en revue chaque menu !

Code maturity level options

Ce menu ne contient qu'une seule option qui, si elle est cochée, fait apparaître les options considérées comme instables dans tous les autres menus. Ces options apparaissement alors avec un flag [EXPERIMENTAL] ou même [DANGEROUS]. Activez l'option.

Loadable module support

C'est là que vous lui dîtes que votre noyau doit être capable d'insérer et d'enlever des modules à la volée sans rebooter. Il faut donc activer au minimum les options Enable loadable module support et Kernel module loader.

Processor type and features

Commencez par définir votre type de processeur dans Processor family pour bénéficier des optimisations spécifiques : attention, la compatibilité est ascendante mais pas descendante, i.e. un noyau compilé pour Pentium fonctionnera sur Pentium II mais pas sur un 486.

Ensuite, il faut activer MTRR (Memory Type Range Register) support et, si vous avez la chance d'avoir une machine multi-processeur, il faut aussi activer Symmetric multi-processing support.

General setup

Dans tous les cas, mettez les options suivantes en dur :
En plus, activez les options suivantes si vous en avez besoin :
Memory Technology Devices (MTD)

Ce menu est vide car il ne concerne pas l'architecture Intel.

Parallel port support

Mettez le support du port parallèle en module. Pour cela, mettez les options Parallel port support et PC-style hardware en modules.

Plug and Play configuration

Activez Plug and Play support en module, et éventuellement ISA Plug and Play support en module si vous avez un bus ISA.

Block devices

Mettez le lecteur de disquettes Normal PC floppy disk support en module. Mettez également Loopback device support en module, ça servira plus tard...

Multi-device support (RAID and LVM)

Si vous avez un ordinateur "normal", ne mettez rien.

Networking options

C'est là que vous configurez la couche réseau de Linux.

ATTENTION : Un ordinateur sous Linux a besoin d'une couche réseau même s'il n'est connecté à aucun réseau ! En effet, certains programmes comme par exemple le serveur graphique ont besoin de cette couche réseau pour fonctionner.

Dans tous les cas, mettez en dur les options suivantes :
Si l'ordinateur est destiné à être connecté à Internet, vous aurez besoin du protocole TCP/IP. Mettez alors en dur les options suivantes :
Si vous voulez vous connecter à Internet par modem ADSL USB ou Ethernet, activez en plus l'option Asynchronous Transfer Mode (ATM) (EXPERIMENTAL).

Si vous comptez utiliser les fonctions de firewalling du noyau Linux (ces fonctions sont notamment requises si vous voulez faire du partage de connexion, autrement dit monter un serveur NAT), cochez Network packet filtering (replaces ipchains) puis allez dans le sous-menu IP: Netfilter Configuration qui apparaît alors un petit peu plus bas et mettez en modules toutes les options sauf celles marquées comme étant expérimentales et sauf les deux dernières : ipchains et ipfwadm (cela représente plus de trente options !).

Telephony Support

Menu pour tout ce qui concerne la voix-sur-IP. Ne rien mettre.

ATA/IDE/MFM/RLL support

ATTENTION : C'est là qu'il ne faut pas se tromper ! Je suppose que vous bootez sur un disque dur IDE qui contient votre noyau Linux. Il faut donc que votre disque dur soit en dur dans le noyau et non en module... car Linux à évidemment besoin du support du disque dur dans le noyau pour pouvoir ensuite lire les modules qui sont écrits sur le disque dur !
SCSI support

Si vous voulez graver sous Linux, il faut mettre en module les options SCSI support, SCSI CD-ROM support et SCSI generic support.

Si vous avez un disque dur ou un lecteur de CD SCSI, il faut activer SCSI disk support (en dur si il est destiné à accueillir votre noyau) et/ou SCSI CD-ROM support et trouver votre carte SCSI dans la liste du sous-menu SCSI low-level drivers (la mettre en dur si votre disque dur SCSI accueille le noyau).

Fusion MPT device support

Ne rien mettre.

IEEE 1394 (FireWire) support

Si vous avez un port FireWire, mettez IEEE 1394 (FireWire) support en module ainsi que votre contrôleur et les protocoles dont vous avez besoin (utiliser l'aide).

I2O device support

Ne rien mettre.

Network device support

C'est dans ce menu qu'il faut activer le support de votre carte réseau, si vous en avez une, et le protocole PPP, utilisé pour se connecter à Internet par modem. Cochez Network device support pour voir apparaître les options et les sous-menus.
Dans tous les cas, le nom du module qui sera généré est normalement indiqué à la fin de l'aide associée à l'option, dans la phrase "The module will be called nom_du_module.o" ; si c'est le cas, retenez le nom du module.

Si vous voulez pouvoir vous connecter par modem classique à Internet, activez :
Si vous voulez vous connecter par modem ADSL ou câble, activez :
Amateur Radio support

Ce menu concerne le support du protocole et des périphériques de Radio Amateur.

IrDA (infrared) support

Ce menu concerne le support du protocole et des périphériques infrarouges.

ISDN subsystem

Cette section est pour les modems ISDN (RNIS ou Numéris en frane).

Old CD-ROM drivers (not SCSI, not IDE)

Ne rien mettre, sauf si vous avez un très vieux lecteur de CD-ROMs (genre un lecteur qui se branche sur la carte son !).

Input core support

Si vous avez une souris et/ou un clavier USB, mettez les modules Input core support ainsi que Keyboard support si vous avez un clavier USB et/ou Mouse Support si vous avez une souris USB. Le chiffres concernant la résolution de l'écran ne concernent que les tablettes graphiques.

Character devices

Les options suivantes sont à activer pour tout le monde :
Si vous avez un port série, mettez en module Standard/generic (8250/16550 and compatible UARTs) serial support.

Si vous avez un modem ADSL USB, cochez Non-standard serial port support et mettez en module HDLC line discipline support.

Si vous avez une imprimante sur port parallèle, mettez en module Parallel printer support.

Si vous avez une souris PS/2 ou série, allez dans le sous-menu Mice et sélectionnez en module :
N.B. Pour les portables, le TrackPoint ou TrackPad sont généralement connectés en interne comme une souris PS/2.

Si vous avez une carte video sur port AGP, sélectionnez /dev/agpgart (AGP Support) en module et éventuellement l'option qui correspond à votre chipset si vous en trouvez une.

Si vous avez une carte-modem PCMCIA, allez dans le sous-menu PCMCIA character devices et mettez en module PCMCIA serial device support.

Multimedia devices

Ce menu concerne les cartes TV, Satellite, radio et les Webcams.

File systems

ATTENTION : Là aussi, il ne faut pas se tromper !

Commencez par mettre le système de fichier sur lequel est stocké le noyau en dur dans le noyau.
Si vous avez installé votre système avec mon tutoriel, votre noyau se trouve sur une partition avec un système de fichiers de type Ext3. Il faut donc absoluement mettre en dur l'option Ext3 journalling file system support, même si c'est flaggé EXPERIMENTAL (en effet, c'est maintenant parfaitement stable).

Mettez en dur /proc file system support et /dev/pts file system for Unix98 PTYs.

Ensuite, on peut passer au facultatif : mettez DOS FAT fs support et MSDOS fs support en modules pour pouvoir lire des disquettes formatée en DOS.

Si vous avez une partition FAT 16 ou FAT 32, qui est le système de fichier utilisé par Windows 3.x, 95, 98, ME et certains 2000 et XP, mettez en plus VFAT (Windows-95) fs support en module pour pouvoir lire et écrire sur ces partitions.

Ajoutez ISO 9660 CDROM file system support en module et activez l'option Microsoft Joliet CDROM extensions pour pouvoir lire des CD-ROMs.

Si vous avez une partition NTFS, qui est le système de fichier utilisé par Windows NT4, et la majorité des 2000 et XP, mettez NTFS file system support (read only) en module pour pouvoir y accéder en lecture seule sous Linux. L'option NTFS write support est flaggée DANGEROUS, donc je ne vous la conseille pas !

A la fin de la liste se trouvent trois sous-menus :
Console drivers

Activez VGA text console et éventuellement Video mode selection support pour pouvoir éventuellement changer la résolution en mode console en changeant des paramètres de LILO.

Sound

Si vous comptez utiliser l'architecture ALSA(qui fonctionne avec presque la totalité des cartes sons actuelles), mettez en module Sound card support uniquement.

USB support

Si vous avez des ports USB et que vous comptez les utiliser, activez en module Support for USB. Vous voyez alors apparaître plusieurs sections :
Bluetooth support

Ce menu concerne les périphériques Bluetooth.

Kernel hacking

Activez les options Kernel debugging et Magic SysRq key.

Library routines

Ne rien mettre (de toute façon, on ne peut même pas rentrer dans le menu !).

6.3.5.Enregistrer et quitter


Une fois que vous pensez que votre noyau est bien configuré, sélectionnez Exit et acceptez d'enregistrer la nouvelle configuration du noyau.

Voilà, c'est un premier essai dans l'objectif d'avoir le noyau parfait, c'est à dire un noyau qui vous permet de faire marcher tous vos périphériques sans option inutile. Vous verrez, vous aurez probablement à vous y reprendre à plusieurs fois avant d'avoir un noyau parfait... mais après, la configuration du noyau Linux n'aura plus aucun secret pour vous !

6.4. Compiler le noyau


6.4.1. La compilation


Assurez-vous que vous êtes toujours dans le répertoire /usr/src/linux-XXXXXX/. Lancez la compilation du noyau et des modules :

% make dep clean bzImage modules

Il faut alors s'armer de patience, surtout si vous avez un ordinateur peu puissant ! Sur un ordinateur récent, cela prend quelques minutes.

6.4.2. L'installation


Commencez par installer les modules :

# make modules_install

Puis copiez le noyau dans le répertoire /boot/ avec la commande suivante, en remplaçant X par le numéro de version du noyau :

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.X

Copiez également dans le même répertoire la System Map et faites une sauvegarde du fichier de configuration du noyau :

# cp System.map /boot/System.map-2.4.X
# cp .config /boot/config-2.4.X

Mettez à jour les liens symboliques qui se trouvent à la racine du système de fichiers : le nouveau noyau devient votre noyau par défaut, et le noyau actuel devient le noyau de secours :

# mv /vmlinuz /vmlinuz.old
# ln -sf /boot/vmlinuz-2.4.X /vmlinuz

6.4.3. Préparer le chargement automatique des modules


L'idéal est que les modules du noyau se chargent tout seuls quand on a besoin d'eux. Pour cela, il faut dire au système que quand il veut accéder au périphérique machin il doit charger le module truc. La procédure est d'écrire un fichier de configuration dans le répertoire /etc/modutils/, puis d'exécuter le script update-modules qui va concaténer tous les fichiers de ce répertoire et mettre à jour le fichier de configuration des modules /etc/modules.conf.

La carte réseau

Si vous avez bien suivi mes instructions pour la configuration du noyau, vous avez noté le nom du module de votre carte réseau. Créez un fichier /etc/modutils/ reseau et écrivez dans ce fichier la ligne suivante :

alias eth0 nom_du_module

nom_du_module est le nom du module de votre carte réseau, sans l'extension ".o". Si il n'était pas indiqué dans l'aide associée à l'option de votre carte réseau lors de la configuration du noyau, listez les fichiers du répertoire /lib/modules/numero_de_version_du_noyau/kernel/drivers/net/. Il y a normalement 2 fichiers : mii.o et un deuxième fichier d'extension .o. Ce deuxième fichier est le driver de votre carte réseau ; nom_du_module est alors le nom de ce fichier sans l'extension .o.

Cette ligne signifie tout simplement que quand le système veut accéder au device eth0 qui correspond à la première carte réseau Ethernet, il doit charger le module adéquat.

alias eth0 nom_du_module_de_la_carte_réseau_n°1
alias eth1 nom_du_module_de_la_carte_réseau_n°2
alias eth2 nom_du_module_de_la_carte_réseau_n°3

La carte graphique
Si vous avez une carte graphique avec accélération matérielle 3D avec une puce de marque 3Dfx, ATI, Intel i810, Matrox ou SiS, vous avez dû mettre l'option Direct Rendering Manager (DRM) dans le noyau avec un module correspondant à votre carte graphique, dont je vous avais donné le nom (cf Character devices). Créez un fichier /etc/modutils/video et écrivez dans ce fichier les lignes suivantes :

# update-modules

Le fichier /etc/modules

Commentez toutes les lignes de ce fichier, puis, si vous comptez utiliser les fonctions de firewalling, ajoutez les lignes suivantes :

ip_conntrack_ftp
ip_conntrack_irc

Les périphériques USB

Si vous avez des périphériques USB, installez les packages hotplug et usbutils qui permettent de brancher à chaud des périphériques USB sans se préoccuper de charger les modules à la main :

# apt-get install hotplug usbutils

6.4.4. Préparer le redémarrage


Le fichier de configuration de LILO

Dans cette section, nous allons nous intéresser à la configuration de LILO. Editez le fichier de configuration de LILO /etc/lilo.conf et modifiez-le en regardant le fichier de configuration d'exemple ci-dessous et en l'adaptant à votre configuration personnelle. Normalement, vous n'avez pas grand chose à modifier, et seulement quelques options ou définitions d'O.S. à ajouter ou retirer.

# /etc/lilo.conf
# Fichier de configuration de LILO

# Plus d'information dans "man lilo.conf"

# DEBUT de la partie GLOBALE

# Support des disques de grande capacité
lba32

# Disque sur lequel LILO va écrire le MBR
boot=/dev/hda

# La partition racine de Linux
root=/dev/hdXY

# Boot loader à utiliser
install=/boot/boot-menu.b

# Emplacement de la "map"
map=/boot/map

# Je veux que LILO affiche un menu pour choisir entre les O.S.
prompt

# Temps en dixièmes de secondes au bout duquel LILO
# lance l'O.S. définit par défaut
timeout=150

# Choix du mode VGA pour la console
vga=normal

# FIN de la partie GLOBALE

# DEBUT de la partie de définition des O.S.

# "Label" de l'O.S. booté par défaut
default=Linux

# Définition de Linux avec son noyau principal
image=/vmlinuz
	label=Linux
	read-only

# Définition de Linux avec son noyau de secours
image=/vmlinuz.old
	label=LinuxOLD
	read-only

# Définition d'un éventuel Windows 95, 98, ME, 2000 ou XP
# Partition sur laquelle est installé Windows
other=/dev/hdXY
	label=Windows

# FIN de la partie de définition des O.S.

Ecrire les changements sur le MBR

Maintenant que le fichier de configuration est prêt, exécutez LILO pour qu'il écrive les changements sur le MBR :

# lilo

Il vous affiche alors la liste des O.S. que vous avez définis :

Added Linux *
Added LinuxOLD

L'étoile correspond au système d'exploitation booté par défaut. Si il vous affiche des messages d'erreur, c'est probablement qu'il y a un problème dans le fichier de configuration ou dans les liens symboliques qui se trouvent à la racine du système de fichiers : faites les modifications nécessaires puis réexécutez LILO.

ATTENTION : Il faut exécuter lilo si vous avez modifié les liens symboliques qui se trouvent à la racine du système de fichiers et / ou si vous avez changé les fichiers vers lesquels ils pointent, même si vous n'avez pas modifié le fichier /etc/lilo.conf, sous peine de ne plus pouvoir démarrer Linux !

6.4.5. Redémarrer


Redémarrez sur le nouveau noyau :

# reboot