# Linux From Scratch — « The Bible » Adresse du PDF : 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--` | Le livre installe `vmlinuz-` 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.