Le noyau Linux
Prérequis et objectifs
1. Prérequis
Les connaissances nécessaires à la certification LPIC-1 :
Édition de fichiers.
Commandes de gestion de répertoires et de fichiers.
Commandes d’archivage, de compression/décompression.
2. Objectifs
À la fin de ce chapitre, vous serez en mesure de :
Comprendre le rôle et la structure du noyau Linux.
Configurer le noyau en fonction du matériel et du rôle du système.
Compiler et installer une nouvelle version de noyau.
Gérer les modules dynamiques de noyau.
Diagnostiquer et résoudre les problèmes courants liés au noyau.
Connaître les principes de détection et de gestion des périphériques par udev.
Le noyau Linux
Ce sujet est divisé en trois parties de poids différents.
1. Les composants du noyau
Poids |
2 |
Objectifs |
Mettre en œuvre les composants du noyau nécessaires pour du matériel spécifique, pilotes matériels, ressources et nécessités système. Cela inclut la mise en place de différents types d’images noyau, la compréhension des versions stables et maintenues à long terme du noyau et des patches, ainsi que l’utilisation des modules de noyau. |
a. Compétences principales
-
Documentation des versions de noyau 2.6.x, 3.x et 4.x.
b. Éléments mis en œuvre
-
/usr/src/linux/
-
/usr/src/linux/Documentation/
-
zImage
-
Compression xz
2. Compilation du noyau
Poids |
3 |
Objectifs |
Configurer un noyau en incluant ou en excluant des fonctionnalités selon les besoins. Cela inclut compiler et recompiler le noyau si nécessaire, mettre à jour et documenter les modifications d’un nouveau noyau, créer une image initrd et installer de nouveaux noyaux. |
a. Compétences principales
-
/usr/src/linux/
-
Fichiers Makefile du noyau.
-
Cibles make pour les noyaux 2.6.x, 3.x et 4.x.
-
Personnaliser la configuration du noyau courant.
-
Construire un nouveau noyau et les modules appropriés.
-
Installer un nouveau noyau avec ses modules.
-
Vérifier que le gestionnaire d’amorçage peut accéder au nouveau noyau et aux fichiers associés.
-
Fichiers de configuration des modules.
-
Utiliser DKMS pour compiler les modules de noyau....
Les composants du noyau
Le noyau Linux est chargé de gérer les ressources matérielles de la machine et de les mettre à la disposition des différents programmes s’exécutant sur cette machine. Parmi ses principales tâches, on peut citer :
-
Gestion du ou des micro-processeurs : il donne accès au(x) processeur(s) aux différents programmes, en fonction de leur priorité, afin que tous puissent y accéder et qu’un programme ne puisse pas monopoliser le ou les processeurs (multitâche préemptif).
-
Gestion des périphériques : en coopération avec les pilotes de périphériques (drivers), il gère les différents périphériques matériels et traite les demandes des programmes qui veulent y accéder.
-
Gestion de la mémoire physique et virtuelle : il détermine le partage de la mémoire entre lui-même et les programmes et gère un mécanisme de mémoire virtuelle, permettant d’allouer davantage de mémoire que la machine n’en possède physiquement.
-
Gestion du stockage : il gère l’ensemble des périphériques de stockage (avec des pilotes de périphériques et des pilotes de systèmes de fichiers) et présente aux programmes une interface d’accès unique, sous forme d’une arborescence de répertoires et de fichiers, construite à partir de différents systèmes de fichiers.
-
Gestion du réseau : il prend en charge la communication sur les réseaux auxquels participe la machine, via les cartes d’interface réseau et leurs pilotes, et permet aux différents programmes d’émettre et de recevoir des messages.
-
Gestion des processus : il assure le chargement, l’exécution, le contrôle et la terminaison des programmes, sous forme de processus, leur permettant de s’exécuter en apparente ou en réelle simultanéité (selon les capacités processeur de la machine). Il gère la sécurité par le contrôle d’accès aux ressources en fonction des habilitations des processus et par l’isolation des zones mémoire qui leur sont allouées.
-
Gestion du contrôle d’accès...
Compilation du noyau
Il est rare d’avoir à compiler une nouvelle version du noyau à partir des fichiers sources. Cela peut même aller à l’encontre du contrat de support de la distribution utilisée.
On peut cependant vouloir modifier des paramètres du noyau, ajouter ou retirer des composants statiques ou des modules dynamiques, pour intégrer de nouveaux types de périphériques, corriger certains problèmes ou optimiser les performances et l’occupation mémoire.
Dans ce cas, la procédure à suivre nécessite plusieurs étapes, la configuration du noyau à générer étant la plus délicate. La compilation effective peut durer plusieurs dizaines de minutes, voire davantage selon le type de processeur et la mémoire disponible. Une fois le nouveau noyau généré, il est impératif de le tester soigneusement avant d’envisager de le passer en production.
1. Téléchargement des sources du noyau
Les fichiers sources du noyau sont disponibles sous deux formes : paquet logiciel ou fichier d’archive.
a. Paquet logiciel
La distribution de la machine cible fournit généralement des paquets logiciels contenant les fichiers sources du noyau supporté par votre version de distribution. Si le paquet logiciel correspond à la version que vous souhaitez compiler, c’est la méthode à privilégier.
Les fichiers sources du noyau seront installés dans un répertoire du répertoire /usr/src/kernels ou dans le répertoire /usr/src/linux*, le nom du répertoire correspondant à la version du noyau.
Distributions de type Red Hat
Le plus souvent, la compilation du noyau est liée à un module du noyau et non au noyau lui-même.
Dans ce cas, les distributions de type Red Hat proposent un paquet logiciel adapté : kernel-devel.
Si vous avez besoin de compiler une version personnalisée du noyau lui-même, il faut utiliser la méthode par fichier archive compressé.
Exemple
Installation du paquet logiciel kernel-devel sur une distribution RHEL 8.5 :
dnf install kernel-devel
Le paquet kernel-devel-4.18.0-372.19.1.el8_6.x86_64 est déjà installé.
Dépendances résolues.
Rien à faire. ...
Gestion et dépannage du noyau
Ce sujet concerne le suivi et le paramétrage dynamique du noyau et de ses modules dynamiques. Nous étudierons différentes commandes et outils qui permettent de lister, charger et décharger les modules LKM, de visualiser et de modifier dynamiquement les paramètres des modules et du noyau, de fixer ces paramètres pour les appliquer au démarrage du système.
Le service udev et les commandes permettant de suivre l’état des périphériques matériels détectés par le système sont traités dans la section Gestion des disques durs locaux du chapitre Gestion des périphériques de stockage.
1. Gestion des modules de noyau LKM
Les modules de noyau dynamiques (LKM, Loadable Kernel Module), définis à la compilation du noyau, sont gérés automatiquement. Certains, nécessaires au chargement et à l’initialisation du noyau, sont chargés en mémoire via le fichier disque virtuel initramfs. Le noyau charge également systématiquement au démarrage tous les modules spécifiés dans un fichier de configuration.
D’autres modules sont chargés à la demande, la première fois qu’un programme fait un appel système nécessitant leur utilisation. Inversement, il est possible de décharger de la mémoire des modules, s’ils ne sont plus utilisés.
Si une application nécessite le chargement d’un module non pris en charge par le noyau, ce dernier générera une erreur en réponse à sa demande. Pour que l’application puisse fonctionner, il faudra copier le fichier du module sur le système (s’il n’est pas déjà présent), le charger manuellement, puis le configurer en chargement automatique.
Différentes commandes et fichiers de configuration permettent de contrôler le fonctionnement des modules, de gérer leur chargement et leur déchargement, ainsi que leurs paramètres.
a. Emplacement des modules
Les fichiers contenant le code exécutable des modules sont stockés dans l’arborescence sous /lib/modules. Chaque version de noyau installée sur le système a son répertoire de stockage des modules.
Exemple
Version du noyau...
Validation des acquis : questions/réponses
Répondez à ces questions ouvertes, comparables à celles qui pourront vous être posées lors de la certification, mais ces dernières seront sous forme de QCM ou demandant une réponse courte saisie au clavier.
1. Questions
1 Comment déterminer si un fichier image du noyau est de type bzImage ou zImage ?
2 Que signifie LKM ?
3 Depuis un terminal distant en mode caractère, quelle est la commande la plus pratique pour générer le fichier .config du noyau à générer ?
4 Par quelle(s) commande(s) peut-on créer un fichier disque virtuel de démarrage ?
5 Dans quel répertoire se trouvent les modules de noyau ?
6 Quel est le rôle de la commande rmmod ?
7 La commande insmod ext4 échoue à charger le module. Pourquoi ?
8 À quoi sert la commande depmod ?
9 Quelle commande donne la liste et la valeur courante de tous les paramètres du noyau et des modules ?
10 À quoi sert la ligne alias ext3 ext4 dans un fichier de configuration de type sysctl.conf ?
11 Quelle commande affiche les informations sur les bus USB et les périphériques qui y sont connectés ?
2. Résultat
Référez-vous aux pages suivantes pour contrôler vos réponses. Pour chacune de vos bonnes réponses, comptez un point.
Nombre de points : /11...
Travaux pratiques
Ces travaux pratiques proposent un atelier mettant en œuvre certains des points abordés dans ce chapitre. Pour chaque étape est donné un exemple commenté de réalisation, à adapter suivant la configuration de vos systèmes.
1. Gestion d’un module de noyau LKM
Sur un système où est installée une distribution Debian, on décide de tester le fonctionnement du module dynamique de gestion des systèmes de fichiers de type Btrfs.
Pour cela, on utilise une clé USB (ou un espace de stockage disponible) pour y créer un système de fichiers Btrfs. On vérifiera au fur et à mesure des opérations le comportement du module dynamique correspondant.
Commandes et fichiers utiles
-
/proc/modules
-
lsusb
-
blkid
-
mkfs
-
mount
-
umount
-
lsmod
-
modinfo
-
modprobe
-
/lib/modules
Manipulations
1. |
Vérifiez que le module de gestion des systèmes de fichiers de type Btrfs n’est pas chargé en mémoire. Vérifiez qu’il fait partie des modules installés. |
2. |
Après avoir inséré la clé USB, affichez les informations la concernant, en particulier son fichier spécial associé. |
3. |
Créez un système de fichiers de type Btrfs sur la clé USB. |
4. |
Vérifiez que le module de gestion des systèmes de fichiers de type Btrfs a été automatiquement chargé en mémoire. |
5. |
Déchargez le module de la mémoire. |
6. |
Montez le système de fichiers de la clé USB dans l’arborescence globale. Vérifiez que le module de gestion des systèmes de fichiers de type Btrfs est chargé en mémoire. Essayez de le décharger. |
7. |
Démontez le système de fichiers. Déchargez le module btrfs. Renommez son fichier dans le répertoire des modules. Essayez de monter à nouveau le système de fichiers de la clé USB dans l’arborescence globale. Corrigez le problème. |
Résumé des commandes et résultat à l’écran
1. |
Vérifiez que le module de gestion des systèmes de fichiers de type Btrfs n’est pas chargé en mémoire. Vérifiez qu’il fait partie des modules installés. |
Le serveur srvdebian (distribution Debian 11) n’a...