Files
ft_linux/docs/ft-linux/commentaire-du-sujet.md
2026-10-23 11:31:19 +02:00

12 KiB
Raw Blame History

Commentaire du sujet ft_linux 3.6

Chaque bloc suit le PDF. Le terme est expliqué au moment où le sujet l’emploie. Les cinq liens ont leur fiche dans references/. La liste des paquets est détaillée dans paquets.md.

Une distribution, ici, c’est un système qu’on peut allumer : un bootloader, un noyau, une hiérarchie de fichiers, des programmes, un moyen de démarrer les services. Le sujet demande d’en construire une, petite, qui marche.

I. Introduction

« Build a basic, but functional, linux distribution. » Basique : pas d’environnement graphique dans l’obligatoire, pas d’installateur type Debian. Fonctionnelle : elle boote, on s’y connecte, les commandes de la liste répondent, le réseau sort vers Internet.

« This subject is not about Kernel programming, but it’s highly related. » On ne écrit pas un ordonnanceur ni un pilote. On compile le noyau publié par kernel.org, on le configure, on l’installe. La programmation du noyau, c’est Little Penguin puis KFS. Cette distro est la machine sur laquelle ce code tournera.

« This distro will be the base for all your kernel projects. » Tout le code noyau des projets suivants s’exécute ici, pas sur la distribution de l’école. D’où les choix durables : QEMU, BIOS, GRUB, possibilité de compiler.

« This is your userspace, take care of it. » L’espace utilisateur, c’est tout ce qui n’est pas le noyau : shells, ls, bibliothèque C, udev, init. Le noyau tourne en mode privilégié. Les programmes tournent en mode utilisateur et lui demandent des services (ouvrir un fichier, envoyer un paquet réseau). Le sujet dit d’en prendre soin : une libc cassée, et plus rien ne démarre.

II. Objectifs

Construire un noyau Linux. Récupérer les sources, lancer la configuration (make menuconfig ou un fichier .config), compiler, installer l’image. Le résultat est un fichier que GRUB charge en mémoire. Ce n’est pas le noyau de l’hôte.

Installer les binaires de la liste. Un binaire est un programme déjà compilé, prêt à être exécuté. On ne les télécharge pas tout faits : on compile les sources. La liste est un inventaire, pas l’ordre de compilation. L’ordre est celui du livre LFS, voir references/lfs.md.

Hiérarchie conforme aux standards. Le mot standards du PDF est un lien vers le FHS 3.0. Détail des répertoires : references/fhs.md. En pratique : /bin, /etc, /usr, /var, /boot existent et contiennent ce que cette norme y met.

Se connecter à Internet. La machine virtuelle obtient une adresse, une route par défaut, et un résolveur DNS. Ensuite ping ou un téléchargement vers l’extérieur réussit. Les paquets qui servent à ça sont IPRoute2 (ip) et Inetutils. Le sujet demande en plus curl ou wget pour la soutenance.

III.0.1 Ressources

The Bible. Lien vers Linux From Scratch, édition stable. C’est la recette. Fiche : references/lfs.md. Édition lue pour ces notes : 1er septembre 2025.

How to build a Linux kernel. Cette phrase n’est pas un lien. Le sujet constate qu’il existe beaucoup de tutoriels pour configurer, compiler et lancer un noyau. Le chapitre 10 de LFS est celui qui compte pour rester cohérent avec le reste. Les idées stables, quel que soit le tutoriel :

  • make defconfig ou make menuconfig produit .config, la liste de ce qui sera compilé dans le noyau ou en module.
  • make produit l’image compressée, souvent bzImage.
  • On la copie dans /boot sous le nom imposé par le sujet.
  • GRUB doit connaître ce nom, sinon le menu boote un fichier qui n’existe pas.
  • CONFIG_LOCALVERSION (ou EXTRAVERSION dans le Makefile) sert à coller le login dans la chaîne qu’affiche uname -r.

Autotools. Lien vers le manuel Automake. La famille entière (M4, Autoconf, Automake, Libtool) est dans la liste de paquets. Fiche : references/autotools.md.

III.0.2 Instructions

Machine virtuelle. Exemples : VirtualBox, VMWare. Le système construit ne s’installe pas sur le disque physique de l’ordinateur. Il vit dans un disque virtuel, lancé par un hyperviseur. QEMU en est un. Les deux noms du sujet sont des exemples. KFS, plus tard, suggère KVM, l’accélération utilisée par QEMU.

REQUIRED, SHOULD, this, that. REQUIRED : obligatoire. SHOULD : fortement recommandé. this ouvre POSIX, that ouvre la LSB. Le sujet dit de les lire maintenant et de garder ces standards en tête. Il dit aussi qu’on ne sera pas noté sur leur respect. Fiches : posix.md, lsb.md.

Noyau >= 4.0, stable ou non. 4.0 est sorti en 2015. « Stable ou non » veut dire : une version stable (6.16.1) ou une rc, un snapshot, du moment que le numéro est au moins 4. Le livre LFS de septembre 2025 construit le 6.16.1. Ça passe. Un noyau 3.x est hors sujet.

Sources dans /usr/src/kernel-$(version). $(version) est la version réelle, par exemple 6.16.1. Le répertoire doit porter ce nom. /usr/src est l’emplacement FHS pour les sources. LFS, par défaut, compile plutôt depuis le dossier où les archives ont été déballées. Le sujet ajoute ce chemin. À la soutenance, ce répertoire existe et contient les sources de ce noyau.

Au moins trois partitions : root, /boot, swap. Une partition est une découpe du disque. root est la partition montée sur /. /boot est une autre partition, montée sur le répertoire /boot, pour que GRUB lise le noyau avec un système de fichiers simple. Le swap est une partition sans système de fichiers : le noyau y déverse des pages mémoire. Elle apparaît dans /etc/fstab avec le type swap. On peut en ajouter d’autres (/home, /usr). On ne peut pas en avoir moins de trois.

kernel_module loader, comme udev. Un module est un morceau de noyau chargé à la demande (fichier .ko), par exemple le pilote d’une carte réseau. Un chargeur reçoit l’événement « ce matériel vient d’apparaître » et charge le bon module. udev fait cela. Eudev en est un fork, cité dans la liste. Le LFS de 2025 n’utilise plus Eudev : il prend le programme udev dans l’archive systemd, tout en gardant SysVinit comme PID 1. Le sujet dit que udev est un exemple : un équivalent suffit, pourvu qu’un module se charge quand le matériel apparaît.

La version contient le login. uname -r doit montrer le login. L’exemple du PDF est 4.1.2-<student_login>. On l’obtient en donnant au noyau un suffixe (CONFIG_LOCALVERSION="-fgras-ca" ou le champ EXTRAVERSION). Le 4.1.2 de l’exemple est un exemple de numéro, pas la version à compiler.

Le nom du fichier dans /boot. vmlinuz-<linux_version>-<student_login>. vmlinuz est le nom traditionnel de l’image compressée (le z vient de la compression). Deux lectures du sujet coexistent :

  • linux_version est le numéro amont (6.16.1) et le login n’est qu’à la fin du nom de fichier ;
  • la chaîne de version contient déjà le login, et le nom de fichier ajoute le login une seconde fois.

À trancher avant de configurer GRUB, et à pouvoir expliquer. Ce qui est sûr : uname -r contient le login, le fichier dans /boot suit le modèle choisi, et la config du bootloader pointe vers ce fichier. Le sujet dit : « Adapt your bootloader configuration to that. »

Hostname = login. Le nom de la machine, dans /etc/hostname, est le login étudiant. L’invite et la commande hostname l’affichent. Ce n’est pas le nom lfs du livre.

32 ou 64 bits. x86 (i386, en pratique i686) ou x86_64. Le livre LFS documente les deux. Le choix fige le compilateur, le format ELF des binaires, et la commande QEMU. KFS, ensuite, écrit un noyau i386 : une distro 64 bits devra quand même savoir produire du 32 bits.

Logiciel de gestion centrale, comme SysV ou SystemD. C’est le processus numéro 1, lancé par le noyau en dernier. Il démarre le reste : disques, réseau, console, login. SysV enchaîne des scripts shell (/etc/rc.d/init.d/). systemd enchaîne des unités. La liste du sujet contient Sysvinit, pas systemd. Le livre stable de septembre 2025 est la variante SysV. systemd est permis par la phrase, pas par la liste.

Bootloader, comme LILO ou GRUB. Programme minuscule installé dans le secteur de démarrage. Le firmware (BIOS) le charge, lui charge le noyau. LILO est l’ancien. GRUB est dans la liste, et c’est celui que KFS redemande. « BIOS legacy » : le firmware appelle le secteur 0 du disque. L’UEFI appelle un fichier .efi. KFS parle du BIOS et d’un en-tête multiboot, donc GRUB installé pour le BIOS.

GRUB doit être adapté au nom du noyau. Le fichier grub.cfg (ou l’équivalent) contient le chemin du vmlinuz-... et, en général, celui de l’initramfs s’il y en a un. LFS SysV peut booter sans initramfs si le pilote du disque est compilé dans le noyau, pas en module. C’est le cas simple à viser.

IV. Paquets

L’encadré dit que vim, bash, grub et udev sont des exemples. On peut les remplacer par un équivalent. Les versions sont libres. Le détail de chaque nom est dans paquets.md.

Perl) avec une parenthèse est une coquille du PDF. Le paquet est Perl.

Télécharger du code source. À la soutenance, depuis la distro, on récupère une archive. curl, wget, ou un autre client HTTP. Le livre LFS de 2025 ne met ni curl ni wget dans le chapitre 8. C’est un ajout demandé par le sujet.

Installer des paquets. Pas forcément apt. Sur une LFS, « installer » veut dire : avoir le compilateur, les en-têtes, make, et assez de bibliothèques pour construire une archive et la copier au bon endroit. La soutenance peut demander de le montrer.

V. Bonus

Uniquement si l’obligatoire est parfait : tout est fait, rien ne déraille. Sinon le bonus n’est pas regardé.

Le texte invite à installer ce qu’on veut, y compris une interface graphique. Il promet des points en plus pour un serveur X et un gestionnaire de fenêtres ou un bureau : GNOME, LXDE, KDE, i3, dwm. La phrase « Make this system yours, with your touch » est imprimée deux fois.

X est le protocole d’affichage. Un serveur X dessine. i3 et dwm organisent les fenêtres. GNOME et KDE sont des bureaux complets. Rien de cela n’aide la partie notée. KFS, plus tard, écrit à l’écran sans X.

VI. Rendu

Seul le dépôt Git est évalué. On n’y met pas le disque de la VM : il est énorme. On y met un checksum, une empreinte du fichier disque. L’exemple est :

shasum < disk.vdi

shasum calcule une empreinte SHA. disk.vdi est le format VirtualBox. Avec QEMU le fichier s’appelle autrement (.qcow2, .img). La commande se transpose : shasum sur le fichier disque réel. L’image elle-même reste disponible le jour de la soutenance, sur une clé ou un disque, pas dans le git.

Le correcteur lit le dépôt (README, checksum, éventuellement les scripts) et demande d’allumer la VM pour vérifier le noyau, le hostname, les partitions, le réseau, les commandes.

Termes regroupés

Terme Sens dans ce sujet
Hôte La machine qui lance QEMU, ou celle qui compile la première toolchain
Cible La distro en construction
Toolchain Compilateur, assembleur, linker, en-têtes, libc
Toolchain croisée Un compilateur qui tourne sur l’hôte et produit des binaires pour la cible
chroot Faire croire aux programmes qu’un répertoire est la racine /
PID 1 Le premier processus, init. SysVinit ou systemd
Module Fichier .ko chargé dans le noyau après le boot
udev Démon qui réagit aux périphériques et charge les modules
Partition Découpe du disque, vue par le noyau comme /dev/sda1, etc.
Système de fichiers Organisation des fichiers dans une partition : ext4, par exemple. Le swap n’en a pas
fstab Table /etc/fstab : quoi monter, où, au démarrage
Bootloader GRUB ou LILO, chargé par le BIOS avant le noyau
vmlinuz Image compressée du noyau
Hostname Nom de la machine, ici le login
Userspace Tout ce qui n’est pas le noyau
FHS Norme des répertoires
POSIX Norme des interfaces et des commandes UNIX
LSB Norme d’interopérabilité entre distributions, pas notée
SBU Unité de temps du livre LFS
BLFS Beyond Linux From Scratch, le livre d’après, pour le graphique et le reste