docdemarrage

This commit is contained in:
2026-10-23 11:31:19 +02:00
parent ef6869a02e
commit 6e60f8680f
11 changed files with 505 additions and 0 deletions

13
docs/ft-linux/README.md Normal file
View File

@@ -0,0 +1,13 @@
# Comprendre ft_linux
Lecture du sujet 3.6, pour travailler sans rouvrir cinq sites à chaque terme.
| Fichier | Contenu |
|---------|---------|
| [commentaire-du-sujet.md](commentaire-du-sujet.md) | Chaque point du PDF, avec le terme technique expliqué |
| [paquets.md](paquets.md) | Chaque nom de la liste obligatoire : à quoi il sert |
| [references/README.md](references/README.md) | Les cinq liens du PDF, et ce qui est rangé en local |
La traduction fidèle reste [../sujets/ft_linux.md](../sujets/ft_linux.md). Le PDF reste [../sujets/originaux/ft_linux_subject.pdf](../sujets/originaux/ft_linux_subject.pdf).
Ces notes ne sont pas le livre LFS, ni la norme POSIX, ni le FHS, ni la LSB, ni le manuel Automake. Ce sont des lectures commentées : assez précises pour comprendre et retrouver un chapitre, sans recopier des ouvrages entiers.

View File

@@ -0,0 +1,153 @@
# 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 |

123
docs/ft-linux/paquets.md Normal file
View File

@@ -0,0 +1,123 @@
# Les paquets de la liste obligatoire
Inventaire du chapitre IV, pas l’ordre de compilation. L’ordre est le chapitre 8 de LFS, décrit dans [references/lfs.md](references/lfs.md).
Versions citées : livre LFS stable du 1er septembre 2025, quand le paquet y est encore. Le sujet laisse les versions libres. `vim`, `bash`, `grub` et `udev` sont des exemples : un équivalent est accepté.
`Perl)` dans le PDF est une coquille. Le paquet est Perl.
## Le compilateur et ce sans quoi il ne marche pas
| Paquet | Rôle | Dans le LFS du 1er sept. 2025 |
|--------|------|-------------------------------|
| Binutils | Assembleur `as` et linker `ld`. Transforme la sortie de GCC en binaire | 2.45 |
| GCC | Compilateur C, C++, et la bibliothèque `libgcc` | 15.2.0 |
| Glibc | Bibliothèque C. Presque tous les programmes s’y lient. Elle parle au noyau | 2.42 |
| GMP | Grands nombres entiers. GCC en a besoin pour compiler | 6.3.0 |
| MPFR | Flottants à précision arbitraire. Même raison | 4.2.2 |
| MPC | Complexes, au-dessus de MPFR. GCC l’exige | 1.3.1 |
| Linux headers | Pas une ligne séparée du sujet. Les en-têtes du noyau disent à Glibc quels appels existent. Le livre les construit au chapitre 5 | Linux 6.16.1 |
| Make | Lit un `Makefile` et lance les compilations dans le bon ordre | 4.4.1 |
| M4 | Processeur de macros. Autoconf est écrit en M4 | 1.4.20 |
| Pkg-config | Répond « quels flags pour lier la bibliothèque X ? ». Le livre 2025 le fournit sous le nom Pkgconf | Pkgconf 2.5.1 |
GCC se construit après GMP, MPFR et MPC. Glibc se construit après les en-têtes du noyau.
## Produire le script `./configure`
| Paquet | Rôle | LFS 2025-09-01 |
|--------|------|----------------|
| Autoconf | Produit le script `configure` à partir de `configure.ac` | 2.72 |
| Automake | Produit les `Makefile.in` à partir des `Makefile.am` | 1.18.1 |
| Libtool | Règles portables pour fabriquer des `.so` | 2.5.4 |
| Gettext | Traduction des messages des programmes. Beaucoup de `configure` le cherchent | 0.26 |
| Intltool | Même idée, pour les fichiers XML de traduction. Vieux, encore dans le livre | 0.51.0 |
Détail du fonctionnement : [references/autotools.md](references/autotools.md).
## Le shell et les commandes de tous les jours
| Paquet | Rôle | LFS 2025-09-01 |
|--------|------|----------------|
| Bash | Shell. Exemple du sujet, remplaçable. LFS en fait `/bin/sh` | 5.3 |
| Coreutils | `ls`, `cp`, `mv`, `cat`, `chmod`, `id`… le socle POSIX | 9.7 |
| Diffutils | `diff`, `cmp` | 3.12 |
| Findutils | `find`, `xargs` | 4.10.0 |
| Gawk | `awk`. Le livre et beaucoup de scripts l’utilisent | 5.3.2 |
| Grep | Recherche de texte | 3.12 |
| Sed | Édition de flux. Les scripts de boot et `./configure` s’en servent | 4.9 |
| Gzip | Compression `.gz`, et la commande `zcat` | 1.14 |
| Bzip2 | Compression `.bz2` | 1.0.8 |
| Xz Utils | Compression `.xz`, format des archives du livre récent | 5.8.1 |
| Tar | Archives `.tar`. C’est ainsi que les sources arrivent | 1.35 |
| Patch | Applique un fichier `.patch`. Le chapitre 3 du livre en a quelques-uns | 2.8 |
| Less | Paginateur. `man` s’en sert pour afficher une page | 679 |
| File | Devine le type d’un fichier (`ELF`, `ASCII`…) | 5.46 |
| Ncurses | Affichage texte plein écran. `menuconfig` du noyau et vim s’en servent | 6.5 |
| Readline | Édition de ligne dans bash (flèches, historique) | 8.3 |
| Vim | Éditeur. Exemple du sujet. Un autre éditeur (nano, emacs) est un équivalent | 9.1.1629 |
| Shadow | `useradd`, `passwd`, `/etc/login.defs`. Sans lui, pas de comptes propres | 4.18.0 |
| Procps | `ps`, `top`, `free`. Lit `/proc` | Procps-ng 4.0.5 |
| Psmisc | `killall`, `fuser`, `pstree` | 23.7 |
| Util-linux | `mount`, `dmesg`, `login`, `fdisk`, `swapon`. Indispensable au boot | 2.41.1 |
| E2fsprogs | `mkfs.ext4`, `fsck.ext4`. Crée et répare le système de fichiers des partitions | 1.47.3 |
| Kbd | Polices et claviers de la console texte (`loadkeys`) | 2.8.0 |
| Man-pages | Textes bruts des pages de manuel, section par section | 6.15 |
| Man-DB | La commande `man` qui affiche ces pages | 2.13.1 |
| Groff | Met en page les pages de manuel. `man` l’appelle | 1.23.0 |
| Bc | Calculatrice utilisée par les `Makefile` du noyau | 7.0.3 |
## Bibliothèques que d’autres paquets exigent
| Paquet | Rôle | LFS 2025-09-01 |
|--------|------|----------------|
| Zlib | Compression deflate. Le noyau, openssl éventuel, et beaucoup d’outils s’y lient | 1.3.1 |
| Attr | Attributs étendus des fichiers (`setfattr`) | 2.5.2 |
| Acl | Listes de contrôle d’accès, au-dessus des droits Unix classiques | 2.3.2 |
| Libcap | Capacités Linux : des privilèges fins à la place du tout-ou-rien de root | 2.76 |
| Libpipeline | Enchaîne des tubes. `man` s’en sert | 1.5.8 |
| GDBM | Petite base clé-valeur. Quelques outils historiques s’y lient | 1.26 |
| Expat | Parseur XML | 2.7.1 |
| XML::Parser | Module Perl au-dessus d’Expat. Intltool en dépend | 2.47 |
| Gperf | Génère des fonctions de hachage parfait. Utilisé à la construction, pas au quotidien | 3.3 |
## Langages utilisés pendant la construction
| Paquet | Rôle | LFS 2025-09-01 |
|--------|------|----------------|
| Perl | Le PDF écrit `Perl)`. Des scripts de construction, dont le noyau, l’utilisent | 5.42.0 |
| Tcl | Langage des tests | 8.6.16 |
| Expect | Automatise un dialogue avec un programme. Sert aux tests | 5.45.4 |
| DejaGNU | Lance les suites de tests de GCC et Binutils, via Expect | 1.6.3 |
| Check | Cadre de tests unitaires en C. Présent dans les vieilles listes LFS. Absent du sommaire du 1er sept. 2025 | Pas dans ce sommaire |
| Flex | Génère un analyseur lexical. Bison et quelques paquets en ont besoin à la compilation | 2.6.4 |
| Bison | Génère un analyseur syntaxique | 3.8.2 |
| Texinfo | Format de doc GNU. `info` | 7.2 |
## Démarrage, modules, comptes
| Paquet | Rôle | LFS 2025-09-01 |
|--------|------|----------------|
| GRUB | Bootloader. Exemple du sujet. Charge `vmlinuz-...`. KFS le redemande | 2.12 |
| Sysvinit | PID 1 : `init`, et les commandes `shutdown`, `reboot` | 3.14 |
| Sysklogd | Journal des messages du noyau et des démons, vers `/var/log` | 2.7.2 |
| Kmod | `lsmod`, `modprobe`, `insmod`. Charge les `.ko` | 34.2 |
| Eudev | Fork de udev, indépendant de systemd. Charge les modules quand un périphérique apparaît | Plus dans le livre. Remplacé par « Udev from Systemd » 257.8 |
| Udev-lfs Tarball | Nom historique de l’archive udev livrée avec les vieux LFS | Plus dans le livre. Même rôle que la ligne précédente |
Kmod sait charger un module. Udev décide lequel, au moment où le matériel est annoncé dans `/sys`. Les deux vont ensemble. Le sujet dit « un kernel_module loader, comme udev » : le démon qui réagit, pas seulement la commande `modprobe`.
## Réseau et temps
| Paquet | Rôle | LFS 2025-09-01 |
|--------|------|----------------|
| IPRoute2 | `ip addr`, `ip route`. Remplace les vieux `ifconfig` et `route` | 6.16.0 |
| Inetutils | Clients réseau historiques : `ping`, `hostname`, parfois `telnet` | 2.6 |
| Iana-Etc | Fichiers `/etc/protocols` et `/etc/services` (numéros de ports) | 20250807 |
| Time Zone Data | Fuseaux horaires. Le livre les installe avec Glibc, pas comme un chapitre séparé | Via Glibc |
Inetutils et IPRoute2 ne suffisent pas à « avoir Internet » tout seuls. Il faut aussi une adresse, une route, et un DNS (`/etc/resolv.conf`), ce que le chapitre 9 du livre décrit. curl ou wget ne sont pas dans cette liste : le sujet les recommande à part, pour la soutenance.
## Ce que le livre de 2025 ajoute et que le PDF ne liste pas
Python 3, OpenSSL, Meson, Ninja, lz4, zstd, libxcrypt, libelf, libffi, entre autres. Le noyau récent et une partie des outils ne se construisent plus sans. Les installer en plus est compatible avec « pouvoir installer des paquets ». Ce ne sont pas des lignes de l’inventaire noté.

View File

@@ -0,0 +1,15 @@
# Références liées par le sujet
Le PDF pose cinq liens. Chacun pointe vers un ouvrage long, maintenu ailleurs, et protégé par son auteur. Ici, une fiche par lien : de quoi il s’agit, quels chapitres servent à ft_linux, et comment les lire. L’adresse officielle reste la source à jour.
| Ancre dans le PDF | Ouvrage | Fiche locale | Noté ? |
|-------------------|---------|--------------|--------|
| `standards` | Filesystem Hierarchy Standard 3.0 | [fhs.md](fhs.md) | L’objectif « hiérarchie conforme » renvoie ici |
| `The Bible` | Linux From Scratch, livre stable | [lfs.md](lfs.md) | C’est la méthode de construction |
| `Autotools` | Manuel Automake | [autotools.md](autotools.md) | Outil de construction de la plupart des paquets |
| `this` | POSIX, Single UNIX Specification | [posix.md](posix.md) | Le sujet dit de le lire. Il dit aussi qu’on n’est pas noté dessus |
| `that` | Linux Standard Base | [lsb.md](lsb.md) | Même phrase : à lire, pas noté |
Livre stable consulté pour ces fiches : LFS publié le 1er septembre 2025 (noyau 6.16.1, GCC 15.2.0, Glibc 2.42). Les numéros de version bougent à chaque édition du livre. Le sujet laisse les versions libres, avec un plancher : noyau >= 4.0.
Le site `refspecs.linuxfoundation.org` (FHS et LSB) a répondu 403 au moment de cette rédaction. Les fiches FHS et LSB s’appuient sur le texte connu de FHS 3.0 et de LSB 5.0, et sur le chapitre « LFS and Standards » du livre stable, qui cite ces deux documents.

View File

@@ -0,0 +1,40 @@
# Autotools — le lien Automake
Adresse du PDF : <https://www.gnu.org/software/automake/manual/html_node/index.html#SEC_Contents>
Le mot du sujet est `Autotools`. Le lien ouvre le manuel GNU Automake, un des outils de la famille, pas les quatre à la fois. Le manuel est sous licence GNU. On ne le recopie pas.
## La famille, dans l’ordre où elle sert
Presque chaque paquet de la liste se construit ainsi :
```text
./configure
make
make install
```
Derrière ces trois lignes, quatre outils. Le sujet les liste tous.
| Outil | Rôle |
|-------|------|
| M4 | Langage de macros. Autoconf est écrit dedans. Sans M4, Autoconf ne tourne pas |
| Autoconf | Lit `configure.ac` et produit le script `configure`. Ce script teste la machine : compilateur, en-têtes, bibliothèques |
| Automake | Lit `Makefile.am` et produit `Makefile.in`. `configure` transforme `Makefile.in` en `Makefile` adapté à cette machine |
| Libtool | Enveloppe la création de bibliothèques partagées (`.so`). Les règles diffèrent entre systèmes. Libtool masque ces différences |
| Pkg-config (Pkgconf dans le LFS de 2025) | Pas un autotool, mais le voisin. Un paquet demande « où est installée la bibliothèque X ? » et obtient les flags de compilation |
`make` exécute le `Makefile`. Ce n’est pas un autotool. C’est l’outil qui lance le compilateur selon les règles produites au-dessus.
## Pourquoi l’ordre de LFS place ces paquets tard
On peut compiler Binutils, GCC et Glibc sans avoir encore Automake : leurs archives contiennent déjà un `configure` généré par les auteurs. Automake et Autoconf servent le jour où l’on modifie un `Makefile.am`, ou quand un paquet plus haut dans le livre régénère ses scripts. Le livre les installe quand même, parce qu’un système où l’on construit des logiciels en a besoin. Le sujet les met dans la liste pour la même raison.
## Ce qu’il suffit de reconnaître dans un chapitre LFS
- `./configure --prefix=/usr` : installer sous `/usr`, pas sous `/usr/local`. LFS fixe le préfixe pour coller au FHS.
- `--enable-...` et `--disable-...` : options du script produit par Autoconf. Chaque chapitre du livre dit lesquelles passer. On ne les invente pas.
- `make` puis `make check` quand le livre le demande. Check, DejaGNU, Expect et Tcl existent pour ces tests. Un test qui échoue se lit. On ne « corrige » pas le paquet pour faire passer un test sans comprendre l’échec.
- `make install` : copie le résultat dans la hiérarchie. Avant le `chroot`, le livre dirige souvent l’installation vers `$LFS/usr` pour ne pas écraser l’hôte.
Le manuel Automake décrit le langage des `Makefile.am` (variables `bin_PROGRAMS`, `AM_CFLAGS`, etc.). On en a besoin le jour où un paquet ne fournit pas de `configure` prêt, ou pour lire un `Makefile.am` cassé. Pour suivre le livre chapitre par chapitre, les trois commandes ci-dessus suffisent, avec les options écrites dans le chapitre.

View File

@@ -0,0 +1,43 @@
# FHS 3.0 — le mot `standards` du sujet
Adresse du PDF : <http://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html>
Filesystem Hierarchy Standard, version 3.0, publié par le Linux Foundation. C’est une norme de rangement : quel répertoire existe, et quel genre de fichier a le droit d’y être. Elle ne dit pas comment compiler un paquet.
Le sujet n’écrit pas « FHS ». Il écrit « a filesystem hierarchy compliant with the standards », et le mot `standards` est le lien vers ce document. LFS, de son côté, dit suivre FHS 3.0.
## L’idée en une phrase
Deux fichiers qui ont le même rôle sur deux distributions doivent avoir le même chemin. `/bin/sh` est un shell, `/etc` est de la configuration, `/boot` est ce que le bootloader lit. Un programme écrit pour une distribution en trouve un autre sans deviner.
## Les répertoires que ft_linux va vraiment remplir
| Chemin | Rôle dans la norme | Dans ce projet |
|--------|--------------------|----------------|
| `/` | Racine. Tout le reste est en dessous | Une partition dédiée. Le sujet l’appelle `root` |
| `/boot` | Noyau et fichiers du bootloader | Une partition à part. Le fichier `vmlinuz-<linux_version>-<student_login>` vit ici, avec la config GRUB |
| `/bin` | Commandes essentielles, utilisables même si `/usr` n’est pas monté | `sh`, `ls`, `mount`. LFS y place les outils dont le boot a besoin |
| `/sbin` | Commandes d’administration essentielles | `init`, `shutdown`, `fsck`, souvent `ip` selon les versions |
| `/lib` | Bibliothèques essentielles, et souvent les modules du noyau dans `/lib/modules/<version>` | Le chargeur de modules cherche les `.ko` ici |
| `/etc` | Configuration propre à cette machine | `/etc/hostname` (le login), `/etc/fstab` (les partitions), `/etc/passwd`, scripts SysV |
| `/dev` | Fichiers de périphériques | Créés au boot par udev / devtmpfs, pas copiés à la main. `/dev/sda`, `/dev/tty1` |
| `/proc` | Fenêtre sur le noyau, en mémoire | `ps`, et plus tard `/proc/mymounts` de Little Penguin, lisent ici. Ce n’est pas un disque |
| `/sys` | Fenêtre sur les périphériques et les modules | udev écoute ce que le noyau y publie |
| `/tmp` | Fichiers temporaires, effaçables | Droit d’écriture pour tout le monde, souvent un `tmpfs` |
| `/usr` | La partie partageable du système, programmes non essentiels au tout premier boot | `/usr/bin`, `/usr/lib`, `/usr/share` |
| `/usr/src` | Sources | Le sujet y met le noyau : `/usr/src/kernel-$(version)`. La norme prévoit ce répertoire pour du code source |
| `/usr/include` | En-têtes C | Vient de Glibc et des en-têtes du noyau. GCC les lit pour compiler |
| `/var` | Données qui changent : journaux, caches, files | `syslog` écrit dans `/var/log` |
| `/home` | Répertoires des utilisateurs | Pas exigé par une ligne du sujet. Utile dès qu’on se connecte autrement qu’en root |
| `/root` | Répertoire personnel du superutilisateur | Distinct de la partition racine `/` |
| `/run` | Données d’exécution depuis le dernier boot | PID files, socket udev. Remplace l’ancien `/var/run` |
| `/opt` | Logiciels ajoutés en dehors du système de base | Souvent vide dans un LFS minimal |
| `/mnt`, `/media` | Points de montage temporaires | Vides au départ |
Le swap n’a pas de chemin FHS. C’est une partition que le noyau utilise comme mémoire, déclarée dans `/etc/fstab` avec le type `swap`. On ne crée pas de système de fichiers dessus.
## Deux distinctions qui évitent des erreurs
**Partition et répertoire.** `/boot` est un répertoire. Le sujet demande aussi que ce répertoire soit une partition : un morceau de disque monté sur ce répertoire au boot. On peut avoir le répertoire `/boot` sans partition séparée. Le sujet veut les deux.
**`/bin` et `/usr/bin`.** Historiquement, `/bin` survit si `/usr` est sur un autre disque pas encore monté. Beaucoup de distributions récentes fusionnent les deux par des liens. LFS explique son choix dans le chapitre qui crée l’arborescence. Pour le sujet, l’arbre doit rester lisible selon cette table.

View File

@@ -0,0 +1,62 @@
# Linux From Scratch — « The Bible »
Adresse du PDF : <http://www.linuxfromscratch.org/lfs/view/stable/index.html>
Livre de Gerard Beekmans, éditeur Bruce Dubbs. Édition consultée : 1er septembre 2025. Licence du livre : Creative Commons et MIT, indiquées dans l’annexe F du livre. On ne le recopie pas ici.
## À quoi sert ce lien
LFS est une recette pour construire un système Linux en compilant chaque paquet depuis les sources, sur une partition vide. ft_linux demande exactement cela, avec quelques contraintes en plus (login dans la version du noyau, trois partitions, chemin des sources, checksum de l’image). Quand le sujet dit « The Bible », c’est ce livre, pas un autre tutoriel.
Le mot `stable` dans l’URL suit l’édition courante. Le sommaire ci-dessous est celui du 1er septembre 2025. Au moment de construire, rouvrir cette URL et noter le numéro de noyau du chapitre 10.
Il existe une variante systemd du même livre, à une autre URL. Le sommaire de `stable` à cette date contient SysVinit et les scripts de boot System V. C’est la variante qui correspond à la liste du sujet (`Sysvinit`). systemd reste permis par la phrase « like SysV or SystemD », mais ce n’est pas le livre que cette URL ouvre.
## Comment le livre est organisé
Le livre se lit dans l’ordre. Sauter un chapitre casse la toolchain : un compilateur construit trop tôt ne sait pas encore produire des programmes pour le nouveau système.
| Partie | Ce qu’on fait | Lien avec ft_linux |
|--------|----------------|--------------------|
| Préface | Public, architectures, prérequis, rapport aux standards, pourquoi chaque paquet est là | Le chapitre « LFS and Standards » cite POSIX.1-2008, FHS 3.0 et LSB 5.0. Ce sont les trois autres liens du sujet |
| I. Introduction | Vue d’ensemble : hôte, nouvelle partition, toolchain temporaire, puis système final | C’est le plan de tout le projet |
| II. Préparer | Chapitre 2 : la machine hôte, la partition, le système de fichiers, la variable `$LFS`. Chapitre 3 : la liste des archives et des correctifs. Chapitre 4 : un utilisateur `lfs`, l’environnement, les SBU, les tests | La partition du chapitre 2. Le sujet en veut au moins trois : racine, `/boot`, swap. Le livre insiste surtout sur une partition racine et traite le swap à part |
| III. Toolchain temporaire | Chapitres 5 à 7. On compile un compilateur croisé, puis des outils temporaires, puis on entre en `chroot` | On n’utilise pas le GCC de l’hôte pour le système final. Sinon la distro dépend de la machine qui l’a construite |
| IV. Le système | Chapitre 8 : les paquets définitifs, dans un ordre précis. Chapitre 9 : nom d’hôte, réseau, scripts de boot, locale. Chapitre 10 : `fstab`, noyau, GRUB. Chapitre 11 : redémarrage | C’est ici que tombent le hostname = login, Internet, le noyau >= 4.0, GRUB, et le chargeur de modules |
| V. Annexes | Sigles, dépendances, scripts de boot, règles udev, licences | L’annexe C dit quel paquet doit être construit avant quel autre. L’annexe D est le démarrage SysV |
SBU : Standard Build Unit. Le livre mesure le temps de chaque paquet en multiples du temps que prend le premier GCC. Ça sert à prévoir la durée, pas à être noté.
`chroot` : la commande change la racine vue par les processus. À partir du chapitre 7, `/` n’est plus le disque de l’hôte, c’est la partition LFS. On compile « dedans » avant que ce disque sache booter tout seul.
## Ce que le livre stable de 2025 ne fait pas à la place du sujet
À garder sous les yeux pendant la construction. Le livre est la méthode. Le PDF est la consigne notée.
| Consigne du sujet | Dans LFS stable (1er sept. 2025) |
|-------------------|----------------------------------|
| Noyau >= 4.0 | Le chapitre 10 construit Linux 6.16.1. Ça passe |
| Sources dans `/usr/src/kernel-$(version)` | Le livre compile le noyau depuis l’arbre des sources du chapitre 3, souvent sous `$LFS/sources`. Le sujet demande en plus une copie, ou le déballage, à cet endroit. `/usr/src` est le répertoire FHS prévu pour les sources |
| Version qui contient le login, fichier `vmlinuz-<linux_version>-<student_login>` | Le livre installe `vmlinuz-<version>` selon le `Makefile` du noyau. Le login se ajoute avec `CONFIG_LOCALVERSION` ou `EXTRAVERSION`, puis le nom du fichier dans `/boot` et la ligne GRUB suivent le sujet |
| Hostname = login | Chapitre 9, fichier `/etc/hostname`. On y met le login, pas `lfs` |
| Au moins racine, `/boot` et swap | Le livre peut se contenter d’une racine. Le sujet en veut trois. Le swap est une partition sans système de fichiers, activée par `swapon`, déclarée dans `/etc/fstab` |
| Chargeur de modules « comme udev » | Le livre n’installe plus Eudev. Il construit « Udev from Systemd » : les sources udev extraites de l’archive systemd, sans faire de systemd le processus PID 1. Le sujet liste encore `Eudev` et `Udev-lfs Tarball`, qui sont les noms des éditions plus anciennes. Le sujet dit que `udev` est un exemple remplaçable par un équivalent |
| `Sysvinit` dans la liste | Présent : SysVinit 3.14 et les bootscripts. C’est le PID 1 de cette édition |
| GRUB | Présent : GRUB 2.12, chapitre 10 |
| Pouvoir télécharger et installer encore des paquets | Le chapitre 3 suppose qu’on a déjà récupéré les archives (wget ou un navigateur, depuis l’hôte). curl ou wget dans la distro finie, c’est le sujet qui le demande pour la soutenance, pas le sommaire du chapitre 8 |
## Paquets du livre absents de la liste du sujet
L’édition 2025 construit aussi, entre autres : Python, OpenSSL, Meson, Ninja, lz4, zstd, libxcrypt, libelf, libffi. Le noyau et certains outils récents ne se compilent plus sans OpenSSL ni Python. Les ajouter ne contredit pas le sujet : il demande de pouvoir installer des paquets, et il dit que les versions sont libres. Ce ne sont pas des lignes de la liste notée. À la soutenance, on montre la liste du PDF, et on sait expliquer pourquoi OpenSSL est là en plus.
## Ordre réel, pas l’ordre alphabétique du PDF
La liste du chapitre IV du sujet est un inventaire. L’ordre de compilation est celui du chapitre 8 du livre. Exemples qui cassent si on inverse :
- GMP, puis MPFR, puis MPC, puis GCC. GCC refuse de se construire sans ces trois bibliothèques de calcul.
- Binutils avant GCC. Le compilateur a besoin de l’assembleur et du linker.
- Glibc après les en-têtes du noyau. La bibliothèque C doit connaître les appels système de ce noyau.
- Bash, Coreutils, Grep, Sed après Glibc. Ce sont des programmes, ils se lient à la libc.
- GRUB et le noyau tout à la fin, quand `/boot` et `/etc/fstab` existent.
L’annexe C du livre est la table de ces dépendances.

View File

@@ -0,0 +1,27 @@
# LSB — le mot `that` du sujet
Adresse du PDF : <http://refspecs.linuxfoundation.org/lsb.shtml>
Linux Standard Base. Dernière version majeure citée par LFS : LSB 5.0, 2015. Quatre cahiers : Core, Desktop, Languages, Imaging, plus des essais Gtk3 et Graphics. Le but historique : qu’un logiciel propriétaire compilé une fois s’installe sur toute distribution certifiée, parce que les bibliothèques et les chemins ont les mêmes noms.
## Ce que le sujet en fait
Même phrase que pour POSIX : à lire, pas noté. LFS le dit aussi, dans « LFS and Standards » : beaucoup de gens contestent ces exigences. La LSB sert surtout les binaires propriétaires. Une LFS se construit depuis les sources, donc on choisit ses paquets. Passer les tests de certification LSB demande beaucoup de paquets que le livre LFS ne construit pas. Ils sont dans BLFS, Beyond Linux From Scratch, un second livre.
## Ce que l’édition LFS de septembre 2025 couvre déjà
Le chapitre « LFS and Standards » range ainsi les paquets du livre de base :
| Volet LSB | Déjà fourni par le livre LFS |
|-----------|------------------------------|
| Core | Bash, Bc, Binutils, Coreutils, Diffutils, File, Findutils, Gawk, GCC, Gettext, Glibc, Grep, Gzip, M4, Man-DB, Procps, Psmisc, Sed, Shadow, SysVinit, Tar, Util-linux, Zlib |
| Languages | Perl |
| Desktop, Imaging, Gtk3, Graphics | Rien dans le livre de base |
Le volet Desktop, c’est X, polices, GTK. C’est le territoire du bonus du sujet (serveur X, GNOME, KDE, i3), pas de l’obligatoire.
## Écarts assumés
Même le livre LFS ne fournit pas tout le Core LSB. Il manque, entre autres, `at`, `cpio`, `ed`, les outils LSB eux-mêmes, PAM, un MTA (sendmail, postfix ou exim). Certaines bibliothèques que la LSB nomme en version 5 (`libncurses.so.5`) sont fournies en version 6 par Ncurses actuel. Python 2, exigé par l’ancienne LSB, n’est plus dans le livre. Python 3 y est.
Pour ft_linux : connaître cette limite. Ne pas ajouter Postfix ou X « pour la LSB ». Le sujet dit que ce respect n’est pas noté.

View File

@@ -0,0 +1,25 @@
# POSIX — le mot `this` du sujet
Adresse du PDF : <http://pubs.opengroup.org/onlinepubs/9699919799/>
C’est la Single UNIX Specification, publiée par The Open Group, alignée sur IEEE POSIX. L’édition ouverte à cette URL est celle que le sujet lie. LFS stable (1er septembre 2025) dit suivre POSIX.1-2008.
Le texte intégral est long de plusieurs milliers de pages et reste la propriété de The Open Group. On ne le recopie pas. Cette fiche dit ce que le mot recouvre pour ft_linux.
## Ce que le sujet en fait
Phrase exacte : ce n’est pas REQUIRED, mais on SHOULD lire `this` et `that` tout de suite. On ne sera pas noté sur le respect de ces standards. `this` est POSIX. `that` est la LSB.
Lire, ici, veut dire savoir ce que la norme garantit, pas implémenter un système certifié UNIX.
## Les trois morceaux utiles
**Les appels système et la bibliothèque C.** `open`, `read`, `write`, `fork`, `exec`, `malloc`. Glibc est l’implémentation Linux de cette bibliothèque. Le noyau, lui, fournit les vrais appels. Un programme POSIX appelle Glibc, qui appelle le noyau. ft_linux ne demande pas d’écrire ces fonctions. Il demande d’installer Glibc, qui les fournit.
**Les utilitaires.** La norme décrit le comportement de `sh`, `ls`, `cp`, `mv`, `grep`, `sed`, `awk`, `find`, `diff`, `make`. Dans la liste du sujet, ce sont Bash, Coreutils, Grep, Sed, Gawk, Findutils, Diffutils, Make. Un script écrit selon la norme tourne sur cette distro parce que ces paquets sont là.
**Le système de fichiers.** POSIX décrit des idées (`/`, `/tmp`, `/dev`) que le FHS détaille pour Linux. Pour l’arborescence notée, la fiche à suivre est [fhs.md](fhs.md).
## Ce qu’on ne fait pas
On ne passe pas la suite de tests de certification POSIX. On ne remplace pas Bash par un shell minimal qui ne saurait que le strict POSIX, sauf à le décider : le sujet liste Bash, qui est un sur-ensemble de `sh`. LFS crée en général un lien `/bin/sh` vers bash.

View File

@@ -15,6 +15,8 @@ Images : [captures/README.md](captures/README.md).
Le cadrage ft_linux proposé avant cette lecture est figé dans [../notes/cadrage-ft-linux-en-attente.md](../notes/cadrage-ft-linux-en-attente.md). Il n’est pas lancé. Les questions pour le binôme sont dans [../notes/questionnaire-binome.md](../notes/questionnaire-binome.md). Le cadrage ft_linux proposé avant cette lecture est figé dans [../notes/cadrage-ft-linux-en-attente.md](../notes/cadrage-ft-linux-en-attente.md). Il n’est pas lancé. Les questions pour le binôme sont dans [../notes/questionnaire-binome.md](../notes/questionnaire-binome.md).
Commentaire du sujet ft_linux et lectures des docs liées : [../ft-linux/README.md](../ft-linux/README.md).
## Ce que les sujets suivants imposent déjà à ft_linux ## Ce que les sujets suivants imposent déjà à ft_linux
Faits lus dans les PDF, pas des préférences. Faits lus dans les PDF, pas des préférences.

View File

@@ -2,6 +2,8 @@
Traduction française du sujet. Le PDF reste la source en cas de doute. Traduction française du sujet. Le PDF reste la source en cas de doute.
Commentaire de chaque point, et fiches des liens : [../ft-linux/README.md](../ft-linux/README.md).
| | | | | |
|--|--| |--|--|
| PDF | [originaux/ft_linux_subject.pdf](originaux/ft_linux_subject.pdf) | | PDF | [originaux/ft_linux_subject.pdf](originaux/ft_linux_subject.pdf) |