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

154 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/](references/README.md). La liste des paquets est détaillée dans [paquets.md](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](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](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](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](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](references/posix.md), [lsb.md](references/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](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 :
```text
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 |