3. Les sources du noyau Linux

Dans cette partie, on s'appuie pas sur le gestionnaire de paquets de la distribution et on télécharge directement les sources du noyau Linux à partir du dépôt défini dans la liste des sources (fichier /etc/apt/sources.list).

Il faut bien reconnaître que s'attaquer à toutes les options de configuration du noyau Linux en partant de zéro est une tâche particulièrement ardue. Pour rendre la démarche plus aisée, on se propose de partir de la configuration fournie avec le paquet de la distribution. En procédant par modifications élémentaires à partir de cette configuration réputée sûre puisque permettant le fonctionnement du système actuel, on limite ainsi les possibilités d'erreurs.

Les versions stables du noyau évoluent fréquemment. Les questions ci-dessous sont basées sur la version courante de la série 2.6.xx.

1.

Quels sont les principaux canaux de diffusion des sources du noyau Linux ?

Rechercher un site web, un dépôt de code en ligne et le nom du paquet de la distribution.

  • Le site principal de publication des sources du noyau Linux est à l'adresse http://www.kernel.org/.

  • Le développement du système de contrôle de version git a été initié par les développeurs du noyau Linux. Depuis, des services en lignes ont été bâtis à partir de git. Les branches de développement du noyau sont disponibles sur le site GitHub à l'adresse https://github.com/torvalds/linux.

  • La distribution Debian GNU/Linux propose des paquets contenant les sources qui on servi à construire les paquets de noyau. Pour identifier ces paquets, on effectue une recherche dans le catalogue de la distribution.

    $ aptitude search linux-source
    p   linux-source         - Linux kernel source (meta-package)
    p   linux-source-2.6     - Linux kernel source (dummy package)
    p   linux-source-2.6.32  - Linux kernel source for version 2.6.32 with Debian patches
    p   linux-source-3.0.0   - Linux kernel source for version 3.0.0 with Debian patches
    

2.

Quels sont les modes de téléchargement des sources qui permettent de s'affranchir d'une interface graphique ?

La grande majorité des téléchargements se font via le protocole HTTP. Pour trouver l'outil permettant de lancer un téléchargement HTTP, on peut faire une requête par mot clé dans les pages de manuels des outils installés sur le système : apropos "network download".

Lorsque l'on utilise des serveurs rack, ceux-ci ne possèdent ni écran ni clavier. Il est donc nécessaire d'effectuer les opérations à distance sans recours à une interface graphique. On dispose de deux protocoles pour les transferts : FTP et HTTP. Les outils correspondant sont ncftp et wget.

Compte tenu des réponses à la question précédente, on peut utiliser les trois ressources suivantes.

  • Téléchargement à partir du site principal de publication kernel.org.

    $ wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2
    --  http://www.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2
    Résolution de www.eu.kernel.org... 130.239.17.4, 199.6.1.164
    Connexion vers www.eu.kernel.org|130.239.17.4|:80...connecté.
    requête HTTP transmise, en attente de la réponse...200 OK
    Longueur: 50355835 (48M) [application/x-bzip2]
    Saving to: `linux-2.6.32.tar.bz2'
    
    18% [===================>              ] 9 500 807    217K/s  eta 6m 46s
    
  • Téléchargement à partir du dépôt GitHub.

    $ wget https://github.com/torvalds/linux/tarball/v3.1-rc8
    --2011-10-04 00:43:19--  https://github.com/torvalds/linux/tarball/v3.1-rc8
    Résolution de github.com (github.com)... 207.97.227.239
    Connexion vers github.com (github.com)|207.97.227.239|:443...connecté.
    requête HTTP transmise, en attente de la réponse...302 Found
    Emplacement: https://nodeload.github.com/torvalds/linux/tarball/v3.1-rc8 [suivant]
    --2011-10-04 00:43:20--  https://nodeload.github.com/torvalds/linux/tarball/v3.1-rc8
    Résolution de nodeload.github.com (nodeload.github.com)... 207.97.227.252
    Connexion vers nodeload.github.com (nodeload.github.com)|207.97.227.252|:443...connecté.
    requête HTTP transmise, en attente de la réponse...200 OK
    Longueur: 98197772 (94M) [application/octet-stream]
    Sauvegarde en : «v3.1-rc8»
    
    100%[======================================>] 98 197 772  6,64M/s   ds 18s     
    
    2011-10-04 00:43:39 (5,14 MB/s) - «v3.1-rc8» sauvegardé [98197772/98197772]
    
    $ mv v3.1-rc8 linux-3.1-rc8.tar.bz2
    
    $ tar tvf linux-3.1-rc8.tar.bz2
    
  • Téléchargement à partir du gestionnaire de paquets de la distribution.

    $ # aptitude install linux-source-3.0.0
    Les NOUVEAUX paquets suivants vont être installés : 
      binutils{a} bzip2{a} cpp{a} cpp-4.6{a} gcc{a} gcc-4.6{a} libc-dev-bin{a}
      libc6-dev{a} libcloog-ppl0{a} libgmp10{a} libgmpxx4ldbl{a} libgomp1{a}
      libmpc2{a} libmpfr4{a} libppl-c4{a} libppl9{a} libpwl5{a} libquadmath0{a} 
      linux-libc-dev{a} linux-source-3.0.0 make{a} manpages-dev{a} 
    0 paquets mis à jour, 22 nouvellement installés, 0 à enlever et 0 non mis à jour.
    Il est nécessaire de télécharger 102 Mo d'archives. Après dépaquetage, 148 Mo seront utilisés.
    Voulez-vous continuer ? [Y/n/?]
    

3.

À quel groupe doit appartenir l'utilisateur normal pour pouvoir effectuer les opérations de compilation de modules ou du noyau ?

Rechercher dans la liste des groupes système, celui consacré à la manipulation des sources.

On cherche la chaîne src dans le fichier /etc/group et on ajoute l'utilisateur normal dans ce groupe.

# grep src /etc/group
src:x:40:

# adduser etu src
Ajout de l'utilisateur « etu » au groupe « src »...
Ajout de l'utilisateur etu au groupe src
Fait.

# id etu
uid=1000(etu) gid=1000(etu) groupes=1000(etu),24(cdrom),25(floppy),
      29(audio),30(dip),40(src),44(video),46(plugdev)

4.

Quel est le répertoire de l'arborescence système dédié au stockage des sources du noyau Linux ?

Faire une recherche dans le document Linux Filesystem Hierarchy.

C'est le répertoire /usr/src qui doit accueillir les sources du noyau.

On vérifie que les membres du groupe système src on bien accès à ce répertoire.

# chgrp -R src /usr/src

# chmod 2775 /usr/src

5.

Quelles sont les commandes «rituelles» d'installation des sources du noyau Linux ?

Pour chaque commande, expliquer les opérations réalisées et justifier le choix des options.

Il faut consulter les ressources suivantes : Debian Linux Kernel Handbook et Manuel de référence Debian - Chapitre 9.

Pour traiter cette question, on utilise les fichiers sources obtenus à l'aide du gestionnaire de paquets. D'après les documents de référence on doit utiliser la séquence de commandes suivante.

$ cd /usr/src/
$ tar xf linux-source-3.0.0.tar.bz21
$ ln -s linux-source-3.0.0 linux2
$ cd linux
$ cp /boot/config-3.0.0-1-amd64 .config3
$ make menuconfig4

1

Extraction de l'arborescence des sources du noyau.

2

Création d'un lien symbolique sur l'arborescence de travail. L'utilisation de ce lien permet de conserver plusieurs arborescences de sources. De cette façon, on peut travailler sur plusieurs versions de noyau.

3

Copie du fichier de configuration fourni avec le paquet de noyau. Ce fichier est réputé fiable puisqu'il correspond au noyau en cours d'exécution et que le système est opérationnel.

4

Lancement de l'interface des menus de configuration des options du noyau Linux. C'est à ce niveau que les «choses sérieuses» commencent.

La dernière commande n'est utilisable que si le paquet de bibliothèques de développement ncurses est installé. aptitude install libncurses-dev.