FREE, la liberté n'a pas de prix ! Hébergement mutualisé chez OVH finistere meteo Get Firefox! mail
deco1 deco2
accueil calendier marque-pages memo mon_cv outils
Linux le noyau
par Stéphane Le Caër
01 février 2007
GNU/Linux

Introduction

Linux est le noyau du système d'exploitation de type Unix.

Je regroupe ici toutes les notes que j'ai pu prendre lors de manipulations réalisées sur le noyau Linux sur la distribution Debian dans les versions Sarge et Etch et sur Ubuntu.

Quelques adaptations seront peut être nécessaires sur les autres distributions telles que RedHat, Fedora...

Plan

point_bleu Présentation

point_bleu  Sauvegarder avant de reconstruire

point_bleu  Compilation du noyau
    - Les Pré-requis
    - Récupérer les sources du noyau
    - Configurer le noyau
    - Compiler le noyau
    - Installer le noyau

point_bleu  Patcher le noyau
    - Introduction
    - Le patch Bootsplash
        - Changer le thème de Bootsplash

point_bleu  Liens

point_bleu  Historique

 

Présentation

Créé par Linus Torvalds, Linux est maintenant développé par une très large communauté.

Le noyau prends en charge :
  • La mémoire
    • Allocation,
    • Nettoyage,
    • Swap,
    • ...
  • Les processus
    • avec l'ordonnaceur,
    • en répartissant les processus sur les processeurs,
    • en gérant les priorités,
    • ...
  • Le périphériques
    • droits d'accès et interface,
    • ...
  • Les systèmes de fichiers

Le noyau est présenté sous la forme d'un fichier qui se trouve dans le répertoire dans /boot. Il est nommé la plupart du temps vmlinuz-x.y.z. Où x correspond au numéro majeur de la version, y au numéro mineur. Le troisième chiffre z indique le numéro de révision, ce qui correspond à l'intégration de correctifs ou de nouvelles fonctionnalités mineures. Les versions ayant un numéro mineur pair sont stables. Les numéros mineurs impaire correspondent à des versions de développement. Le nom du noyau peut être complété afin de donner des indications supplémentaires.

C'est le lanceur (boot loader ; grub ou lilo) qui charge le noyau.

Il y a trois autres fichiers à prendre en compte qui sont System.map-x.y.zinitrd.img-x.y.z et config-x.y.zSystem.map est le fichier de symboles du noyau. Il cartographie les points d'entrées des fonctions et les adresses des structures de données du noyau. initrd.img s'il existe indique qu'un disque virtuel initiale (Initial Ram Disk) est utilisé pour charger le système. Ceci est utilisé notamment lorsque le noyau ne se trouve pas sur le même système de fichier racine /, avec des disques RAID, si le support n'est pas accessible en écriture (CD-ROM) et surtout si le noyau est modulaire. Quand à config-x.y.z, il s'agit des options de configurations qui ont été utilisées pour compiler le noyau.

Si le noyau a été configuré pour être modulaire, Les modules sont placés dans /lib/modules/x.y.z/.


La version 2.6 de Linux est sortie en décembre 2003 et continue à ce jour à être développée.

Info La version couramment chargée par le système peut être identifiée de la façon suivante :
    # uname -r
    2.6.18-3-686


Pourquoi décident on de mettre à jour ou de re-configurer le noyau de sa distribution ?

Les distributions sont livrées la plupart du temps avec un noyau standard et autant que possible passe partout. Il y donc a plusieurs raisons qui peuvent nous amener à reconstruire le noyau :
  • Optimiser en se rapprochant le plus possible des composants de la plate-forme matérielle. Par exemple, pour avoir un noyau optimisé pour une plate-forme Pentium.
  • Alléger en retirant tous les pilotes non utilisés.
  • Patcher pour prendre en charge une nouvelle fonctionnalité.
  • Ajouter la prise en charge de nouveaux composants.
  • ...


Sauvegarder avant de reconstruire

Avant toutes manipulations sur le noyau, il convient de s'assurer de pouvoir redémarrer la machine avec un noyau qui fonctionne. Ceci est surtout vrai si l'on utilise la méthode classique de compilation et d'installation du noyau.

Il faut pour cela modifier le fichier de configuration du lanceur (lilo ou grub) afin de garder la possibilité de démarrer le système avec le noyau actuellement utilisé.

Pour ce faire, il suffit de recopier dans /boot/grub/menu.lst (pour grub) les lignes correspondantes au noyau courant et d'ajouter une commentaire au titre afin de pouvoir identifier cette version du noyau :
title           Ubuntu, kernel 2.6.15-27-386 (SAUVEGARDE)
root            (hd0,0)
kernel          /vmlinuz-2.6.15-27-386 root=/dev/hde6 ro quiet splash
initrd          /initrd.img-2.6.15-27-386
savedefault
boot

Il est également préférable de sauvegarder le noyau courant, les fichiers et modules associés :
# tar czvf noyau-2.6.15-27-386.tgz /boot/vmlinuz-2.6.15-27-386 \
 /boot/System.map-2.6.15-27-386 \
 /boot/config-2.6.15-27-386 \
 /boot/initrd.img-2.6.15-27-386 \
 /lib/modules/2.6.15-27-386/ \
 /boot/grub/menu.lst



Compilation du noyau

Les Pré-requis

Afin de pouvoir compiler le noyau, il faut s'assurer d'avoir les outils nécessaires à cette opération.

Les paquets nécessaires sont :
Paquet Description
kernel-package Fournit les moyens de créer un paquet Debian d'installation d'un noyau : make-kpkg.
curl Curl est un client qui permet de récupérer des fichiers sur un serveurs en s'appuyant sur les protocoles HTTP, HTTPS, FTP et GOPHER.
gcc Compilateur C
libc6-dev Dépendances nécessaires à la compilation des programmes utilisant
la librairie stantard C.
libncurses5 Librairies de ncurses
libncurses5-dev Entêtes, librairies statiques et liens symboliques de ncurses
bootcd-mkinitrd Contient l'outil mkinitrd qui est utilisé pour créer le disque virtuel initiale.

Installation des paquets :
# apt-get install kernel-package
# apt-get install gcc curl libc6-dev
# apt-get install libncurses5 libncurses5-dev

Info Pour configurer le noyau avec une interface X-Windows plus "sexy" que le mode texte qui s'appuie sur la librairie ncurses, il faudra sous Gnome installer le paquets GTK+ suivants :
# apt-get install libgtk2.0-dev \
    libglib2.0-dev \
    libglade2-dev \
    glade-gnome-2 


Récupérer les sources du noyau

Les sources peuvent être téléchargés sur le site Kernel.org sous la forme d'une archive ou l'on peut s'appuyer sur sa distribution pour récupérer ces sources à partir d'un parquet mis à disposition sur cette dernière. Sous Debian et Ubuntu, il s'agira d'un paquet Debian (.deb).


Récupérer les sources sur Kernel.org :

Le téléchargement et l'installation des sources se fait de la manière suivante :
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.2.tar.bz2
--22:34:51--  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.2.tar.bz2
           => `linux-2.6.19.2.tar.bz2'
Résolution de www.kernel.org... 204.152.191.37
Connexion vers www.kernel.org|204.152.191.37|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 42 729 366 (41M) [application/x-bzip2]

100%[====================================>] 42 729 366   220.29K/s   ETA 00:00

22:38:11 (209.11 KB/s) - « linux-2.6.19.2.tar.bz2 » sauvegardé [42729366/42729366]
La version stable 2.6.19.2 a été mise en ligne le 10 janvier 2007


Récupérer les sources sous la forme d'un paquet :

La récupération du paquet contenant les sources du noyau peut être faite en ligne de commandes avec apt ou en mode graphique avec Synaptic sous Debian et Ubuntu. Je n'aborde ici que l'utilisation de la ligne de commande.

Ligne de commande :
# apt-cache search linux-source-2.6*
linux-patch-debian-2.6.18 - Debian patches to version 2.6.18 of the Linux
linux-source-2.6.18 - Linux kernel source for version 2.6.18 with patches
# apt-get install linux-source-2.6.18

Les fichiers installés par le paquet sont les suivants :
    /usr/share/doc/linux-source-2.6.18/README.Debian
    /usr/share/doc/linux-source-2.6.18/changelog.Debian.gz
    /usr/share/doc/linux-source-2.6.18/copyright
    /usr/src/linux-source-2.6.18.tar.bz2


Installer les sources :

Quel que soit la façon dont on a récupéré les sources, il faut ensuite décompresser l'archive contenant ces derniers.

La convention veut que les sources soient déposés dans le répertoire /usr/src et qu'un lien symbolique nommé linux soit créer en pointant sur le répertoire contenant les sources de la version courante. Ce dernier point n'est pas nécessaire.

# cd /usr/src
# tar xjvf linux-source-2.6.18.tar.bz2
# rm linux-source-2.6.18.tar.bz2
# ln -s linux-source-2.6.18 linux

Info S'il y a eu plusieurs essais de compilation, il peut être utile de faire un bon coup de nettoyage dans le répertoire source afin de repartir à zéro. Ceci peut être réalisé en faisant appel à Mr Propre :
    # make mrproper
Cette opération a pour but de supprimer les objets générés et de supprimer le fichier de configuration .config.


Configurer le noyau

Le noyau peut être configuré afin de coller au mieux à la plate-forme hébergeant le système, pour désactiver des fonctionnalités qui ne seront pas utilisées (PCMCIA, Firewire, RAID...) ou en activant des fonctions qui ne sont pas activées par défaut (NFS en écriture, Bootsplash...).

La compilation du noyau s'appuie sur le fichier .config qui contient tous les éléments de configuration.

Si le fichier .config n'existe pas, c'est le fichier par défaut qui sera pris en compte. Le nom du fichier sera identifié comme suite :
# echo /boot/config-`uname -r`


Il peut être intéressant de récupérer un fichier existant qui servira de base de configuration. Ceci peut se faire comme suite :
# cd /usr/src/linux
# cp /boot/config-2.6.17-2-686 .config
# make oldconfig

make oldconfig permet d'adapter le fichier à la nouvelle version du noyau. Si un paramètre n'existait pas dans la version précédente du noyau, cette procédure demandera quelle est la valeur qui doit lui être appliquée.
Dans le doute, il suffit de valider la valeur par défaut en appuyant sur Entrée.

La configuration se lance soit en mode texte via la librairie ncurses soit en mode graphique. Ceci dépends des préférences de chacun, de la présence ou non d'un environnement graphique et des dépendances qui ont été installées précédemment.


Configurer le noyau en mode texte :

# cd /usr/src/linux
# make menuconfig

make_menuconfig.png


Configurer le noyau en mode graphique :

# cd /usr/src/linux
# make gconfig

make_gfonfig.png


Une fois la configuration du noyau terminée, elle faut la sauvegarder dans le fichier .config. Cette remarque est surtout valable pour l'outil graphique dans l'environnement Gnome qui ne mets pas de message d'avertissement dans ce sens. En mode texte, il est bien demandé si l'on souhaite sauvegarder la configuration.


Compiler le noyau

Une fois la configuration du noyau réalisée, il faut passer à la compilation de celui-ci. Cette procédure se déroule en plusieurs étapes.

La version 2.4 obligeait à réaliser les opérations suivantes :
  • make dep
  • make clean
  • make bzImage
  • make modules

Avec la version 2.6, la procédure est simplifiée. make dep n'existe plus et make qui équivaut à make all enchaîne : vmlinuz, bzImage et modules.

Avec Debian et les distributions dérivées il existe un outil qui permet créer un paquet Debian à partir des sources. Ce qui permet d'installer et de désinstaller le noyau comme on le ferait avec une application. Cet outil s'appel make-kpkg.


Compilation classique d'un noyau 2.6 :

Avant de commencer, il faut éventuellement nettoyer les anciens objets créées lors de précédentes compilations ou tentatives de compilation :
# cd /usr/src/linux
# make clean

Compiler le noyau :
# make

Cette opération peut être longue, cela dépends de la machine. Sur un portable Compaq Armada E500 (PIII 650Mhz), il faut compter un peu plus de 2h30.

Les principaux fichiers générés sont arch/i386/boot/bzImage et System.map.


Créer un paquet Debian pour le noyau :

L'outil make-kpg permet de réaliser l'opération décrite précédemment et de créer un paquet Debian contenant tous les fichiers nécessaires à l'installation.

Tout comme pour une compilation classique, il faut nettoyer les anciens objets. Cette opération doit être réalisée après avoir configuré le noyau. Car la procédure crée un fichier include/linux/version.h. make-kpkg crée ce fichier s'il n'existe pas mais ne le mets pas à jour s'il existe déjà. L'option --append-to-version ne sera donc pas prise en compte si le répertoire source n'est pas nettoyé :
# cd /usr/src/linux
# make-kpkg clean

Ensuite, il faut lancer la commande de compilation et de création du paquet :
make-kpkg --append-to-version -pentium \
            --revision 1 \
            --initrd \
            kernel_image
  • --append-to-version
    Permet d'influer sur la version du noyau et donc sur le chemin de recherche des modules
    (variable EXTRAVERSION du Makefile).
  • --revision
    C'est la version du paquet Debian affiché par la commande dpkg -l.
  • --initrd
    Indique d'inclure dans la paquet le nécessaire pour générer le disque virtuel d'initialisation (Init Ram Disk).
  • kernel_image
    C'est la commande qui permet d'enchaîner compilation du noyau, des modules et de la création du paquet.
Le paquet généré est placé dans /usr/src. La règle pour nommer le fichier est la suivante :
          linux-image-(version du kernel)(append-to-version)_(revision)_(architecture).deb

Et le paquet s'appel : linux-image-(version du kernel)(append-to-version)

Ici le fichier du paquet sera nommé : linux-image-2.6.19.2-pentium_1_i386.deb
et le paquet quand à lui s'appel : linux-image-2.6.19.2-pentium

Il ne reste plus qu'à l'installer...

Installer le noyau

Après avoir compilé le noyau et les modules, il reste à l'installer et à configurer le lanceur (grub ou lilo).

Installer le noyau manuellement :

Installer les modules :
# cd /usr/src/linux
# make modules_install

Les modules sont copiés dans /lib/modules/2.6.19.2/.

Copier le noyau, le fichier de symboles et celui de configuration dans le répertoire de boot, en prenant soins de renommer ces fichiers afin de pouvoir les identifier parmi d'autres :
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.19.2
# cp System.map /boot/System.map-2.6.19.2
# cp .config /boot/config-2.6.19.2

Créer le Disque Virtuel Initiale (Initial Ram Disk) :
# mkinitrd -o /boot/initrd.img-2.6.19.2 /lib/modules/2.6.19.2

Configurer le lanceur pour qu'il prenne en compte le nouveau noyau. Ici grub :
# vi /boot/grub/menu.lst
...
## ## End Default Options ##
...

title           kernel 2.6.19.2
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.19.2 root=/dev/hda1 ro
initrd          /boot/initrd.img-2.6.19.2
quiet
savedefault
boot
...

TESTER !...


Installer le noyau à partir du paquet Debian :

Le paquet contenant le noyau s'installe comme tout autre paquet avec la commande dpkg :
# cd /usr/src
# dpkg -i linux-image-2.6.19.2-pentium_1_i386.deb
Sélection du paquet linux-image-2.6.19.2-pentium précédemment désélectionné.
(Lecture de la base de données... 85840 fichiers et répertoires déjà  installés.)
Dépaquetage de linux-image-2.6.19.2-pentium (à  partir de linux-image-2.6.19.2-pentium_1_i386.deb) ...
Done.
Paramétrage de linux-image-2.6.19.2-pentium (1) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Running postinst hook script /sbin/update-grub.
You shouldn't call /sbin/update-grub. Please call /usr/sbin/update-grub instead!

Searching for GRUB installation directory ... found: /boot/grub
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Found kernel: /boot/vmlinuz-2.6.19.2-pentium
Found kernel: /boot/vmlinuz-2.6.18-3-686
Found kernel: /boot/vmlinuz-2.6.17-2-686
Updating /boot/grub/menu.lst ... done

Le noyau est installé.


Patcher le noyau

Introduction

Pour que le noyau prenne en charge de nouvelles fonctionnalités, il peut être nécessaire de modifier ses sources parce que ces fonctionnalités ne sont pas disponibles sous la forme de module. Soit par choix, soit parce que cela est techniquement impossible.

L'ensemble contenant les modifications de sources du noyau est appelé patch.


Le patch Bootsplash

Bootsplash est un patch permettant d'agrémenter la console d'un environnement graphique, d'une image de fond et d'une barre de progression pendant la phase de démarrage. Ceci s'appuie sur des thèmes qui peuvent être téléchargés ou construits soit même.

Pour que cette fonction puisse fonctionner, il faut :
  • Patcher le noyau
  • Installer les composants systèmes de Bootsplash (Configuration, thèmes...)
  • Configurer le lanceur (grub ou lilo)

Attention Le patch Bootsplash ne peut être appliqué que sur certaines version du noyau.

Editer le fichier /usr/src/kernel-patches/all/apply/bootsplash pour en connaitre la liste :

KVERSIONS=(2.4.18 2.4.20 2.4.21 2.4.22 2.4.23 2.4.24 2.4.25 2.6.0-test9 2.6.0-test10 2.6.0-test11 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.6.10 2.6.14 2.6.15 2.6.16 2.6.17 2.6.18)


Les images qui suivent sont issues du thème debian-white (mirroir) :

bootsplash-silent
silent
bootsplash
bootsplash


Récupérer les sources du patch :

# apt-get install linux-patch-bootsplash

Les sources sont placés dans le répertoire /usr/src/kernel-patches.


Configurer le noyau :

Il faut ensuite s'assurer que les options suivantes du noyau sont sélectionnées dans sa configuration :
    Graphics support --->
        <*> Support for frame buffer devices
        [*] VESA VGA graphics support
    Console display driver support --->
        <*> Framebuffer Console support
    Logo configuration --->
        [*] Bootup logo
        [*] Standard black and white Linux logo (NEW)
        [*] Standard 16-color Linux logo (NEW)
        [*] Standard 224-color Linux logo (NEW)

Après l'application du patch, une nouvelle option sera présente dans le fichier de configuration :
  Graphics support --->
      Bootsplash configuration --->
             [*] Bootup splash screen


Créer le paquet Debian :

# make clean
# make-kpkg --append-to-version -splash \
            --revision 1 \
            --added-patches bootsplash \
            --initrd \
            kernel_image

La procédure de construction du noyau, fait une pause pour demander la valeur à appliquer au paramètre de configuration BOOTSPLASH. Répondre y :
*
* Bootsplash configuration
*
Bootup splash screen (BOOTSPLASH) [N/y/?] (NEW) y


Installer le noyau depuis le paquet Debian : voir ici


Installer les composants système de Bootsplash :

# apt-get install bootsplash
Paramétrage de bootsplash (3.3-2) ...
update-initramfs: Generating /boot/initrd.img-2.6.18-splash

Le paquet bootsplash contient le script de démarrage qui pilotera l'animation lors de la phase de boot et les utilitaires nécessaires au fonctionnement aussi qu'à l'insertion des images dans le disque virtuel initiale (Initial Ram Disk).
Le thème par défaut sera également installé (bootsplash-theme-debian).

Les thèmes sont installés dans le répertoire /etc/bootsplash/themes/.


Configurer le lanceur (grub) :

Pour terminer l'installation, il faut configurer le lanceur en ajoutant les arguments vga=791 et splash=silent :
# vi /boot/grub/menu.lst
...
## hiddenmenu
# Hides the menu by default (press ESC to see the menu)
hiddenmenu
...
## ## End Default Options ##
...
title Debian GNU/Linux, kernel 2.6.18-splash
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-splash root=/dev/hda1 ro vga=791 splash=silent
initrd /boot/initrd.img-2.6.18-splash
savedefault


Redémarrer la machine.


Changer le thème de Bootsplash


Pour changer thème le thème par défaut de Bootsplash, il faut :
  • Télécharger le thème
  • Installer le thème
  • Mettre à jour le disque virtuel initiale (Initial Ram Disk)

Télécharger le thème :

Plusieurs thèmes sont disponibles sur GNOME-Look dans la rubrique Splash Screens.


Installer le thème :

# cd /etc/bootsplash/themes
# tar xvf ~/Desktop/22400-debian-white-bootsplash.tar
# rm current
# ln -s debian-white current

Attention Attention:
L'archive du thème Debian-White qui se trouve sur GNOME-Look.org contient le répertoire etc/bootsplash/themes/linux/ qu'il faut prendre soins de supprimer pour faire le ménage. Et le nom du répertoire contenant le thème doit s'appler linux/ et non debian-white-bootsplash.tarbian-white/.

J'ai reconstruit l'archive, elle peut être téléchargée depuis ici.


Mettre à jour le disque virtuel initiale (Initial Ram Disk) :

Pour que Bootsplash prenne en compte la nouvelle image affichée dès le démarrage (silent) et sur laquelle est affichée la barre de progression, il faut mettre à jour le disque virtuel initiale (initrd) :
# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.18-splash

Liens

Historique

Version Date Commentaire
1.0 01/02/2007 Mise en forme de mes dernières notes sur le sujet
1.2 10/02/2007 Patch Bootsplash

 
  Get FirefoxKompoZer
 
Création de la page :
Mise à jour :
 
01/02/2007
09/11/2010

 

Accueil     Calendrier     Marque-Pages     Mémento     Mon Curriculum     Outils
Ecrivez moi