0% ont trouvé ce document utile (0 vote)
5 vues319 pages

LFS 11.3 FR Systemd

Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues319 pages

LFS 11.3 FR Systemd

Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Linux From Scratch

Version 11.3-systemd
Publié le 01 mars 2023

Créé par Gerard Beekmans


Rédacteur en chef : Bruce Dubbs
Éditeur : Douglas R. Reno
Éditeur : DJ Lucas
Linux From Scratch: Version 11.3-systemd: Publié le 01 mars 2023
par Créé par Gerard Beekmans, Rédacteur en chef : Bruce Dubbs, Éditeur : Douglas R. Reno, et Éditeur : DJ Lucas
Copyright © 1999-2023 Gerard Beekmans
Copyright © 1999-2023, Gerard Beekmans
Tous droits réservés.
Ce livre est distribué sous la Creative Commons License.
Les instructions d'ordinateur peuvent être extraites du livre sous la Licence MIT.
Linux® est une marque déposée de Linus Torvalds.
Linux From Scratch - Version 11.3-systemd

Table des matières


Préface .................................................................................................................................................................... vii
i. Avant-propos ................................................................................................................................................. vii
ii. Public visé .................................................................................................................................................. viii
iii. Architectures cibles de LFS ...................................................................................................................... viii
iv. Prérequis ....................................................................................................................................................... ix
v. LFS et les standards ...................................................................................................................................... ix
vi. Raison de la présence des paquets dans le livre ......................................................................................... xi
vii. Typographie .............................................................................................................................................. xvi
viii. Structure .................................................................................................................................................. xvii
ix. Errata et annonces de sécurité ................................................................................................................. xviii
I. Introduction ........................................................................................................................................................... 1
1. Introduction .................................................................................................................................................... 2
1.1. Comment construire un système LFS ................................................................................................... 2
1.2. Nouveautés depuis la dernière version ................................................................................................. 2
1.3. Historique des modifications ................................................................................................................ 4
1.4. Ressources ............................................................................................................................................. 9
1.5. Aide ....................................................................................................................................................... 9
II. Préparation à la construction ............................................................................................................................. 11
2. Préparation du système hôte ........................................................................................................................ 12
2.1. Introduction ......................................................................................................................................... 12
2.2. Prérequis du système hôte .................................................................................................................. 12
2.3. Les étapes de la construction de LFS ................................................................................................. 14
2.4. Création d'une nouvelle partition ........................................................................................................ 15
2.5. Création d'un système de fichiers sur la partition .............................................................................. 17
2.6. Définition de la variable $LFS ........................................................................................................... 18
2.7. Montage de la nouvelle partition ........................................................................................................ 18
3. Paquets et correctifs ..................................................................................................................................... 20
3.1. Introduction ......................................................................................................................................... 20
3.2. Tous les paquets .................................................................................................................................. 21
3.3. Correctifs requis .................................................................................................................................. 29
4. Dernières préparations ................................................................................................................................. 30
4.1. Introduction ......................................................................................................................................... 30
4.2. Créer une structure des répertoires limitée dans le système de fichiers LFS ..................................... 30
4.3. Ajouter l'utilisateur LFS ...................................................................................................................... 30
4.4. Configurer l'environnement ................................................................................................................. 31
4.5. À propos des SBU .............................................................................................................................. 33
4.6. À propos des suites de tests ............................................................................................................... 34
III. Construction des outils croisés LFS et des outils temporaires ........................................................................ 35
Informations préliminaires importantes ...................................................................................................... xxxvi
i. Introduction ........................................................................................................................................ xxxvi
ii. Remarques techniques sur la chaîne de compilation ........................................................................ xxxvi
iii. Instructions générales de compilation .................................................................................................. xli
5. Compilation d'une chaîne d'outils croisée ................................................................................................... 43
5.1. Introduction ......................................................................................................................................... 43
5.2. Binutils-2.40 — Passe 1 ...................................................................................................................... 44
5.3. GCC-12.2.0 — Passe 1 ....................................................................................................................... 46
5.4. Linux-6.1.11 API Headers .................................................................................................................. 49
5.5. Glibc-2.37 ............................................................................................................................................ 50

iii
Linux From Scratch - Version 11.3-systemd

5.6. Libstdc++ de GCC-12.2.0 ................................................................................................................... 53


6. Compilation croisée des outils temporaires ................................................................................................. 55
6.1. Introduction ......................................................................................................................................... 55
6.2. M4-1.4.19 ............................................................................................................................................ 56
6.3. Ncurses-6.4 .......................................................................................................................................... 57
6.4. Bash-5.2.15 .......................................................................................................................................... 59
6.5. Coreutils-9.1 ........................................................................................................................................ 60
6.6. Diffutils-3.9 ......................................................................................................................................... 61
6.7. File-5.44 ............................................................................................................................................... 62
6.8. Findutils-4.9.0 ...................................................................................................................................... 63
6.9. Gawk-5.2.1 .......................................................................................................................................... 64
6.10. Grep-3.8 ............................................................................................................................................. 65
6.11. Gzip-1.12 ........................................................................................................................................... 66
6.12. Make-4.4 ............................................................................................................................................ 67
6.13. Patch-2.7.6 ......................................................................................................................................... 68
6.14. Sed-4.9 ............................................................................................................................................... 69
6.15. Tar-1.34 ............................................................................................................................................. 70
6.16. Xz-5.4.1 ............................................................................................................................................. 71
6.17. Binutils-2.40 — Passe 2 .................................................................................................................... 72
6.18. GCC-12.2.0 — Passe 2 ..................................................................................................................... 73
7. Entrée dans le chroot et construction des outils temporaires supplémentaires ............................................ 75
7.1. Introduction ......................................................................................................................................... 75
7.2. Changement du propriétaire ................................................................................................................ 75
7.3. Préparer les systèmes de fichiers virtuels du noyau ........................................................................... 75
7.4. Entrer dans l'environnement chroot .................................................................................................... 76
7.5. Création des répertoires ...................................................................................................................... 77
7.6. Création des fichiers et des liens symboliques essentiels ................................................................... 78
7.7. Gettext-0.21.1 ...................................................................................................................................... 81
7.8. Bison-3.8.2 .......................................................................................................................................... 82
7.9. Perl-5.36.0 ........................................................................................................................................... 83
7.10. Python-3.11.2 .................................................................................................................................... 84
7.11. Texinfo-7.0.2 ..................................................................................................................................... 85
7.12. Util-linux-2.38.1 ................................................................................................................................ 86
7.13. Nettoyage et Sauvegarde du système temporaire ............................................................................. 87
IV. Construction du système LFS .......................................................................................................................... 89
8. Installer les logiciels du système de base .................................................................................................... 90
8.1. Introduction ......................................................................................................................................... 90
8.2. Gestion des paquets ............................................................................................................................ 91
8.3. Man-pages-6.03 ................................................................................................................................... 95
8.4. Iana-Etc-20230202 .............................................................................................................................. 96
8.5. Glibc-2.37 ............................................................................................................................................ 97
8.6. Zlib-1.2.13 ......................................................................................................................................... 104
8.7. Bzip2-1.0.8 ........................................................................................................................................ 105
8.8. Xz-5.4.1 ............................................................................................................................................. 107
8.9. Zstd-1.5.4 ........................................................................................................................................... 109
8.10. File-5.44 ........................................................................................................................................... 110
8.11. Readline-8.2 ..................................................................................................................................... 111
8.12. M4-1.4.19 ........................................................................................................................................ 113
8.13. Bc-6.2.4 ........................................................................................................................................... 114
8.14. Flex-2.6.4 ......................................................................................................................................... 115

iv
Linux From Scratch - Version 11.3-systemd

8.15. Tcl-8.6.13 ........................................................................................................................................ 116


8.16. Expect-5.45.4 ................................................................................................................................... 118
8.17. DejaGNU-1.6.3 ................................................................................................................................ 119
8.18. Binutils-2.40 .................................................................................................................................... 120
8.19. GMP-6.2.1 ....................................................................................................................................... 123
8.20. MPFR-4.2.0 ..................................................................................................................................... 125
8.21. MPC-1.3.1 ....................................................................................................................................... 126
8.22. Attr-2.5.1 ......................................................................................................................................... 127
8.23. Acl-2.3.1 .......................................................................................................................................... 128
8.24. Libcap-2.67 ...................................................................................................................................... 129
8.25. Shadow-4.13 .................................................................................................................................... 130
8.26. GCC-12.2.0 ...................................................................................................................................... 134
8.27. Pkg-config-0.29.2 ............................................................................................................................ 139
8.28. Ncurses-6.4 ...................................................................................................................................... 140
8.29. Sed-4.9 ............................................................................................................................................. 143
8.30. Psmisc-23.6 ..................................................................................................................................... 144
8.31. Gettext-0.21.1 .................................................................................................................................. 145
8.32. Bison-3.8.2 ...................................................................................................................................... 147
8.33. Grep-3.8 ........................................................................................................................................... 148
8.34. Bash-5.2.15 ...................................................................................................................................... 149
8.35. Libtool-2.4.7 .................................................................................................................................... 151
8.36. GDBM-1.23 ..................................................................................................................................... 152
8.37. Gperf-3.1 ......................................................................................................................................... 153
8.38. Expat-2.5.0 ...................................................................................................................................... 154
8.39. Inetutils-2.4 ...................................................................................................................................... 155
8.40. Less-608 .......................................................................................................................................... 157
8.41. Perl-5.36.0 ....................................................................................................................................... 158
8.42. XML::Parser-2.46 ............................................................................................................................ 161
8.43. Intltool-0.51.0 .................................................................................................................................. 162
8.44. Autoconf-2.71 .................................................................................................................................. 163
8.45. Automake-1.16.5 ............................................................................................................................. 165
8.46. OpenSSL-3.0.8 ................................................................................................................................ 166
8.47. Kmod-30 .......................................................................................................................................... 168
8.48. Libelf de Elfutils-0.188 ................................................................................................................... 170
8.49. Libffi-3.4.4 ...................................................................................................................................... 171
8.50. Python-3.11.2 ................................................................................................................................... 172
8.51. Wheel-0.38.4 ................................................................................................................................... 174
8.52. Ninja-1.11.1 ..................................................................................................................................... 175
8.53. Meson-1.0.0 ..................................................................................................................................... 176
8.54. Coreutils-9.1 .................................................................................................................................... 177
8.55. Check-0.15.2 .................................................................................................................................... 182
8.56. Diffutils-3.9 ..................................................................................................................................... 183
8.57. Gawk-5.2.1 ...................................................................................................................................... 184
8.58. Findutils-4.9.0 .................................................................................................................................. 185
8.59. Groff-1.22.4 ..................................................................................................................................... 186
8.60. GRUB-2.06 ...................................................................................................................................... 189
8.61. Gzip-1.12 ......................................................................................................................................... 192
8.62. IPRoute2-6.1.0 ................................................................................................................................. 193
8.63. Kbd-2.5.1 ......................................................................................................................................... 195
8.64. Libpipeline-1.5.7 ............................................................................................................................. 197

v
Linux From Scratch - Version 11.3-systemd

8.65. Make-4.4 .......................................................................................................................................... 198


8.66. Patch-2.7.6 ....................................................................................................................................... 199
8.67. Tar-1.34 ........................................................................................................................................... 200
8.68. Texinfo-7.0.2 ................................................................................................................................... 201
8.69. Vim-9.0.1273 ................................................................................................................................... 203
8.70. MarkupSafe-2.1.2 ............................................................................................................................ 206
8.71. Jinja2-3.1.2 ...................................................................................................................................... 207
8.72. Systemd-252 .................................................................................................................................... 208
8.73. D-Bus-1.14.6 ................................................................................................................................... 213
8.74. Man-DB-2.11.2 ................................................................................................................................ 215
8.75. Procps-4.0.2 ..................................................................................................................................... 218
8.76. Util-linux-2.38.1 .............................................................................................................................. 220
8.77. E2fsprogs-1.47.0 .............................................................................................................................. 225
8.78. À propos des symboles de débogage .............................................................................................. 228
8.79. Nettoyage ......................................................................................................................................... 228
8.80. Nettoyage ......................................................................................................................................... 230
9. Configuration du système .......................................................................................................................... 231
9.1. Introduction ....................................................................................................................................... 231
9.2. Configuration générale du réseau ..................................................................................................... 231
9.3. Manipulation des périphériques et modules ..................................................................................... 235
9.4. Gérer les périphériques ..................................................................................................................... 238
9.5. Configurer l'horloge système ............................................................................................................ 238
9.6. Configurer la Console Linux ............................................................................................................ 239
9.7. Configuration des paramètres régionaux du système ....................................................................... 241
9.8. Créer le fichier /etc/inputrc ............................................................................................................... 242
9.9. Créaction du fichier /etc/shells .......................................................................................................... 243
9.10. Utilisation et configuration de Systemd ......................................................................................... 244
10. Rendre le système LFS amorçable .......................................................................................................... 247
10.1. Introduction ..................................................................................................................................... 247
10.2. Créer le fichier /etc/fstab ................................................................................................................. 247
10.3. Linux-6.1.11 .................................................................................................................................... 249
10.4. Utiliser GRUB pour paramétrer le processus de démarrage .......................................................... 255
11. La fin ........................................................................................................................................................ 258
11.1. Fin .................................................................................................................................................... 258
11.2. Enregistrez-vous .............................................................................................................................. 258
11.3. Redémarrer le système .................................................................................................................... 258
11.4. Ressources supplémentaires ............................................................................................................ 259
11.5. Débuter After LFS .......................................................................................................................... 260
V. Annexes ........................................................................................................................................................... 263
A. Acronymes et termes ................................................................................................................................. 264
B. Remerciements ........................................................................................................................................... 266
C. Dépendances .............................................................................................................................................. 269
D. Licences LFS ............................................................................................................................................. 285
D.1. Creative Commons License ............................................................................................................. 285
D.2. The MIT License .............................................................................................................................. 289
Index ..................................................................................................................................................................... 290

vi
Linux From Scratch - Version 11.3-systemd

Préface
Avant-propos
Mon parcours pour apprendre et mieux comprendre Linux a débuté en 1998. Je venais d'installer ma première
distribution Linux et je fus rapidement intrigué par l'ensemble du concept et la philosophie sous-jacente de Linux.

Il y a toujours bien des manières d'accomplir une seule tâche. Il en est de même pour les distributions Linux. Un
grand nombre existent depuis des années. Certaines existent encore, certaines se sont transformées en quelque chose
d'autre, tandis que d'autres encore ont été reléguées à nos souvenirs. Elles font toutes les choses différemment pour
s'adapter au besoin de leur public. Vu qu'il existait énormément de manières différentes d'atteindre le même objectif,
je me rendis compte que je n'étais plus obligé de me limiter à une organisation en particulier. Avant de découvrir
Linux, on supportait simplement les problèmes dans d'autres systèmes d'exploitation puisqu'on n'avait pas le choix.
Cela valait ce que ça valait, que cela nous plaise ou non. Avec Linux, le concept du choix a commencé à émerger.
Si vous n'aimiez pas quelque chose, vous étiez libres, voire encouragés à le modifier.

J'ai essayé un certain nombre de distributions et n'ai pas pu me décider pour l'une d'entre elles. C'étaient de bons
systèmes, chacun à sa façon. Ce n'était plus une question de bonne ou mauvaise qualité. C'était devenu une question
de goût personnel. Avec tout ce choix disponible, il devenait clair qu'il n'y aurait pas un seul système qui serait parfait
pour moi. Donc je résolus de créer mon propre système Linux qui correspondrait totalement à mes préférences
personnelles.

Pour que ce soit vraiment mon propre système je résolus de compiler tout à partir du code source au lieu d'utiliser
des paquets de binaires pré-compilés. Ce système Linux « parfait » aurait les forces de plusieurs systèmes sans
leurs faiblesses ressenties. De prime abord, l'idée était décourageante. Je restais sceptique à la pensée de pouvoir
construire un tel système.

Après avoir rencontré quelques problèmes comme des dépendances circulaires et des erreurs à la compilation, j'ai
finalement construit un système Linux entièrement personnalisé. Il était totalement opérationnel et parfaitement
utilisable comme n'importe quel autre système Linux du moment. Mais c'était ma propre création. C'était très
satisfaisant d'avoir concocté un tel système moi-même. Créer chaque morceau de logiciel par moi-même aurait été
la seule option encore plus satisfaisante. C'était là la meilleure alternative.

Alors que je partageais mes objectifs et mes expériences avec d'autres membres de la communauté Linux, il devint
manifeste qu'il y avait un intérêt soutenu concernant ces idées. Il devint rapidement clair que de tels systèmes
Linux personnalisés satisfaisaient non seulement les exigences des utilisateurs mais servaient aussi d'une opportunité
idéale d'apprentissage pour les programmeurs et les administrateurs systèmes, afin d'améliorer leurs compétences
(existantes) sous Linux. De cet intérêt est né le projet Linux From Scratch..

Ce livre Linux From Scratch est le cœur de ce projet. Il fournit la base et les instructions qui vous sont nécessaires
pour concevoir et construire votre propre système. Bien que ce livre fournisse un modèle qui aboutira à un système
qui fonctionne correctement, vous êtes libres de modifier les instructions pour les adapter à vos envies, ce qui fait
partie des finalités importantes du projet après tout. Vous gardez le contrôle ; nous vous donnons simplement un
coup de main pour débuter votre propre parcours.

J'espère sincèrement que vous passerez un bon moment en travaillant sur votre propre système Linux From Scratch
et que vous apprécierez les nombreux bénéfices qu'apporte un système qui est réellement le vôtre.

--
Gerard Beekmans
gerard@[Link]

vii
Linux From Scratch - Version 11.3-systemd

Public visé
Beaucoup de raisons peuvent vous pousser à vouloir lire ce livre. Une des questions que beaucoup de monde se
pose est « pourquoi se fatiguer à construire à la main un système Linux de A à Z alors qu'il suffit de télécharger
et installer une distribution existante ? »
Vous aider à apprendre comment fonctionne un système Linux de l'intérieur est l'une des raisons importantes de
l'existence de ce projet. Construire un système LFS permet de démontrer ce qui fait que Linux fonctionne, et
comment les choses interagissent et dépendent les unes des autres. L'une des meilleures choses que l'expérience de
cet apprentissage peut vous apporter est la capacité à personnaliser un système Linux afin qu'il soit à votre goût
et réponde à vos besoins.
Un autre avantage clé de LFS est qu'il vous permet d'avoir plus de contrôle sur votre système sans avoir à dépendre
d'une implémentation créée par quelqu'un d'autre. Avec LFS, vous êtes maintenant au volant et vous êtes capable
de décider de chaque aspect du système.
LFS vous permet de créer des systèmes Linux très compacts. Lors de l'installation d'autres distributions, vous êtes
souvent obligé d'installer de nombreux programmes que vous n'utiliserez ni ne comprendrez probablement jamais.
Ces programmes gaspillent des ressources. Vous pourriez répondre qu'avec les disques durs et les processeurs
d'aujourd'hui, les ressources ne sont plus un problème. Pourtant, vous êtes parfois contraint par des questions
d'espace, ou d'autres limitations. Pensez aux CD, clés USB amorçables et aux systèmes embarqués. Ce sont des
domaines où LFS peut être avantageux.
Un autre avantage d'un système Linux personnalisé est un surcroît de sécurité. En compilant le système complet à
partir du code source, vous avez la possibilité de tout vérifier et d'appliquer tous les correctifs de sécurité désirés. Il
n'est plus nécessaire d'attendre que quelqu'un d'autre vous fournisse les paquets binaires pour réparer une faille de
sécurité. À moins que vous n'examiniez vous-même le correctif et que vous ne l'appliquiez vous-même, vous n'avez
aucune garantie que le nouveau paquet binaire ait été compilé correctement et qu'il corrige bien le problème.
Le but de Linux From Scratch est de construire les fondations d'un système complet et utilisable. Si vous ne souhaitez
pas construire votre propre système à partir de rien, vous pourriez cependant bénéficier des informations contenues
dans ce livre.
Il existe trop de bonnes raisons de construire votre système LFS pour pouvoir toutes les lister ici. En fin de compte,
l'apprentissage est de loin la raison la plus puissante. En continuant dans votre expérience de LFS, vous découvrirez
le pouvoir réel que donnent l'information et la connaissance.

Architectures cibles de LFS


Les principales architectures cibles de LFS sont les processeurs AMD ou Intel x86 (32 bits) et x86_64 (64 bits).
En même temps, les instructions de ce livre fonctionnent également, avec quelques modifications, sur les
processeurs Power PC et ARM. Pour construire un système qui utilise un de ces processeurs, le prérequis principal,
supplémentaire à ceux des pages suivantes, est la présence d'un système Linux grâce à une installation précédente de
LFS, Ubuntu, Red Hat/Fedora, SuSE, ou une autre distribution ciblant l'architecture de vote processeur. Remarquez
aussi que vous pouvez installer et utiliser un système 32 bits en tant que système hôte sur un système AMD ou
Intel 64 bits.
Le gain obtenu en compilant sur un système 64 bits comparé à un système 32 bits est minimal. Par exemple, dans
le test de la construction de LFS-9.1 sur un système basé sur un processeur Core i7-4790, nous avons relevé les
statistiques suivantes :
Temps de construction de l'architecture Taille de la construction
32 bit 239,9 minutes 3,6 Go
64 bit 233,2 minutes 4,4 Go

viii
Linux From Scratch - Version 11.3-systemd

Comme vous pouvez le constater, sur le même matériel, la construction 64 bits est seulement 3 % plus rapide et
22 % plus grosse que la construction en 32 bits. Si vous voulez utiliser LFS pour un serveur LAMP, ou un pare-feu,
un processeur 32 bits est largement suffisant. Au contraire, plusieurs paquets dans BLFS ont maintenant besoin de
plus de 4 Go de RAM pour être construits ou lancés. Si vous voulez utiliser LFS sur un ordinateur de bureau, les
auteurs de LFS recommandent de construire un système 64 bits.
La construction 64 bits par défaut qui résulte de LFS est considérée comme un système « pur » 64 bits. C'est-à-dire
qu'elle ne prend en charge que les exécutables en 64 bits. La construction d'un système « multi-lib » implique la
construction de beaucoup d'applications à deux reprises, une fois pour le système 32 bits et une fois pour le système
64 bits. Ceci n'est pas pris en charge par LFS car cela interférerait avec l'objectif pédagogique visant à fournir les
instructions nécessaires à un simple système Linux de base. Certains éditeurs de LFS et BLFS maintiennent un
fork multilib de LFS, accessible sur [Link] Toutefois cela
reste un sujet avancé.

Prérequis
Construire un système LFS n'est pas une tâche facile. Cela requiert un certain niveau de connaissance en
administration de système Unix pour résoudre les problèmes et exécuter correctement les commandes listées. En
particulier, vous devriez au minimum déjà savoir comment utiliser la ligne de commande (le shell) pour copier
et déplacer des fichiers et des répertoires, pour lister le contenu de répertoires et de fichiers, et pour changer de
répertoire. Il est aussi attendu que vous disposiez d'une connaissance raisonnable de l'utilisation et de l'installation
de logiciels Linux.
Comme le livre LFS attend au moins ce simple niveau de connaissance, les différents forums d'aide de LFS seront
peu capables de vous fournir une assistance en dessous de ce niveau. Vous finirez par remarquer que vos questions
n'auront pas de réponses ou que vous serez renvoyé à la liste des lectures principales avant l'installation.
Avant de construire un système LFS, nous recommandons de lire les guides pratiques suivants :
• Software-Building-HOWTO [Link]
C'est un guide complet sur la construction et l'installation « générique » de logiciels Unix sous Linux. Bien qu'il
ait été écrit il y a longtemps, il offre encore un bon résumé des techniques de base requises pour construire et
installer un logiciel.
• Beginner's Guide to Installing from Source (Guide de l’installation à partir des sources pour le débutant)
[Link]
Ce guide propose un bon résumé des compétences et des connaissances techniques de base nécessaires à la
construction de logiciels à partir du code source.

LFS et les standards


La structure de LFS suit les standards Linux aussi fidèlement que possible. Les principaux standards sont :
• POSIX.1-2008.
• Filesystem Hierarchy Standard (FHS) version 3.0
• Linux Standard Base (LSB) version 5.0 (2015)
La LSB comporte quatre spécifications distinctes : le cœur, le bureau, les langages à l'exécution et l'impression.
Certaines parties des spécifications du cœur et du bureau comportent des exigences qui s'appliquent à la
construction. Il y a aussi deux spécifications pour l'évaluation : Gtk3 et les graphismes. LFS s'applique à
respecter les constructions IA32 (32-bit x86) ou AMD64 (x86_64) qui ont été évoquées dans la section
précédente.

ix
Linux From Scratch - Version 11.3-systemd

Note
Les exigences de la LSB ne font pas l'unanimité. Leur objectif principal est de s'assurer que les
logiciels propriétaires pourront être installés et lancés correctement sur un système conforme. Comme
LFS est basée sur le code source, les utilisateurs ont un contrôle total des paquets qui les intéressent
et certains choisissent de ne pas installer certains paquets qui sont cités dans la LSB.

Il est possible de créer de toute pièce un système complet qui soit capable de réussir les tests de certification LSB,
mais cela requiert des paquets supplémentaires qui vont au-delà des objectifs de LFS. Vous trouverez les instructions
d'installation de ces paquets supplémentaires dans BLFS.

Paquets fournis par LFS requis pour satisfaire les exigences de la LSB
Cœur de la LSB : Bash, Bc, Binutils, Coreutils, Diffutils, File, Findutils,
Gawk, Grep, Gzip, M4, Man-DB, Ncurses, Procps, Psmisc,
Sed, Shadow, Tar, Util-linux, Zlib
LSB pour les bureaux : Aucun
LSB pour les langages à l'exécution : Perl, Python
LSB pour l'impression : Aucun
LSB pour Gtk3 et LSB pour les graphismes Aucun
(évaluation):

Paquets fournis par BLFS requis pour satisfaire les exigences de la LSB
Cœur de la LSB : At, Batch (partie d'At), Cpio, Ed, Fcrontab, LSB-Tools,
NSPR, NSS, PAM, Pax, Sendmail (ou Postfix ou Exim),
time
LSB pour les bureaux : Alsa, ATK, Cairo, Desktop-file-utils, Freetype, Fontconfig,
Gdk-pixbuf, Glib2, GTK+2, Icon-naming-utils, Libjpeg-
turbo, Libpng, Libtiff, Libxml2, MesaLib, Pango, Xdg-utils,
Xorg
LSB pour les langages à l'exécution : Libxml2, Libxslt
LSB pour l'impression : CUPS, Cups-filters, Ghostscript, SANE
LSB pour Gtk3 et LSB pour les graphismes GTK+3
(évaluation):

Paquets fournis ni par LFS ni par BLFS mais qui sont requis pour satisfaire les exigences
de la LSB
Cœur de la LSB : Aucun
LSB pour les bureaux : Qt4 (mais Qt5 est disponible)
LSB pour les langages à l'exécution : Aucun
LSB pour l'impression : Aucun
LSB pour Gtk3 et LSB pour les graphismes Aucun
(évaluation):

x
Linux From Scratch - Version 11.3-systemd

Raison de la présence des paquets dans le livre


Comme indiqué plus haut, le but de LFS est de construire les fondations complètes et utilisables d'un système.
Il inclut tous les paquets nécessaires pour être répliqué tout en fournissant une base relativement minimale vous
permettant de personnaliser un système plus complet basé sur les choix de l'utilisateur. Cela ne veut pas dire que LFS
est le plus petit système possible. Plusieurs paquets importants sont inclus et ne sont pas absolument indispensables.
Les listes ci-dessous documentent la raison pour laquelle chaque paquet se trouve dans le livre.
• Acl
Ce paquet contient des outils d'administration des listes de contrôle d'accès, utilisées pour définir plus finement
les droits d'accès de votre choix pour les fichiers et les répertoires.
• Attr
Ce paquet contient des programmes d'administration des attributs étendus sur les objets d'un système de
fichiers.
• Autoconf
Le paquet Autoconf contient des programmes produisant des scripts shell qui configurent automatiquement
le code source à partir du modèle fourni par le développeur. Il est souvent requis pour reconstruire un paquet
après une mise à jour des procédures de construction.
• Automake
Ce paquet contient des programmes pour générer des Makefile à partir d'un modèle. Il est souvent requis pour
reconstruire un paquet après une mise à jour des procédures de construction.
• Bash
Ce paquet satisfait une exigence du cœur de la LSB pour fournir une interface Bourne Shell au système. Il a
été choisi parmi d'autres shells du fait de son utilisation répandue et de ses fonctionnalités étendues au-delà des
fonctions d'un shell de base.
• Bc
Ce paquet fournit un langage de traitement numérique à précision arbitraire. Il satisfait une exigence utilisée
pour la construction du noyau Linux.
• Binutils
Ce paquet contient un éditeur de liens, un assembleur et d'autres outils de gestion des fichiers objets. Les
programmes de ce paquet sont nécessaires pour compiler la plupart des paquets d'un système LFS et au-delà.
• Bison
Ce paquet contient la version GNU de yacc (Yet Another Compiler Compiler, encore un nouveau compilateur
de compilateur) requis pour construire plusieurs autres programmes de LFS.
• Bzip2
Ce paquet contient des programmes de compression et de décompression de fichiers. Il est nécessaire pour
décompresser plusieurs paquets de LFS.
• Check
Ce paquet contient un harnais de tests pour d'autres programmes.
• Coreutils
Ce paquet contient un certain nombre de paquets essentiels pour visualiser et manipuler des fichiers et des
répertoires. Ces programmes sont nécessaires pour la gestion de fichiers en ligne de commande et ils sont
nécessaires pour les procédures d'installation de chaque paquet de LFS.

xi
Linux From Scratch - Version 11.3-systemd

• D-Bus
Ce paquet contient des programmes pour implémenter un système de message par bus, qui est un moyen simple
pour les applications de communiquer avec les autres.
• DejaGNU
Ce paquet contient un harnais de tests pour d'autres programmes.
• Diffutils
Ce paquet contient des programmes qui montrent les différences entre des fichiers ou entre des répertoires. On
peut utiliser ces programmes pour créer des correctifs et ils sont aussi utilisés dans de nombreuses procédures
de construction de paquets.
• E2fsprogs
Ce paquet contient les outils de gestion des systèmes de fichiers ext2, ext3 et ext4. Ce sont les systèmes de
fichiers les plus courants et les plus largement testés, parmi ceux pris en charges par Linux.
• Expat
Ce paquet contient une bibliothèque d'analyse XML relativement petite. Il est exigé par le module Perl
XML::Parser.
• Expect
Ce paquet contient un programme pour réaliser des dialogues scriptés avec d'autres programmes interactifs. Il
est souvent utilisé pour tester d'autres paquets.
• File
Ce paquet contient un outil pour déterminer le type d'un ou plusieurs fichiers donnés. Quelques paquets en ont
besoin dans leur script de construction.
• Findutils
Ce paquet contient des programmes pour rechercher des fichiers dans un système de fichiers. Il est utilisé dans
les scripts de construction de nombreux paquets.
• Flex
Ce paquet contient un outil de génération de programmes qui reconnaît des modèles de texte. C'est la version
GNU du programme lex (lexical analyzer, analyseur lexical). Il est nécessaire pour construire plusieurs paquets
LFS.
• Gawk
Ce paquet contient des programmes de manipulation de fichiers texte. C'est la version GNU du programme awk
(Aho-Weinberg-Kernighan). Il est utilisé dans les scripts de construction de nombreux autres paquets.
• GCC
Ce paquet est le Gnu Compiler Collection. Il contient les compilateurs C et C++ ainsi que d'autres qui ne sont
pas construits dans LFS.
• GDBM
Ce paquet contient la bibliothèque GNU Database Manager (gestionnaire de base de données GNU). Il est
utilisé par un autre paquet de LFS : Man-DB.
• Gettext
Ce paquet contient des outils et des bibliothèques pour l'internationalisation et la traduction de nombreux
paquets.
• Glibc

xii
Linux From Scratch - Version 11.3-systemd

Ce paquet contient la bibliothèque C principale. Les programmes Linux ne peuvent pas s'exécuter sans elle.
• GMP
Ce paquet contient des bibliothèques mathématiques qui fournissent des fonctions utiles pour de l'arithmétique
en précision arbitraire. Il est nécessaire pour construire GCC.
• Gperf
Ce paquet contient un programme qui génère une fonction de hachage parfaite à partir d'un trousseau. Il est
exigé par Systemd.
• Grep
Ce paquet contient des programmes de recherche au sein de fichiers. Ces programmes sont utilisés par la
plupart des scripts de construction des paquets.
• Groff
Le paquet Groff contient des programmes de formatage de texte. Une des fonctions importantes de ces
programmes est le formatage des pages de manuels.
• GRUB
Ce paquet est le chargeur Grand Unified Boot. Ce n'est pas le seul chargeur d'amorçage disponible, mais c'est le
plus flexible.
• Gzip
Ces paquets contiennent des programmes de compression et de décompression de fichiers. Il est nécessaire
pour décompresser de nombreux paquets sur LFS.
• Iana-etc
Ce paquet fournit des données pour des services et des protocoles réseau. Il est nécessaire pour activer les
bonnes fonctionnalités de réseau.
• Inetutils
Ce paquet contient des programmes d'administration réseau de base.
• Intltool
Ce paquet contient des outils pour extraire des chaînes traduisibles de fichiers sources.
• IProute2
Ce paquet contient des programmes pour du réseau de base ou avancé en IPv4 et IPv6. Il a été choisi parmi les
paquets d'outils réseau courants (net-tools) pour ses fonctionnalités IPv6.
• Jinja2
Ce paquet est un module Python pour le remplissage de modèles textuels. Il est requis pour construire Systemd.
• Kbd
Ce paquet contient des fichiers de tables de touches, des outils claviers pour les claviers non américains et un
certain nombre de polices pour console.
• Kmod
Ce paquet contient des programmes nécessaires pour administrer les modules du noyau Linux.
• Less
Ce paquet contient un très bon visualiseur de texte qui permet le défilement vers le haut ou vers le bas lors de la
visualisation d'un fichier. Il est aussi utilisé par Man-DB pour visualiser des pages de manuels.

xiii
Linux From Scratch - Version 11.3-systemd

• Libcap
Ce paquet implémente les interfaces au niveau utilisateur avec les possibilités POSIX 1003.1e disponibles dans
les noyaux Linux.
• Libelf
Le projet elfutils fournit des bibliothèques et des outils pour les fichiers ELF et le format de données DWARF.
La plupart des utilitaires de ce paquet sont disponibles dans d'autres paquets mais la bibliothèque est requise
pour construire le noyau Linux avec la configuration par défaut (et la plus efficace).
• Libffi
Ce paquet implémente une interface de programmation portable et haut-niveau pour diverses conventions
d'appel. Certains programmes peuvent ne pas savoir à la compilation les arguments à passer à une fonction. Par
exemple, il se peut qu'un interpréteur n'apprenne le nombre et le type des arguments utilisés pour appeler une
fonction donnée qu'à l'exécution. Libffi peut être utilisée dans ces programmes pour fournir une passerelle entre
l'interpréteur et le code compilé.
• Libpipeline
Le paquet Libpipeline contient une bibliothèque pour manipuler des files (pipelines) de sous-processus de
façon flexible et commode. Il est requis par le paquet Man-DB.
• Libtool
Ce paquet contient le script générique de prise en charge des bibliothèques de GNU. Il englobe la complexité
de l'utilisation des bibliothèques partagées dans une interface cohérente et portable. Il est exigé par les suites de
tests d'autres paquets de LFS.
• Noyau Linux
Ce paquet est le système d'exploitation. C'est Linux dans l'environnement GNU/Linux.
• M4
Ce paquet contient un traitement de macros textuelles générales utile en tant qu'outil de construction d'autres
programmes.
• Make
Ce paquet contient un programme de gestion de la construction des paquets. Il est requis par presque tous les
paquets de LFS.
• MarkupSafe
Ce paquet est un module Python de traitement de chaînes en HTML/XHTML/XML de manière sure. Jinja2 a
besoin de ce paquet.
• Man-DB
Ce paquet contient des programmes de recherche et de visualisation de pages de manuels. Il a été préféré au
paquet man du fait de fonctionnalités d'internationalisation supérieures. Il fournit le programme man.
• Man-pages
Ce paquet contient le contenu final des pages de manuels de base de Linux.
• Meson
Ce paquet fournit un outil logiciel pour automatiser la construction de logiciels. Le but principal de Meson est
de minimiser le temps que les développeurs passent à configurer leur système de construction. Il est requis pour
construire Systemd, ainsi que de nombreux paquets de BLFS.
• MPC

xiv
Linux From Scratch - Version 11.3-systemd

Ce paquet contient des fonctions pour le calcul de nombres complexes. Il est exigé par GCC.
• MPFR
Ce paquet contient des fonctions pour des maths à précision multiple. Il est exigé par GCC.
• Ninja
Ce paquet contient un petit système de construction qui met l'accent sur la vitesse. Ses fichiers d'entrées sont
prévus pour être générés par un système de construction de plus haut niveau, et il est prévu pour lancer des
constructions aussi rapidement que possible. Ce paquet est requis par Meson.
• Ncurses
Le paquet Ncurses contient les bibliothèques de gestion des écrans type caractère, indépendant des terminaux.
Il est souvent utilisé pour fournir le contrôle du curseur dans un système en menus. Il est exigé par un certain
nombre de paquets de LFS.
• Openssl
Ce paquet fournit les outils de gestion et les bibliothèques liées à la cryptographie. Ils sont utiles pour fournir
des fonctions de cryptographies à d'autres paquet, dont le noyau Linux.
• Patch
Ce paquet contient un programme pour modifier ou créer des fichiers en appliquant un fichier de correctif créé
en général par le programme diff. Il est requis par la procédure de construction de plusieurs paquets LFS.
• Perl
Ce paquet est un interpréteur du langage PERL. Il est nécessaire pour l'installation et les suites de tests de
plusieurs paquets LFS.
• Pkg-config
Ce paquet fournit un programme qui renvoie les métadonnées d'une bibliothèque ou d'un binaire installé.
• Procps-NG
Ce paquet contient des programmes de surveillance des processus. Ces programmes sont utiles pour
l'administration système et ils sont aussi utilisés par les scripts de démarrage LFS.
• Psmisc
Ce paquet contient des programmes d'affichage d'informations sur les processus en cours d'exécution. Ces
programmes sont utiles pour l'administration système.
• Python 3
Ce paquet fournit un langage interprété dont la philosophie de conception valorise la lisibilité du code.
• Readline
Ce paquet est un ensemble de bibliothèques qui offrent des fonctionnalités d'édition et d'historique de la ligne
de commande. Il est utilisé par Bash.
• Sed
Ce paquet permet de saisir du texte sans ouvrir le fichier dans un éditeur de texte. Il est aussi requis par la
plupart des scripts de configuration des paquets LFS.
• Shadow
Ce paquet contient des programmes de gestion sécurisée des mots de passe.
• Systemd

xv
Linux From Scratch - Version 11.3-systemd

Ce paquet fournit un programme d'init et plusieurs possibilités supplémentaires de contrôle du démarrage et du


système en tant qu'alternative à SysVinit. Il est utilisé dans de nombreuses distributions commerciales.
• Tar
Ce paquet fournit des fonctionnalités d'archivage et d'extraction de pratiquement tous les paquets utilisés dans
LFS.
• Tcl
Ce paquet contient le Tool Command Language utilisé dans beaucoup de suites de tests des paquets LFS.
• Texinfo
Ce paquet contient des programmes de lecture, d'écriture et de conversion de pages info. Il est utilisé dans les
procédures d'installation de beaucoup de paquets LFS.
• Util-linux
Ce paquet contient des programmes généraux. Parmi eux, se trouvent des outils de gestion des systèmes de
fichiers, de consoles, de partitions et de messages.
• Vim
Ce paquet contient un éditeur. Il a été choisi pour sa compatibilité avec l'éditeur vi classique et son grand
nombre de fonctionnalités puissantes. Un éditeur est un choix très personnel pour chaque utilisateur et vous
pouvez le remplacer par n'importe quel éditeur si vous le désirez.
• Wheel
Ce paquet contient un module Python qui est l'implémentation de référence du standard de gestion des paquets
Python wheel.
• XML::Parser
Ce paquet est un module Perl qui interagit avec Expat.
• XZ Utils
Ce paquet contient des programmes de compression et de décompression de fichiers. Il offre la compression la
plus haute disponible et il est utile pour la décompression des paquets au format XZ ou LZMA.
• Zlib
Ce paquet contient des routines de compression et de décompression utilisées par quelques programmes.
• Zstd
Ce paquet contient des routines de compression et de décompression utilisées par quelques programmes. Il
fournit de forts taux de compression et une large gamme de compromis entre compression et vitesse.

Typographie
Pour faciliter ce qui suit, voici quelques conventions typographiques suivies tout au long de ce livre. Cette section
contient quelques exemples du format typographique trouvé dans Linux From Scratch.
./configure --prefix=/usr

Ce style de texte est conçu pour être tapé exactement de la même façon qu'il est vu sauf si le texte indique le contraire.
Il est aussi utilisé dans les sections d'explications pour identifier les commandes référencées.
Dans certains cas, une ligne logique s'étend sur deux lignes physiques voire plus avec un antislash à la fin de la ligne.
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \
--prefix=/tools --disable-nls --disable-werror

xvi
Linux From Scratch - Version 11.3-systemd

Remarquez que l'antislash doit être suivi d'un retour chariot immédiat. Tout autre caractère blanc comme des espaces
ou des tabulations donnera des résultats incorrects.
install-info: unknown option '--dir-file=/mnt/lfs/usr/info/dir'

Ce style de texte (texte à largeur fixe) montre une sortie d'écran, généralement le résultat de commandes. Ce format
est aussi utilisé pour afficher des noms de fichiers, comme /etc/[Link].

Note
Configurez votre navigateur pour afficher les textes à chasse fixe avec une bonne police à chasse fixe,
avec laquelle vous pouvez clairement distinguer les caractères dans Il1 ou O0.

Mise en évidence
Ce style de texte est utilisé dans différents buts dans ce livre. Son but principal est de mettre en évidence les points
importants.
[Link]
Ce format est utilisé pour les liens, ceux de la communauté LFS et ceux référençant des pages externes. Cela inclut
les guides pratiques, les emplacements de téléchargement et des sites web.
cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
......
EOF

Ce format est utilisé principalement lors de la création de fichiers de configuration. La première commande indique
au système de créer le fichier $LFS/etc/group à partir de ce qui est saisi jusqu'à ce que la séquence de fin de fichier
(End Of File) (EOF) soit rencontrée. Donc, cette section entière est généralement saisie de la même façon.
<TEXTE À REMPLACER>

Ce format est utilisé pour intégrer du texte qui ne devra pas être saisi tel quel et qui ne devra pas être copié/collé.
[TEXTE FACULTATIF]

Ce format est utilisé pour intégrer du texte qui est facultatif.


passwd(5)

Ce format est utilisé pour faire référence à une page de manuel (man) spécifique. Le nombre entre parenthèses
indique une section spécifique à l'intérieur des manuels. Par exemple, passwd a deux pages de manuel. Pour les
instructions d'installation de LFS, ces deux pages de manuels seront situées dans /usr/share/man/man1/passwd.
1 et /usr/share/man/man5/passwd.5. Quand le livre utilise passwd(5), il fait spécifiquement référence à /usr/
share/man/man5/passwd.5. man passwd affichera la première page de manuel qu'il trouvera et qui correspond à
« passwd », /usr/share/man/man1/passwd.1. Dans cet exemple, vous devrez exécuter man 5 passwd pour lire cette
page spécifique. Il devrait être noté que la plupart des pages de man n'ont pas de nom de page dupliqué dans les
différentes sections. Du coup, man <nom du programme> est généralement suffisant.

Structure
Ce livre est divisé en plusieurs parties.

Partie I — Introduction
La première partie donne quelques informations importantes, comme la façon d'installer LFS. Cette section fournit
aussi des méta-informations sur le livre.

xvii
Linux From Scratch - Version 11.3-systemd

Partie II — Préparation de la construction


La deuxième partie décrit comment préparer le processus de construction : création d'une partition, téléchargement
des paquets et compilation d'outils temporaires.

Partie III — Construction des outils croisés LFS et des outils temporaires
La troisième partie fournit des instructions pour construire les outils requis pour la construction du système LFS
final.

Partie IV — Construction du système LFS


La quatrième partie guide le lecteur tout au long de la construction du système LFS : compilation et installation de
tous les paquets un par un, mise en place des scripts de démarrage et installation du noyau. Le système Linux basique
résultant est la fondation à partir de laquelle d'autres logiciels peuvent être construits pour étendre le système de la
façon désirée. À la fin du livre se trouve une référence facile à utiliser et listant tous les programmes, bibliothèques
et fichiers importants qui ont été installés.

Partie V — Annexes
La cinquième partie fournit des informations sur le livre lui-même, en particulier les acronymes et les termes
utilisés, les remerciements, les dépendances des paquets, une liste des scripts de démarrage de LFS, la licence pour
redistribuer ce livre et un catalogue complet des paquets, des programmes, des bibliothèques et des scripts.

Errata et annonces de sécurité


Les logiciels utilisés pour créer un système LFS sont constamment mis à jour et améliorés. Des messages
d'avertissement pour la sécurité et des corrections de bogues pourraient survenir après la sortie du livre LFS. Afin
de vérifier si les versions du paquet ou les instructions de cette version de LFS ont besoin de modifications pour
corriger des vulnérabilités en termes de sécurité ou toute autre correction de bogue, merci de visiter [Link]
[Link]/lfs/errata/11.3-systemd/ avant de commencer votre construction. Vous devez noter toutes les
modifications et les appliquer à la section correspondante du livre pendant votre progression lors de la construction
du système LFS.
En plus, les rédacteurs de Linux From Scratch maintiennent une liste des vulnérabilités de sécurité découvertes
après la publication du livre. Avant de continuer la construction de LFS, vérifiez la liste des vulnérabilités actives
disponible sur [Link] Lors de la construction du système LFS, appliquez
les modifications suggérées dans les annonces de chacune des sections importantes du livre. Si vous utilisez LFS
comme un vrai système de bureau ou de serveur, continuez à prendre en compte les annonces et à corriger les
vulnérabilités même après la construction du système LFS.

xviii
Linux From Scratch - Version 11.3-systemd

Partie I. Introduction
Linux From Scratch - Version 11.3-systemd

Chapitre 1. Introduction
1.1. Comment construire un système LFS
Le système LFS sera construit avec une distribution Linux déjà installée (telle que Debian, OpenMandriva, Fedora
ou openSUSE). Ce système Linux existant (l'hôte) sera utilisé comme point de départ pour fournir les programmes
nécessaires, dont un compilateur, un éditeur de liens et un shell, pour construire le nouveau système. Sélectionnez
l'option « développement » (development) lors de l'installation de la distribution pour disposer de ces outils.
Au lieu de l'installation d'une distribution séparée complète sur votre machine, vous pouvez utiliser le LiveCD d'une
distribution commerciale.
Le Chapitre 2 de ce livre décrit comment créer une nouvelle partition Linux native et un système de fichiers où
le nouveau système LFS sera compilé et installé. Le Chapitre 3 explique quels paquets et correctifs ont besoin
d'être téléchargés pour construire un système LFS et comment les stocker sur le nouveau système de fichiers. Le
Chapitre 4 traite de la configuration pour un environnement de travail approprié. Lisez le Chapitre 4 avec attention,
car il explique plusieurs problèmes importants que vous devez connaître avant de commencer à travailler sur le
Chapitre 5 et les chapitres suivants.
Le Chapitre 5 explique l'installation de la chaîne d'outils initiale (binutils, gcc et glibc) avec une technique de
compilation croisée qui isole les nouveaux outils du système hôte.
Le Chapitre 6 montre comment vous pouvez compiler les outils de base avec la chaîne de construction croisée tout
juste construite.
Le Chapitre 7 entre ensuite dans un environnement « chroot » où nous utilisons les outils précédemment construits
pour construire tous les outils nécessaires restants nécessaires à la construction et à la vérification du système final.
Cet effort consistant à isoler le nouveau système de la distribution hôte peut sembler excessif. Une explication
technique complète est fournie dans Remarques techniques sur la chaîne de compilation.
Dans le Chapitre 8, le système LFS complet est construit. Un autre avantage fournit par l'environnement chroot est
qu'il vous permet de continuer à utiliser le système hôte durant la construction de LFS. Vous pouvez continuer à
utiliser votre ordinateur normalement en attendant la fin de la construction d'un paquet.
Pour terminer l'installation, la configuration de base du système est ajoutée dans le Chapitre 9, le noyau et le chargeur
d'amorçage sont configurés dans le Chapitre 10. Le Chapitre 11 contient des informations sur la suite de l'expérience
LFS après ce livre. Après avoir suivi les étapes de ce livre, l'ordinateur sera prêt à redémarrer dans le nouveau
système LFS.
Ceci expose rapidement le processus. Des informations détaillées sur chaque étape sont traitées dans les chapitres
suivants. Les éléments qui peuvent sembler compliqués seront clarifiés et tout prendra sens, alors que vous vous
embarquez pour l'aventure LFS.

1.2. Nouveautés depuis la dernière version


Dans la version 11.3, --enable-default-pie et --enable-default-ssp sont activés pour GCC. Ils peuvent prémunir
les programmes de certains types d'attaques malveillantes mais elles ne peuvent pas fournir une protection complète.
Remarquez que certains manuels de programmation supposent que ces options sont désactivées, donc vous devrez
peut-être désactiver PIE et SSP avec les options de GCC -fno-pie -no-pie -fno-stack-protection.
Voici la liste des mises à jour de paquets opérées depuis la version précédente de LFS.
Mis à jour vers :

2
Linux From Scratch - Version 11.3-systemd

• Bash 5.2.15
• Bc 6.2.4
• Binutils-2.40
• D-Bus-1.14.6
• Diffutils-3.9
• E2fsprogs-1.47.0
• Expat-2.5.0
• File-5.44
• Gawk-5.2.1
• Gettext-0.21.1
• Glibc-2.37
• Grep-3.8
• IANA-Etc-20230202
• Inetutils-2.4
• IPRoute2-6.1.0
• Less-608
• Libcap-2.67
• Libelf-0.188 (de elfutils)
• Libffi-3.4.4
• Linux-6.1.11
• Make-4.4
• Man-DB-2.11.2
• Man-pages-6.03
• MarkupSafe-2.1.2
• Meson-1.0.0
• MPC-1.3.1
• MPFR-4.2.0
• Ncurses-6.4
• Ninja-1.11.1
• Openssl-3.0.8
• Procps-ng-4.0.2
• Psmisc-23.6
• Python-3.11.2
• Readline-8.2
• Sed-4.9
• Shadow-4.13
• Systemd-252

3
Linux From Scratch - Version 11.3-systemd

• Tcl-8.6.13
• Texinfo-7.0.2
• Tzdata-2022g
• Vim-9.0.1273
• wheel-0.38.4
• XZ-Utils-5.4.1
• Zlib-1.2.13
• Zstd-1.5.4
Ajoutés :


• grub-2.06-upstream_fixes-[Link]
• readline-8.2-upstream_fix-[Link]
• systemd-252-security_fix-[Link]
Supprimés :


• zstd-1.5.2-upstream_fixes-[Link]

1.3. Historique des modifications


Il s'agit de la version 11.3-systemd du livre Linux From Scratch, datant du 01 mars 2023. Si ce livre est daté de
plus de six mois, une version plus récente et améliorée est probablement déjà disponible. Pour en avoir le cœur net,
vérifiez la présence d'une nouvelle version sur l'un des miroirs via [Link]
Ci-dessous se trouve une liste des modifications apportées depuis la version précédente du livre.
Entrées dans l'historique des modifications :

• 01-03-2023
• [bdubbs] — Publication de LFS-11.3.
• 19-02-2023
• [xry111] — Application d'un correctif pour un problème soulevé par e2fsprogs-1.47.0. Corrige #5219
• 13-02-2023
• [bdubbs] — Mise à jour vers man-pages-6.03. Corrige #5216
• 11-02-2023
• [bdubbs] — Mise à jour vers iana-etc-20230202. Corrige #5006.
• [bdubbs] — Mise à jour vers zstd-1.5.4. Corrige #5215
• [bdubbs] — Mise à jour vers Python3-3.11.2. Corrige #5214
• [bdubbs] — Mise à jour vers e2fsprogs-1.47.0. Corrige #5213
• [bdubbs] — Mise à jour vers dbus-1.14.6. Corrige #5212
• [bdubbs] — Mise à jour vers linux-6.1.11. Corrige #5210
• [bdubbs] — Mise à jour vers libcap-2.67. Corrige #5209
4
Linux From Scratch - Version 11.3-systemd

• [bdubbs] — Mise à jour vers bc-6.2.4. Corrige #5207


• 07-02-2023
• [renodr] — Mise à jour vers openssl-3.0.8 (mise à jour de sécurité). Corrige #5211
• [renodr] — Mise à jour vers e2fsprogs-1.46.6 (mise à jour de sécurité). Corrige #5208
• 06-02-2023
• [renodr] — réempaquetage des pages de manuel pour éviter que des pages de manuel perdues se retrouvent
dans /usr/share/man.
• 02-02-2023
• [xry111] — Mise à jour vers glibc-2.37.. Corrige #5203
• [xry111] — Mise à jour vers bc-6.2.3. Corrige #5204
• [xry111] — Mise à jour vers linux-6.1.9. Corrige #5205
• [xry111] — Mise à jour vers vim-9.0.1273. Corrige #4500.
• [xry111] — Suppression de --disable-exec-static-tramp dans libffi.
• 01-02-2023
• [bdubbs] — Mise à jour vers texinfo-7.0.2. Corrige #5202
• [bdubbs] — Mise à jour vers linux-6.1.8. Corrige #5201
• [bdubbs] — Mise à jour vers diffutils-3.9. Corrige #5199
• 22-01-2023
• [bdubbs] — Mise à jour vers MarkupSafe-2.1.2. Corrige #5200
• 15-01-2023
• [thomas] — Ajout de libsframe à online_usrlib dans le nettoyage. [Link].0.0.0 est utilisé par strip.
• [bdubbs] — Mise à jour vers iana-etc-20230109. Corrige #5006.
• [bdubbs] — Mise à jour vers binutils-2.40. Corrige #5198
• [bdubbs] — Mise à jour vers bc-6.2.2. Corrige #5192
• [bdubbs] — Mise à jour vers linux-6.1.6. Corrige #5193
• [bdubbs] — Mise à jour vers man-db-2.11.2. Corrige #5196
• [bdubbs] — Mise à jour vers mpfr-4.2.0. Corrige #5195
• [bdubbs] — Mise à jour vers ncurses-6.4. Corrige #5194
• [bdubbs] — Mise à jour vers xz-5.4.1. Corrige #5197
• 01-01-2023
• [thomas] — Suppression d'un sed obsolète de mpc.
• 31-12-2022
• [bdubbs] — Mise à jour vers iana-etc-20221220. Corrige #5006.
• [bdubbs] — Mise à jour vers mpc-1.3.1. Corrige #5185
• [bdubbs] — Mise à jour vers meson-1.0.0. Corrige #5190
• [bdubbs] — Mise à jour vers man-pages-6.02. Corrige #5188
• [bdubbs] — Mise à jour vers linux-6.1.1. Corrige #5179
• [bdubbs] — Mise à jour vers file-5.44. Corrige #5191
5
Linux From Scratch - Version 11.3-systemd

• [bdubbs] — Mise à jour vers bc-6.2.1. Corrige #5189


• 28-12-2022
• [renodr] — Correction de systemd pour éviter CVE-2022-4415. Corrige #5187
• 15-12-2022
• [bdubbs] — Mise à jour du lien en dur vers gawk au chapitre 8. Corrige #5180.
• [bdubbs] — Mise à jour vers iana-etc-20221209. Corrige #5006.
• [bdubbs] — Mise à jour vers vim-9.0.1060. Corrige #4500.
• [bdubbs] — Mise à jour vers iproute2-6.1.0. Corrige #5184
• [bdubbs] — Mise à jour vers xz-5.4.0. Corrige #5183
• [bdubbs] — Mise à jour vers bash-5.2.15. Corrige #5182
• [bdubbs] — Mise à jour vers psmisc-23.6. Corrige #5181
• [bdubbs] — Mise à jour vers mpc-1.3.0. Corrige #5178
• [bdubbs] — Mise à jour vers python3-3.11.1. Corrige #5177
• [bdubbs] — Mise à jour vers procps-ng-4.0.2. Corrige #5176
• 01-12-2022
• [bdubbs] — Mise à jour vers linux-6.0.11 (mise à jour de sécurité). Corrige #5175
• 01-12-2022
• [bdubbs] — Mise à jour vers iana-etc-20221122. Corrige #5006.
• [bdubbs] — Mise à jour vers xz-5.2.9. Corrige #5174
• [bdubbs] — Mise à jour vers tzdata-2022g. Corrige #5172
• [bdubbs] — Mise à jour vers texinfo-7.0.1. Corrige #5173
• [bdubbs] — Mise à jour vers tcl-8.6.13. Corrige #5170
• [bdubbs] — Mise à jour vers meson-0.64.1. Corrige #5169
• [bdubbs] — Mise à jour vers linux-6.0.10. Corrige #5171
• [bdubbs] — Mise à jour vers gawk-5.2.1. Corrige #5168
• 22-11-2022
• [xry111] — Mise à jour vers linux-6.0.9. Corrige #5162
• [xry111] — Mise à jour vers libpipeline-1.5.7. Corrige #5163
• [xry111] — Mise à jour vers xz-5.2.8. Corrige #5164
• [xry111] — Mise à jour vers man-db-2.11.1. Corrige #5166
• [xry111] — Mise à jour vers mpfr-4.1.1. Corrige #5167
• [xry111] — Arrêt de la désactivation des flotants décimaux pour le GCC temporaire, pour que mpfr soit
construit avec la prise en charge des flottants décimaux.
• [xry111] — Mise à jour des instruction pour wheel pour éviter de se reposer sur des fonctionnalités Python
obsolètes.
• 10-11-2022
• [bdubbs] — Correction d'un bogue de make-4.4. Corrige #5160
• [bdubbs] — Mise à jour vers wheel-0.38.4 (module Python). Corrige #5155
• [bdubbs] — Mise à jour vers texinfo-7.0. Corrige #5159

6
Linux From Scratch - Version 11.3-systemd

• [bdubbs] — Mise à jour vers shadow-4.13. Corrige #5161


• [bdubbs] — Mise à jour vers sed-4.9. Corrige #5157
• [bdubbs] — Mise à jour vers meson-0.64.0. Corrige #5156
• [bdubbs] — Mise à jour vers linux-6.0.7. Corrige #5154
• [bdubbs] — Mise à jour vers elfutils-0.188. Corrige #5152
• [bdubbs] — Mise à jour vers bc-6.1.1. Corrige #5151
• [bdubbs] — Mise à jour vers bash-5.2.9. Corrige #5158
• 03-11-2022
• [renodr] — Mise à jour vers systemd-252. Corrige #5150
• 01-11-2022
• [bdubbs] — Mise à jour vers openssl-3.0.7 (mise à jour de sécurité). Corrige #5132
• [bdubbs] — Mise à jour vers iana-etc-20221025. Corrige #5006.
• [bdubbs] — Mise à jour vers tzdata-2022f. Corrige #5148
• [bdubbs] — Mise à jour vers Python3-3.11.0. Corrige #5145
• [bdubbs] — Mise à jour vers procps-ng-4.0.1. Corrige #5141
• [bdubbs] — Mise à jour vers man-pages-6.01. Corrige #5140
• [bdubbs] — Mise à jour vers man-db-2.11.0. Corrige #5139
• [bdubbs] — Mise à jour vers make-4.4. Corrige #5149
• [bdubbs] — Mise à jour vers linux-6.0.6. Corrige #5142
• [bdubbs] — Mise à jour vers libffi-3.4.4. Corrige #5144
• [bdubbs] — Mise à jour vers inetutils-2.4. Corrige #5147
• [bdubbs] — Mise à jour vers expat-2.5.0. Corrige #5132
• 17-10-2022
• [bdubbs] — Mise à jour vers linux-6.0.2 (mise à jour de sécurité). Corrige #5138
• 15-10-2022
• [bdubbs] — Mise à jour vers iana-etc-20221007. Corrige #5006.
• [bdubbs] — Mise à jour vers vim-9.0.0739. Corrige #5006.
• [bdubbs] — Ajout de correctifs amonts à readline et bash. Corrige #5131
• [bdubbs] — Mise à jour vers zlib-1.2.13. Corrige #5137
• [bdubbs] — Mise à jour vers man-pages-6.00. Corrige #5136
• [bdubbs] — Mise à jour vers gettext-0.21.1. Corrige #5130
• [bdubbs] — Mise à jour vers iproute2-6.0.0. Corrige #5127
• [bdubbs] — Mise à jour vers meson-0.63.3. Corrige #5129
• [bdubbs] — Mise à jour vers Python-3.10.8. Corrige #5133
• [bdubbs] — Mise à jour vers xz-5.2.7. Corrige #5133
• [bdubbs] — Mise à jour vers tzdata-2022e. Corrige #5134
• [bdubbs] — Mise à jour vers linux-6.0.1. Corrige #5135
• [bdubbs] — Mise à jour vers dbus-1.14.4. Corrige7#5128
Linux From Scratch - Version 11.3-systemd

• 04-10-2022
• [renodr] — Mise à jour vers Linux-5.19.13. Si vous utilisez un GPU Intel sur un ordinateur portable, mettez
à jour à partir de Linux-5.19.12 immédiatement pour éviter de dégrader votre affichage. Corrige #5125.
• 01-10-2022
• [bdubbs] — Mise à jour vers iana-etc-20220922. Corrige #5006.
• [bdubbs] — Mise à jour vers tzdata-2022d. Corrige #5119
• [bdubbs] — Mise à jour vers readline-8.2. Corrige #5121
• [bdubbs] — Mise à jour vers linux-5.19.12. Corrige #5115
• [bdubbs] — Mise à jour vers libffi-3.4.3. Corrige #5116
• [bdubbs] — Mise à jour vers libcap-2.66. Corrige #5120
• [bdubbs] — Mise à jour vers dbus-1.14.2. Corrige #5123
• [bdubbs] — Mise à jour vers bc-6.0.4. Corrige #5114
• [bdubbs] — Mise à jour vers bash-5.2. Corrige #5122
• 22-09-2022
• [bdubbs] — Mise à jour vers expart-2.4.9 (mise à jour de sécurité). Corrige #5117
• 20-09-2022
• [bdubbs] — Adaptation des instructions qui dépendent de la configuration de /dev/shm de l'hôte lors de la
création des systèmes de fichiers pour le chroot.
• 15-09-2022
• [bdubbs] — Mise à jour vers file-5.43. Corrige #5113
• [bdubbs] — Mise à jour vers linux-5.19.8. Corrige #5111
• [bdubbs] — Mise à jour vers gawk-5.2.0. Corrige #5108
• [bdubbs] — Mise à jour vers meson-0.63.2. Corrige #5106
• [bdubbs] — Mise à jour vers ninja-1.11.1. Corrige #5103
• [bdubbs] — Mise à jour vers bc-6.0.2. Corrige #5102
• [bdubbs] — Suppression d'un avertissement pour egrep et fgrep qui font échouer les tests de certains
paquets.
• [bdubbs] — Suppression d'un page de manuel vide dans binutils. Corrige #5100
• 10-09-2022
• [pierre] — Ajout de --enable-default-pie et --enable-default-ssp à la construction de GCC. La raison et
des rapports se trouvent sur #5107.
• 07-09-2022
• [bdubbs] — Mise à jour vers shadow-4.12.3. Corrige #5101
• [bdubbs] — Mise à jour vers Python3-3.10.7. Corrige #5109
• [bdubbs] — Mise à jour vers linux-5.19.7. Corrige #5099
• [bdubbs] — Mise à jour vers less-608. Corrige #5104
• [bdubbs] — Mise à jour vers grep-3.8. Corrige #5105
• 01-09-2022
8
• [bdubbs] — Publication de LFS-11.2.
Linux From Scratch - Version 11.3-systemd

1.4. Ressources
1.4.1. FAQ
Si vous rencontrez des erreurs lors de la construction du système LFS, si vous avez des questions ou si vous pensez
qu'il y a une coquille dans ce livre, merci de commencer par consulter la FAQ (Foire aux Questions) sur https://
[Link]/faq.

1.4.2. Listes de diffusion


Le serveur [Link] gère quelques listes de diffusion utilisées pour le développement du projet LFS.
Ces listes incluent, entre autres, les listes de développement et d'aide. Si la FAQ ne résout pas votre problème, la
prochaine étape serait de chercher dans les listes de diffusion sur [Link]
Pour connaître les listes disponibles, les conditions d'abonnement, l'emplacement des archives et quelques autres
informations, allez sur [Link]

1.4.3. IRC
Plusieurs membres de la communauté LFS offrent leur aide sur IRC. Avant d'utiliser ce mode de communication,
assurez-vous que la réponse à votre question ne se trouve pas déjà dans la FAQ LFS ou dans les archives des listes
de diffusion. Vous trouverez le réseau IRC à l'adresse [Link]. Le canal d'entre-aide en français se nomme
#lfs-fr.

1.4.4. Sites miroirs


Le projet LFS a un bon nombre de miroirs configurés tout autour du monde pour faciliter l'accès au site web ainsi
que le téléchargement des paquets requis. Merci de visiter le site web de LFS sur [Link]
org/[Link] pour obtenir une liste des miroirs à jour.

1.4.5. Contacts
Merci d'envoyer toutes vos questions et commentaires sur les listes de diffusion LFS (voir ci-dessus).

1.5. Aide
Si vous rencontrez une erreur ou si vous vous posez une question en travaillant avec ce livre, merci de vérifier la
FAQ sur [Link] Vous y trouverez souvent la réponse à vos questions. Dans
le cas contraire, essayez de trouver la source du problème. Le guide suivant vous donnera quelques conseils pour
cela : [Link]
Si votre problème n'est pas listé dans la FAQ, recherchez dans les listes de diffusion sur [Link]
[Link]/[Link].
Nous avons aussi une formidable communauté LFS, volontaire pour offrir une assistance via les listes de diffusion et
IRC (voir la section Section 1.4, « Ressources » de ce livre). Néanmoins, nous recevons plusieurs demandes d'aide
chaque jour et un grand nombre d'entre elles ont une réponse dans la FAQ et dans les listes de diffusion. Afin que
nous puissions vous offrir la meilleure assistance possible, vous devez faire quelques recherches de votre côté. Ceci
nous permet de nous concentrer sur les besoins inhabituels. Si vos recherches ne vous apportent aucune solution,
merci d'inclure toutes les informations adéquates (mentionnées ci-dessous) dans votre demande d'assistance.

1.5.1. Éléments à mentionner


En plus d'une brève explication du problème que vous rencontrez, voici les éléments essentiels à inclure dans votre
demande d'aide :

9
Linux From Scratch - Version 11.3-systemd

• La version du livre que vous utilisez (dans ce cas, 11.3-systemd)


• La distribution hôte (et sa version) que vous utilisez pour créer LFS
• La sortie du script Prérequis du système hôte
• Le paquet ou la section où le problème a été rencontré
• Le message d'erreur exact ou une description claire du problème
• Indiquez si vous avez dévié du livre

Note
Dévier du livre ne signifie pas que nous n'allons pas vous aider. Après tout, LFS est basé sur les préférences
de l'utilisateur. Nous préciser les modifications effectuées sur la procédure établie dès le départ nous aide
à évaluer et à déterminer les causes probables de votre problème.

1.5.2. Problèmes du script configure


Si quelque chose se passe mal lors de l'exécution du script configure, regardez le fichier [Link] Ce fichier
pourrait contenir les erreurs rencontrées lors de l'exécution de configure qui n'ont pas été affichées à l'écran. Incluez
les lignes intéressantes si vous avez besoin d'aide.

1.5.3. Problèmes de compilation


L'affichage écran et le contenu de différents fichiers sont utiles pour déterminer la cause des problèmes de
compilation. L'affichage de l'écran du script configure et du make peuvent être utiles. Il n'est pas nécessaire d'inclure
la sortie complète mais incluez suffisamment d'informations intéressantes. Ci-dessous se trouve un exemple de type
d'informations à inclure à partir de l'affichage écran de make :
gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
-DLOCALEDIR=\"/mnt/lfs/usr/share/locale\"
-DLIBDIR=\"/mnt/lfs/usr/lib\"
-DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.
-g -O2 -c getopt1.c
gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o
expand.o file.o function.o getopt.o implicit.o job.o main.o
misc.o read.o remake.o rule.o signame.o variable.o vpath.o
default.o remote-stub.o version.o opt1.o
-lutil job.o: In function `load_too_high':
/lfs/tmp/make-3.79.1/job.[Link] undefined reference
to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
make: *** [all-recursive-am] Error 2

Dans ce cas, beaucoup de personnes n’incluraient que la section du bas :


make [2]: *** [make] Error 1

Cette information n'est pas suffisante pour diagnostiquer correctement le problème, car elle indique seulement que
quelque chose s'est mal passé, pas ce qui s'est mal passé. C'est la section entière, comme dans l'exemple plus haut,
qui devrait être copiée, car la commande exécutée et tout message d'erreur associé sont inclus.
Un excellent article sur les demandes d'aide sur Internet est disponible en ligne sur [Link]
smartquestionsfr. Lisez et suivez les astuces de ce document pour accroître vos chances d'obtenir l'aide dont vous
avez besoin.

10
Linux From Scratch - Version 11.3-systemd

Partie II. Préparation à la construction


Linux From Scratch - Version 11.3-systemd

Chapitre 2. Préparation du système hôte


2.1. Introduction
Dans ce chapitre, la présence des outils du système hôte nécessaires à la construction de LFS est vérifiée. Si besoin,
ils sont installés avant de préparer la partition qui contiendra le système LFS. Nous créerons la partition elle-même,
nous lui ajouterons un système de fichiers et nous la monterons.

2.2. Prérequis du système hôte


2.2.1. Matériel
Les éditeurs de LFS recommandent d'avoir un CPU avec au moins 4 cœurs et un système avec au moins 8 Go de
mémoire. Les systèmes plus vieux qui n'atteignent pas ces prérequis fonctionneront quand même mais le temps de
construction des paquets sera bien plus long que ce qui est documenté.

2.2.2. Logiciel
Votre système hôte doit contenir les logiciels suivants dans la version minimum indiquée. Cela ne devrait pas être un
problème pour la plupart des distributions modernes de Linux. Notez également que certaines distributions placeront
les headers des logiciels dans des paquets distincts, ayant souvent la forme suivante :« <nom-du-paquet>-devel »
ou « <nom-du-paquet>-dev ». Assurez-vous de les installer si votre distribution les fournit.
Il se peut que les versions antérieures des paquets logiciels listés fonctionnent, mais elles n'ont pas été testées.
• Bash-3.2 (/bin/sh doit être un lien symbolique ou matériel vers bash)
• Binutils-2.13.1 (les versions ultérieures à 2.40 ne sont pas recommandées car elles n'ont pas été testées)
• Bison-2.7 (/usr/bin/yacc doit être un lien vers bison ou un petit script qui exécute bison)
• Coreutils-6.9
• Diffutils-2.8.1
• Findutils-4.2.31
• Gawk-4.0.1 (/usr/bin/awk doit être un lien vers gawk)
• GCC-5.1, y compris le compilateur C++, g++ (les versions ultérieures à 12.2.0 ne sont pas recommandées,
car elles n'ont pas été testées). Les bibliothèques standards C et C++ (avec les headers) doivent également être
présentes pour que le compilateur C++ puisse construire les programmes hébergés
• Grep-2.5.1a
• Gzip-1.3.12
• Noyau Linux-3.2
La raison pour laquelle cette version du noyau est requise est que nous spécifions cette version lors de la
construction de glibc dans Chapitre 5 et Chapitre 8, en suivant les recommandations des développeurs.
Si le noyau hôte est plus ancien que le 3.2, vous devez le remplacer avec une version plus récente. Il existe
deux méthodes de remplacement. Dans un premier temps, vérifiez si votre distribution Linux fournit un paquet
pour le noyau 3.2 ou pour un noyau plus récent. Si c'est le cas, vous pouvez l'installer. Si votre distribution
ne propose pas de paquet correspondant pour le noyau, ou si vous préférez ne pas l'installer, vous pouvez
compiler le noyau vous-même. Les instructions pour la compilation du noyau et la configuration du chargeur
d’amorçage (en supposant que le système hôte utilise GRUB) sont disponibles au Chapitre 10.
• M4-1.4.10
• Make-4.0

12
Linux From Scratch - Version 11.3-systemd

• Patch-2.5.4
• Perl-5.8.8
• Python-3.4
• Sed-4.1.5
• Tar-1.22
• Texinfo-4.7
• Xz-5.0.0

Important
Remarque : les liens symboliques mentionnés ci-dessus sont nécessaires pour construire un système LFS
en utilisant les instructions contenues dans ce livre. Les liens symboliques qui renvoient vers d'autres
logiciels (comme dash, mawk, etc.) peuvent fonctionner, mais ils n'ont pas été testés, ou bien ne sont pas
pris en charge par l'équipe de développement LFS. Il est possible que ces liens nécessitent soit de vous
écarter des instructions du livre, soit d’apporter des correctifs supplémentaires à certains paquets.

Pour vérifier que votre système hôte possède toutes les versions nécessaires et peut compiler des programmes,
exécutez la commande suivante :
cat > [Link] << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH

echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1

if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc --version | head -n1`
else
echo "yacc not found"
fi

echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1

if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
echo awk is `/usr/bin/awk --version | head -n1`
else
echo "awk not found"
fi

13
Linux From Scratch - Version 11.3-systemd

gcc --version | head -n1


g++ --version | head -n1
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1 # texinfo version
xz --version | head -n1

echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c


if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF

bash [Link]

2.3. Les étapes de la construction de LFS


LFS est conçu pour être construit en une seule session. En d’autres termes, les instructions supposent que le système
ne sera pas éteint pendant la construction. Cela ne signifie pas que le système doit être construit d’une traite. Le
problème, c'est que certaines procédures devront être relancées après un redémarrage si vous reprenez la construction
de LFS à différentes étapes.

2.3.1. Chapitres 1 à 4
Ces chapitres exécutent des commandes sur le système hôte. En cas de redémarrage, vérifiez une chose :
• Les procédures effectuées en tant qu’utilisateur root après la Section 2.4 ont besoin que la variable
d’environnement LFS soit définie POUR L’UTILISATEUR ROOT.

2.3.2. Chapitres 5–6


• La partition /mnt/lfs doit être montée.
• Ces deux chapitres doivent être effectués en tant qu'utilisateur lfs. Vous devez exécuter su - lfs avant
d'effectuer quoi que ce soit dans ces chapitres. Si vous ne le faites pas, vous risquez d'installer des paquets sur
l'hôte et éventuellement de le rendre inutilisable.
• Les procédures de Instructions générales de compilation sont cruciales. Si vous avez le moindre doute sur
l’installation correcte d’un paquet, assurez-vous d’avoir supprimé toute archive décompressée, extrayez de
nouveau les fichiers du paquet et suivez toutes les instructions de cette section.

2.3.3. Chapitres 7–10


• La partition /mnt/lfs doit être montée.
• Certaines opérations, de « Changer de propriétaire » à « Entrer dans l'environnement chroot » doivent être
effectuées en tant qu'utilisateur root, avec la variable d'environnement configurée pour l'utilisateur root.
• En entrant dans l’environnement chroot, la variable d’environnement LFS doit être définie pour l’utilisateur
root. La variable LFS n’est plus utilisée après l'entrée dans l'environnement chroot.

14
Linux From Scratch - Version 11.3-systemd

• Les systèmes de fichiers virtuels doivent être montés. Ceci peut se faire avant ou après être entré dans
l’environnement chroot en changeant de terminal dans le système hôte et, en tant que root, en exécutant les
commandes de la Section 7.3.1, « Monter et alimenter /dev » et de la Section 7.3.2, « Monter les systèmes de
fichiers virtuels du noyau ».

2.4. Création d'une nouvelle partition


Comme la plupart des autres systèmes d'exploitation, LFS est habituellement installé sur une partition dédiée. Pour
construire un système LFS, il est recommandé d'utiliser une partition vide disponible ou d'en créer une, si vous avez
assez d'espace non partitionné.
Un système minimal requiert une partition d'environ 10 Go. Cet espace est suffisant pour conserver toutes les
archives tar des sources et pour compiler tous les paquets. Néanmoins, si le système LFS a pour but d'être un système
Linux primaire, des logiciels additionnels seront probablement installés et nécessiteront de l’espace supplémentaire.
Une partition de 30 Go devrait suffire à garantir l’espace nécessaire à cette opération. Le système LFS en lui-même
ne prendra pas tout cet espace. Une grande partie de cet espace servira à prévoir suffisamment d’espace temporaire
libre ainsi qu’à accueillir des fonctionnalités supplémentaires une fois LFS terminé. De plus, la compilation des
paquets peut demander beaucoup d'espace disque, qui sera récupéré après l'installation du paquet.
Parce qu'il n'y a pas toujours assez de mémoire vive (RAM) disponible pour les processus de compilation, il est
conseillé d'utiliser une petite partition comme espace d'échange swap. Le noyau utilise cet espace pour stocker des
données rarement utilisées et pour laisser plus de mémoire aux processus actifs. Il se peut que la partition swap pour
un système LFS soit la même que celle utilisée par le système hôte, auquel cas il n'est pas nécessaire de créer une
autre partition si votre système hôte possède déjà cette configuration.
Lancez un programme de partitionnement de disques, tel que cfdisk ou fdisk avec une option en ligne de commande
nommant le disque dur sur lequel la nouvelle partition sera créée. Par exemple, on utilisera /dev/sda pour le disque
primaire. Créez une partition Linux native et, si nécessaire, une partition swap. Référez-vous au manuel de cfdisk(8)
ou de fdisk(8) si vous ne savez pas encore utiliser les programmes.

Note
Pour les utilisateurs expérimentés, il est possible d'utiliser d'autres méthodes de partitionnement. Le
nouveau système LFS peut être installé sur un logiciel RAID ou sur un volume logique LVM. Par contre,
certaines options exigent un initramfs, qui concerne un sujet plus avancé. Ces méthodes de partitionnement
ne sont pas recommandées pour les utilisateurs novices de LFS.

Retenez bien la désignation de la nouvelle partition (par exemple sda5). Elle sera référencée dans ce livre comme
partition LFS. Gardez également en mémoire la désignation de la partition swap. Ces noms vous seront utiles pour
le fichier /etc/fstab.

2.4.1. Autres problèmes liés au partitionnement


Les demandes de conseils par rapport au partitionnement du système sont souvent postées sur les listes de diffusion
LFS. Ce sujet est très subjectif. Par défaut, la plupart des distributions utilisent le disque entier, sauf une petite
partie réservée à la partition d'échange. Cette solution n'est pas optimale pour LFS, et ce pour plusieurs raisons. Cela
réduit la flexibilité, complique le partage de données entre plusieurs distributions ou constructions LFS et allonge
le temps de sauvegarde. Cela peut également faire perdre de l'espace disque à cause d’une allocation inefficace des
structures de fichiers.

[Link]. La partition racine


Une partition racine LFS (à ne pas confondre avec le répertoire /root), de 20 Go est un bon compromis pour la
plupart des systèmes. Elle fournit assez d’espace pour construire LFS et une grande partie de BLFS, tout en étant
assez petit pour que plusieurs partitions puissent être créées facilement à des fins expérimentales.

15
Linux From Scratch - Version 11.3-systemd

[Link]. La partition d'échange (swap)


La plupart des distributions créent automatiquement une partition d'échange. En général, la taille recommandée
pour une partition d'échange est à peu près deux fois supérieure à la taille de la RAM physique, bien que ce soit
rarement nécessaire. Si votre espace disque est limité, laissez la partition d'échange à 2 Go et surveillez l'utilisation
de la mémoire d'échange sur le disque.
Si vous voulez utiliser le mode hibernation (veille sur disque) de Linux, il transfère le contenu de la RAM vers la
partition d'échange avant d'éteindre la machine. Dans ce cas, la partition d'échange doit être au moins aussi grande
que la RAM installée sur le système.
L'utilisation de la mémoire d'échange n'est jamais une bonne chose. Avec un disque dur mécanique, vous pouvez
déterminer si un système utilise la mémoire d'échange simplement en écoutant l'activité du disque et en observant
la façon dont le système réagit aux commandes. Vous ne pourrez pas l'entendre utiliser l'espace d'échange avec un
disque SSD, mais vous pouvez savoir combien d'espace d'échange est utilisé avec les programmes top et free. Si
possible, vous devez éviter d'utiliser une partition d'échange sur un disque SSD. Lorsque la mémoire d’échange est
utilisée, vous devez en premier lieu vérifier si l’une des commandes n'est pas insensée, comme par exemple l’édition
d’un fichier de 5 Go. Si l'utilisation de la mémoire d'échange devient un phénomène habituel, la meilleure solution
est d'ajouter de la mémoire RAM à votre système.

[Link]. La partition Bios de Grub


Si le disque de démarrage est partitionné avec une table de partition GUID (GPT), alors une petite partition de
l’ordre d’1 Mo doit être créée, si elle n’existe pas déjà. Cette partition n’est pas formatée, mais doit être disponible
pour que GRUB l’utilise pendant l’installation du chargeur d’amorçage. Cette partition sera normalement intitulée
« BIOS Boot » si vous utilisez fdisk ou aura le code EF02 avec gdisk.

Note
La partition Bios de Grub doit se trouver sur le disque que le BIOS utilise pour démarrer le système. Il
ne s’agit pas nécessairement du même disque que celui sur lequel la partition racine de LFS est installée.
Les disques d’un système peuvent utiliser des types de tables de partitionnement différents. Seul le type
de table de partitionnement du disque de démarrage détermine si cette partition est nécessaire ou non.

[Link]. Partitions de commodité


Il existe d’autres partitions qui ne sont pas indispensables, mais que vous devez envisager lorsque vous aménagez
un disque dur. La liste suivante n’est pas exhaustive mais a été conçue pour vous guider.
• /boot – Fortement recommandée. Utilisez cette partition pour stocker les noyaux et d'autres informations
de démarrage. Pour limiter les risques de problèmes de démarrage avec les disques volumineux, faites-en
la première partition physique sur votre premier disque dur. Une taille de partition de 200 mégaoctets est
parfaitement adaptée.
• /boot/efi – La partition EFI système, qui est requise pour démarrer le système avec UEFI. Consultez la page
BLFS pour plus d’informations.
• /home – Fortement recommandée. Partage votre répertoire home et vos paramètres utilisateur entre plusieurs
distributions ou constructions de LFS. La taille est généralement assez importante et dépend de l'espace disque
disponible.
• /usr – Dans LFS, /bin, /lib et /sbin sont des liens symboliques vers leurs équivalents dans /usr. Le dossier /
usr contient tous les binaires nécessaires à l’exécution du système. Dans LFS, une partition séparée pour /usr
n'est généralement pas requise. Si vous souhaitez quand même en créer une, vous devrez faire en sorte qu’elle
soit assez grande pour contenir tous les programmes et bibliothèques du système. La partition racine de cette

16
Linux From Scratch - Version 11.3-systemd

configuration peut être très petite (par exemple seulement un gigaoctet). Elle est donc parfaitement adaptée à
un client léger ou une station de travail sans disque (où /usr est monté depuis un serveur distant). Cependant,
il faut savoir que vous aurez besoin d’un initramfs (dont la construction n’est pas évoquée dans LFS) pour
démarrer le système avec une partition /usr séparée.
• /opt – Ce répertoire est surtout utile pour BLFS, où vous pouvez installer plusieurs versions de paquets
volumineux tels que KDE ou Texlive sans incorporer les fichiers dans la hiérarchie /usr. Si vous l'utilisez, un
espace de 5 à 10 gigaoctets est généralement adapté.
• /tmp – systemd monte par défaut un tmpfs à cet emplacement. Vous pouvez redéfinir ce comportement en
suivant Section 9.10.3, « Désactiver tmpfs pour /tmp » lors de la configuration du système LFS.
• /usr/src – Cette partition est très utile pour assurer un emplacement de stockage des fichiers source de BLFS
et les partager entre les constructions LFS. Vous pouvez aussi l'utiliser comme un espace de construction des
paquets BLFS. Une partition entre 30 et 50 gigaoctets offre suffisamment d’espace.
Vous devez spécifier toute partition que vous voulez monter automatiquement au démarrage dans /etc/fstab. La
spécification des partitions sera expliquée en détails dans le Section 10.2, « Créer le fichier /etc/fstab ».

2.5. Création d'un système de fichiers sur la partition


Une partition est un ensemble de secteurs sur un lecteur de disque. Cet ensemble est délimité par des bornes placées
dans un tableau de partitions. Avant que le système d’exploitation ne puisse utiliser une partition pour stocker des
fichiers, il faut d’abord formater la partition. Elle pourra contenir un système de fichiers constitué principalement
d’une étiquette interne, d’un répertoire de blocs, de blocs de données et d’un schéma d’indexation qui permettront
de localiser un fichier précis sur demande. Le système de fichiers aide aussi l’OS à garder une trace de l’espace
libre sur la partition, stocker les secteurs nécessaires quand un nouveau fichier est créé ou qu’un fichier existant est
étendu et recycler les segments de données libres qui sont créés lorsque des fichiers sont supprimés. Le système de
fichiers peut aussi servir de support en cas de redondance des données et d’élimination d’erreurs.
Maintenant qu'une partition vierge est prête, le système de fichiers peut être créé. LFS peut utiliser n'importe quel
système de fichiers reconnu par le noyau Linux, mais les types ext3 et ext4 sont les plus communs. Le choix d'un
système de fichiers peut être complexe et dépend des caractéristiques des fichiers et de la taille de la partition. Par
exemple :
ext2
convient aux petites partitions rarement mises à jour, telles que /boot.
ext3
est une mise à jour d’ext2 qui comprend un journal aidant à récupérer l'état de la partition en cas d'arrêt brutal.
Ce type est communément employé dans une perspective généraliste.
ext4
est la dernière version de type ext des systèmes de fichiers. Ce type offre de nouvelles possibilités, notamment
l'horodatage à la nanoseconde, la création et l'utilisation de très gros fichiers (16 To), ainsi que des améliorations
de vitesse.
D'autres systèmes de fichiers comme FAT32, NTFS, ReiserFS, JFS et XFS servent à des fins plus spécifiques.
Vous pouvez trouver plus d'informations sur ces systèmes de fichiers sur [Link]
syst%C3%A8mes_de_fichiers.
LFS considère que le système de fichiers racine (/) est de type ext4. Pour créer un système de fichiers ext4 sur la
partition LFS, exécutez la commande suivante :
mkfs -v -t ext4 /dev/<xxx>

Remplacez <xxx> par le nom de la partition LFS.

17
Linux From Scratch - Version 11.3-systemd

Si vous utilisez une partition swap déjà existante, il n'est pas nécessaire de la formater. En cas de création d’une
nouvelle partition swap, initialisez-la à l'aide de la commande suivante :
mkswap /dev/<yyy>

Remplacez <yyy> par le nom de la partition swap.

2.6. Définition de la variable $LFS


Tout au long de ce livre, la variable d'environnement LFS est mentionnée à plusieurs reprises. Assurez-vous de
toujours définir cette variable pendant le processus de construction de LFS. Cette variable doit être associée au nom
du répertoire où vous construirez votre système LFS : nous utiliserons /mnt/lfs comme exemple mais le choix du
répertoire vous appartient. Si vous construisez LFS sur une partition séparée, le répertoire défini sera le point de
montage de la partition. Choisissez un répertoire et définissez la variable avec la commande suivante :
export LFS=/mnt/lfs

La définition de cette variable constitue un avantage dans des commandes telles que mkdir -v $LFS/tools que l'on
peut écrire telle quelle. Le shell remplacera automatiquement « $LFS » par « /mnt/lfs » (ou par le répertoire défini
dans la variable) quand il traitera la ligne de commande.

Attention
N'oubliez pas de vérifier que la variable LFS est définie à chaque fois que vous quittez et revenez dans
l'environnement de travail (lorsque vous exécutez, par exemple, su en root ou un autre utilisateur). Vérifiez
que la variable LFS est définie correctement avec la commande suivante :
echo $LFS

Assurez-vous que la sortie affiche le chemin du répertoire dans lequel vous construisez votre système LFS,
qui est /mnt/lfs si vous avez suivi l'exemple fourni. Si la sortie indique le mauvais répertoire, utilisez la
commande précédemment indiquée dans cette page pour associer la variable $LFS au bon répertoire.

Note
Une manière de vous assurer que la variable LFS est toujours définie est d'éditer le fichier .bash_profile
à la fois dans votre répertoire personnel et dans le fichier /root/.bash_profile et d'y sais la commande
d'export mentionnée ci-dessus. De plus, pour tous les utilisateurs ayant besoin de la variable LFS, le shell
indiqué dans le fichier /etc/passwd doit être « bash » afin de s'assurer que le fichier /root/.bash_profile
soit inclus dans le processus de connexion.
Une autre chose à prendre en compte est la méthode que vous utilisez pour vous connecter au système
hôte. Si vous vous connectez via un gestionnaire d'affichage graphique, le fichier .bash_profile de
l'utilisateur n'est normalement pas utilisé lorsque le gestionnaire lance un terminal virtuel. Dans ce cas,
ajoutez la commande d'export au fichier .bashrc à la fois pour l'utilisateur et pour root. En plus, certaines
distributions ont des instructions qui empêchent le chargement de .bashrc dans une invocation non
interactive de bash. Assurez-vous d'ajouter la commande d'export avant le test pour l'utilisation non
interactive si c'est le cas.

2.7. Montage de la nouvelle partition


Maintenant qu'un système de fichiers a été créé, la partition doit être montée afin que le système hôte puisse y
accéder. Dans ce livre, on suppose que le système de fichiers est monté sur le répertoire spécifié par la variable
d'environnement LFS, comme décrit dans la section précédente.
18
Linux From Scratch - Version 11.3-systemd

On ne peut pas « monter une partition » à proprement parler. On monte le système de fichiers intégré à cette partition.
Mais comme une partition seule ne peut pas contenir plus d’un système de fichiers, la partition et le système de
fichiers associé sont souvent considérés comme une seule et même entité.
Créez le point de montage et montez le système de fichiers LFS en exécutant la commande suivante :
mkdir -pv $LFS
mount -v -t ext4 /dev/<xxx> $LFS

Remplacez <xxx> par le nom de la partition LFS.


Si vous utilisez plusieurs partitions pour LFS (par exemple une pour / et une autre pour /home), montez-les en
utilisant :
mkdir -pv $LFS
mount -v -t ext4 /dev/<xxx> $LFS
mkdir -v $LFS/home
mount -v -t ext4 /dev/<yyy> $LFS/home

Remplacez <xxx> et <yyy> par les noms de partition correspondants.


Assurez-vous que cette nouvelle partition n'est pas montée avec des droits trop restrictifs (comme les options nosuid
ou nodev). Exécutez la commande mount sans aucun paramètre pour voir les options configurées pour la partition
LFS que vous avez montée. Si les options nosuid ou nodev sont configurées, la partition devra être remontée.

Avertissement
Les instructions ci-dessus supposent que vous ne redémarrerez pas votre ordinateur pendant le processus
LFS. Si vous éteignez votre système, vous devrez soit remonter la partition LFS à chaque redémarrage
de la construction, soit modifier le fichier /etc/fstab de votre système hôte pour qu’il soit remonté
automatiquement au démarrage. Par exemple, vous pouvez ajouter cette ligne à votre fichier /etc/fstab :
/dev/<xxx> /mnt/lfs ext4 defaults 1 1

Si vous utilisez des partitions facultatives supplémentaires, assurez-vous de les ajouter aussi.

Si vous utilisez une partition swap, assurez-vous qu'elle est activée en exécutant la commande swapon :
/sbin/swapon -v /dev/<zzz>

Remplacez <zzz> par le nom de la partition swap.


Maintenant que votre nouvelle partition LFS est prête à être utilisée, vous pouvez télécharger les paquets.

19
Linux From Scratch - Version 11.3-systemd

Chapitre 3. Paquets et correctifs


3.1. Introduction
Ce chapitre inclut une liste de paquets devant être téléchargés pour construire un système Linux de base. Les numéros
de versions affichés correspondent aux versions des logiciels qui sont connues pour fonctionner, et ce livre est
basé sur leur utilisation. Nous déconseillons fortement l’utilisation de versions différentes. En effet, les commandes
de construction d’une version pourraient ne pas fonctionner sur une version différente, à moins que cette version
différente ne soit mentionné dans un errata ou une information de sécurité. Les versions plus récentes pourraient aussi
avoir des problèmes nécessitant des contournements. Ces derniers seront développés et stabilisés dans la version
de développement du livre.
Pour certains paquets, l'archive de version et l'instantané du dépôt (Git ou SVN) pour cette version peuvent être
publiés avec des noms similaires. Une archive de version contient des fichiers générés (par exemple, un script
configure généré par autoconf) en plus du contenu de l'instantané du dépôt. Le livre utilise les archives de version
chaque fois que cela est possible. Utiliser des instantanés de dépôt au lieu des archives de version spécifiées dans
le livre causera des problèmes.
Il se peut que les emplacements de téléchargement ne soient pas toujours accessibles. Si un emplacement de
téléchargement a changé depuis la publication de ce livre, Google ([Link] offre un moteur de
recherche utile pour la plupart des paquets. Si cette recherche est infructueuse, essayez un des autres moyens de
téléchargement disponible sur [Link]
Les paquets et les correctifs téléchargés doivent être stockés à un emplacement où ils seront facilement disponibles
pendant toute la construction. Un répertoire fonctionnel est aussi requis pour déballer les sources et pour les
construire. Vous pouvez utiliser le répertoire $LFS/sources à la fois comme emplacement de stockage pour les
archives tar et les correctifs, mais aussi comme répertoire fonctionnel. En utilisant ce répertoire, les éléments requis
seront situés sur la partition LFS et seront disponibles à toutes les étapes du processus de construction.
Pour créer ce répertoire, lancez, en tant qu'utilisateur, la commande root, avant de commencer la session de
téléchargement :
mkdir -v $LFS/sources

Donnez le droit d'écriture et le droit sticky sur ce répertoire. « Sticky » signifie que même si de nombreux utilisateurs
peuvent écrire sur un répertoire, seul le propriétaire du fichier peut supprimer ce fichier à l'intérieur du répertoire
sticky. La commande suivante activera les droits d'écriture et sticky :
chmod -v a+wt $LFS/sources

Il y a plusieurs moyen d'obtenir tous les paquets nécessaires et les correctifs requis pour construire LFS :
• Vous pouvez télécharger les fichiers individuellement comme décrit dans les deux prochaines sections.
• Pour les versions stables du livre, une archive de tous les fichiers nécessaires est disponible au téléchargement
sur l'un des miroirs de LFS listés sur [Link]
• Vous pouvez télécharger les fichiers avec wget et un wget-list comme décrit ci-dessous.
Pour télécharger tous les paquets et les correctifs en utilisant wget-list comme entrée pour la commande wget,
utilisez :
wget --input-file=wget-list-systemd --continue --directory-prefix=$LFS/sources

En outre, à partir de LFS-7.0, un fichier séparé, md5sums, peut être utilisé pour vérifier que tous les paquets sont
disponibles avant de continuer. Mettez ce fichier dans $LFS/sources et lancez :
pushd $LFS/sources
md5sum -c md5sums
popd

20
Linux From Scratch - Version 11.3-systemd

Vous pouvez utiliser cette vérification après avoir récupéré les fichiers nécessaires avec une des méthodes proposées
plus haut.
Si vous téléchargez les paquets et les correctifs en tant qu’utilisateur non-root, ces fichiers appartiendront à
l’utilisateur. Le système de fichiers identifie le propriétaire par son UID et l’UID d’un utilisateur normal dans la
distribution hôte n’est pas attribué dans LFS. Dans ce cas, le propriétaire par défaut des fichiers sera un UID sans
nom dans le système LFS final. Si vous n’attribuez pas le même UID à votre utilisateur dans le système LFS, changez
dès maintenant les propriétaires de ces fichiers à root afin d’éviter le problème suivant :
chown root:root $LFS/sources/*

3.2. Tous les paquets


Note
Lisez les annonces de sécurité avant de télécharger les paquets pour découvrir s'il y a de nouvelles versions
de paquets qui pourraient être utilisées pour éviter des problèmes de sécurité.
Les développeurs en amont peuvent supprimer les anciennes versions surtout si elles contiennent des
vulnérabilités. Si une URL ci-dessous est injoignable, vous pouvez lire les annonces de sécurité avant
pour savoir si vous devriez utiliser une version plus récente (avec la vulnérabilité corrigée). Sinon, essayez
de télécharger le paquets supprimé depuis un miroir. Bien qu'il soit possible de télécharger une ancienne
version à partir d'un miroir même si la version a été supprimée à cause d'une vulnérabilité, nous ne vous
recommandons pas d'utiliser une version connue pour être vulnérable pour construire votre système.

Téléchargez ou obtenez d'une autre façon les paquets suivants :


• Acl (2.3.1) — 348 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 95ce715fe09acca7c12d3306d0f076b2
• Attr (2.5.1) — 456 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : ac1c5a7a084f0f83b8cace34211f64d8
• Autoconf (2.71) — 1,263 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 12cfa1687ffa2606337efe1a64416106
• Automake (1.16.5) — 1,565 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 4017e96f89fca45ca946f1c5db6be714
Somme de contrôle SHA256 : 80facc09885a57e6d49d06972c0ae1089c5fa8f4d4c7cfe5baea58e5085f136d
• Bash (5.2.15) — 10,695 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 4281bb43497f3905a308430a8d6a30a5
• Bc (6.2.4) — 447 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 5245ff400df17b66be7621c7a6498953

21
Linux From Scratch - Version 11.3-systemd

• Binutils (2.40) — 24,650 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 007b59bd908a737c06e5a8d3d2c737eb
• Bison (3.8.2) — 2,752 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : c28f119f405a2304ff0a7ccdcc629713
• Bzip2 (1.0.8) — 792 Ko:
Téléchargement : [Link]
Somme de contrôle MD5 : 67e051268d0c475ea773822f7500d0e5
• Check (0.15.2) — 760 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 50fcafcecde5a380415b12e9c574e0b2
• Coreutils (9.1) — 5,570 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 8b1ca4e018a7dce9bb937faec6618671
• D-Bus (1.14.6) — 1,339 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : e809d7aa905ad82adeaf1d59db5445b1
• DejaGNU (1.6.3) — 608 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 68c5208c58236eba447d7d6d1326b821
• Diffutils (3.9) — 1,551 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : cf0a65266058bf22fe3feb69e57ffc5b
• E2fsprogs (1.47.0) — 9,412 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 6b4f18a33873623041857b4963641ee9
• Elfutils (0.188) — 8,900 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : efb25a91873b2eec4df9f31e6a4f4e5c
• Expat (2.5.0) — 450 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : ac6677b6d1b95d209ab697ce8b688704

22
Linux From Scratch - Version 11.3-systemd

• Expect (5.45.4) — 618 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 00fce8de158422f5ccd2666512329bd2
• File (5.44) — 1,159 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : a60d586d49d015d842b9294864a89c7a
• Findutils (4.9.0) — 1,999 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 4a4a547e888a944b2f3af31d789a1137
• Flex (2.6.4) — 1,386 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 2882e3179748cc9f9c23ec593d6adc8d
• Gawk (5.2.1) — 3,332 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 02956bc5d117a7437bb4f7039f23b964
• GCC (12.2.0) — 82,662 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 73bafd0af874439dcdb9fc063b6fb069
Somme de contrôle SHA256 :
• GDBM (1.23) — 1,092 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 8551961e36bf8c70b7500d255d3658ec
• Gettext (0.21.1) — 9,819 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 27fcc8a42dbc8f334f23a08f1f2fe00a
• Glibc (2.37) — 18,244 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : e89cf3dcb64939d29f04b4ceead5cc4e

Note
Les développeurs de Glibc maintiennent une branche Git qui contient des correctifs jugés utiles pour
Glibc-2.37, mais malheureusement développés après la publication de 2.37. Les éditeurs de LFS
publieront un avis de sécurité si une correction de sécurité est ajoutée à la branche, mais aucune action
ne sera entreprise pour les autres correctifs ajoutés. Vous pouvez relire les correctifs vous-même et les
incorporer si vous les jugez importants.

23
Linux From Scratch - Version 11.3-systemd

• GMP (6.2.1) — 1,980 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 0b82665c4a92fd2ade7440c13fcaa42b
• Gperf (3.1) — 1,188 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 9e251c0a618ad0824b51117d5d9db87e
• Grep (3.8) — 1,670 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : dc6e4d18d4659e6e7552fc4a183c8ac9
• Groff (1.22.4) — 4,044 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 08fb04335e2f5e73f23ea4c3adbf0c5f
• GRUB (2.06) — 6,428 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : cf0fd928b1e5479c8108ee52cb114363
• Gzip (1.12) — 807 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 9608e4ac5f061b2a6479dc44e917a5db
• Iana-Etc (20230202) — 586 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : e64685d046cd0dfe94b5c66e294cf9ef
• Inetutils (2.4) — 1,522 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 319d65bb5a6f1847c4810651f3b4ba74
Somme de contrôle SHA256 :
• Intltool (0.51.0) — 159 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 12e517cac2b57a0121cda351570f1e63
• IPRoute2 (6.1.0) — 885 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : f3ff4461e25dbc5ef1fb7a9167a9523d
• Jinja2 (3.1.2) — 262 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : d31148abd89c1df1cdb077a55db27d02

24
Linux From Scratch - Version 11.3-systemd

• Kbd (2.5.1) — 1,457 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 10f10c0a9d897807733f2e2419814abb
• Kmod (30) — 555 Ko:
Téléchargement : [Link]
Somme de contrôle MD5 : 85202f0740a75eb52f2163c776f9b564
• Less (608) — 354 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 1cdec714569d830a68f4cff11203cdba
• Libcap (2.67) — 183 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 06333f4301657298890fd8d6f1fb4793
• Libffi (3.4.4) — 1,331 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 0da1a5ed7786ac12dcbaf0d499d8a049
• Libpipeline (1.5.7) — 956 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 1a48b5771b9f6c790fb4efdb1ac71342
• Libtool (2.4.7) — 996 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 2fc0b6ddcd66a89ed6e45db28fa44232
• Linux (6.1.11) — 131,653 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : f91621912cd58ac6d4128d4057980e7d

Note
Le noyau Linux est régulièrement mis à jour, souvent suite à la découverte de nouvelles failles de
sécurité. Vous devriez utiliser la version 6.1.x la plus récente disponible du noyau, sauf si la page
d'errata indique le contraire.
Pour les utilisateurs ayant un débit limité ou une bande passante chère, si vous souhaitez mettre à jour
le noyau Linux, une version en ligne de commande du paquet et des correctifs peuvent être téléchargées
séparément. Ceci peut économiser du temps ou de l'argent pour une mise à jour d'un niveau de correctif
mineure (subsequent) à l'intérieur d'une version mineure.

• M4 (1.4.19) — 1,617 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 0d90823e1426f1da2fd872df0311298d

25
Linux From Scratch - Version 11.3-systemd

• Make (4.4) — 2,254 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : d7575a26a94ee8427130e9db23cdaa78
• Man-DB (2.11.2) — 1,908 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : a7d59fb2df6158c44f8f7009dcc6d875
• Man-pages (6.03) — 2,134 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : c62b7c944bb0887a35edab7cab301357
• MarkupSafe (2.1.2) — 19 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 02f337b98aef11bd0fee9c5ae860173b
• Meson (1.0.0) — 2,051 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 009b78125467cd9ee4d467175a5c12e1
• MPC (1.3.1) — 756 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 5c9bc658c9fd0f940e8e3e0f09530c62
• MPFR (4.2.0) — 1,443 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : a25091f337f25830c16d2054d74b5af7
• Ncurses (6.4) — 3,528 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 5a62487b5d4ac6b132fe2bf9f8fad29b
• Ninja (1.11.1) — 225 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 32151c08211d7ca3c1d832064f6939b0
• OpenSSL (3.0.8) — 14,800 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 61e017cf4fea1b599048f621f1490fbd
• Patch (2.7.6) — 766 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 78ad9937e4caadcba1526ef1853730d5

26
Linux From Scratch - Version 11.3-systemd

• Perl (5.36.0) — 12,746 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 826e42da130011699172fd655e49cfa2
• Pkg-config (0.29.2) — 1,970 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : f6e931e319531b736fadc017f470e68a
• Procps (4.0.2) — 1250 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 691748c4767f19b9d94ed9d088e40c4d
• Psmisc (23.6) — 415 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : ed3206da1184ce9e82d607dc56c52633
• Python (3.11.2) — 19,428 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : a957cffb58a89303b62124896881950b
• Documentation Python (3.11.2) — 7,598 Ko:
Téléchargement : [Link]
Somme de contrôle MD5 : eb4132c780b60b5782a4f66b29b08d5c
• Readline (8.2) — 2,973 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 4aa1b31be779e6b84f9a96cb66bc50f6
• Sed (4.9) — 1,365 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 6aac9b2dbafcd5b7a67a8a9bcb8036c3
• Shadow (4.13) — 1,722 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : b1ab01b5462ddcf43588374d57bec123
• Systemd (252) — 11,488 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : b9456750a212dd54d81caeb3c38134b6
• Pages de manuel de Systemd (252) — 628 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : c1df1aefdbc4840b5f82a8783f3b72c1

Note
L'équipe systemd de Linux From Scratch génère sa propre archive des pages de manuel à partir des
sources de systemd. Cela est fait pour éviter des dépendances inutiles.

27
Linux From Scratch - Version 11.3-systemd

• Tar (1.34) — 2,174 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 9a08d29a9ac4727130b5708347c0f5cf
• Tcl (8.6.13) — 10,581 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 0e4358aade2f5db8a8b6f2f6d9481ec2
• Documentation de Tcl (8.6.13) — 1,165 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : 4452f2f6d557f5598cca17b786d6eb68
• Texinfo (7.0.2) — 4,762 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : be9500f3a361525622850ecb1b1fc024
• Time Zone Data (2022g) — 430 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 884250fd2a8a55f6322900ad4ab94d7b
• Util-linux (2.38.1) — 7,321 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : cd11456f4ddd31f7fbfdd9488c0c0d02
• Vim (9.0.1273) — 10,892 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 9c80755d2d95ec4ef713f66e57671797

Note
La version de vim change tous les jours. Pour récupérer la dernière version, visitez [Link]
vim/vim/tags.

• Wheel (0.38.4) — 66 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 83bb4e7bd4d687d398733f341a64ab91
• XML::Parser (2.46) — 249 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 80bb18a8e6240fcf7ec2f7b57601c170
• Xz Utils (5.4.1) — 1,451 Ko:
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 47d831c659e94071d5dd384d0d1ed4c6

28
Linux From Scratch - Version 11.3-systemd

• Zlib (1.2.13) — 1267 Ko:


Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 7d9fc1d78ae2fa3e84fe98b77d006c63
• Zstd (1.5.4) — 2,111 Ko :
Page d'accueil : [Link]
Téléchargement : [Link]
Somme de contrôle MD5 : 2352b1f9ccc7446641046bb3d440c3ed
Taille totale de ces paquets : environ 473 Mo

3.3. Correctifs requis


En plus des paquets, quelques correctifs sont aussi requis. Ces correctifs corrigent certaines erreurs contenues dans
les paquets, ces erreurs devraient être corrigées par le mainteneur. Les correctifs font aussi quelques modifications
pour faciliter l'utilisation des paquets. Les correctifs suivants seront nécessaires pour construire un système LFS :
• Bzip2 Correctif documentation — 1.6 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : 6a5ac7e89b791aae556de0f745916f7f
• Coreutils Correctif pour l'internationalisation — 166 Ko:
Téléchargement : [Link]
Somme de contrôle MD5 : c1ac7edf095027460716577633da9fc5
• Glibc correctif FHS — 2.8 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : 9a5997c3452909b1769918c759eff8a2
• Corrections en amont de Grub — 8 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : da388905710bb4cbfbc7bd7346ff9174
• Correctif réparant Kdb Backspace/Delete — 12 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : f75cca16a38da6caa7d52151f7136895
• Corrections en amont de Readline — 1.3 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : dd1764b84cfca6b677f44978218a75da
• Corrections en amont de Systemd — 76.0 Ko :
Téléchargement : [Link]
Somme de contrôle MD5 : da817e69e897d35cdffd7c45ea06be39
Taille totale de ces correctifs : environ 267.7 Ko
En plus des correctifs requis ci-dessus, il existe un certain nombre de correctifs optionnels créés par la communauté
LFS. Ces correctifs résolvent des problèmes mineurs ou activent des fonctionnalités qui ne sont pas disponibles
par défaut. Vous pouvez consulter la base de données des correctifs à loisir sur [Link]
patches/downloads/ et vous pouvez récupérer tout correctif supplémentaire correspondant aux besoins de votre
système.

29
Linux From Scratch - Version 11.3-systemd

Chapitre 4. Dernières préparations


4.1. Introduction
Dans ce chapitre, nous allons effectuer quelques tâches supplémentaires pour préparer la construction du système
temporaire. Nous allons créer un ensemble de répertoires dans $LFS (pour l'installation des outils temporaires),
ajouter un utilisateur non privilégié, et créer un environnement de construction adéquat pour cet utilisateur. Nous
allons également expliquer l'unité de temps (« SBU ») utilisée pour mesurer la durée de construction des paquets
LFS et donner quelques informations sur les suites de tests des paquets.

4.2. Créer une structure des répertoires limitée dans le


système de fichiers LFS
Dans cette section, nous alimenteront le système de fichiers LFS de tous les éléments qui composeront le système
Linux final. La première étape consiste à créer une arborescence de répertoires limitée pour que les programmes
compilés dans le Chapitre 6 (ainsi que glibc et libstdc++ dans le Chapitre 5) puissent être installés à leur
emplacement final. De cette manière, les programmes temporaires seront remplacés lorsque les versions finales
seront reconstruites dans le Chapitre 8.
Pour créer la structure des répertoires requise, exécutez les commandes suivantes en tant qu’utilisateur root :
mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}

for i in bin lib sbin; do


ln -sv usr/$i $LFS/$i
done

case $(uname -m) in


x86_64) mkdir -pv $LFS/lib64 ;;
esac

Les programmes de Chapitre 6 seront compilés avec un compilateur croisé (plus d'informations dans la section
Remarques techniques sur la chaîne de compilation), qui sera installé dans un répertoire spécifique séparé des autres
programmes. Pour créer ce répertoire, exécutez la commande :
mkdir -pv $LFS/tools

Note
Les éditeurs de LFS ont choisi délibérément de ne pas utiliser de répertoire /usr/lib64. Plusieurs mesures
sont prises pour s'assurer que la chaine d'outils ne l'utilisera pas. Si pour une quelconque raison ce
répertoire apparaît (soit parce que vous avez fait une erreur en suivant les instructions, soit parce que vous
avez installé un paquet binaire qui l'a créé après avoir fini LFS), cela pourrait casser votre système. Vous
devriez toujours vous assurer que ce répertoire n'existe pas.

4.3. Ajouter l'utilisateur LFS


Lorsque vous êtes connecté en tant qu'utilisateur root, une simple erreur peut endommager, voire détruire, votre
système. Les paquets des deux prochains chapitres sont donc construits en tant qu'utilisateur non privilégié. Vous
pouvez bien sûr utiliser votre propre nom d'utilisateur, mais pour faciliter la configuration d'un environnement de
travail propre, créez un nouvel utilisateur lfs comme membre d'un nouveau groupe (aussi nommé lfs) et utilisez cet
utilisateur pour exécuter les commandes lors du processus d'installation. En tant que root, exécutez les commandes
suivantes pour créer le nouvel utilisateur :
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs

30
Linux From Scratch - Version 11.3-systemd

Voici la signification des options de la ligne de commande :

-s /bin/bash
Fait de bash le shell par défaut de l'utilisateur lfs.
-g lfs
Ajoute l'utilisateur lfs au groupe lfs.
-m
Crée un répertoire personnel pour lfs.
-k /dev/null
Empêche toute copie possible de fichiers provenant du répertoire squelette (par défaut, /etc/skel) en modifiant
son emplacement par le périphérique spécial null.
lfs
C'est le nom du nouvel utilisateur.
Si vous souhaitez vous connecter en tant que lfs ou passer d’un utilisateur non-root à lfs (et non pas de l'utilisateur
root à l'utilisateur lfs, ce qui ne nécessite pas de mot de passe pour lfs), vous devez définir le mot de passe de lfs.
Exécutez la commande suivante en tant qu’utilisateur root pour configurer un mot de passe :
passwd lfs

Donnez à lfs un accès complet aux répertoires de $LFS en indiquant que lfs est le propriétaire du répertoire :
chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools}
case $(uname -m) in
x86_64) chown -v lfs $LFS/lib64 ;;
esac

Note
Sur certains systèmes hôtes, la commande su suivante ne s’exécute pas correctement et place la connexion
vers l'utilisateur lfs en tâche de fond. Si l'invite de commande « lfs:~$ » n'apparaît pas immédiatement,
exécutez la commande fg pour corriger le problème.

Ensuite, connectez-vous en tant que lfs. Vous pouvez le faire en vous connectant en tant qu'utilisateur lfs, soit via
une console virtuelle, soit avec la commande de substitution d'utilisateur suivante :
su - lfs

Le « - » indique à su qu'il doit lancer un shell de connexion. Vous trouverez la différence entre un shell de connexion
et un shell sans connexion dans la page de manuel bash(1) et info bash.

4.4. Configurer l'environnement


Configurez un bon environnement de travail en créant deux nouveaux fichiers de démarrage pour le shell bash. En
tant qu'utilisateur lfs, exécutez la commande suivante pour créer un nouveau .bash_profile :
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

Lorsque vous êtes connecté en tant qu’utilisateur lfs ou transféré vers l'utilisateur lfs en utilisant une commande
su avec l’option « - », le shell initial est un shell de connexion qui lit le fichier /etc/profile de l'hôte (contenant
probablement quelques configurations et variables d'environnement) puis .bash_profile. La commande exec env -
i.../bin/bash dans le fichier .bash_profile remplace le shell en cours par un nouveau shell ayant un environnement

31
Linux From Scratch - Version 11.3-systemd

complètement vide en dehors des variables HOME, TERM, et PS1. Cela garantit qu'aucune variable d'environnement non
souhaitée et potentiellement dangereuse provenant du système hôte ne fuit dans l'environnement de construction.
La technique utilisée ici permet d'obtenir un environnement propre.
La nouvelle instance du shell est un shell sans connexion, qui ne lit donc pas et n'exécute pas les fichiers /etc/
profile ou .bash_profile, mais plutôt le fichier .bashrc. Créez maintenant le fichier .bashrc :

cat > ~/.bashrc << "EOF"


set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/[Link]
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
EOF

Voici la signification des paramètres du fichier .bashrc

set +h
La commande set +h désactive la fonction de hachage de bash. D'habitude, le hachage est une fonctionnalité
utile : bash utilise une table de hachage pour se rappeler le chemin complet des fichiers exécutables et éviter
d'avoir à chercher dans PATH à chaque fois qu'il doit trouver le même exécutable. Néanmoins, les nouveaux
outils doivent être utilisés dès leur installation. En désactivant la fonction de hachage, le shell cherchera en
permanence dans la variable PATH dès qu'un programme est exécuté. Ainsi, le shell trouvera les nouveaux outils
compilés dans $LFS/tools/bin dès qu'ils seront disponibles et sans se rappeler la version précédente du même
programme fourni par la distribution hôte, dans /usr/bin ou /bin.
umask 022
Configurer le masque de création de fichier (umask) à 022 garantit que les nouveaux fichiers et répertoires
créés sont modifiables uniquement par leurs propriétaires, mais qu’ils restent lisibles et exécutables par tout le
monde (en supposant que l'appel système open(2) utilise les modes par défaut, les nouveaux fichiers finiront
avec les droits 644 et les répertoires avec les droits 755).
LFS=/mnt/lfs
La variable LFS doit être configurée avec le point de montage choisi.
LC_ALL=POSIX
La variable LC_ALL contrôle les paramètres linguistiques de certains programmes pour que leurs messages
suivent les conventions du pays spécifié. Définir LC_ALL à « POSIX » ou « C » (les deux étant équivalents)
garantit que tout fonctionnera comme prévu dans l'environnement de compilation croisée.
LFS_TGT=(uname -m)-lfs-linux-gnu
La variable LFS_TGT initialise une description de machine personnalisée mais compatible lors de la construction
de notre compilateur croisé, de notre éditeur de liens et lors de la compilation croisée de notre chaîne de
compilation temporaire. Vous trouverez plus d'informations dans la Remarques techniques sur la chaîne de
compilation.
PATH=/usr/bin
De nombreuses distributions récentes de Linux fusionnent /bin et /usr/bin. Lorsque c'est le cas, il vaut mieux
paramétrer la variable PATH standard sur /usr/bin pour l'environnement Chapitre 6. Lorsque ce n'est pas le cas,
la ligne suivante ajoute /bin au chemin de recherche.
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
Si /bin n'est pas un lien symbolique, il doit être ajouté à la variable PATH.

32
Linux From Scratch - Version 11.3-systemd

PATH=$LFS/tools/bin:$PATH
En plaçant $LFS/tools/bin au début du PATH standard, le compilateur croisé installé au début du Chapitre 5 est
repéré par le shell immédiatement après son installation. Ceci, combiné à la désactivation du hachage, limite
le risque que le compilateur de l'hôte ne soit utilisé à la place du compilateur croisé.
CONFIG_SITE=$LFS/usr/share/[Link]
Dans le Chapitre 5 et le Chapitre 6, si cette variable n'est pas initialisée, les scripts configure peuvent essayer
de charger des bouts de configuration de certaines distributions dans /usr/share/[Link] sur le système
hôte. Changer ce chemin permet d'éviter une contamination potentielle par l'hôte.
export ...
Bien que les commandes précédentes aient configuré certaines variables, pour les rendre visibles dans les sous-
shells nous les exportons.

Important
Plusieurs distributions commerciales ajoutent une instance non documentée de /etc/[Link] à
l'initialisation de bash. Ce fichier peut modifier l'environnement de l'utilisateur lfs d'une manière qui peut
affecter la construction de paquets critiques de LFS. Pour vous assurer que l'environnement de l'utilisateur
lfs est propre, vérifiez la présence de /etc/[Link] et, s'il est présent, déplacez-le ailleurs. En tant
qu'utilisateur root, exécutez la commande :
[ ! -e /etc/[Link] ] || mv -v /etc/[Link] /etc/[Link]

Lorsque l'utilisateur lfs n'est plus nécessaire (au début du Chapitre 7), vous pouvez restaurer /etc/bash.
bashrc (si vous le souhaitez).

Notez que le paquet Bash de LFS que nous construisons dans la Section 8.34, « Bash-5.2.15 » n'est pas
configuré pour charger ou exécuter /etc/[Link], rendant ce fichier sur un système LFS complet.

Enfin, pour avoir un environnement complètement préparé pour la construction des outils temporaires, forcez le
shell bash à lire le profil de l'utilisateur tout juste créé :
source ~/.bash_profile

4.5. À propos des SBU


Beaucoup de personnes souhaitent savoir à l'avance combien de temps la compilation et l'installation de chaque
paquet va prendre. Linux From Scratch est construit sur tellement de systèmes différents qu'il est impossible d'en
estimer la durée précise. Le plus gros paquet (gcc) met approximativement 5 minutes sur les systèmes les plus
rapides mais peut prendre plusieurs jours sur les moins rapides ! Plutôt que de donner des délais précis, nous utilisons
les SBU (Standard Build Units).
La mesure des SBU fonctionne de cette manière : le premier paquet que vous compilez dans ce livre est binutils
dans le Chapitre 5. Le délai de compilation de ce paquet avec un unique cœur correspond à ce que nous appelons
un SBU. Tous les autres délais de compilation sont exprimés par rapport à celui-ci.
Par exemple, prenez un paquet spécifique dont le temps de compilation correspond à 4,5 SBU. Cela signifie que
s'il vous a fallu 10 minutes pour compiler et installer la première passe de Binutils, alors vous savez qu’il faudra
environ 45 minutes pour construire ce paquet. Heureusement, la plupart des délais de construction sont bien plus
courts que celui de binutils.
En général, les SBU ne sont pas précis, car ils prennent trop de facteurs en compte, par exemple la version de GCC
sur votre machine hôte. Ils sont fournis ici pour donner une estimation du temps nécessaire pour installer un paquet,
mais ces nombres peuvent varier de plusieurs dizaines de minutes dans certains cas.
33
Linux From Scratch - Version 11.3-systemd

Note
Pour beaucoup de systèmes modernes avec plusieurs processeurs (ou cœurs), le temps de compilation d'un
paquet peut être réduit en effectuant un « make parallèle » soit en réglant une variable d'environnement,
soit en disant au programme make combien de processeurs sont disponibles. Par exemple, un CPU Intel
i5-6500 peut prendre en charge quatre processus simultanément avec :
export MAKEFLAGS='-j4'

ou simplement en construisant avec :


make -j4

Si vous utilisez plusieurs processeurs de cette façon, les unités de SBU du livre varieront encore plus que
la normale. Dans certains cas, l'étape make échouera. L'analyse de la sortie du processus de construction
sera aussi plus difficile, car les lignes des différents processus seront mélangées. Si vous rencontrez un
problème à une étape de la construction, revenez à une construction avec un seul processeur pour analyser
correctement les messages d'erreur.
Les délais présentés ici se basent sur l'utilisation de quatre cœurs (-j4). Les délais du chapitre 8
comprennent aussi le temps nécessaire à lancer les tests de non-régression pour les paquets, sauf mention
contraire.

4.6. À propos des suites de tests


La plupart des paquets disposent d'une suite de tests. Lancer cette suite de tests pour un paquet tout juste construit
est généralement une bonne idée car elle permet de faire un « sanity check », qui indique si tout a été compilé
correctement. Une suite de tests réussissant l'ensemble des vérifications prouve généralement que le paquet
fonctionne comme le développeur le souhaitait. Néanmoins, elle ne garantit pas que le paquet ne contient pas de
bugs.
Certaines suites de tests sont plus importantes que d'autres. Par exemple, les suites de tests des paquets de chaîne
de compilation — GCC, binutils, et glibc — sont de la plus haute importance étant donné leur rôle central dans un
système fonctionnel. Les suites de tests pour GCC et glibc peuvent mettre beaucoup de temps à se terminer, surtout
sur une machine lente, mais elles sont fortement recommandées.

Note
Lancer les suites de tests dans le Chapitre 5 et le Chapitre 6 est inutile, car ces programmes sont compilés
avec un compilateur croisé, donc ils ne sont pas sensés être exécutables sur l'hôte de construction.

Un problème récurrent lors du lancement des suites de test pour binutils et GCC est de manquer de pseudo-terminaux
(PTY). Cela peut entraîner un nombre élevé d'échecs dans les tests, et ce pour plusieurs raisons, mais la plus probable
est que le système hôte ne dispose pas d'un système de fichiers devpts configuré correctement. Pour plus de détails,
voir [Link]
Parfois, les suites de test des paquets échouent pour diverses raisons, que les développeurs ont identifié et considéré
comme non critiques. Consultez les logs sur [Link] pour vérifier si
ces échecs sont susceptibles d’avoir lieu. Ce site est valable pour tous les tests effectués dans ce livre.

34
Linux From Scratch - Version 11.3-systemd

Partie III. Construction des outils


croisés LFS et des outils temporaires
Linux From Scratch - Version 11.3-systemd

Informations préliminaires importantes


Introduction
Cette partie est divisée en trois étapes : la première construit un compilateur croisé et ses bibliothèques associées ;
la seconde utilise cette chaîne d'outils croisée pour construire plusieurs outils de sorte à ce qu’ils soient isolés de la
distribution hôte ; la troisième entre dans l'environnement chroot, qui améliore encore plus l'isolation et construit
le reste des outils requis pour construire le système final.

Important
C’est dans cette partie qu’un vrai travail de construction d'un nouveau système peut commencer. Il est
recommande d’être attentif et de suivre avec précision les instructions du livre. Mettez de côté toute envie
de finir votre construction rapidement. Vous devez essayer de comprendre ce que les commandes font
et éviter de les taper à l’aveugle. Lisez la documentation quand vous ne comprenez pas quelque chose.
Gardez aussi une trace de ce que vous tapez et des sorties des commandes, en les envoyant dans un fichier,
avec l'outil tee, qui permet de mieux diagnostiquer les problèmes qui pourraient survenir.

La prochaine section est une introduction technique au processus de construction, tandis que la suivante contient
des instructions générales très importantes.

Remarques techniques sur la chaîne de compilation


Cette section explique certains détails logiques et techniques de la méthode de construction. Il n'est pas essentiel
de tout comprendre immédiatement. La plupart de ces informations seront plus claires une fois votre première
construction complète terminée. Cette section peut servir de référence à tout moment lors du processus de
construction.
Le but global du Chapitre 5 et du Chapitre 6 est de générer un espace temporaire comportant un ensemble d'outils
connus et approuvés, qui sont isolés du système hôte. En utilisant la commande chroot, les compilations réalisées
dans le reste des chapitres se cantonneront à cet environnement, en assurant une construction du système LFS cible
propre et sans faille. Le processus de construction a été conçu pour minimiser les risques auprès des nouveaux
lecteurs et pour fournir une valeur éducative maximale.
Le processus de construction se base sur la compilation croisée. La compilation croisée est normalement utilisée
pour construire un compilateur ainsi que sa chaîne de compilation sur une machine différente de celle utilisée pour
la construction. Ce n’est pas nécessaire pour LFS, puisque la machine sur laquelle le nouveau système est construit
est la même que celle utilisée pour la construction. Mais le grand avantage de la compilation croisée, c’est que tout
ce qui est compilé est indépendant de l'environnement hôte.

À propos de la compilation croisée

Note
Le livre LFS n'est pas (et ne contient pas) un tutoriel générique sur la construction d'une chaîne de
compilation croisée (ou native). N'utilisez pas les commandes de ce livre pour construire une chaîne de
compilation croisée autre que celle utilisée pour LFS, à moins de vraiment comprendre ce que vous faites.

La compilation croisée utilise certains concepts qui mériteraient une section à part. Même si vous pouvez passer
cette section lors de votre première lecture, nous vous recommandons fortement d'y revenir plus tard pour bien
comprendre le processus de construction.

xxxvi
Linux From Scratch - Version 11.3-systemd

Définissons d'abord certains termes utilisés dans ce contexte :


La construction (build)
est la machine où nous construisons les programmes. Cette machine est appelée « hôte » dans les autres sections.
L’hôte (host)
est la machine ou le système où les programmes seront lancés. Le terme « hôte » n’a pas la même définition
dans les autres sections.
La cible (target)
est seulement utilisée pour les compilateurs. C'est la machine pour laquelle le compilateur produit du code.
Elle peut être différente de l’hôte et de la construction.
Par exemple, imaginons le scénario suivant (parfois appelé « Canadian Cross ») : nous avons un compilateur sur
une machine lente, que nous appellerons A, et le compilateur ccA. Nous avons également une machine rapide (B),
mais aucun compilateur pour (B). Nous voulons produire du code pour une troisième machine, lente cette fois (C).
Il y a trois étapes à suivre pour construire un compilateur destiné à la machine C :

Étape Construction Hôte Cible Action


1 A A B Construire
un
compilateur
croisé
cc1 avec
ccA sur la
machine
A.
2 A B C Construire
un
compilateur
croisé
cc2 avec
cc1 sur la
machine
A.
3 B C C Construire
le
compilateur
ccC avec
cc2 sur la
machine
B.

Ensuite, tous les programmes requis par la machine C peuvent être compilés avec cc2 sur la machine rapide B.
À moins que B ne puisse lancer les programmes produits pour C, il n'existe aucun moyen de tester les nouveaux
programmes construits avant de les lancer sur la machine C. Par exemple, pour tester ccC, nous pouvons ajouter
une quatrième étape :

Étape Construction Hôte Cible Action


4 C C C Reconstruire
et tester

xxxvii
Linux From Scratch - Version 11.3-systemd

Étape Construction Hôte Cible Action


ccC avec
lui-même
sur la
machine
C.

Dans l'exemple ci-dessus, seuls cc1 et cc2 sont des compilateurs croisés, c'est-à-dire qu'ils produisent du code pour
une machine différente de celle sur laquelle ils tournent. Les autres compilateurs ccA et ccC produisent du code
pour la machine sur laquelle ils tournent. Ces compilateurs sont appelés compilateurs natifs.

Implémentation de la compilation croisée dans LFS

Note
Tous les paquets compilés de manière croisée dans ce livre utilisent un système de construction basé sur
autoconf. Le système de construction basé sur autoconf accepte des types de systèmes de la forme cpu-
fabriquant-noyau-os, nommés triplets systèmes. Comme le champ fabriquant est souvent inutile, autoconf
vous autorise à ne pas le renseigner.
Le lecteur attentif se demandera pourquoi un « triplet » désigne un nom à quatre composantes. Le champ
du noyau et de l'os ont d'abord commencé comme un seul champ « système ». Cette forme à trois champs
est toujours valide de nos jours pour certains systèmes, par exemple x86_64-unknown-freebsd. Mais deux
systèmes peuvent partager le même noyau et être trop différents pour utiliser le même triplet pour les
désigner. Par exemple Android qui tourne sur les téléphones est complètement différent d'Ubuntu sur un
serveur ARM64, même s'ils utilisent tous les deux le même type de CPU (ARM64) et utilisent le même
noyau (Linux).
Sans une couche d'émulation, vous ne pouvez pas lancer un exécutable pour un serveur sur un téléphone
portable et vice-versa. Donc le champ « système » a été divisé en les champs noyau et os, pour désigner
trois systèmes sans ambiguïté. Dans notre exemple, le système Android est appelé aarch64-unknown-
linux-android et le système Ubuntu est appelé aarch64-unknown-linux-gnu.

Le mot « triplet » reste ancré dans le vocabulaire informatique. Pour déterminer simplement votre
triplet système, vous pouvez lancer le script [Link] fournit avec les sources de nombreux paquets.
Désarchivez les sources de binutils, lancez le script ./[Link], et notez la sortie. Par exemple pour
un processeur Intel 32 bits la sortie sera i686-pc-linux-gnu. Sur un système 64 bits elle sera x86_64-pc-
linux-gnu. Sur la plupart des systèmes Linux la commande encore plus simple gcc -dumpmachine vous
donner cette information.
Faites également attention au nom de l'éditeur de liens dynamiques de la plateforme, souvent appelé
chargeur dynamique (à ne pas confondre avec l'éditeur de liens standard ld qui fait partie de binutils).Le
chargeur dynamique fourni par glibc trouve et charge les bibliothèques partagées nécessaires à l’exécution
d’un programme, prépare le programme, puis l'exé[Link] nom du chargeur dynamique pour une machine
Intel 32 bits sera [Link].2 ([Link].2 pour les systèmes 64 bits).Pour déterminer le nom
du chargeur dynamique, inspectez un binaire au hasard sur le système hôte en exécutant : readelf -l
<nom du binaire> | grep interpreter et récupérez le ré[Link] référence officielle qui couvre toutes les
plateformes se trouve dans le fichier shlib-versions, à la racine de l’arborescence des sources de glibc.

Pour simuler une compilation croisée dans LFS, le nom du triplet hôte est légèrement modifié en changeant le
champ « fabriquant » dans la variable d’environnement LFS_TGT pour qu’il indique « lfs . Nous utilisons également
l'option --with-sysroot lors de la construction de l'éditeur de liens et du compilateur croisés pour leur indiquer
xxxviii
Linux From Scratch - Version 11.3-systemd

l’emplacement des fichiers hôte requis. Cette option permet de s’assurer qu'aucun autre programme construit dans le
Chapitre 6 ne peut s’associer aux bibliothèques sur la machine de [Link] deux étapes sont obligatoires,
en plus d’une étape supplémentaire destinée aux tests :

Étape Construction Hôte Cible Action


1 pc pc lfs Construire
un
compilateur
croisé cc1
avec cc-
pc sur pc.
2 pc lfs lfs Construire
un
compilateur
cc-lfs
avec cc1
sur pc.
3 lfs lfs lfs Reconstruire
et tester
cc-lfs
avec lui-
même sur
lfs.

Dans le tableau précédent, « sur pc » signifie que les commandes sont exécutées sur une machine qui utilise la
distribution déjà installée.« Sur lfs » signifie que les commandes sont exécutées dans un environnement chroot.
Ce n'est pas la fin de l'histoire. Le langage C n'est pas seulement un compilateur, mais il définit aussi une bibliothèque
standard. Dans ce livre, nous utilisons la bibliothèque C de GNU, appelée glibc (son alternative étant « musl »).
Cette bibliothèque doit être compilée pour la machine LFS, c'est-à-dire à l’aide du compilateur croisé cc1. Mais le
compilateur lui-même utilise une bibliothèque interne qui exécute des instructions complexes indisponibles dans
le jeu d'instructions de l'assembleur. Cette bibliothèque interne, libgcc, doit être liée à la bibliothèque glibc pour
fonctionner correctement ! De plus, la bibliothèque standard C++ (libstdc++) a aussi besoin d'être associée à glibc.
La solution à ce problème consiste d'abord à construire une libgcc inférieure basée sur cc1, qui ne dispose pas
de fonctionnalités avancées comme les threads et le traitement des exceptions, puis de construire glibc avec ce
compilateur inférieur (glibc elle-même n'étant pas inférieure), puis de construire libstdc++. Cette bibliothèque ne
dispose pas des fonctionnalités avancées de libgcc.
La conséquence du paragraphe précédent est que cc1 est incapable de construire une libstdc++ complètement
fonctionnelle avec la libgcc dégradée, mais cc1 est le seul compilateur disponible pour construire les bibliothèques
C/C++ à la deuxième étape. Il y a deux raisons pour lesquelles nous n'utilisons pas immédiatement le compilateur
construit à l'étape 2, cc-lfs, pour construire ces bibliothèques.
• En général, cc-lfs ne peut pas se lancer sur pc (le système hôte). Même si les triplets pour pc et lfs sont
compatibles l'un avec l'autre, un exécutable pour lfs doit dépendre de glibc-2.37. La distribution hôte peut
utiliser une implémentation différent de la libc (par exemple, musl) ou une version précédente de glibc (par
exemple glibc-2.13).
• Même si cc-lfs peut s'exécuter sur pc, l'utiliser sur pc induirait le risque de se lier aux bibliothèques de pc,
comme cc-lfs est un compilateur natif.
Ainsi, lorsque nous construisons l’étape 2 du gcc, nous demandons au système de construction de reconstruire libgcc
et libstdc++ avec cc1, mais nous lions libstdc++ au nouveau libgcc reconstruit plutôt qu’à l'ancienne construction
dégradée, pour faire en sorte que le libstdc++ reconstruit soit entièrement opérationnel.

xxxix
Linux From Scratch - Version 11.3-systemd

Dans Chapitre 8, (ou « l’étape 3 »), tous les paquets nécessaires au système LFS sont construits.Même si vous avez
déjà installé un paquet sur le système LFS dans un chapitre précédent, vous devrez reconstruire le paquet, à moins
d’être certain qu’il n’est pas nécessaire. La stabilisation de ces paquets est la raison principale de leur reconstruction :
si vous réinstallez un paquet LFS sur un système complet LFS, le contenu du paquet installé devrait être identique au
contenu de ce paquet installé dansChapitre 8. Les paquets temporaires installés dansChapitre 6 ouChapitre 7 ne sont
pas concernés, car certains d’entre eux sont construits sans dépendance optionnelle, et autoconf ne peut pas exécuter
certaines vérifications dans Chapitre 6 à cause de la compilation croisée. Les paquets temporaires ne disposent donc
pas de certaines fonctionnalités optionnelles ou utilisent des routines sous-optimales. De plus, en reconstruisant les
paquets, vous permettez l’exécution de la suite de tests.

Détails supplémentaires de procédure


Le compilateur croisé sera installé dans un répertoire $LFS/tools séparé, puisqu’il ne fera pas partie du système final.
Binutils est installé en premier parce que la commande configurede gcc et glibc effectuent des tests de
fonctionnalités sur l'assembleur et l'éditeur de liens pour déterminer quelles fonctionnalités logicielles activer ou
dé[Link] installation est plus importante que ce que vous pouvez [Link] gcc ou une glibc mal configurés
peuvent casser la chaîne de compilation, et l'impact d’une telle configuration ne se verrait qu’à la fin de la
construction de la distribution complè[Link] suite de tests indiquera généralement cette erreur avant que vous n’ayez
trop avancé.
Binutils installe son assembleur et son éditeur de liens à deux emplacements, $LFS/tools/bin et $LFS/tools/$LFS_
TGT/bin. Les outils situés à un emplacement sont liés à l’autre par un lien dur. L’ordre de recherche des bibliothèques
est un aspect important de l’éditeur de liens. Vous pouvez obtenir des informations détaillées à partir de la commande
ld en lui passant l’option --verbose. Par exemple, la commande ld --verbose | grep SEARCH affichera les chemins
de recherche actuels et leur ordre. Cet exemple peut être exécuté en mode lecture par l’utilisateur [Link] vous revenez
plus tard sur cette page, remplacez la commande $LFS_TGT-ld par ld.
Le prochain paquet installé est gcc. Voici un exemple de ce qui peut s’afficher pendant l'exécution de la commande
configure :
checking what assembler to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/as
checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld

Il s’agit d’un paquet important pour les raisons mentionnées plus haut. C’est également la preuve que le script
configure de gcc ne parcourt pas les répertoires du PATH pour trouver quels outils utiliser. Cependant, lors de
l’exécution normale de la commande gcc, les mêmes chemins de recherche ne sont pas forcément utilisés. Pour
trouver quel éditeur de liens standard gcc utilise, exécutez la commande $LFS_TGT-gcc -print-prog-name=ld. À
nouveau, retirez la commande $LFS_TGT- si vous revenez ici plus tard.
Vous pouvez obtenir des informations détaillées grâce à la commande gcc en lui passant l’option -v lors de la
compilation d'un programme. Par exemple, la commande $LFS_TGT-gcc -v example.c (sans $LFS_TGT- si
vous revenez plus tard) affichera des informations détaillées sur les phases de préprocesseur, de compilation et
d’assemblage, ainsi que les chemins de recherche de gcc pour les headers inclus et leur ordre.
L’installation suivante concerne les headers nettoyés de l’API de Linux. Ils permettent à la bibliothèque standard C
(glibc) d’interagir avec les fonctionnalités fournies par le noyau Linux.
glibc est le paquet suivant à installer. Le compilateur, les outils binaires et les headers du noyau sont les éléments
les plus importants à prendre en considération pour construire glibc. Le compilateur ne pose généralement pas de
problème car glibc utilise toujours le compilateur lié à l’option --host passée à son script configure. Par exemple,
dans notre cas, le compilateur sera $LFS_TGT-gcc. Les outils binaires et les headers du noyau s’avèrent un peu plus
compliqués. Ne prenez donc pas de risque et utilisez les options de configure disponibles pour exécuter les bonnes
sélections. Après l'exécution de configure, vérifiez le contenu et les détails importants du fichier [Link] dans
le répertoire glibc-build. Pour sélectionner les outils binaires à utiliser, servez-vous du paramètre CC="$LFS_TGT-

xl
Linux From Scratch - Version 11.3-systemd

gcc" (avec la variable étendue $LFS_TGT). Pour sélectionner le chemin de recherche des headers du compilateur,
utilisez les options -nostdinc et -isystem. Ces éléments mettent en avant un aspect important du paquet glibc : il
est auto-suffisant en termes de construction et ne repose généralement pas sur la chaîne de compilation par défaut.
Comme indiqué précédemment, la bibliothèque standard C++ est ensuite compilée, suivie dans le Chapitre 6 par
les autres programmes qui nécessitent une compilation croisée en raison des dépendances circulaires qu’ils cassent
lors de la construction. L’installation forcée de tous ces paquets sur le système de fichiers LFS nécessite la variable
DESTDIR.

À la fin du Chapitre 6, le compilateur LFS natif est installé.binutils-pass2 est construit en premier, avec le même
répertoire d’installation DESTDIR que les autres programmes, puis la deuxième passe de gcc est construite sans les
bibliothèques [Link] raison d’un comportement illogique dans le script configure de gcc, CC_FOR_TARGET devient
cc lorsque l'hôte est identique à la cible, mais différent du système de construction.C'est pourquoi le paramètre CC_
FOR_TARGET=$LFS_TGT-gcc est déclaré de façon explicite dans les options de configure.

À l’entrée de l'environnement chroot dans le Chapitre 7, les programmes nécessaires au bon fonctionnement de la
chaîne de compilation sont installés de manière temporaire. À partir de là, la chaîne de construction de base est auto-
suffisante et auto-hébergée. Dans le Chapitre 8, vous construirez, testerez et installerez les versions finales de tous
les paquets nécessaires au bon fonctionnement du système complet.

Instructions générales de compilation


Voici des informations que vous devriez connaitre pour la construction des paquets :
• Plusieurs paquets sont corrigés avant d'être compilés, mais seulement dans le cas où la correction est nécessaire
pour résoudre un problème. Souvent, le correctif est nécessaire à la fois dans ce chapitre et dans les suivants,
mais quelques fois lorsque le même paquet est construit plus d'une fois, le correctif n'est pas immédiatement
nécessaire. Donc, ne vous inquiétez pas lorsque des instructions pour un correctif téléchargé semblent manquer.
Des messages d'avertissements sur un décalage (offset) ou sur autre chose (fuzz) peuvent apparaître lors de
l'application d'un correctif. Ne vous inquiétez pas pour ces messages, le correctif a bien été appliqué.
• Pendant la compilation de la plupart des paquets, des messages d'avertissement défileront sur votre écran.
Ceci est normal et peut être ignoré sans danger. Ces messages d'avertissement concernent généralement une
utilisation obsolète, mais pas invalide, de la syntaxe de C ou de C++. Les standards C changent assez souvent
et certains paquets n'ont pas encore été mis à jour. Ce n'est pas un véritable problème mais cela provoque les
messages.
• Vérifiez une dernière fois que la variable d'environnement LFS est configurée correctement :
echo $LFS

Assurez-vous que le résultat contient le bon répertoire vers le point de montage de la partition LFS, qui est /
mnt/lfs, suivant notre exemple.

• Enfin, deux points importants doivent être précisés :

Important
Les instructions de construction supposent que vous avez défini correctement les Prérequis du
système hôte, y compris les liens symboliques :
• bash est le shell utilisé.
• sh est un lien symbolique vers bash.
• /usr/bin/awk est un lien symbolique vers gawk.
• /usr/bin/yacc est un lien symbolique vers bison ou un petit script qui exécute bison.
xli
Linux From Scratch - Version 11.3-systemd

Important
Voici un résumé du processus de construction.
1. Mettez tous les codes sources et les correctifs dans un répertoire qui sera accessible depuis
l'environnement chroot, tel que /mnt/lfs/sources/.
2. Déplacez-vous vers le répertoire /mnt/lfs/sources.
3. Pour chaque paquet :
a. En utilisant le programme tar, décompressez le paquet à construire. Dans les chapitres
Chapitre 5 et Chapitre 6, assurez-vous d'être l'utilisateur lfs lors de l'extraction du paquet.
N'utilisez aucune autre méthode que la commande tar pour extraire le code source. En
particulier, l'utilisation de cp -R pour copier l'arborescence ailleurs peut détruire les liens et
l'horodatage de l'arborescence des sources et résulter en un échec à la construction.
b. Allez dans le répertoire créé lorsque le paquet a été décompressé.
c. Suivez les instructions pour construire le paquet.
d. Revenez au répertoire des codes sources lorsque la construction est terminée.
e. Supprimez le répertoire source que vous avez extrait sauf instruction contraire.

xlii
Linux From Scratch - Version 11.3-systemd

Chapitre 5. Compilation d'une chaîne d'outils croisée


5.1. Introduction
Ce chapitre montre comment construire un compilateur croisé et ses outils associés. Bien qu'ici la compilation
croisée soit fausse, le principe est le même que pour une vraie compilation croisée.
Les programmes compilés dans ce chapitre vont être installés dans le répertoire $LFS/tools de façon à les garder
séparés des fichiers installés dans les chapitres suivants. Les bibliothèques en revanche, sont installées à leur
emplacement final, comme elles appartiennent au système que nous voulons construire.

43
Linux From Scratch - Version 11.3-systemd

5.2. Binutils-2.40 — Passe 1


Le paquet Binutils contient un éditeur de liens, un assembleur et d'autres outils permettant de gérer des fichiers objet.
Temps de construction 1 SBU
approximatif:
Espace disque requis: 639 Mo

5.2.1. Installation de Binutils croisé


Note
Revenez en arrière et relisez les remarques de la section Instructions générales de compilation. La
compréhension des remarques notées importantes vous évitera beaucoup de problèmes plus tard.

Il est important que Binutils soit le premier paquet compilé. En effet, Glibc et GCC réalisent différents tests sur
l'éditeur de liens et l'assembleur disponibles pour déterminer leurs propres fonctionnalités à activer.
La documentation de Binutils recommande de construire Binutils dans un répertoire de construction dédié :
mkdir -v build
cd build

Note
Pour que les valeurs SBU listées dans le reste du livre vous soient utiles, mesurez le temps pris
pour construire ce paquet, de la configuration jusqu'à la première installation. Pour cela, englobez les
commandes dans une commande time de cette façon : time { ../configure ... && make && make
install; }.

Maintenant, préparez la compilation de Binutils :


../configure --prefix=$LFS/tools \
--with-sysroot=$LFS \
--target=$LFS_TGT \
--disable-nls \
--enable-gprofng=no \
--disable-werror

Voici la signification des options de configuration :

--prefix=$LFS/tools
Ceci dit au script configure de se préparer à installer les programmes de binutils dans le répertoire $LFS/tools.
--with-sysroot=$LFS
Pour de la compilation croisée, ceci dit au système de construction de chercher dans $LFS les bibliothèques
systèmes cibles nécessaires.
--target=$LFS_TGT
Vu que la description de la machine dans la variable LFS_TGT est légèrement différente de la valeur renvoyée
par le script [Link], ce paramètre va dire au script configure d'ajuster le système de construction de
binutils pour la construction d'un éditeur de lien croisé.
--disable-nls
Ceci désactive l'internationalisation (i18n), car ce n'est pas nécessaire pour des outils temporaires.
--enable-gprofng=no
Ceci désactive la construction de grofng qui n'est pas requis pour les outils temporaires.

44
Linux From Scratch - Version 11.3-systemd

--disable-werror
Ceci empêche la compilation de s'arrêter lorsqu'interviennent des événements comme des avertissements du
compilateur du système hôte.
Continuez avec la compilation du paquet :
make

Installez le paquet :
make install

Les détails sur ce paquet sont disponibles dans Section 8.18.2, « Contenu de Binutils. »

45
Linux From Scratch - Version 11.3-systemd

5.3. GCC-12.2.0 — Passe 1


Le paquet GCC contient la collection de compilateurs GNU, laquelle contient les compilateurs C et C++.
Temps de construction 3.3 SBU
approximatif:
Espace disque requis: 3.8 Go

5.3.1. Installation de GCC croisé


GCC requiert les paquets GMP, MPFR et MPC. Comme il se peut que ces paquets ne soient pas inclus dans votre
distribution hôte, ils vont être compilés en même temps que GCC. Déballez chaque paquet dans le répertoire des
sources de GCC et renommez les répertoires ainsi créés pour que les procédures de construction de GCC les utilisent
automatiquement :

Note
Beaucoup d'incompréhensions existent concernant ce chapitre. Les procédures sont les mêmes que celles
de tous les autres chapitres, comme expliqué plus tôt (Instructions de construction des paquets). Extrayez
d'abord l'archive de gcc-12.2.0 du répertoire des sources puis rendez-vous dans le répertoire créé. C'est
seulement là que vous devriez suivre les instructions ci-dessous.

tar -xf ../[Link]


mv -v mpfr-4.2.0 mpfr
tar -xf ../[Link]
mv -v gmp-6.2.1 gmp
tar -xf ../[Link]
mv -v mpc-1.3.1 mpc

Sur les systèmes x86_64, définissez « lib » comme nom de répertoire par défaut pour les bibliothèques 64 bits :
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-[Link] gcc/config/i386/t-linux64
;;
esac

La documentation de GCC recommande de construire GCC dans un répertoire de construction dédié :


mkdir -v build
cd build

46
Linux From Scratch - Version 11.3-systemd

Préparez la compilation de GCC :


../configure \
--target=$LFS_TGT \
--prefix=$LFS/tools \
--with-glibc-version=2.37 \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--enable-default-pie \
--enable-default-ssp \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++

Voici la signification des options de configuration :


--with-glibc-version=2.37
Cette option spécifie la version de Glibc qui sera utilisée sur la cible. Ce n'est pas lié à la libc de la distribution
hôte parce que tout ce qui est compilé par GCC passe 1 sera lancé dans l'environnement chroot, qui est isolé
de la libc de la distribution hôte.
--with-newlib
Vu qu'aucune bibliothèque C fonctionnelle n'est encore disponible, ceci garantit que la constante inhibit_libc
soit définie lors de la construction de libgcc. Cela empêche la compilation d'un code exigeant la prise en charge
de la libc.
--without-headers
Lors de la compilation d'un compilateur croisé complet, GCC exige des en-têtes standards compatibles avec
le système cible. Pour nos objectifs, ces en-têtes ne seront pas nécessaires. Ce paramètre empêche GCC de
les chercher.
--enable-default-pie et --enable-default-ssp
Ces paramètres permettent à GCC de compiler des programmes avec des fonctionnalités de durcissement (plus
d'information dans remarque sur PIE et SSP au chapitre 8) par défaut. Elles ne sont pas vraiment requises à ce
niveau, puisque le compilateur ne sera utilisé que pour produire les exécutables temporaires. Mais il est plus
propre d'avoir des paquets temporaires aussi proches que possible des paquets finals.
--disable-shared
Ce paramètre oblige GCC à lier ses bibliothèques internes de manière statique. On procède ainsi parce que les
bibliothèques partagées requièrent Glibc, qui n'est pas encore installé sur le système cible.
--disable-multilib
Sur du x86_64, LFS ne prend pas en charge une configuration multilib. Ce paramètre n'a pas d'importance
pour x86.
--disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp,
--disable-libvtv, --disable-libstdcxx
Ces paramètres désactivent la prise en charge de threading, libatomic, libgomp, libquadmath, libssp, libvtv et
de la bibliothèque standard C++. La compilation de ces fonctions peut échouer lors de la construction d'un
compilateur croisé et celles-ci sont inutiles pour la compilation croisée de la libc temporaire.
--enable-languages=c,c++
Cette option nous assure que seuls les compilateurs C et C++ seront construits. Ce sont les seuls langages
actuellement nécessaires.

47
Linux From Scratch - Version 11.3-systemd

Compilez GCC en lançant :


make

Installez le paquet :
make install

Cette construction de GCC a installé quelques en-têtes internes au système. Normalement l'un d'entre eux, limits.h,
inclurait à son tour l'en-tête limits.h du système, dans ce cas $LFS/usr/include/limits.h. Cependant, au moment de
cette construction de GCC, $LFS/usr/include/limits.h n'existe pas, donc l'en-tête interne qui vient d'être construit
est un fichier partiel, auto-contenu et n'inclus pas les fonctionnalités étendues de l'en-tête système. Cela est suffisant
pour construire Glibc, mais l'en-tête interne complet sera requis plus tard. Créez une version complète de l'en-tête
interne avec une commande identique à ce que le système de construction de GCC fait dans des circonstances
normales :

Note
La commande ci-dessous montre un exemple de substitutions de commande imbriquées de deux manières :
les backquotes et une construction $(). Elle pourrait être réécrite pour utiliser la même méthode pour les
deux substitutions, mais elles sont montrées de cette manière pour montrer comment elles peuvent être
mélangées. En général la méthode $() est préférable.

cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname \
$($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h

Les détails sur ce paquet sont disponibles dans Section 8.26.2, « Contenu de GCC. »

48
Linux From Scratch - Version 11.3-systemd

5.4. Linux-6.1.11 API Headers


Les en-têtes de l'API du noyau Linux (dans [Link]) expose les API du noyau à Glibc.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 1.5 Go

5.4.1. Installation de Linux API Headers


Le noyau linux a besoin de montrer une interface de programmation de l'application (Application Programming
Interface, API) à utiliser (Glibc dans LFS). Cela est possible en nettoyant certains fichiers d'en-tête C qui sont laissés
dans le paquet des sources du noyau Linux.
Assurez-vous qu'il n'y a pas de vieux fichiers embarqués dans le paquet :
make mrproper

Maintenant extrayez les en-têtes publics du noyau depuis les sources. La cible make recommandée
« headers_install » ne peut pas être utilisée car elle requiert rsync, qui n'est pas forcément disponible. On place les
en-têtes dans ./usr puis on les copie vers l'emplacement requis.
make headers
find usr/include -type f ! -name '*.h' -delete
cp -rv usr/include $LFS/usr

5.4.2. Contenu des en-têtes de l'API du noyau Linux


En-têtes installés: /usr/include/asm/*.h, /usr/include/asm-generic/*.h, /usr/include/drm/*.h, /usr/
include/linux/*.h, /usr/include/misc/*.h, /usr/include/mtd/*.h, /usr/include/rdma/
*.h, /usr/include/scsi/*.h, /usr/include/sound/*.h, /usr/include/video/*.h et /usr/
include/xen/*.h
Répertoires installés: /usr/include/asm, /usr/include/asm-generic, /usr/include/drm, /usr/include/linux, /
usr/include/misc, /usr/include/mtd, /usr/include/rdma, /usr/include/scsi, /usr/include/
sound, /usr/include/video et /usr/include/xen

Descriptions courtes
/usr/include/asm/*.h Les en-têtes ASM de l'API de Linux
/usr/include/asm-generic/*.h Les en-têtes ASM génériques de l'API de Linux
/usr/include/drm/*.h Les en-têtes DRM de l'API de Linux
/usr/include/linux/*.h Les en-têtes linux de l'API de Linux
/usr/include/misc/*.h Des en-têtes diverses de l'API de Linux
/usr/include/mtd/*.h Les en-têtes MTD de l'API de Linux
/usr/include/rdma/*.h Les en-têtes RDMA de l'API de Linux
/usr/include/scsi/*.h Les en-têtes SCSI de l'API de Linux
/usr/include/sound/*.h Les en-têtes son de l'API de Linux
/usr/include/video/*.h Les en-têtes vidéo de l'API de Linux
/usr/include/xen/*.h Les en-têtes Xen de l'API de Linux

49
Linux From Scratch - Version 11.3-systemd

5.5. Glibc-2.37
Le paquet Glibc contient la bibliothèque du C principale. Cette bibliothèque fournit toutes les routines basiques pour
allouer de la mémoire, chercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes,
faire correspondre des modèles, faire des calculs et ainsi de suite.
Temps de construction 1.5 SBU
approximatif:
Espace disque requis: 822 Mo

5.5.1. Installation de Glibc


Tout d'abord, créez un lien symbolique pour respecter le LSB. De plus, pour x86_64, créez un lien symbolique de
compatibilité requis pour le bon fonctionnement du chargeur de bibliothèques dynamiques :
case $(uname -m) in
i?86) ln -sfv [Link].2 $LFS/lib/[Link].3
;;
x86_64) ln -sfv ../lib/[Link].2 $LFS/lib64
ln -sfv ../lib/[Link].2 $LFS/lib64/[Link].3
;;
esac

Note
La commande ci-dessus est correcte. La commande ln a plusieurs versions syntaxiques, donc assurez-
vous de vérifier info coreutils ln et ln(1) avant de signaler ce que vous pensez être une erreur.

Certains programmes de Glibc utilisent le répertoire /var/db qui ne respecte pas le FHS pour stocker leurs données
d'exécution. Appliquez le correctif suivant pour que ces programmes stockent leurs données d'exécution aux
emplacements indiqués par le FHS :
patch -Np1 -i ../[Link]

La documentation de Glibc recommande de construire Glibc dans un répertoire dédié :


mkdir -v build
cd build

Assurez-vous que les utilitaires ldconfig et sln sont installés dans /usr/sbin :
echo "rootsbindir=/usr/sbin" > configparms

Ensuite, préparez la compilation de Glibc :


../configure \
--prefix=/usr \
--host=$LFS_TGT \
--build=$(../scripts/[Link]) \
--enable-kernel=3.2 \
--with-headers=$LFS/usr/include \
libc_cv_slibdir=/usr/lib

Voici la signification des options de configuration :


--host=$LFS_TGT, --build=$(../scripts/[Link])
L'effet combiné de ces commutateurs est que le système de construction de Glibc se configure pour se compiler
de manière croisée en utilisant l'éditeur de liens croisé et le compilateur croisé dans $LFS/tools.
--enable-kernel=3.2
Ceci indique à Glibc de compiler la bibliothèque en prenant en charge les noyaux 3.2 et les noyaux Linux
ultérieurs. Les contournements pour des noyaux plus anciens ne sont pas activés.

50
Linux From Scratch - Version 11.3-systemd

--with-headers=$LFS/usr/include
jCeci dit à Glibc de se compiler contre les en-têtes récemment installés dans le répertoire $LFS/usr/include,
afin qu'il connaisse exactement les fonctionnalités du noyau et puisse s'optimiser en conséquence.
libc_cv_slibdir=/usr/lib
Cette option s'assure que la bibliothèque est installée dans /usr/lib au lieu du répertoire /lib64 par défaut sur
les machines 64 bits.

Lors de cette étape, le message d'avertissement suivant peut apparaître :


configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Le programme msgfmt, manquant ou incompatible, ne pose généralement pas de problème. Ce programme msgfmt
fait partie du paquet Gettext que la distribution hôte devrait fournir.

Note
Il a été rapporté que ce paquet pouvait ne pas fonctionner en construisant avec un « make parallèle ». Si
cela arrive, relancez la commande make avec l'option « -j1 ».

Compilez le paquet :
make

Installez le paquet :

Avertissement
Si LFS n'est pas correctement configurée, et si malgré les recommandations vous construisez en root, la
commande suivante installera la Glibc nouvellement construite sur votre système hôte, ce qui le rendra
presque sûrement inutilisable. Alors assurez-vous que l'environnement est correctement initialisé et que
vous n'êtes pas root avant de lancer la commande suivante.

make DESTDIR=$LFS install

Voici la signification de l'option de make install ::

DESTDIR=$LFS
La variable make DESTDIR est utilisée par presque tous les paquets pour définir l'emplacement où le paquet sera
installé. Si elle n'est pas configurée, elle renvoie par défaut à la racine (/). Ici, nous spécifions que le paquet
doit être installé dans $LFS, qui deviendra la racine après le Section 7.4, « Entrer dans l'environnement chroot ».

Corrigez un chemin codé en dur vers le chargeur d'exécutable dans le script ldd :
sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd

51
Linux From Scratch - Version 11.3-systemd

Attention
À ce stade, il est impératif de vous arrêter et de vous assurer que les fonctions de base (compilation
et édition des liens) du nouvel ensemble d'outils fonctionnent comme prévu. Pour effectuer un test de
propreté, lancez les commandes suivantes :
echo 'int main(){}' | gcc -xc -
readelf -l [Link] | grep ld-linux

Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande
aura cette forme :
[Requesting program interpreter: /lib64/[Link].2]

Notez que pour les machines 32 bits, le nom de l'interpréteur sera /lib/[Link].2.
Si l'affichage diffère ou s'il n'y a aucun affichage, alors quelque chose ne fonctionne pas. Examinez et
reconstituez vos étapes pour trouver d'où vient le problème et comment le corriger. Ce problème doit être
corrigé avant de continuer.
Une fois que tout va bien, nettoyez le fichier de test :
rm -v [Link]

Note
La construction des paquets dans le prochain chapitre servira de test supplémentaire pour vérifier que
l'ensemble d'outils a été construit correctement. Si la construction de certains paquets échoue, en particulier
Binutils-pass2 ou GCC-pass2, c'est une indication que quelque chose s’est mal passé dans les installations
précédentes de Binutils, GCC, ou Glibc.

Maintenant que notre chaîne d'outils croisée est complète, finalisez l'installation de l'en-tête limits.h. Pour cela,
lancez un utilitaire fournit par les développeurs de GCC :
$LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders

Les détails sur ce paquet sont disponibles dans Section 8.5.3, « Contenu de Glibc. »

52
Linux From Scratch - Version 11.3-systemd

5.6. Libstdc++ de GCC-12.2.0


Libstdc++ est la bibliothèque standard du C++. Elle est requise pour compiler du code C++ (une partie de GCC est
écrit en C++) mais nous avons dû retarder son installation lorsqu'on a construit gcc-pass1, car elle dépend de Glibc,
qui n'était pas encore disponible dans le répertoire cible.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 1.1 Go

5.6.1. Installation de Libstdc++ Cible


Note
Libstdc++ fait partie des sources de GCC. Vous devriez d'abord déballer l'archive tar de GCC et vous
rendre dans le répertoire gcc-12.2.0.

Créez un répertoire de construction séparé pour Libstdc++ et rentrez-y :


mkdir -v build
cd build

Préparez la compilation de Libstdc++ :


../libstdc++-v3/configure \
--host=$LFS_TGT \
--build=$(../[Link]) \
--prefix=/usr \
--disable-multilib \
--disable-nls \
--disable-libstdcxx-pch \
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/12.2.0

Voici la signification des options de configuration :


--host=...
Indique d'utiliser le compilateur croisé que nous venons tout juste de construire à la place de celui de /usr/bin.
--disable-libstdcxx-pch
Ce paramètre empêche l'installation des fichiers inclus pré-compilés, qui ne sont pas nécessaires pour l'instant.
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/12.2.0
Cela spécifie le répertoire d'installation des fichiers d'en-tête. Comme Libstdc++ est la bibliothèque standard
du C++ dans LFS, ce répertoire doit correspondre à l'emplacement où le compilateur C++ ($LFS_TGT-
g++) cherche les fichiers d'en-tête C++ standards. Dans une construction standard, cette information est
automatiquement passée aux options configure de Libstdc++ à partir du répertoire de plus haut niveau. Dans
notre cas, cette information doit être passée explicitement. Le compilateur C++ ajoutera le chemin sysroot $LFS
(spécifié à la construction de GCC passe 1) au début du chemin de recherche des en-têtes, pour qu'il recherche
effectivement dans $LFS/tools/$LFS_TGT/include/c++/12.2.0. La combinaison de la variable DESTDIR (dans
la commande make install ci-dessous) et ce paramètre s'assure d'installer les en-têtes à cet emplacement.
Compilez Libstdc++ en exécutant :
make

Installez la bibliothèque :
make DESTDIR=$LFS install

Supprimez les fichiers d'archive libtool car ils sont dangereux pour la compilation croisée :
rm -v $LFS/usr/lib/lib{stdc++,stdc++fs,supc++}.la

53
Linux From Scratch - Version 11.3-systemd

Les détails sur ce paquet sont disponibles dans Section 8.26.2, « Contenu de GCC. »

54
Linux From Scratch - Version 11.3-systemd

Chapitre 6. Compilation croisée des outils temporaires


6.1. Introduction
Ce chapitre montre comme compiler les utilitaires de base de manière croisée en utilisant la chaîne d'outils croisée
qui vient d'être construite. Ces utilitaires sont installés à leur emplacement final, mais ne peuvent pas encore être
utilisés. Les tâches de base utilisent toujours les outils de l'hôte. Cependant, les bibliothèques installées sont utilisées
à l'édition des liens.
Il sera possible d'utiliser les utilitaires au prochain chapitre après être entré dans l'environnement « chroot ». Mais
tous les paquets construits dans le chapitre actuel devront être construits avant de faire cela. Donc, nous ne pouvons
pas encore être indépendants du système hôte.
Encore une fois, rappelons qu'une valeur incorrecte de LFS et la construction en tant que root peuvent rendre votre
ordinateur inutilisable. Ce chapitre doit être entièrement effectué en tant qu'utilisateur lfs, avec l'environnement
décrit dans Section 4.4, « Configurer l'environnement ».

55
Linux From Scratch - Version 11.3-systemd

6.2. M4-1.4.19
Le paquet M4 contient un processeur de macros.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 31 Mo

6.2.1. Installation de M4
Préparez la compilation de M4 :
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/[Link])

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.12.2, « Contenu de M4. »

56
Linux From Scratch - Version 11.3-systemd

6.3. Ncurses-6.4
Le paquet Ncurses contient les bibliothèques pour gérer les écrans type caractère indépendamment des terminaux.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 51 Mo

6.3.1. Installation de Ncurses


Tout d'abord, assurez-vous que gawk est trouvé pendant la configuration :
sed -i s/mawk// configure

Ensuite, lancez les commandes suivantes pour construire le programme « tic » sur l'hôte :
mkdir build
pushd build
../configure
make -C include
make -C progs tic
popd

Préparez la compilation de Ncurses :


./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(./[Link]) \
--mandir=/usr/share/man \
--with-manpage-format=normal \
--with-shared \
--without-normal \
--with-cxx-shared \
--without-debug \
--without-ada \
--disable-stripping \
--enable-widec

Voici la signification des nouvelles options de configure :


--with-manpage-format=normal
Cela évite que Ncurses n'installe les pages de manuel compressées, ce qui peut arriver si la distribution hôte
elle-même a des pages de manuel compressées.
--with-shared
Cela fait construire et installer les bibliothèques C partagées de Ncurses.
--without-normal
Ce drapeau empêche Ncurses de construire et d'installer les bibliothèques C statiques.
--without-debug
Ce drapeau empêche Ncruses de construire et d'installer les bibliothèques de débogage.
--with-cxx-shared
Cela fait construire et installer les liaisons C++ partagées de Ncurses. Cela l'empêche de construire et d'installer
les liaisons C++ statiques.
--without-ada
Cela s'assure que Ncurses ne construise pas la prise en charge du compilateur Ada qui peut être présent sur
l'hôte mais qui ne sera pas disponible une fois dans l'environnement chroot.
--disable-stripping
Ce paramètre évite que le système de construction n'utilise le le programme strip de l'hôte. L'utilisation des
outils hôtes sur les programmes compilés de manière croisée peut causer des échecs.

57
Linux From Scratch - Version 11.3-systemd

--enable-widec
Cette option amène les bibliothèques « wide-character » (comme [Link].6.4) à être compilée au
lieu de celles normales (comme [Link].6.4). Ces bibliothèques « wide-character » sont utilisables
à la fois en locales multibyte et 8-bit traditionnelles, alors que les bibliothèques normales ne fonctionnent
correctement que dans les locales 8-bit. Les bibliothèques « Wide-character » et normales sont compatibles
entre leurs sources mais pas entre leurs binaires.
Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
echo "INPUT(-lncursesw)" > $LFS/usr/lib/[Link]

Voici la signification des options d'installation :


TIC_PATH=$(pwd)/build/progs/tic
Nous devons passer le chemin du tic tout juste construit qui peut être lancé sur la machine de construction,
pour pouvoir créer la base de données de terminaux sans erreur.
echo "INPUT(-lncursesw)" > $LFS/usr/lib/[Link]
La bibliothèque [Link] est requise par quelques paquets que nous allons bientôt construire. Nous créons
ce petit script de liaison, comme cela est fait dans Chapitre 8.
Les détails sur ce paquet sont disponibles dans Section 8.28.2, « Contenu de Ncurses. »

58
Linux From Scratch - Version 11.3-systemd

6.4. Bash-5.2.15
Le paquet Bash contient le Bourne-Again Shell.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 67 Mo

6.4.1. Installation de Bash


Préparez la compilation de Bash :
./configure --prefix=/usr \
--build=$(sh support/[Link]) \
--host=$LFS_TGT \
--without-bash-malloc

Voici la signification des options de configure :


--without-bash-malloc
Désactive l'utilisation de l'implémentation de Bash de la fonction d'allocation mémoire malloc, qui est connue
pour causer des erreurs de segmentation. En désactivant cette option, Bash utilisera les fonctions malloc de
Glibc, qui sont plus stables.
Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Créez un lien pour les programmes qui utilisent sh comme shell :


ln -sv bash $LFS/bin/sh

Les détails sur ce paquet sont disponibles dans Section 8.34.2, « Contenu de Bash. »

59
Linux From Scratch - Version 11.3-systemd

6.5. Coreutils-9.1
Le paquet Coreutils contient les utilitaires de base requis dans tous les systèmes d'exploitation.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 162 Mo

6.5.1. Installation de Coreutils


Préparez la compilation de Coreutils :
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/[Link]) \
--enable-install-program=hostname \
--enable-no-install-program=kill,uptime

Voici la signification des options de configuration :


--enable-install-program=hostname
Ceci fait que le binaire hostname sera compilé et installé – ceci est désactivé par défaut mais est requis par
la suite de tests de Perl.
Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Déplacez les programmes à leurs emplacements définitifs. Bien que ce ne soit pas nécessaire dans cet environnement
temporaire, nous devons le faire parce que certains programmes codent la position des exécutables en dur :
mv -v $LFS/usr/bin/chroot $LFS/usr/sbin
mkdir -pv $LFS/usr/share/man/man8
mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8
sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8

Les détails sur ce paquet sont disponibles dans Section 8.54.2, « Contenu de Coreutils. »

60
Linux From Scratch - Version 11.3-systemd

6.6. Diffutils-3.9
Le paquet Diffutils contient des programmes qui affichent les différences entre fichiers ou répertoires.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 26 Mo

6.6.1. Installation de Diffutils


Préparez la compilation de Diffutils :
./configure --prefix=/usr --host=$LFS_TGT

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.56.2, « Contenu de Diffutils. »

61
Linux From Scratch - Version 11.3-systemd

6.7. File-5.44
Le paquet File contient un outil pour déterminer le type d'un ou plusieurs fichiers donnés.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 36 Mo

6.7.1. Installation de File


La commande file sur l'hôte de construction doit être à la même version que celle que nous construisons pour créer
le fichier de signature. Lancez les commandes suivantes pour créer une copie temporaire de la commande file :
mkdir build
pushd build
../configure --disable-bzlib \
--disable-libseccomp \
--disable-xzlib \
--disable-zlib
make
popd

Voici la signification des nouvelles options de configure :


--disable-*
Le script de configuration essaye d'utiliser certains paquets de la distribution hôte si les fichiers de bibliothèques
correspondantes existent. Cela peut causer un échec à la construction si un fichier de bibliothèque existe, mais
pas les fichiers d'en-têtes correspondants. Ces options évitent d'utiliser ces fonctionnalités inutiles de l'hôte.
Préparez la compilation de File :
./configure --prefix=/usr --host=$LFS_TGT --build=$(./[Link])

Compilez le paquet :
make FILE_COMPILE=$(pwd)/build/src/file

Installez le paquet :
make DESTDIR=$LFS install

Supprimez le fichier d'archive libtool car il est dangereux pour la compilation croisée :
rm -v $LFS/usr/lib/[Link]

Les détails sur ce paquet sont disponibles dans Section 8.10.2, « Contenu de File. »

62
Linux From Scratch - Version 11.3-systemd

6.8. Findutils-4.9.0
Le paquet Findutils contient des programmes de recherche de fichiers. Ces programmes sont fournis pour parcourir
tous les fichiers dans une hiérarchie de répertoires et pour créer, maintenir et parcourir une base de données (souvent
plus rapide que la recherche récursive mais moins fiable si la base de données n'a pas été mise à jour récemment).
Findutils fournit également le programme xargs, qui peut être utilisé pour exécuter une commande spécifique sur
chaque fichier sélectionné par la recherche.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 42 Mo

6.8.1. Installation de Findutils


Préparez la compilation de Findutils :
./configure --prefix=/usr \
--localstatedir=/var/lib/locate \
--host=$LFS_TGT \
--build=$(build-aux/[Link])

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.58.2, « Contenu de Findutils. »

63
Linux From Scratch - Version 11.3-systemd

6.9. Gawk-5.2.1
Le paquet Gawk contient des programmes de manipulation de fichiers texte.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 47 Mo

6.9.1. Installation de Gawk


Tout d'abord, assurez-vous que certains fichiers inutiles ne sont pas installés :
sed -i 's/extras//' [Link]

Préparez la compilation de Gawk :


./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/[Link])

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.57.2, « Contenu de Gawk. »

64
Linux From Scratch - Version 11.3-systemd

6.10. Grep-3.8
Le paquet Grep contient des programmes de recherche du contenu de fichiers.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 25 Mo

6.10.1. Installation de Grep


Préparez la compilation de Grep :
./configure --prefix=/usr \
--host=$LFS_TGT

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.33.2, « Contenu de Grep. »

65
Linux From Scratch - Version 11.3-systemd

6.11. Gzip-1.12
Le paquet Gzip contient des programmes de compression et décompression de fichiers.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 11 Mo

6.11.1. Installation de Gzip


Préparez la compilation de Gzip :
./configure --prefix=/usr --host=$LFS_TGT

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.61.2, « Contenu de Gzip. »

66
Linux From Scratch - Version 11.3-systemd

6.12. Make-4.4
Le paquet Make contient un programme pour contrôler la génération d'exécutables et d'autres fichiers non-sources
d'un paquet à partir des fichiers sources.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 15 Mo

6.12.1. Installation de Make


Tout d'abord, corrigez un problème identifié en amont :
sed -e '/ifdef SIGPIPE/,+2 d' \
-e '/undef FATAL_SIG/i FATAL_SIG (SIGPIPE);' \
-i src/main.c

Préparez la compilation de Make :


./configure --prefix=/usr \
--without-guile \
--host=$LFS_TGT \
--build=$(build-aux/[Link])

Voici la signification des nouvelles options de configure :


--without-guile
Bien que nous compilions de manière croisée, configure essaye d'utiliser le guile de l'hôte s'il le trouve. Cela
fait échouer la compilation, donc ce paramètre évite de l'utiliser.
Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.65.2, « Contenu de Make. »

67
Linux From Scratch - Version 11.3-systemd

6.13. Patch-2.7.6
Le paquet Patch contient un programme permettant de modifier et de créer des fichiers en appliquant un fichier
correctif (appelé habituellement « patch ») généralement créé par le programme diff.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 12 Mo

6.13.1. Installation de Patch


Préparez la compilation de Patch :
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/[Link])

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.66.2, « Contenu de Patch. »

68
Linux From Scratch - Version 11.3-systemd

6.14. Sed-4.9
Le paquet Sed contient un éditeur de flux.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 19 Mo

6.14.1. Installation de Sed


Préparez la compilation de Sed :
./configure --prefix=/usr \
--host=$LFS_TGT

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.29.2, « Contenu de Sed. »

69
Linux From Scratch - Version 11.3-systemd

6.15. Tar-1.34
Le paquet Tar fournit la possibilité de créer des archives tar et effectuer diverses manipulations d'archives. Tar peut
être utilisé sur des archives précédemment créées pour extraire des fichiers, ajouter des fichiers supplémentaires,
mettre à jour ou lister les fichiers qui étaient déjà stockés.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 38 Mo

6.15.1. Installation de Tar


Préparez la compilation de Tar :
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/[Link])

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Les détails sur ce paquet sont disponibles dans Section 8.67.2, « Contenu de Tar. »

70
Linux From Scratch - Version 11.3-systemd

6.16. Xz-5.4.1
Le paquet Xz contient des programmes de compression et de décompression de fichiers. Il offre les possibilités des
formats lzma et des formats de compression récents. La compression de fichiers textes avec xz donne un meilleur
pourcentage de compression qu'avec les commandes gzip ou bzip2 traditionnelles.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 20 Mo

6.16.1. Installation de Xz
Préparez la compilation de Xz :
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/[Link]) \
--disable-static \
--docdir=/usr/share/doc/xz-5.4.1

Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Supprimez le fichier d'archive libtool car il est dangereux pour la compilation croisée :
rm -v $LFS/usr/lib/[Link]

Les détails sur ce paquet sont disponibles dans Section 8.8.2, « Contenu de Xz. »

71
Linux From Scratch - Version 11.3-systemd

6.17. Binutils-2.40 — Passe 2


Le paquet Binutils contient un éditeur de liens, un assembleur et d'autres outils permettant de gérer des fichiers objet.
Temps de construction 0.4 SBU
approximatif:
Espace disque requis: 525 Mo

6.17.1. Installation de Binutils


Binutils contient une copie obsolète de libtool dans l'archive. Elle ne prend pas en charge sysroot, donc les binaires
produits seront liés aux bibliothèques de l'hôte par erreur. Contournez ce problème :
sed '6009s/$add_dir//' -i [Link]

Créez de nouveau un répertoire de construction séparé :


mkdir -v build
cd build

Préparez la compilaton de Binutils :


../configure \
--prefix=/usr \
--build=$(../[Link]) \
--host=$LFS_TGT \
--disable-nls \
--enable-shared \
--enable-gprofng=no \
--disable-werror \
--enable-64-bit-bfd

Voici la signification des nouvelles options de configure :


--enable-shared
Construit libbfd en tant que bibliothèque partagée.
--enable-64-bit-bfd
Active la prise en charge du 64 bits (sur les hôtes avec des tailles de mots plus petites). Cela n'est peut-être pas
nécessaire sur les systèmes 64 bits, mais ça ne fait pas de mal.
Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Supprimez les fichiers d'archive libtool car ils sont dangereux pour la compilation croisée et supprimez des
bibliothèques statiques inutiles :
rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.{a,la}

Les détails sur ce paquet sont disponibles dans Section 8.18.2, « Contenu de Binutils. »

72
Linux From Scratch - Version 11.3-systemd

6.18. GCC-12.2.0 — Passe 2


Le paquet GCC contient la collection de compilateurs GNU, laquelle contient les compilateurs C et C++.
Temps de construction 4.6 SBU
approximatif:
Espace disque requis: 4.7 Go

6.18.1. Installation de GCC


Comme pour la première construction de GCC, les paquets GMP, MPFR et MPC sont requis. Déballez les archives
et déplacez-les dans les répertoires avec le nom requis :
tar -xf ../[Link]
mv -v mpfr-4.2.0 mpfr
tar -xf ../[Link]
mv -v gmp-6.2.1 gmp
tar -xf ../[Link]
mv -v mpc-1.3.1 mpc

Si vous construisez sur x86_64, changez le nom de répertoire par défaut pour les bibliothèques 64 bits en « lib » :
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' -[Link] gcc/config/i386/t-linux64
;;
esac

Remplacez la règle de construction des en-têtes de libgcc et libstdc++, pour permettre la construction de ces
bibliothèques avec la prise en charge des threads POSIX :
sed '/thread_header =/s/@.*@/gthr-posix.h/' \
-i libgcc/[Link] libstdc++-v3/include/[Link]

Créez de nouveau un répertoire de construction séparé :


mkdir -v build
cd build

Avant de commencer la construction de GCC, rappelez-vous d'effacer (avec unset) toute variable d'environnement
surchargeant les options d'optimisation par défaut.
Maintenant, préparez la compilation de GCC :
../configure \
--build=$(../[Link]) \
--host=$LFS_TGT \
--target=$LFS_TGT \
LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
--prefix=/usr \
--with-build-sysroot=$LFS \
--enable-default-pie \
--enable-default-ssp \
--disable-nls \
--disable-multilib \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--enable-languages=c,c++

Voici la signification des nouvelles options de configure :


--with-build-sysroot=$LFS
Normalement, utiliser --host s'assure qu'un compilateur croisé est utilisé pour construire GCC, et ce
compilateur sait qu'il doit chercher les en-têtes et les bibliothèques dans $LFS. Mais le système de construction

73
Linux From Scratch - Version 11.3-systemd

de GCC utilise d'autres outils qui ne connaissent pas cet emplacement. Ce paramètre est requis pour qu'ils
trouvent les fichiers requis dans $LFS et non sur l'hôte.
--target=$LFS_TGT
Comme nous effectuons une compilation croisée de GCC, il n'est pas possible de construire les bibliothèques de
la cible (libgcc et libstdc++) avec les binaires GCC précédemment compilés : ces binaires ne fonctionneront
pas sur l'hôte. Le système de construction de GCC essayera d'utiliser les compilateurs C et C++ de l'hôte pour
contourner cela par défaut. La construction des bibliothèques GCC de la cible avec une version différente de
GCC n'est pas prise en charge, donc utiliser les compilateurs de l'hôte peut causer des échecs de construction.
Ce paramètre s'assure de construire les bibliothèques avec GCC passe 1.
LDFLAGS_FOR_TARGET=...
Permet à libstdc++ d'utliiser la bibliothèque partagée libgcc en cours de construction dans cette passe, au
lieu de la version statique construite avec GCC passe 1. C'est requis pour la prise en charge de la gestion des
exceptions C++.
Compilez le paquet :
make

Installez le paquet :
make DESTDIR=$LFS install

Comme touche finale, créez un lien symbolique utilitaire. De nombreux programmes et scripts lancent cc au lieu
de gcc, pour que les programmes restent génériques et donc utilisables sur n'importe quel type de système UNIX
où le compilateur C de GNU n'est pas toujours installé. Lancer cc laisse l'administrateur système libre de décider
quel compilateur C installer :
ln -sv gcc $LFS/usr/bin/cc

Les détails sur ce paquet sont disponibles dans Section 8.26.2, « Contenu de GCC. »

74
Linux From Scratch - Version 11.3-systemd

Chapitre 7. Entrée dans le chroot et construction des


outils temporaires supplémentaires
7.1. Introduction
Ce chapitre indique comment construire les derniers éléments manquants du système temporaire, c’est-à-dire les
outils requis pour construire les différents paquets. Maintenant que toutes les dépendances circulaires ont été
résolues, nous pouvons utiliser un environnement « chroot » complètement isolé du système d'exploitation hôte (à
l’exception du noyau en cours d’exécution) pour la construction.
Pour faire fonctionner correctement l'environnement isolé, il faut établir la communication avec le noyau à travers
ce qu’on appelle les Virtual Kernel File Systems. Ceux-ci seront montés avant d’entrer dans l'environnement chroot.
Pour vérifier qu'ils sont bien montés, exécutez la commande findmnt.
Jusqu'à la Section 7.4, « Entrer dans l'environnement chroot », les commandes doivent être exécutées en tant
qu’utilisateur root avec la variable d'environnement LFS. Une fois entrées dans le chroot, toutes les commandes
sont exécutées en tant qu’utilisateur root, heureusement sans avoir accès à l'OS de l'ordinateur sur lequel vous
construisez LFS. Restez prudent malgré tout, car il est facile d’altérer l’entièreté du système LFS en exécutant de
mauvaises commandes.

7.2. Changement du propriétaire


Note
Les commandes dans le reste de ce livre doivent être exécutées lorsque vous êtes connecté en tant
qu'utilisateur root et non en tant qu'utilisateur lfs. Revérifiez également que $LFS est paramétré dans
l'environnement de root.

actuelement, la hiérarchie complète des répertoires de $LFS appartient à l'utilisateur lfs, un utilisateur qui n'existe
que sur le système hôte. Si les répertoires et les fichiers dans $LFS sont conservés ainsi, ils appartiendront à un
ID utilisateur sans compte correspondant. C'est dangereux car un compte utilisateur créé plus tard pourrait se voir
attribuer ce même ID utilisateur et être propriétaire de tous les fichiers du répertoire $LFS, ce qui exposerait alors
ces fichiers à de possibles manipulations malveillantes.
Pour éviter ce problème, changez le propriétaire du répertoire $LFS pour l'attribuer à l'utilisateur root en exécutant
la commande suivante :
chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}
case $(uname -m) in
x86_64) chown -R root:root $LFS/lib64 ;;
esac

7.3. Préparer les systèmes de fichiers virtuels du noyau


Les applications qui tournent en espace utilisateur utilisent différents systèmes de fichiers créés par le noyau pour
communiquer avec le noyau lui-même. Ces systèmes de fichiers sont virtuels du fait qu'ils n’utilisent aucun espace
disque. Le contenu de ces systèmes de fichiers réside en mémoire. Ces systèmes de fichiers doivent être montés
dans l’arborescence de $LFS pour que les applications puissent les trouver dans l’environnement chroot.
Commencez par créer les répertoires dans lesquels les systèmes de fichiers seront montés :
mkdir -pv $LFS/{dev,proc,sys,run}

75
Linux From Scratch - Version 11.3-systemd

7.3.1. Monter et alimenter /dev


Lors d'un démarrage normal d'un système LFS, le noyau monte automatiquement le système de fichiers devtmpfs
dans le répertoire /dev et crée des nœuds de périphériques sur ce système de fichiers virtuel pendant le processus
de démarrage ou lorsqu’un périphérique est détecté ou qu'on tente d'y pour la première fois. Le démon udev
permet de modifier le propriétaire, de gérer les permissions des nœuds de périphériques créés par le noyau, d’en
créer de nouveaux ou de créer des liens symboliques afin de faciliter la tâche de maintenance de distribution ou
d'administration système (voir le Section [Link], « Création de nœuds de périphérique » pour plus de détails). Si le
noyau hôte prend en charge devtmpfs, il est possible de monter un devtmpfs sous $LFS/dev et ainsi laisser le noyau
le remplir.
Cependant, certains systèmes hôtes ne prennent pas en charge devtmpfs. Ces distributions hôtes utilisent plusieurs
méthodes pour créer le contenu de /dev. La seule manière de remplir $LFS/dev indépendamment de l'hôte consiste à
monter le répertoire /dev du système hôte avec l’option bind. Le montage avec --bind est un type spécial de montage
qui vous permet de créer le miroir d'un répertoire ou d'un point de montage à un autre endroit. Pour ce faire, exécutez
la commande suivante.
mount -v --bind /dev $LFS/dev

7.3.2. Monter les systèmes de fichiers virtuels du noyau


Montez maintenant les systèmes de fichiers virtuels du noyau restants :
mount -v --bind /dev/pts $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

Dans certains systèmes hôtes, /dev/shm est un lien symbolique vers /run/shm. Le tmpfs /run a été monté plus tôt,
donc, dans ce cas précis, vous aurez uniquement à créer un répertoire.
Sur d’autres systèmes hôtes, /dev/shm est un point de montage pour un tmpfs. Dans ce cas, le montage de /dev ci-
dessus créera le répertoire /dev/shm dans l'environnement chroot. En parallèle, il faudra alors créer explicitement
un tmpfs :
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
else
mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi

7.4. Entrer dans l'environnement chroot


Maintenant que tous les paquets requis pour construire le reste des outils nécessaires sont sur le système, il est
temps d'entrer dans l'environnement chroot pour finir l'installation des outils temporaires. Nous utiliserons aussi cet
environnement pour l'installation du système final. En tant que root, lancez la commande suivante pour entrer dans
cet environnement qui, pour le moment, contient seulement les outils temporaires :
chroot "$LFS" /usr/bin/env -i \
HOME=/root \
TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/usr/bin:/usr/sbin \
/bin/bash --login

L'option -i donnée à la commande env effacera toutes les variables de l'environnement chroot. Après cela, seules
les variables HOME, TERM, PS1 et PATH sont rétablis. La construction TERM=$TERM définit la variable TERM à l'intérieur
du chroot avec la même valeur qu'à l'extérieur du chroot. Cette variable est nécessaire pour que des programmes
comme vim et less fonctionnent correctement. Si vous avez besoin d'autres variables, telles que CFLAGS ou CXXFLAGS,
c'est le bon endroit pour les indiquer.

76
Linux From Scratch - Version 11.3-systemd

À partir de maintenant, il n'est plus nécessaire d'utiliser la variable LFS parce que tout le travail sera restreint au
système de fichiers LFS. La commande chroot exécute l'interpréteur de commande Bash avec le répertoire racine
(/) correspondant à $LFS.
Remarquez que /tools/bin n'est pas dans le PATH. Ceci signifie que la chaîne d'outils croisée ne sera plus utilisée.
Remarquez que l'invite bash affichera I have no name!. Ceci est normal car le fichier /etc/passwd n'a pas encore
été créé.

Note
Il est important que toutes les commandes au sein du reste de ce chapitre et des chapitres suivants soient
exécutées à l'intérieur de l'environnement chroot. Si vous devez quitter cet environnement pour une
quelconque raison (un redémarrage par exemple), assurez-vous que les systèmes de fichiers virtuels du
noyau sont montés comme expliqué dans Section 7.3.1, « Monter et alimenter /dev » et Section 7.3.2,
« Monter les systèmes de fichiers virtuels du noyau » et entrez de nouveau dans le chroot avant de continuer
l'installation.

7.5. Création des répertoires


Il est temps de créer la structure complète du système de fichiers LFS.

Note
Certains des répertoires suivants ont déjà été créés plus tôt avec des instructions explicites ou lors de
l'installation de certains paquets. Ils sont répétés ici par souci d'exhaustivité.

Créez quelques répertoires dans la racine qui ne font pas partie de l'ensemble limité requis dans les chapitres
précédents, à l'aide de la commande suivante :
mkdir -pv /{boot,home,mnt,opt,srv}

Créez l'ensemble de sous-répertoires requis sous la racine en exécutant les commandes suivantes :
mkdir -pv /etc/{opt,sysconfig}
mkdir -pv /lib/firmware
mkdir -pv /media/{floppy,cdrom}
mkdir -pv /usr/{,local/}{include,src}
mkdir -pv /usr/local/{bin,lib,sbin}
mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv /usr/{,local/}share/man/man{1..8}
mkdir -pv /var/{cache,local,log,mail,opt,spool}
mkdir -pv /var/lib/{color,misc,locate}

ln -sfv /run /var/run


ln -sfv /run/lock /var/lock

install -dv -m 0750 /root


install -dv -m 1777 /tmp /var/tmp

Par défaut, les répertoires sont créés avec le mode d'autorisation 755, ce qui n'est pas souhaitable pour tous les
répertoires. Dans la commande ci-dessus, deux modifications sont effectuées : une pour le répertoire principal de
root et une autre pour les répertoires des fichiers temporaires.

Le premier changement de mode garantit que n'importe qui ne pourra pas entrer dans le répertoire /root, de façon
identique à ce que ferait un utilisateur normal pour son répertoire principal. Le deuxième changement veille à ce
que tout utilisateur puisse écrire dans les répertoires /tmp et /var/tmp, mais ne puisse pas supprimer les fichiers des
autres utilisateurs. Cette dernière interdiction est due au « sticky bit », le bit (1) le plus haut dans le masque 1777.

77
Linux From Scratch - Version 11.3-systemd

7.5.1. Remarques à propos de la conformité FHS


L'arborescence des répertoires est basée sur le standard FHS (Filesystem Hierarchy Standard, standard de
hiérarchies de fichiers, disponible sur [Link] Le FHS mentionne aussi
l'existence de quelques répertoires comme /usr/local/games et /usr/share/games. Nous créons seulement les
répertoires nécessaires. Néanmoins, n'hésitez pas à créer ces répertoires.

Avertissement
La FHS ne dicte pas l'existence du répertoire /usr/lib64 et les éditeurs di LFS ont décidé de ne pas
l'utiliser. Pour que les instructions dans LFS et BLFS fonctionnent correctement, il est nécessaire que ce
répertoire n'existe pas. De temps en temps vous devriez vérifier qu'il n'existe pas, car il est facile de le
créer accidentellement et cela cassera probablement votre système.

7.6. Création des fichiers et des liens symboliques essentiels


Historiquement, Linux gardait une liste des systèmes de fichiers montés dans le fichier /etc/mtab. Les noyaux
modernes gèrent cette liste en interne et la proposent à l'utilisateur via le système de fichiers /proc. Afin de satisfaire
les outils qui s'attendent à la présence de /etc/mtab, créez le lien symbolique suivant :
ln -sv /proc/self/mounts /etc/mtab

Créez un fichier /etc/hosts de base qui sera mentionné dans certaines suites de tests, et par l'un des fichiers de
configuration de Perl :
cat > /etc/hosts << EOF
[Link] localhost $(hostname)
::1 localhost
EOF

Afin que l'utilisateur root puisse s'identifier et que le nom « root » soit reconnu, il doit y avoir des entrées cohérentes
dans les fichiers /etc/passwd et /etc/group.

Créez le fichier /etc/passwd en exécutant la commande suivante :


cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/false
daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/usr/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/usr/bin/false
systemd-network:x:76:76:systemd Network Management:/:/usr/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/usr/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false
systemd-coredump:x:79:79:systemd Core Dumper:/:/usr/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
systemd-oom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false
nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false
EOF

Le mot de passe réel pour root sera paramétré plus tard.

78
Linux From Scratch - Version 11.3-systemd

Créez le fichier /etc/group en exécutant la commande suivante :


cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
kvm:x:61:
systemd-journal-gateway:x:73:
systemd-journal-remote:x:74:
systemd-journal-upload:x:75:
systemd-network:x:76:
systemd-resolve:x:77:
systemd-timesync:x:78:
systemd-coredump:x:79:
uuidd:x:80:
systemd-oom:x:81:
wheel:x:97:
users:x:999:
nogroup:x:65534:
EOF

Les groupes créés ne font partie d'aucun standard, ce sont des groupes décidés d'un part en fonction des besoins de la
configuration de Udev dans le chapitre 9, et d'autre part par la convention usuelle d'un certain nombre de distributions
Linux existantes. En outre, certaines suites de tests s'appuient sur des groupes et des utilisateurs spécifiques. La
base Linux standard (Linux Standard Base ou LSB, disponible sur [Link]
ne recommande uniquement en plus de la présence d'un groupe root accompagné d'un ID de groupe (GID) de 0,
qu'un groupe bin soit accompagné d'un GID de 1. Le GID 5 est souvent utilisé pour le groupe tty et le numéro 5 est
aussi utilisé dans systemd pour le système de fichiers devpts. Tous les autres noms de groupe et GID peuvent être
librement choisis par l'administrateur du système puisque les programmes bien écrits ne dépendent pas des numéros
GID, mais utilisent plutôt le nom du groupe.

L'ID 65534 est utilisé par le noyau pour NFS et les espaces de noms séparés pour les utilisateurs et les groupes non
projetés (ils existent sur le serveur NFS ou dans l'espace de nom parent, mais « n'existent pas » sur la machine locale
ou dans l'espace de nom séparé). Nous assignons l'utilisateur nobody et le groupe nogroup pour éviter d'avoir un ID
sans nom. Mais d'autres distributions traitent cet ID différemment, donc les programmes portables ne devraient pas
dépendre de cette assignation.

Certains tests dans Chapitre 8 ont besoin d'un utilisateur normal. Nous ajoutons cet utilisateur ici et nous supprimons
ce compte à la fin de ce chapitre.
echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
echo "tester:x:101:" >> /etc/group
install -o tester -d /home/tester

79
Linux From Scratch - Version 11.3-systemd

Pour supprimer l'invite « I have no name! », démarrez un nouvel interpréteur de commandes. Puisque les fichiers /
etc/passwd et /etc/group ont été créés, la résolution du nom d'utilisateur et du nom de groupe fonctionnera à présent :

exec /usr/bin/bash --login

Les programmes login, agetty et init, entre autres, utilisent un certain nombre de fichiers journaux pour enregistrer
des informations qui permettent de savoir qui s'est connecté sur le système et quand. Cependant, ces programmes
n'écriront pas vers ces fichiers journaux s'ils n'existent pas déjà. Initialisez les fichiers journaux et donnez-leur les
droits nécessaires :
touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664 /var/log/lastlog
chmod -v 600 /var/log/btmp

Le fichier /var/log/wtmp enregistre toutes les connexions et les déconnexions. Le fichier /var/log/lastlog
enregistre le moment où chaque utilisateur s'est connecté pour la dernière fois. Le fichier /var/log/faillog
enregistre les échecs de connexion. Le fichier /var/log/btmp enregistre les mauvaises tentatives de connexion.

Note
Le fichier /run/utmp enregistre les utilisateurs qui sont actuellement connectés. Ce fichier est créé de
manière dynamique dans les scripts de démarrage.

80
Linux From Scratch - Version 11.3-systemd

7.7. Gettext-0.21.1
Le paquet Gettext contient des outils pour l'internationalisation et la localisation. Ceci permet aux programmes
d'être compilés avec la prise en charge des langues natives (Native Language Support ou NLS), pour afficher des
messages dans la langue native de l'utilisateur.
Temps de construction 1.0 SBU
approximatif:
Espace disque requis: 287 Mo

7.7.1. Installation de Gettext


Pour notre ensemble temporaire d'outils, nous avons besoin uniquement d'installer trois programmes de Gettext.
Préparez la compilation de Gettext :
./configure --disable-shared

Voici la signification de l'option de configuration :


--disable-shared
Nous n'avons pas besoin d'installer les bibliothèques partagées de Gettext pour l'instant, donc il n'y a pas besoin
de les construire.
Compilez le paquet :
make

Installez les programmes msgfmt, msgmerge et xgettext :


cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin

Les détails sur ce paquet sont disponibles dans Section 8.31.2, « Contenu de Gettext. »

81
Linux From Scratch - Version 11.3-systemd

7.8. Bison-3.8.2
Le paquet Bison contient un générateur d'analyseurs.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 57 Mo

7.8.1. Installation de Bison


Préparez la compilation de Bison :
./configure --prefix=/usr \
--docdir=/usr/share/doc/bison-3.8.2

Voici la signification des nouvelles options de configure :


--docdir=/usr/share/doc/bison-3.8.2
Cela dit au système de construction d'installer la documentation de bison dans un répertoire versionné.
Compilez le paquet :
make

Installez le paquet :
make install

Les détails sur ce paquet sont disponibles dans Section 8.32.2, « Contenu de Bison. »

82
Linux From Scratch - Version 11.3-systemd

7.9. Perl-5.36.0
Le paquet Perl contient le langage pratique d'extraction et de rapport (Practical Extraction and Report Language).
Temps de construction 0.6 SBU
approximatif:
Espace disque requis: 281 Mo

7.9.1. Installation de Perl


Préparez la compilation de Perl :
sh Configure -des \
-Dprefix=/usr \
-Dvendorprefix=/usr \
-Dprivlib=/usr/lib/perl5/5.36/core_perl \
-Darchlib=/usr/lib/perl5/5.36/core_perl \
-Dsitelib=/usr/lib/perl5/5.36/site_perl \
-Dsitearch=/usr/lib/perl5/5.36/site_perl \
-Dvendorlib=/usr/lib/perl5/5.36/vendor_perl \
-Dvendorarch=/usr/lib/perl5/5.36/vendor_perl

Voici la signification des nouvelles options de configure :


-des
C'est la combinaison de trois options : -d utilise les valeurs par défaut pour tous les éléments ; -e s'assure que
toutes les tâches sont effectuées ; -s rend silencieuses les sorties non importantes.
Compilez le paquet :
make

Installez le paquet :
make install

Les détails sur ce paquet sont disponibles dans Section 8.41.2, « Contenu de Perl. »

83
Linux From Scratch - Version 11.3-systemd

7.10. Python-3.11.2
Le paquet Python 3 contient l'environnement de développement Python. Il est utile pour la programmation orientée
objet, écrire des scripts, prototyper de plus grands programmes ou pour développer des applications complètes.
Temps de construction 0.4 SBU
approximatif:
Espace disque requis: 529 Mo

7.10.1. Installation de Python


Note
Il y a deux fichiers de paquet dont le nom commence par « python ». Celui à extraire est Python-3.11.2.
[Link] (attention à la majuscule sur la première lettre).

Préparez la compilation de Python :


./configure --prefix=/usr \
--enable-shared \
--without-ensurepip

Voici la signification de l'option de configuration :


--enable-shared
Ce paramètre évite l'installation des bibliothèques statiques.
--without-ensurepip
Ce paramètre désactive l'installateur de paquets Python, qui n'est pas requise pour le moment.
Compilez le paquet :
make

Note
Certains modules Python 3 ne peuvent pas être construits à cause de dépendances qui ne sont pas encore
installées. Le système de construction essaiera quand même de les construire, donc la compilation de
certains fichiers échouera et les messages du compilateur indiqueront « fatal error ». Vous devriez ignorer
ce message. Assurez-vous seulement que la commande make de plus haut niveau n'a pas échoué. Les
modules facultatifs ne sont pas encore requis et ils seront construits dans le Chapitre 8.

Installez le paquet :
make install

Les détails sur ce paquet sont disponibles dans Section 8.50.2, « Contenu de Python 3. »

84
Linux From Scratch - Version 11.3-systemd

7.11. Texinfo-7.0.2
Le paquet Texinfo contient des programmes de lecture, écriture et conversion des pages Info.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 116 Mo

7.11.1. Installation de Texinfo


Préparez la compilation de Texinfo :
./configure --prefix=/usr

Compilez le paquet :
make

Installez le paquet :
make install

Les détails sur ce paquet sont disponibles dans Section 8.68.2, « Contenu de Texinfo. »

85
Linux From Scratch - Version 11.3-systemd

7.12. Util-linux-2.38.1
le paquet Util-linux contient divers programmes utilitaires.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 150 Mo

7.12.1. Installation de Util-linux


Les FHS recommandent d'utiliser le répertoire /var/lib/hwclock au lieu du répertoire habituel /etc comme
emplacement du fichier adjtime. Créez ce répertoire avec :
mkdir -pv /var/lib/hwclock

Préparez la compilation de Util-linux :


./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
--libdir=/usr/lib \
--docdir=/usr/share/doc/util-linux-2.38.1 \
--disable-chfn-chsh \
--disable-login \
--disable-nologin \
--disable-su \
--disable-setpriv \
--disable-runuser \
--disable-pylibmount \
--disable-static \
--without-python \
runstatedir=/run

Voici la signification des options de configuration :


ADJTIME_PATH=/var/lib/hwclock/adjtime
Cela configure l'emplacement du fichier enregistrant les informations sur l'horloge matérielle en accord avec
la FHS. Cela n'est pas strictement requis pour cet outil temporaire, mais cela évite de créer un fichier ailleurs
qui ne sera pas remplacé ou supprimé en construisant le paquet util-linux final.
--libdir=/usr/lib
Ce paramètre s'assure que les liens symboliques .so ciblent le fichier de la bibliothèque partagée directement
dans le même répertoire (/usr/lib).
--disable-*
Ces paramètres évitent des avertissements à propos de la construction des composants qui requièrent des
paquets qui ne sont pas dans LFS ou pas encore installés.
--without-python
Ce paramètre désactive l'utilisation de Python. Cela évite de construire des liaisons inutiles.
runstatedir=/run
Ce paramètre indique l'emplacement du socket utilisé par uuidd et libuuid.
Compilez le paquet :
make

Installez le paquet :
make install

Les détails sur ce paquet sont disponibles dans Section 8.76.2, « Contenu d'Util-linux. »

86
Linux From Scratch - Version 11.3-systemd

7.13. Nettoyage et Sauvegarde du système temporaire


7.13.1. Nettoyage
Tout d'abord, supprimez la documentation actuellement installée pour éviter qu'elle ne se retrouve sur le système
final, et pour récupérer environ 35 Mo :
rm -rf /usr/share/{info,man,doc}/*

Ensuite, sur un système Linux moderne, les fichiers .la de libtool ne sont utiles que pour libltdl. Aucune bibliothèque
dans LFS ne sera chargée par libltdl, et certains fichiers .la sont connus pour causer des échecs à la construction de
certains paquets de BLFS. Supprimez maintenant ces fichiers :
find /usr/{lib,libexec} -name \*.la -delete

La taille du système est maintenant d'environ 3 Go, mais le répertoire /tools n'est plus requis. Il utilise environ 1 Go
d'espace disque. Supprimez-le maintenant :
rm -rf /tools

7.13.2. Sauvegarde
Maintenant, les programmes et bibliothèques essentiels ont été créés et votre système LFS actuel est en bon état.
Votre système peut maintenant être sauvegardé pour être réutilisé plus tard. Si vous rencontrez une erreur fatale
dans les chapitres suivants, il arrive souvent que tout supprimer et recommencer (avec plus de prudence) soit la
meilleure option. Malheureusement, tous les fichiers temporaires seront aussi supprimés. Pour éviter de passer du
temps en plus pour refaire quelque chose que vous avez déjà réussi, préparer une sauvegarde peut s'avérer utile.

Note
Toutes les étapes restantes dans cette section sont facultatives. Cependant, dès que vous commencez à
installer des paquets dans le Chapitre 8, les fichiers temporaires seront remplacés. Donc c'est peut-être
une bonne idée d'effectuer une sauvegarde du système actuel, comme on le décrit plus bas.

Les étapes suivantes sont à effectuer en dehors de l'environnement chroot. Cela signifie que vous devez d'abord
quitter l'environnement chroot avant de continuer. La raison est est qu'il faut pouvoir accéder à des emplacement du
système de fichiers en dehors de l'environnement chroot pour stocker et lire l'archive de sauvegarde, qui ne devrait
pas se trouver dans la hiérarchie $LFS.
Si vous avez décidé d'effectuer une sauvegarde, quittez l'environnement chroot :
exit

Important
Toutes les instructions suivantes sont exécutées en root sur votre système hôte. Faites particulièrement
attention aux commandes que vous allez exécuter car toute erreur ici peut modifier votre système hôte.
Soyez conscient que la variable d'environnement LFS a une valeur pour l'utilisateur lfs par défaut, mais
peut ne pas exister pour root.
Quand les commandes doivent être exécutées par root, assurez-vous d'avoir la variable LFS.
On en a déjà parlé dans le Section 2.6, « Définition de la variable $LFS ».

Avant de faire la sauvegarde, démontez les systèmes de fichiers virtuels :


mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
umount $LFS/dev/pts
umount $LFS/{sys,proc,run,dev}

87
Linux From Scratch - Version 11.3-systemd

Assurez-vous d'avoir au moins 1 Go d'espace disque libre (les archives des sources seront incluses dans l'archive
de sauvegarde) sur le système de fichier contenant le répertoire dans lequel vous créez la sauvegarde.
Remarquez que les instructions ci-dessous spécifient le répertoire personnel de l'utilisateur root sur le système hôte,
qui se trouve généralement sur le système de fichiers racine. Remplacez $HOME par un répertoire de votre choix si
vous ne voulez pas stocker la sauvegarde dans le répertoire personnel de root.
Créez l'archive de sauvegarde en exécutant la commande suivante :

Note
Comme l'archive de sauvegarde est compressée, elle prend un temps relativement long (plus de 10
minutes) même sur un système raisonnablement rapide.

cd $LFS
tar -cJpf $HOME/[Link] .

Note
Si vous continuez au chapitre 8, n'oubliez pas d'entrer de nouveau dans l'environnement chroot comme
expliqué dans l'encadré « important » plus bas.

7.13.3. Restauration du système


Dans le cas où vous auriez fait des erreurs et que vous deviez recommencer du début, vous pouvez utiliser cette
sauvegarde pour réinitialiser le système et gagner du temps. Comme les sources se trouvent dans $LFS, elles sont
incluses dans l'archive de sauvegarde, donc vous n'aurez pas besoin de les télécharger de nouveau. Après avoir vérifié
que $LFS est définie correctement, vous pouvez restaurer la sauvegarde en exécutant les commandes suivantes :

Avertissement
Les commandes suivantes sont extrêmement dangereuses. Si vous lancez rm -rf ./* en tant que root et
que vous ne vous êtes pas déplacés dans le répertoire $LFS ou que la variable d'environnement LFS n'est
pas définie pour l'utilisateur root, elle détruira votre système complet. ON VOUS AURA PRÉVENU.

cd $LFS
rm -rf ./*
tar -xpf $HOME/[Link]

De nouveau, vérifiez que l'environnement a été correctement paramétré et continuez à construire le reste du système.

Important
Si vous quittez l'environnement chroot pour créer une sauvegarde ou si vous recommencez à construire
à partir d'une sauvegarde, rappelez-vous de vérifier que les systèmes de fichiers virtuels sont toujours
montés (findmnt | grep $LFS). S'ils ne sont pas montés, remontez-les maintenant comme décrit dans
le Section 7.3, « Préparer les systèmes de fichiers virtuels du noyau » et entrez de nouveau dans
l'environnement chroot (voir le Section 7.4, « Entrer dans l'environnement chroot ») avant de continuer.

88
Linux From Scratch - Version 11.3-systemd

Partie IV. Construction du système LFS


Linux From Scratch - Version 11.3-systemd

Chapitre 8. Installer les logiciels du système de base


8.1. Introduction
Dans ce chapitre, nous commençons la construction du système LFS pour de bon.
Nous arrivons à la dernière étape de l'installation de ce logiciel. Bien que, dans beaucoup de cas, les instructions
d'installation pourraient être plus courtes et plus génériques, nous avons opté pour fournir les instructions complètes
pour chaque paquet et minimiser ainsi les possibilités d'erreurs. La clé pour apprendre ce qui fait fonctionner un
système Linux est de savoir à quoi sert chaque paquet et pourquoi vous (ou le système) en avez besoin.
L'utilisation d'optimisations personnalisées est déconseillée. Bien qu'elles puissent accélérer légèrement l'exécution
des programmes, elles peuvent aussi poser des problèmes lors de leur compilation ou leur exécution. Si un paquet
refuse de se compiler lors de l'utilisation d'optimisations, essayez de le compiler sans optimisation pour voir si cela
corrige le problème. Même si le paquet parvient à se compiler avec les optimisations, il risque de mal se compiler
à cause des interactions complexes entre le code et les outils de construction. Remarquez aussi que l'utilisation
des options -march et -mtune avec des valeurs non indiquées dans LFS n'a pas été testée. Cela peut entrainer des
problèmes avec les paquets de la chaîne d'outils (Binutils, GCC et Glibc). Le petit potentiel de gains obtenu en
utilisant les optimisations de compilation est souvent minime comparé aux risques. Les utilisateurs construisant un
système LFS pour la première fois sont encouragés à construire sans optimisations personnalisées.
Cependant, il convient de garder les optimisations activées par la configuration par défaut. De plus, LFS active
parfois des configurations optimisées fournies par un paquet mais qui ne sont pas activées par défaut. Les
mainteneurs de paquets ont déjà testé ces configurations et les ont jugées sans danger, il y a donc peu de chances
qu'elles cassent la construction. En général, la configuration par défaut active déjà les options -O2 ou -O3, le système
ainsi obtenu pourra toujours fonctionner rapidement sans optimisation personnalisée et sera stable.
Avant les instructions d'installation, chaque page d'installation fournit des informations sur le paquet, incluant une
description concise de ce qu'il contient, approximativement combien de temps prendra la construction et combien
d'espace disque est nécessaire pendant le processus de construction. Après les instructions d'installation, il y a une
liste de programmes et de bibliothèques (avec quelques brèves descriptions de ceux-ci) que le paquet installe.

Note
Les valeurs SBU et l'espace disque requis incluent les données de suites de tests pour tous les paquets de
Chapitre 8 auxquels elles sont applicables. Les valeurs de SBU ont été calculées avec quatre cœurs CPU
(-j4) pour toutes les opérations, sauf mention contraire.

8.1.1. À propos des bibliothèques


En général, les éditeurs de LFS déconseillent la construction et l'installation de bibliothèques statiques. La plupart
des bibliothèques statiques ont été rendues obsolètes dans les systèmes Linux modernes. Par ailleurs la liaison
statique de bibliothèques dans un programme peut être nuisible. Si une mise à jour des bibliothèques est nécessaire
pour résoudre un problème de sécurité, tous les programmes qui utilisent cette bibliothèque vont devoir être liés à
nouveau à la nouvelle bibliothèque. Comme l'utilisation de bibliothèques statiques n'est pas toujours évidente, on
ne connaît même pas forcément les programmes adéquats (et les procédures requises pour faire la liaison).
Dans les procédures de ce chapitre, nous retirons ou désactivons l'installation de la plupart des bibliothèques
statiques. Généralement cela ce fait en activant l'option --disable-static lors de l'exécution de configure. Dans
certains cas, d'autres moyens sont nécessaires. Dans de rares cas, l'utilisation de bibliothèques statiques reste
essentielle pour le processus de construction de paquets, surtout pour glibc et gcc.
Pour obtenir plus d'informations à propos des bibliothèques, regardez la discussion Bibliothèques : statiques ou
partagées ? dans le livre BLFS.

90
Linux From Scratch - Version 11.3-systemd

8.2. Gestion des paquets


On nous a souvent demandé d’ajouter la gestion des paquets au livre LFS. Un gestionnaire de paquets permet de
suivre l'installation des fichiers, simplifiant ainsi la suppression ou la mise à jour des paquets. Un bon gestionnaire
de paquets gère également les fichiers de configuration pour conserver la configuration spécifique de l'utilisateur
lorsque le paquet est réinstallé ou mis à jour. Avant toute chose, cette section ne parle pas et ne recommande pas
un gestionnaire de paquets en particulier. Elle résume les techniques les plus populaires et leur fonctionnement. Le
gestionnaire de paquets qui vous convient le mieux peut se trouver parmi ces techniques ou être une combinaison
d'une ou plusieurs techniques. Cette section mentionne brièvement les problèmes qui peuvent survenir lors de la
mise à jour de paquets.
Voici la raison pour laquelle aucun gestionnaire de paquets n’est mentionné dans LFS ou BLFS :
• La gestion des paquets ne fait pas partie de l’objectif de ces livres, qui visent à apprendre aux utilisateurs à
construire un système Linux.
• Il existe de nombreuses solutions pour gérer des paquets. Chacune a ses points forts et ses points faibles. En
trouver une qui satisfait tout le monde est difficile.
Nous avons évoqué quelques astuces sur le sujet de la gestion des paquets. Consultez le Hints Project et trouvez
le gestionnaire qui correspond à vos besoins.

8.2.1. Problèmes de mise à jour


Un gestionnaire de paquets facilite la mise à jour des nouvelles versions au moment de leur sortie. Généralement,
les instructions contenues dans les livres LFS et BLFS peuvent être utilisées pour mettre à jour les paquets vers de
nouvelles versions. Voici quelques points à connaître pour mettre à jour vos paquets, spécifiquement sur un système
en cours de fonctionnement.
• Si le noyau Linux doit être mis à jour, et passer par exemple de la version 5.10.17 à la version 5.10.18 ou
5.11.1, vous n’avez pas besoin de reconstruire d'autres éléments. Le système continuera de fonctionner
correctement grâce à l'interface bien définie entre le noyau et l'espace utilisateur. Plus précisément, les headers
de l'API Linux n'ont pas besoin d'être mis à jour (et ne doivent pas l'être, voir le point suivant) en même temps
que le noyau. Vous devrez simplement redémarrer votre système pour utiliser le noyau à jour.
• Si les headers de l'API Linux ou de glibc doivent être mis à jour vers une nouvelle version, et passer par
exemple de la version glibc-2.31 à glibc-2.32, il est plus sécurisé de reconstruire LFS. Même si vous pourriez
être capable de reconstruire tous les paquets dans leur ordre de dépendance, nous vous le déconseillons.
• Si un paquet contenant une bibliothèque partagée est mis à jour et si le nom de cette dernière est modifié,
alors les paquets liés dynamiquement à la bibliothèque devront être recompilés pour être liés à la nouvelle
bibliothèque. Notez qu'il n'y a aucune corrélation entre la version du paquet et le nom de la bibliothèque. Par
exemple, prenez un paquet foo-1.2.3 qui installe une bibliothèque partagée appelée [Link].1. Partons du
principe que vous mettez à jour le paquet avec une nouvelle version foo-1.2.4 qui installe une bibliothèque
partagée appelée [Link].2. Dans ce cas, tous les paquets liés dynamiquement à [Link].1 doivent être
recompilés pour être liés à [Link].2. Vous ne devez pas supprimer les anciennes bibliothèques avant que les
paquets indépendants ne soient tous recompilés.
• Si vous mettez à jour un paquet qui contient une bibliothèque partagée et que le nom de la bibliothèque ne
change pas, mais que le numéro de version du fichier de la bibliothèque décroît (par exemple le nom reste
[Link].1, mais le nom du fichier de la bibliothèque change de [Link].1.25 à [Link].1.24), vous
devez supprimer le fichier de bibliothèque de la version précédente ([Link].1.25 dans ce cas). Sinon, en
exécutant ldconfig manuellement via la ligne de commande, ou en installant un paquet, vous réinitialiserez le
lien symbolique [Link].1 vers l'ancien fichier de bibliothèque, car sa version est « plus récente », puisque
le numéro est plus grand. Cette situation arrive quand vous installez une version précédente d'un paquet, ou que
l’auteur du paquet change de pratique de nommage des versions.

91
Linux From Scratch - Version 11.3-systemd

• Si vous mettez à jour un paquet qui contient une bibliothèque partagée et que le nom de la bibliothèque
ne change pas, mais qu'un problème important, comme une vulnérabilité de sécurité, est corrigé, tous les
programmes en cours d'exécution liés à la bibliothèque partagée doivent être redémarrés. La commande
suivante, lancée en tant qu’utilisateur root après la mise à jour, affiche les processus qui utilisent les anciennes
versions de ces bibliothèques (remplacez libfoo par le nom de la bibliothèque) :
grep -l -e 'libfoo.*deleted' /proc/*/maps |
tr -cd 0-9\\n | xargs -r ps u

Si OpenSSH est utilisé pour accéder au système et qu'il est lié à la bibliothèque mise à jour, vous devez
redémarrer le service sshd, vous déconnecter, vous reconnecter et relancer la commande pour confirmer
qu’aucun processus n'utilise les bibliothèques supprimées.
Si le démon systemd (qui tourne en tant que PID 1) est lié à une bibliothèque mise à jour, vous pouvez le
recharger sans redémarrage en exécutant la commande systemctl daemon-reexec en tant qu'utilisateur root.
• Si un programme ou une bibliothèque partagée est écrasé, les processus utilisant le code ou les données du
programme ou de la bibliothèque peuvent planter. La bonne manière de mettre à jour un programme ou une
bibliothèque partagée sans interruption anormale du processus est de le supprimer d'abord, puis d'installer la
nouvelle version. La commande install fournie par coreutils implémente déjà cela et la plupart des paquets
l'utilisent pour installer des binaires et des bibliothèques. Cela signifie que vous n'aurez pas ce problème la
plupart du temps. Cependant, le processus d'installation de certains paquets, notamment Mozilla JS dans BLFS,
se contente de réécrire sur le fichier s'il existe déjà et cause un crash, donc il est plus prudent de sauvegarder
votre travail et de fermer les processus inutiles avant de mettre à jour un paquet.

8.2.2. Techniques de gestion des paquets


Voici une liste des techniques les plus courantes en gestion de paquets. Avant de choisir un gestionnaire de paquets,
cherchez les différentes techniques et notamment les points faibles de chaque système.

[Link]. Tout est dans ma tête !


Oui, c'est une technique de gestion des paquets. Certains n'ont pas besoin d'un gestionnaire de paquets parce qu'ils
connaissent très bien les paquets et connaissent les fichiers installés pour chaque paquet. D’autres n'en ont pas besoin
parce qu'ils planifient la reconstruction entière de LFS dès qu'un paquet est modifié.

[Link]. Installation dans des répertoires distincts


C'est une technique de gestion des paquets simple qui ne nécessite aucun paquet supplémentaire pour gérer les
installations. Chaque paquet est installé dans un répertoire distinct. Par exemple, le paquet foo-1.1 est installé dans
/usr/pkg/foo-1.1 et un lien symbolique est créé depuis /usr/pkg/foo vers /usr/pkg/foo-1.1. Lors de la mise à jour
vers la nouvelle version foo-1.2, elle est installée dans /usr/pkg/foo-1.2 et l'ancien lien symbolique est remplacé
par le lien symbolique qui mène à la nouvelle version.
Les variables d'environnement telles que PATH, LD_LIBRARY_PATH, MANPATH, INFOPATH et CPPFLAGS ont besoin d'être
étendues pour inclure /usr/pkg/foo. Si vous installez beaucoup de paquets, ce système devient ingérable.

[Link]. Gestion de paquets par lien symbolique


Il s’agit d’une variante de la technique précédente. Chaque paquet est installé de façon similaire au système
précédent. Mais au lieu de créer le lien symbolique avec un nom générique pour chaque paquet, chaque
fichier dispose d'un lien symbolique dans la hiérarchie /usr. Il n’y a alors plus besoin d'étendre les variables
d'environnement. Même si les liens symboliques peuvent être créés par l'utilisateur, beaucoup de gestionnaires de
paquets utilisent cette approche pour automatiser la création de liens symboliques. Parmi les plus populaires, on
retrouve Stow, Epkg, Graft et Depot.

92
Linux From Scratch - Version 11.3-systemd

Le script d'installation doit être faussé de façon à ce que chaque paquet pense qu'il est installé dans le répertoire
/usr, alors qu'en réalité il est installé dans l'arborescence /usr/pkg. Réaliser l’installation de cette manière n'est
généralement pas tâche aisée. Par exemple, supposons que vous installez un paquet libfoo-1.1. Les instructions
suivantes peuvent ne pas installer correctement le paquet :
./configure --prefix=/usr/pkg/libfoo/1.1
make
make install

L'installation fonctionnera, mais les paquets dépendants peuvent ne pas se lier à libfoo de la manière prévue. Si vous
compilez un paquet lié à libfoo, vous verrez que qu’il est aussi lié à /usr/pkg/libfoo/1.1/lib/[Link].1 au lieu
de /usr/lib/[Link].1 comme attendu. La bonne approche consiste à utiliser la stratégie DESTDIR pour diriger
l'installation du paquet. Cette approche fonctionne ainsi :
./configure --prefix=/usr
make
make DESTDIR=/usr/pkg/libfoo/1.1 install

La plupart des paquets prennent en charge cette approche, mais elle pose problème à certains utilisateurs. Pour les
paquets non compatibles, vous pouvez soit les installer manuellement, soit opter pour une méthode plus simple en
installant les paquets posant problème dans /opt.

[Link]. Basé sur l’horodatage


Avec cette technique, un fichier est horodaté avant l'installation du paquet. Après l'installation, une simple exécution
de la commande find avec les options appropriées peut générer une trace de tous les fichiers installés après la
création du fichier horodaté. Le gestionnaire de paquets install-log utilise ce système.
Bien que ce schéma ait l'avantage d'être simple, il a deux inconvénients. Si à l'installation les fichiers sont installés
dans autre horodatage que celui de l'heure actuelle, ils ne seront pas suivis par le gestionnaire de paquets. De plus,
ce système peut être utilisé seulement lorsqu'un seul paquet est installé à la fois. Les traces ne sont pas fiables si
deux paquets sont installés depuis deux consoles différentes.

[Link]. Tracer les scripts d'installation


Avec cette approche, les commandes que les scripts d'installation exécutent sont enregistrées. Il existe deux
techniques :
Vous pouvez initialiser la variable d'environnement LD_PRELOAD pour qu'elle pointe vers une bibliothèque à
précharger avant l'installation. Lors de l'installation de cette dernière, la bibliothèque trace les paquets en cours
d'installation en s'attachant aux différents exécutables comme cp, install, mv et trace les appels système qui
modifient le système de fichiers. Pour que cette approche fonctionne, tous les exécutables ont besoin d'être liés
dynamiquement sans bit suid ou sgid. Le préchargement de la bibliothèque peut provoquer des effets secondaires
indésirables lors de l'installation ; effectuez donc quelques tests pour vous assurer que le gestionnaire de paquets
n’endommage rien et trace bien les fichiers nécessaires.
La seconde technique consiste à utiliser la commande strace, qui trace tous les appels du système effectués pendant
l'exécution des scripts d'installation.

[Link]. Créer des archives de paquets


Dans ce système, l'installation d'un paquet est déplacé pour de faux dans un répertoire séparé comme décrit plus
haut. Après l'installation, une archive du paquet est créée grâce aux fichiers installés. L'archive est ensuite utilisée
pour installer le paquet, soit sur la machine locale, soit sur d'autres machines.
Cette approche est utilisée par la plupart des gestionnaires de paquets trouvés dans les distributions commerciales.
Les exemples de gestionnaires qui suivent cette approche sont RPM, qui d'ailleurs est requis par la Spécification de
base de Linux Standard, pkg-utils, apt de Debian et le système de portage de Gentoo. Une astuce montrant comment
adopter ce style de gestion de paquets pour les systèmes LFS se trouve ici : [Link]
view/astuces/[Link].

93
Linux From Scratch - Version 11.3-systemd

La création de fichiers de paquet qui incluent des informations de dépendance est complexe et va au-delà de l'objectif
de LFS.
Slackware utilise un système basé sur tar pour les archives de paquets. Ce système ne gère volontairement pas les
dépendances de paquets car d'autres gestionnaires de paquets plus complexes le font. Pour plus d’informations sur
la gestion des paquets, voir [Link]

[Link]. Gestion basée sur les utilisateurs


Cette méthode, unique à LFS, a été décrite par Matthias Benkmann et est disponible sur le Hints Project. Selon
cette méthode, chaque paquet est installé en tant qu'utilisateur séparé dans les emplacements standards. Les
fichiers appartenant à un paquet sont facilement identifiables grâce à l'identifiant de l'utilisateur. Les avantages et
inconvénients de cette approche sont trop complexes pour pouvoir tous les décrire dans cette section. Pour plus
d’informations, voir l'astuce sur [Link]
txt.

8.2.3. Déployer LFS sur plusieurs systèmes


Le fait qu’il n'y ait pas de fichiers dépendants de la position des fichiers sur un système de disque est l’un des
avantages du système LFS. Cloner la construction d'un système LFS sur un autre ordinateur avec une architecture
similaire au système de base se résume à utiliser la commande tar sur la partition LFS qui contient le répertoire
racine (environ 900 Mo décompressés pour une construction LFS de base), en copiant ce fichier via un transfert par
réseau ou par CD-ROM ou clé USB vers le nouveau système et en le décompressant. Vous devez ensuite modifier
quelques fichiers de configuration. Les fichiers de configuration qui nécessitent une mise à jour comprennent : /
etc/hosts, /etc/fstab, /etc/passwd, /etc/group, /etc/shadow, /etc/[Link],

Vous pouvez construire un noyau personnalisé pour le nouveau système selon les différences dans le système
matériel et la configuration du noyau initial.

Note
Quelques problèmes ont été rapportés lors de la copie entre architectures similaires mais pas identiques.
Par exemple, l'ensemble d'instructions pour l'architecture Intel n'est pas identique à celle d’un processeur
AMD et les versions plus récentes de certains processeurs peuvent avoir des instructions qui ne sont pas
disponibles pour des versions antérieures.

Enfin, vous devez rendre le nouveau système démarrable via Section 10.4, « Utiliser GRUB pour paramétrer le
processus de démarrage ».

94
Linux From Scratch - Version 11.3-systemd

8.3. Man-pages-6.03
Le paquet Man-pages contient environ 2 400 pages de manuel.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 32 Mo

8.3.1. Installation de Man-pages


Installez Man-pages en lançant :
make prefix=/usr install

8.3.2. Contenu de Man-pages


Fichiers installés: différentes pages de manuel

Descriptions courtes
pages man Décrivent les fonctions du langage de programmation C, les fichiers périphériques et les fichiers
de configuration importants

95
Linux From Scratch - Version 11.3-systemd

8.4. Iana-Etc-20230202
Le paquet Iana-Etc fournit des données pour les services et protocoles réseau.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 4.8 Mo

8.4.1. Installation de Iana-Etc


Pour ce paquet, nous avons uniquement besoin de copier les fichiers à leur place :
cp services protocols /etc

8.4.2. Contenu de Iana-Etc


Fichiers installés: /etc/protocols et /etc/services

Descriptions courtes
/etc/protocols Décrit les différents protocoles Internet DARPA disponibles à partir du sous-système TCP/
IP
/etc/services Fournit une correspondance entre des noms de services internet et leurs numéros de ports
et types de protocoles affectés

96
Linux From Scratch - Version 11.3-systemd

8.5. Glibc-2.37
Le paquet Glibc contient la bibliothèque du C principale. Cette bibliothèque fournit toutes les routines basiques pour
allouer de la mémoire, chercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes,
faire correspondre des modèles, faire des calculs et ainsi de suite.
Temps de construction 11 SBU
approximatif:
Espace disque requis: 2.9 Go

8.5.1. Installation de Glibc


Certains programmes de Glibc utilisent le répertoire non conforme au FHS /var/db pour stocker leurs données
d'exécution. Appliquez le correctif suivant pour que ces programmes stockent leurs données à des emplacements
conformes au FHS :
patch -Np1 -i ../[Link]

Corrigez un problème de sécurité identifié en amont :


sed '/width -=/s/workend - string/number_length/' \
-i stdio-common/vfprintf-process-arg.c

La documentation de Glibc recommande de construire Glibc dans un répertoire de construction dédié :


mkdir -v build
cd build

Assurez-vous que les utilitaires ldconfig et sln s’installent dans le répertoire /usr/sbin :
echo "rootsbindir=/usr/sbin" > configparms

Préparez la compilation de Glibc :


../configure --prefix=/usr \
--disable-werror \
--enable-kernel=3.2 \
--enable-stack-protector=strong \
--with-headers=/usr/include \
libc_cv_slibdir=/usr/lib

Signification des options de configuration :

--disable-werror
Désactive l'option -Werror passée à GCC. Ceci est nécessaire pour lancer la suite de tests.
--enable-kernel=3.2
Indique au système de construction que cette Glibc peut être utilisée avec les noyaux aussi vieux que 3.2
(maximum). Cela permet de générer des contournements au cas où on ne peut pas utiliser un appel système
introduit dans une version ultérieure.
--enable-stack-protector=strong
Augmente la sécurité du système en ajoutant du code supplémentaire pour repérer les dépassements de tampon
comme dans les attaques par débordement de tampon.
--with-headers=/usr/include
Indique au système de construction où se trouvent les headers de l'API du noyau.
libc_cv_slibdir=/usr/lib
Indique la bibliothèque adaptée pour chaque système. Nous ne voulons pas utiliser lib64.

97
Linux From Scratch - Version 11.3-systemd

Compilez le paquet :
make

Important
Dans cette section, la suite de tests de Glibc est considérée comme critique. Ne l’ignorez sous aucun
prétexte.

En général, quelques tests ne réussissent pas, mais vous pouvez le plus souvent ignorer les erreurs listées ci-dessous.

make check

Vous verrez probablement quelques erreurs lors des tests. La suite de tests de Glibc est quelque peu dépendante du
système hôte. Vous pouvez généralement ignorer quelques erreurs parmi les plus de 5 000 tests. Voici une liste des
problèmes les plus fréquents dans les versions récentes de LFS :

• io/tst-lchmod est connu pour échouer dans l'environnement chroot de LFS.


• misc/tst-ttyname est connu pour échouer dans l'environnement chroot de LFS.
• Le test stdlib/tst-arc4random est connu pour échouer si le noyau hôte est relativement vieux.
• Certains tests, par exemple nss/tst-nss-files-hosts-multi, sont connus pour échouer sur les systèmes relativement
lents à cause d'un délai d'attente interne.

Bien que ce ne soit qu'un simple message, l'étape d'installation de Glibc indiquera l'absence de /etc/[Link].
Supprimez ce message d'avertissement avec :
touch /etc/[Link]

Corrigez le Makefile généré pour éviter un test de cohérence inutile qui échoue dans l'environnement partiel de LFS :
sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile

Installez le paquet :
make install

Corrigez le chemin codé en dur vers le chargeur d'exécutable dans le script ldd :
sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd

Installez le fichier de configuration et le répertoire d'exécution de nscd :


cp -v ../nscd/[Link] /etc/[Link]
mkdir -pv /var/cache/nscd

Installez les fichiers de prise en charge de nscd pour systemd :


install -v -Dm644 ../nscd/[Link] /usr/lib/tmpfiles.d/[Link]
install -v -Dm644 ../nscd/[Link] /usr/lib/systemd/system/[Link]

Ensuite, installez les locales qui permettent à votre système de répondre dans une langue différente. Aucune n'est
indispensable, mais si certaines sont absentes, les suites de test des futurs paquets peuvent sauter des tests importants.

98
Linux From Scratch - Version 11.3-systemd

Vous pouvez installer les locales individuelles en utilisant le programme localedef. Par exemple, la seconde
commande localedef ci-dessous combine la définition de la locale indépendante du codage /usr/share/i18n/
locales/cs_CZ avec la définition de la page de codes /usr/share/i18n/charmaps/[Link] et ajoute le résultat à la
fin du fichier /usr/lib/locale/locale-archive. Les instructions suivantes installent les paramètres minimums des
locales nécessaires au déroulement optimal des tests :
mkdir -pv /usr/lib/locale
localedef -i POSIX -f UTF-8 [Link]-8 2> /dev/null || true
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i el_GR -f ISO-8859-7 el_GR
localedef -i en_GB -f ISO-8859-1 en_GB
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_ES -f ISO-8859-15 es_ES@euro
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i is_IS -f ISO-8859-1 is_IS
localedef -i is_IS -f UTF-8 is_IS.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f ISO-8859-15 it_IT@euro
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true
localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i se_NO -f UTF-8 se_NO.UTF-8
localedef -i ta_IN -f UTF-8 ta_IN.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030
localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS
localedef -i zh_TW -f UTF-8 zh_TW.UTF-8

En outre, installez la locale de votre pays, de votre langue et de votre encodage de caractères.

Sinon, vous pouvez installer les locales listées dans le fichier glibc-2.37/localedata/SUPPORTED (il inclut toutes les
locales citées ci-dessus et bien plus) en une seule fois avec la commande suivante (qui prend un certain temps) :
make localedata/install-locales

Ensuite, utilisez la commande localedef pour créer et installer les locales non listées dans le fichier glibc-2.
37/localedata/SUPPORTED dans le cas peu probable où vous en auriez besoin. Par exemple, les deux paramètres
linguistiques suivants sont requis par certains tests plus tard dans ce chapitre :
localedef -i POSIX -f UTF-8 [Link]-8 2> /dev/null || true
localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true

Note
Glibc utilise maintenant libidn2 lors de la résolution de noms de domaines internationalisés. C'est une
dépendance à l'exécution. Si cette fonctionnalité est requise, les instructions pour installer libidn2 se
trouvent sur la page libidn2 de BLFS.

99
Linux From Scratch - Version 11.3-systemd

8.5.2. Configuration de Glibc


[Link]. Ajout de [Link]
Le fichier /etc/[Link] doit être créé car les valeurs par défaut de Glibc ne fonctionnent pas correctement
dans un environnement en réseau.
Créez un nouveau fichier /etc/[Link] en exécutant :
cat > /etc/[Link] << "EOF"
# Begin /etc/[Link]

passwd: files
group: files
shadow: files

hosts: files dns


networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/[Link]
EOF

[Link]. Ajout des données de fuseaux horaires


Installez et configurez les données de fuseaux horaires en exécutant :
tar -xf ../../[Link]

ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}

for tz in etcetera southamerica northamerica europe africa antarctica \


asia australasia backward; do
zic -L /dev/null -d $ZONEINFO ${tz}
zic -L /dev/null -d $ZONEINFO/posix ${tz}
zic -L leapseconds -d $ZONEINFO/right ${tz}
done

cp -v [Link] [Link] [Link] $ZONEINFO


zic -d $ZONEINFO -p America/New_York
unset ZONEINFO

Voici la signification de la commande zic :


zic -L /dev/null ...
Crée des fuseaux horaires posix sans secondes intercalaires. Par convention, on le met dans zoneinfo et dans
zoneinfo/posix. Il faut indiquer les fuseaux horaires POSIX dans zoneinfo, sinon plusieurs suites de tests
renverront des erreurs. Sur un système embarqué, où il y a peu de place et vous ne souhaitez pas mettre à
jour les fuseaux horaires, vous pouvez économiser 1,9 Mo en n'utilisant pas le répertoire posix, mais certaines
applications ou suites de tests pourraient échouer.
zic -L leapseconds ...
Crée les fuseaux horaires adaptés incluant les secondes intercalaires. Sur un système embarqué, où il y a peu
de place et vous ne souhaitez pas mettre à jour les fuseaux horaires, ou si vous ne trouvez pas important d’avoir
la bonne heure, vous pouvez économiser 1,9 Mo en ne mettant pas de répertoire right.
zic ... -p ...
Crée le fichier posixrules. Nous utilisons New York car POSIX exige que les règles de l’heure d’été respectent
les règles américaines.

100
Linux From Scratch - Version 11.3-systemd

Lancez ce script pour déterminer dans quel fuseau horaire vous vous situez :
tzselect

Après quelques questions sur votre emplacement, le script affichera le nom du fuseau horaire (par exemple Europe/
Paris). D'autres fuseaux horaires sont aussi listés dans le fichier /usr/share/zoneinfo comme Canada/Eastern ou
EST5EDT qui ne sont pas identifiés par le script mais qui peuvent être utilisés.
Puis créez le fichier /etc/localtime en exécutant :
ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime

Remplacez <xxx> par le nom du fuseau horaire sélectionné (par exemple Europe/Paris).

[Link]. Configuration du chargeur dynamique


Par défaut, le chargeur dynamique (/lib/[Link].2) cherche dans /usr/lib les bibliothèques partagées
nécessaires aux programmes lors de leur exécution. Néanmoins, s'il existe des bibliothèques dans d'autres répertoires
que /usr/lib, leur emplacement doit être ajouté dans le fichier /etc/[Link] pour que le chargeur dynamique
les trouve. /usr/local/lib et /opt/lib sont deux répertoires qui contiennent des bibliothèques supplémentaires,
donc ajoutez-les au chemin de recherche du chargeur dynamique.
Créez un nouveau fichier /etc/[Link] en exécutant ce qui suit :
cat > /etc/[Link] << "EOF"
# Begin /etc/[Link]
/usr/local/lib
/opt/lib

EOF

Si vous le désirez, le chargeur dynamique peut également chercher un répertoire et inclure le contenu des fichiers
qui s'y trouvent. Les fichiers de ce répertoire include sont en général constitués d'une ligne spécifiant le chemin vers
la bibliothèque désirée. Pour ajouter cette possibilité, exécutez les commandes suivantes :
cat >> /etc/[Link] << "EOF"
# Add an include directory
include /etc/[Link].d/*.conf

EOF
mkdir -pv /etc/[Link].d

8.5.3. Contenu de Glibc


Programmes installés: gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, [Link] (lien
symbolique vers [Link].2 ou [Link].2), locale, localedef, makedb,
mtrace, nscd, pcprofiledump, pldd, sln, sotruss, sprof, tzselect, xtrace, zdump et zic
Bibliothèques installées: [Link].2, [Link].2, libBrokenLocale.{a,so}, libanl.{a,so}, libc.
{a,so}, libc_nonshared.a, libc_malloc_debug.so, libcrypt.{a,so}, libdl.{a,so.2},
libg.a, libm.{a,so}, libmcheck.a, [Link], libmvec.{a,so}, [Link].1,
libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, [Link],
libpthread.{a,so.0}, libresolv.{a,so}, librt.{a,so.1}, libthread_db.so et libutil.{a,so.1}
Répertoires installés: /usr/include/arpa, /usr/include/bits, /usr/include/gnu, /usr/include/net, /usr/include/
netash, /usr/include/netatalk, /usr/include/netax25, /usr/include/neteconet, /usr/
include/netinet, /usr/include/netipx, /usr/include/netiucv, /usr/include/netpacket, /
usr/include/netrom, /usr/include/netrose, /usr/include/nfs, /usr/include/protocols, /
usr/include/rpc, /usr/include/sys, /usr/lib/audit, /usr/lib/gconv, /usr/lib/locale, /usr/
libexec/getconf, /usr/share/i18n, /usr/share/zoneinfo, /var/cache/nscd et /var/lib/
nss_db

101
Linux From Scratch - Version 11.3-systemd

Descriptions courtes
gencat Génère des catalogues de messages
getconf Affiche les valeurs de configuration du système pour les variables spécifiques du
système de fichiers
getent Récupère les entrées à partir d'une base de données administrative
iconv Convertit l’encodage de caractères
iconvconfig Crée des fichiers de configuration pour le module iconv
ldconfig Configure les liens d’exécution de l’éditeur de liens dynamiques
ldd Indique les bibliothèques partagées requises pour chaque programme ou bibliothèque
partagée
lddlibc4 Assiste ldd avec des fichiers objets. Elle n'existe pas sur les architectures plus récentes
comme x86_64
locale Affiche diverses informations sur la locale actuelle
localedef Compile les spécifications de la locale
makedb Crée une base de données simple à partir d'une entrée textuelle
mtrace Lit et interprète un fichier de trace et en affiche un résumé dans un format lisible par
un humain
nscd Un démon qui fournit un cache pour les requêtes de services les plus communes
pcprofiledump Affiche des informations générées par un profilage du PC
pldd Liste les objets dynamiques partagés utilisés en exécutant des processus
sln Un programme ln lié statiquement
sotruss Retrace les procédures d'appel d'une bibliothèque partagée pour la commande spécifiée
sprof Lit et affiche les données de profilage des objets partagés
tzselect Demande à l'utilisateur l'emplacement géographique du système et donne la description
du fuseau horaire correspondant
xtrace Retrace l'exécution d'un programme en affichant la fonction en cours d'exécution
zdump Afficheur de fuseau horaire
zic Compilateur de fuseau horaire
ld-*.so Programme d'aide des bibliothèques partagées exécutables
libBrokenLocale Utilisé en interne par Glibc comme une arme grossière pour résoudre les programmes
cassés (comme certaines applications Motif). Voir les commentaires dans glibc-2.37/
locale/broken_cur_max.c pour plus d'informations

libanl Bibliothèque asynchrone de recherche de noms


libc Bibliothèque du C principale
libc_malloc_debug Active le test d'allocation de mémoire lorsqu'elle est préchargée
libcrypt Bibliothèque de chiffrement
libdl Bibliothèque factice ne contenant aucune fonction. Il s’agissait d’une bibliothèque
d'interface de liaison dynamique dont les fonctions se trouvent maintenant dans libc
libg Bibliothèque factice ne contenant aucune fonction. Il s’agissait d’une bibliothèque
d'exécution pour g++
libm Bibliothèque mathématique

102
Linux From Scratch - Version 11.3-systemd

libmvec Bibliothèque de mathématiques vectorielles, liée si besoin quand libm est utilisée
libmcheck Active le test d'allocation de mémoire lorsqu'on y relie quelque chose
libmemusage Utilisé par memusage pour aider à la récupération d'informations sur l'utilisation de la
mémoire par un programme
libnsl Bibliothèque de services réseau, maintenant obsolète
libnss_* Les modules du Name Service Switch, qui contient des fonctions de résolution de noms
d'hôtes, de noms d'utilisateurs, de noms de groupes, d'alias, de services, de protocoles
et ainsi de suite. Chargée par la libc en fonction de la configuration présente dans le
fichier /etc/[Link]
libpcprofile Peut être préchargé pour profiler le PC d'un exécutable
libpthread Bibliothèque factice ne contenant aucune fonction. Elle contenait les fonctions
fournissant la plupart des interfaces spécifiées par l'extension POSIX.1b en temps réel.
Ces fonctions se trouvent maintenant dans libc
libresolv Contient des fonctions de création, d'envoi et d'interprétation de paquets pour les
serveurs de noms de domaine Internet
librt Contient des fonctions fournissant la plupart des interfaces spécifiées par l'extension
POSIX.1b en temps réel
libthread_db Contient des fonctions utiles pour construire des débogueurs de programmes multi-
threads
libutil Bibliothèque factice ne contenant aucune fonction. Elle contenait du code pour les
fonctions « standard » utilisées dans de nombreux utilitaires Unix différents. Ces
fonctions se trouvent maintenant dans libc

103
Linux From Scratch - Version 11.3-systemd

8.6. Zlib-1.2.13
Le paquet Zlib contient des routines de compression et décompression utilisées par quelques programmes.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 6.2 Mo

8.6.1. Installation de Zlib


Préparez la compilation de Zlib :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

Supprimez une bibliothèque statique inutile :


rm -fv /usr/lib/libz.a

8.6.2. Contenu de Zlib


Bibliothèques installées: [Link]

Descriptions courtes
libz Contient des fonctions de compression et décompression utilisées par quelques programmes

104
Linux From Scratch - Version 11.3-systemd

8.7. Bzip2-1.0.8
Le paquet Bzip2 contient des programmes de compression et de décompression de fichiers. Compresser des fichiers
texte avec bzip2 permet d'atteindre un taux de compression bien meilleur qu'avec l'outil gzip.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 7.2 Mo

8.7.1. Installation de Bzip2


Appliquez un correctif qui installera la documentation de ce paquet :
patch -Np1 -i ../bzip2-1.0.8-install_docs-[Link]

La commande suivante garantit l'installation de liens symboliques relatifs :


sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile

Assurez-vous que les pages de manuel s'installent au bon endroit :


sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile

Préparez la compilation de Bzip2 avec :


make -f Makefile-libbz2_so
make clean

Voici la signification du paramètre de make :


-f Makefile-libbz2_so
Bzip2 sera construit en utilisant un fichier makefile différent, dans ce cas le fichier Makefile-libbz2_so qui
crée une bibliothèque [Link] dynamique et lie les outils Bzip2 avec.
Compilez et testez le paquet :
make

Installez les programmes :


make PREFIX=/usr install

Installez les bibliothèques partagées :


cp -av [Link].* /usr/lib
ln -sv [Link].1.0.8 /usr/lib/[Link]

Installez le binaire partagé bzip2 dans le répertoire /usr/bin, et remplacez deux copies de bzip2 par des liens
symboliques :
cp -v bzip2-shared /usr/bin/bzip2
for i in /usr/bin/{bzcat,bunzip2}; do
ln -sfv bzip2 $i
done

Supprimez une bibliothèque statique inutile :


rm -fv /usr/lib/libbz2.a

8.7.2. Contenu de Bzip2


Programmes installés: bunzip2 (lien vers bzip2), bzcat (lien vers bzip2), bzcmp (lien vers bzdiff), bzdiff,
bzegrep (lien vers bzgrep), bzfgrep (lien vers bzgrep), bzgrep, bzip2, bzip2recover,
bzless (lien vers bzmore) et bzmore
Bibliothèques installées: [Link]
Répertoire installé: /usr/share/doc/bzip2-1.0.8

105
Linux From Scratch - Version 11.3-systemd

Descriptions courtes
bunzip2 Décompresse les fichiers compressés avec bzip
bzcat Décompresse vers la sortie standard
bzcmp Lance cmp sur des fichiers compressés avec bzip
bzdiff Lance diff sur des fichiers compressés avec bzip
bzegrep Lance egrep sur des fichiers compressés avec bzip
bzfgrep Lance fgrep sur des fichiers compressés avec bzip
bzgrep Lance grep sur des fichiers compressés avec bzip
bzip2 Compresse les fichiers en utilisant l'algorithme de compression de texte par tri de blocs de
Burrows-Wheeler avec le codage Huffman ; le taux de compression est meilleur que celui
auquel parviennent les outils de compression plus conventionnels utilisant les algorithmes
« Lempel-Ziv », comme gzip
bzip2recover Essaie de récupérer des données à partir de fichiers endommagés, compressés avec bzip
bzless Lance less sur des fichiers compressés avec bzip
bzmore Lance more sur des fichiers compressés avec bzip
libbz2 La bibliothèque implémentant la compression de données sans perte par tri de blocs, utilisant
l'algorithme de Burrows-Wheeler

106
Linux From Scratch - Version 11.3-systemd

8.8. Xz-5.4.1
Le paquet Xz contient des programmes de compression et de décompression de fichiers. Il offre les possibilités des
formats lzma et des formats de compression récents. La compression de fichiers textes avec xz donne un meilleur
pourcentage de compression qu'avec les commandes gzip ou bzip2 traditionnelles.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 21 Mo

8.8.1. Installation de Xz
Préparez la compilation de Xz :
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/xz-5.4.1

Compilez le paquet :
make

Pour tester les résultats, exécutez :


make check

Installez le paquet :
make install

8.8.2. Contenu de Xz
Programmes installés: lzcat (lien vers xz), lzcmp (lien vers xzdiff), lzdiff (lien vers xzdiff), lzegrep (lien vers
xzgrep), lzfgrep (lien vers xzgrep), lzgrep (lien vers xzgrep), lzless (lien vers xzless),
lzma (lien vers xz), lzmadec, lzmainfo, lzmore (lien vers xzmore), unlzma (lien vers
xz), unxz (lien vers xz), xz, xzcat (lien vers xz), xzcmp (lien vers xzdiff), xzdec, xzdiff,
xzegrep (lien vers xzgrep), xzfgrep (lien vers xzgrep), xzgrep, xzless et xzmore
Bibliothèques installées: [Link]
Répertoires installés: /usr/include/lzma et /usr/share/doc/xz-5.4.1

Descriptions courtes
lzcat Décompresse sur la sortie standard
lzcmp Lance cmp sur des fichiers LZMA compressés
lzdiff Lance diff sur des fichiers LZMA compressés
lzegrep Lance grep sur des fichiers LZMA compressés
lzfgrep Lance fgrep sur des fichiers LZMA compressés
lzgrep Lance grep sur des fichiers LZMA compressés
lzless Lance less sur des fichiers LZMA compressés
lzma Compresse ou décompresse des fichiers en utilisant le format LZMA
lzmadec Un décodeur petit et rapide pour des fichiers LZMA compressés
lzmainfo Affiche les informations contenues dans l'en-tête du fichier LZMA compressé
lzmore Lance more sur des fichiers LZMA compressés
unlzma Décompresse des fichiers en utilisant le format LZMA

107
Linux From Scratch - Version 11.3-systemd

unxz Décompresse des fichiers en utilisant le format XZ


xz Compresse ou décompresse des fichiers en utilisant le format XZ
xzcat Décompresse sur la sortie standard
xzcmp Lance cmp sur des fichiers Xz compressés
xzdec Un décodeur petit et rapide pour des fichiers compressés XZ
xzdiff Lance diff sur des fichiers LZMA compressés
xzegrep Lance egrep sur des fichiers XZ compressés
xzfgrep Lance fgrep sur des fichiers XZ compressés
xzgrep Lance grep sur des fichiers XZ compressés
xzless Lance less sur des fichiers XZ compressés
xzmore Lance more sur des fichiers XZ compressés
liblzma La bibliothèque qui implémente la compression sans perte, de données rangées par blocs, utilisant
les algorithmes de la chaîne Lempel-Ziv-Markov

108
Linux From Scratch - Version 11.3-systemd

8.9. Zstd-1.5.4
Zstandard est un algorithme de compression en temps réel qui fournit des ratios de compression élevés. Il propose
une très large gamme de rapports entre compression et vitesse tout en étant soutenu par un décodeur très rapide.
Temps de construction 0.4 SBU
approximatif:
Espace disque requis: 75 Mo

8.9.1. Installation de Zstd


Compilez le paquet :
make prefix=/usr

Note
Il sera indiqué « failed » à plusieurs endroits dans la sortie des tests. C'est attendu et seul « FAIL » est un
vrai échec des tests. Il ne devrait pas y avoir d'échec.

Pour tester les résultats, lancez :


make check

Installez le paquet :
make prefix=/usr install

Supprimez la bibliothèque statique :


rm -v /usr/lib/libzstd.a

8.9.2. Contenu de Zstd


Programmes installés: zstd, zstdcat (lien vers zstd), zstdgrep, zstdless, zstdmt (lien vers zstd) et unzstd (lien
vers zstd)
Bibliothèques installées: [Link]

Descriptions courtes
zstd Compresse ou décompresse des fichiers avec le format ZSTD
zstdgrep Lance grep sur des fichiers compressés avec ZSTD
zstdless Lance less sur des fichiers compressés avec ZSTD
libzstd La bibliothèque implémentant la compression de données sans perte, avec l'algorithme ZSTD

109
Linux From Scratch - Version 11.3-systemd

8.10. File-5.44
Le paquet File contient un outil pour déterminer le type d'un ou plusieurs fichiers donnés.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 16 Mo

8.10.1. Installation de File


Préparez la compilation de File :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.10.2. Contenu de File


Programmes installés: file
Bibliothèque installée: [Link]

Descriptions courtes
file Tente de classifier chaque fichier donné. Il réalise ceci grâce à l'exécution de différents tests : tests
sur le système de fichiers, tests des nombres magiques et tests de langages
libmagic Contient des routines pour la reconnaissance de nombres magiques que le programme file utilise

110
Linux From Scratch - Version 11.3-systemd

8.11. Readline-8.2
Le paquet Readline est un ensemble de bibliothèques qui offrent des fonctionnalités d'édition des lignes de
commande et des historiques.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 16 Mo

8.11.1. Installation de Readline


La réinstallation de Readline aura pour conséquence que les vieilles bibliothèques seront déplacées vers
<nom_bibliotheque>.old. Même si cela n'est pas normalement un problème, cela peut dans certains cas provoquer
un bogue de lien dans ldconfig. Cela peut être évité en effectuant les deux seds suivants :
sed -i '/MV.*old/d' [Link]
sed -i '/{OLDSUFF}/c:' support/shlib-install

À présent, corrigez le problème identifié en amont :


patch -Np1 -i ../readline-8.2-upstream_fix-[Link]

Préparez la compilation de Readline :


./configure --prefix=/usr \
--disable-static \
--with-curses \
--docdir=/usr/share/doc/readline-8.2

Voici la signification de l'option de configuration :


--with-curses
Cette option dit à Readline qu'il peut trouver les fonctions de la bibliothèque termcap dans la bibliothèque
curses, au lieu d'une bibliothèque termcap séparée. Elle permet aussi de générer un fichier [Link] correct.
Compilez le paquet :
make SHLIB_LIBS="-lncursesw"

Voici la signification de l'option de make :


SHLIB_LIBS="-lncursesw"
Cette option force Readline à se lier à la bibliothèque libncursesw.
Ce paquet n'a pas de suite de tests.
Installez le paquet :
make SHLIB_LIBS="-lncursesw" install

Si désiré, installez la documentation :


install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.2

8.11.2. Contenu de Readline


Bibliothèques installées: [Link] et [Link]
Répertoires installés: /usr/include/readline et /usr/share/doc/readline-8.2

Descriptions courtes
libhistory Fournit une interface utilisateur cohérente pour rappeler des lignes dans l'historique

111
Linux From Scratch - Version 11.3-systemd

libreadline Fournit un ensemble de commandes pour manipuler du texte entré dans une session interactive
d'un programme

112
Linux From Scratch - Version 11.3-systemd

8.12. M4-1.4.19
Le paquet M4 contient un processeur de macros.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 49 Mo

8.12.1. Installation de M4
Préparez la compilation de M4 :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.12.2. Contenu de M4
Programme installé: m4

Descriptions courtes
m4 Copie les fichiers donnés tout en développant les macros qu'ils contiennent. Ces macros sont soit internes soit
définies par l'utilisateur et peuvent prendre un nombre illimité d'arguments. En plus de la simple expansion
de macros, m4 dispose de fonctions pour inclure des fichiers nommés, lancer des commandes Unix, faire
des opérations arithmétiques, manipuler du texte, pour la récursion et ainsi de suite. Le programme m4 peut
être utilisé soit comme interface d'un compilateur soit comme évaluateur de macros à part.

113
Linux From Scratch - Version 11.3-systemd

8.13. Bc-6.2.4
Le paquet Bc contient un langage de traitement des nombres en précision arbitraire.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 7.6 Mo

8.13.1. Installation de Bc
Préparez la compilation de Bc :
CC=gcc ./configure --prefix=/usr -G -O3 -r

Voici la signification des options de configuration :


CC=gcc
Ce paramètre spécifie le compilateur à utiliser.
-G
Élimine certaines parties de la suite de tests qui ne fonctionnent pas sans une version installée de GNU bc.
-O3
Spécifie le niveau d'optimisation à utiliser.
-r
Active l'utilisation de Readline pour améliorer la fonction d'édition de ligne de bc.
Compilez le paquet :
make

Pour tester bc, lancez :


make test

Installez le paquet :
make install

8.13.2. Contenu de Bc
Programmes installés: bc et dc

Descriptions courtes
bc Une calculatrice en ligne de commandes
dc Une calculatrice en ligne de commande en notation polonaise inverse

114
Linux From Scratch - Version 11.3-systemd

8.14. Flex-2.6.4
Le paquet Flex contient un outil de génération de programmes qui reconnaissent des motifs dans dans du texte.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 33 Mo

8.14.1. Installation de Flex


Préparez la compilation de Flex :
./configure --prefix=/usr \
--docdir=/usr/share/doc/flex-2.6.4 \
--disable-static

Compilez le paquet :
make

Pour tester les résultats (environ 0,5 SBU), lancez :


make check

Installez le paquet :
make install

Quelques programmes ne connaissent pas encore flex et essaient de lancer son prédécesseur, lex. Pour aider ces
programmes, créez un lien symbolique nommé lex qui lance flex en mode d'émulation lex :
ln -s flex /usr/bin/lex

8.14.2. Contenu de Flex


Programmes installés: flex, flex++ (lien vers flex), et lex (lien vers flex)
Bibliothèques installées: [Link]
Répertoire installé: /usr/share/doc/flex-2.6.4

Descriptions courtes
flex Un outil pour générer des programmes qui reconnaissent des motifs dans un texte. Cela permet une
grande adaptabilité lors du choix des règles de recherche de motifs, ce qui élimine ainsi le besoin de
développer un programme spécialisé
flex++ Une extension de flex utilisée pour générer du code et des classes C++. C'est un lien symbolique vers flex
lex Un lien symbolique qui exécute flex en mode d'émulation lex
libfl La bibliothèque flex

115
Linux From Scratch - Version 11.3-systemd

8.15. Tcl-8.6.13
Le paquet Tcl contient Tool Command Language, un langage de script robuste et polyvalent. Le paquet Expect est
écrit en Tcl (prononcé [tickle]).
Temps de construction 2.7 SBU
approximatif:
Espace disque requis: 89 Mo

8.15.1. Installation de Tcl


Ce paquet et les deux suivants (Expect et DejaGNU) sont installés pour prendre en charge le lancement des suites
de tests de Binutils, GCC et d'autres paquets. Installer trois paquets pour effectuer des tests peut sembler excessif,
mais c'est toujours rassurant, sinon essentiel, de savoir que les outils les plus importants fonctionnent correctement.
Préparez la compilation de Tcl :
SRCDIR=$(pwd)
cd unix
./configure --prefix=/usr \
--mandir=/usr/share/man

Construisez le paquet :
make

sed -e "s|$SRCDIR/unix|/usr/lib|" \
-e "s|$SRCDIR|/usr/include|" \
-i [Link]

sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.5|/usr/lib/tdbc1.1.5|" \
-e "s|$SRCDIR/pkgs/tdbc1.1.5/generic|/usr/include|" \
-e "s|$SRCDIR/pkgs/tdbc1.1.5/library|/usr/lib/tcl8.6|" \
-e "s|$SRCDIR/pkgs/tdbc1.1.5|/usr/include|" \
-i pkgs/tdbc1.1.5/[Link]

sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.3|/usr/lib/itcl4.2.3|" \
-e "s|$SRCDIR/pkgs/itcl4.2.3/generic|/usr/include|" \
-e "s|$SRCDIR/pkgs/itcl4.2.3|/usr/include|" \
-i pkgs/itcl4.2.3/[Link]

unset SRCDIR

Les diverses instructions « sed » après la commande « make » suppriment des références au répertoire de
construction des fichiers de configuration et les remplacent par le répertoire d'installation. Cela n'est pas requis pour
le reste de LFS, mais peut être requis pour un paquet construit plus tard avec Tcl.
Pour tester les résultats, lancez :
make test

Installez le paquet :
make install

Rendez la bibliothèque installée réinscriptible pour que les symboles de débogages puissent être supprimés plus
tard :
chmod -v u+w /usr/lib/[Link]

Installez les en-têtes de Tcl. Le paquet suivant, Expect, en a besoin.


make install-private-headers

116
Linux From Scratch - Version 11.3-systemd

Maintenant créez un lien symbolique nécessaire :


ln -sfv tclsh8.6 /usr/bin/tclsh

Renommez une page de manuel qui entre en conflit avec une page de manuel de Perl :
mv /usr/share/man/man3/{Thread,Tcl_Thread}.3

Éventuellement, installez la documentation en exécutant les commandes suivantes :


cd ..
tar -xf ../[Link] --strip-components=1
mkdir -v -p /usr/share/doc/tcl-8.6.13
cp -v -r ./html/* /usr/share/doc/tcl-8.6.13

8.15.2. Contenu de Tcl


Programmes installés: tclsh (lien vers tclsh8.6) et tclsh8.6
Bibliothèque installée: [Link] et libtclstub8.6.a

Descriptions courtes
tclsh8.6 Le shell de commande de Tcl
tclsh Un lien vers tclsh8.6
[Link] La bibliothèque Tcl
libtclstub8.6.a La bibliothèque de base de Tcl

117
Linux From Scratch - Version 11.3-systemd

8.16. Expect-5.45.4
Le paquet Expect contient des outils pour automatiser, via des dialogues scriptés, des applications interactives
comme telnet, ftp, passwd, fsck, rlogin et tip. Expect est aussi utile pour tester ces mêmes applications et faciliter
toutes sortes de tâches qui sont trop compliquées avec quoi que ce soit d'autre. Le cadre de tests DejaGnu est écrit
en Expect.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 3.9 Mo

8.16.1. Installation d'Expect


Préparez la compilation d'Expect :
./configure --prefix=/usr \
--with-tcl=/usr/lib \
--enable-shared \
--mandir=/usr/share/man \
--with-tclinclude=/usr/include

Voici la signification des options de configuration :


--with-tcl=/usr/lib
Ce paramètre est requis pour dire à configure où le script [Link] se trouve.
--with-tclinclude=/usr/include
Cela dit explicitement à Expect où trouver les en-têtes internes de Tcl.
Construisez le paquet :
make

Pour tester les résultats, lancez :


make test

Installez-le :
make install
ln -svf expect5.45.4/[Link] /usr/lib

8.16.2. Contenu d'Expect


Programme installé: expect
Bibliothèque installée: [Link]

Descriptions courtes
expect Communique avec les autres programmes interactifs selon un script.
[Link] Contient des fonctions qui permettent à Expect d'être utilisé comme une extension
Tcl ou directement à partir du langage C ou du langage C++ (sans Tcl)

118
Linux From Scratch - Version 11.3-systemd

8.17. DejaGNU-1.6.3
Le paquet DejaGnu contient un ensemble de travail pour lancer les suites de tests d'outils GNU. Il est écrit en expect,
qui lui-même utilise Tcl (langage de commande des outils).
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 6.9 Mo

8.17.1. Installation de DejaGNU


Les développeurs en amont recommandent de construire DejaGNU dans un répertoire de construction dédié :
mkdir -v build
cd build

Préparez la compilation de DejaGNU :


../configure --prefix=/usr
makeinfo --html --no-split -o doc/[Link] ../doc/[Link]
makeinfo --plaintext -o doc/[Link] ../doc/[Link]

Construisez et installez le paquet :


make install
install -v -dm755 /usr/share/doc/dejagnu-1.6.3
install -v -m644 doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3

Pour tester les résultats, lancez :


make check

8.17.2. Contenu de DejaGNU


Programme installé: dejagnu et runtest

Descriptions courtes
dejagnu Lanceur de commande auxiliaire de DejaGNU
runtest Un script enveloppe qui repère le bon shell expect puis lance DejaGNU

119
Linux From Scratch - Version 11.3-systemd

8.18. Binutils-2.40
Le paquet Binutils contient un éditeur de liens, un assembleur et d'autres outils permettant de gérer des fichiers objet.
Temps de construction 2.2 SBU
approximatif:
Espace disque requis: 2.6 Go

8.18.1. Installation de Binutils


Vérifiez que les pseudo-terminaux (PTY) fonctionnent correctement dans l'environnement chroot à l’aide du test
suivant :
expect -c "spawn ls"

Cette commande doit afficher ce qui suit :


spawn ls

En revanche, si la sortie affiche le message ci-dessous, c'est que l'environnement n'est pas paramétré pour le bon
fonctionnement de PTY. Vous devez résoudre ce problème avant de lancer les suites de test de Binutils et de GCC :
The system has no more ptys.
Ask your system administrator to create more.

La documentation de Binutils recommande de construire Binutils dans un répertoire de construction dédié :


mkdir -v build
cd build

Préparez la compilation de Binutils :


../configure --prefix=/usr \
--sysconfdir=/etc \
--enable-gold \
--enable-ld=default \
--enable-plugins \
--enable-shared \
--disable-werror \
--enable-64-bit-bfd \
--with-system-zlib

Signification des paramètres de configure :


--enable-gold
Construit l'éditeur de liens gold et l'installe sous le nom de [Link] (en addition à l'éditeur de liens par défaut).
--enable-ld=default
Construit l'éditeur de liens bfd original et l'installe à la fois en tant que ld (l'éditeur par défaut) et [Link].
--enable-plugins
Permet la prise en charge des plugins pour l'éditeur de lien.
--enable-64-bit-bfd
Permet la prise en charge 64 bits (sur les systèmes avec une taille de mot inférieure). Ce paramètre n'est pas
forcément nécessaire sur les systèmes 64 bits, mais sa présence ne changera rien.
--with-system-zlib
Utilise la version déjà installée de la bibliothèque zlib au lieu de construire la version inclue.
Compilez le paquet :
make tooldir=/usr

120
Linux From Scratch - Version 11.3-systemd

Signification des paramètres de configure :


tooldir=/usr
Normalement, le nom du répertoire tooldir (où seront situés les exécutables) est configuré de cette manière :
$(exec_prefix)/$(target_alias).Les machines x86_64 y ajouteront /usr/x86_64-pc-linux-gnu. Comme il
s'agit d'un système personnalisé, il n'est pas nécessaire d'avoir un répertoire spécifique à la cible dans /usr.
Si le système était utilisé pour la compilation croisée (par exemple pour compiler un paquet sur une machine
Intel qui génère du code pouvant être exécuté sur des machines PowerPC), le répertoire s’appellerait $(exec_
prefix)/$(target_alias).

Important
La suite de tests de Binutils est [Link] l’oubliez sous aucun prétexte.

Testez les résultats :


make -k check

Pour afficher la liste des tests qui ont échoué, exécutez :


grep '^FAIL:' $(find -name '*.log')

Douze tests échouent dans la suite de tests gold lorsque les options >--enable-default-pie et --enable-default-
ssp sont passées à GCC.

Installez le paquet :
make tooldir=/usr install

Supprimez les bibliothèques statiques inutiles et une page de manuel vide :


rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,sframe,opcodes}.a
rm -fv /usr/share/man/man1/{gprofng,gp-*}.1

8.18.2. Contenu de Binutils


Programmes installés: addr2line, ar, as, c++filt, dwp, elfedit, gprof, gprofng, ld, [Link], [Link], nm, objcopy,
objdump, ranlib, readelf, size, strings, et strip
Bibliothèques installées: [Link], [Link], [Link], [Link] et [Link]
Répertoire installé: /usr/lib/ldscripts

Descriptions courtes
addr2line Traduit les adresses de programmes en noms de fichier et numéros de ligne ; en fonction de
l’adresse et du nom de l’exécutable, il utilise les informations de débogage disponibles dans
l'exécutable pour déterminer le fichier source et le numéro de ligne associés à cette adresse
ar Crée, modifie et extrait des archives
as Assemble la sortie de la commande gcc en fichiers objet
c++filt Utilisé par l'éditeur de liens pour récupérer les symboles C++ et Java, et pour empêcher les
fonctions surchargées d'entrer en conflit
dwp L'utilitaire d'empaquetage DWARF
elfedit Met à jour l'en-tête ELF des fichiers ELF
gprof Affiche les données de profil du graphe d'appel
gprofng Récupère et analyse les données de performance
ld Un éditeur de liens qui combine un certain nombre d'objets et de fichiers d’archive en un seul
fichier, en déplaçant leurs données et en regroupant les références des symboles

121
Linux From Scratch - Version 11.3-systemd

[Link] Une version réduite de ld qui ne prend en charge que le format de fichier objet ELF
[Link] Lien physique vers ld
nm Liste les symboles présents dans un fichier objet donné
objcopy Traduit un type de fichier objet en un autre
objdump Affiche les informations concernant un fichier objet donné, avec des options permettant
de contrôler les données à afficher. Ces données sont surtout utiles aux programmeurs qui
travaillent sur les outils de compilation
ranlib Génère un index du contenu d'une archive et le stocke dans l'archive. L'index liste tous les
symboles définis par les membres de l'archive qui sont des fichiers objet déplaçables
readelf Affiche des informations sur les binaires de type ELF
size Liste la taille de la section et la taille totale des fichiers objet donnés
strings Affiche pour chaque fichier donné la séquence de caractères imprimables qui sont d'au moins
la taille spécifiée (quatre par défaut). Pour les fichiers objet, cette commande affiche par défaut
uniquement les chaînes des sections d'initialisation et de chargement, et parcourt le fichier entier
pour les autres types de fichiers
strip Supprime les symboles des fichiers objet
libbfd Bibliothèque Binary File Descriptor
libctf Bibliothèque de prise en charge du débogage du format compatible ANSI C
libctf-nobfd Une variante de libctf qui n'utilise pas la fonctionnalité libbfd
libopcodes Une bibliothèque de gestion des codes opération, la « version lisible » des instructions du
processeur. Elle est utilisée pour construire des utilitaires comme objdump
libsframe Une bibliothèque pour prendre en charge le bactracking en ligne avec un simple dérouleur

122
Linux From Scratch - Version 11.3-systemd

8.19. GMP-6.2.1
Le paquet GMP contient des bibliothèques de maths. Elles contiennent des fonctions utiles pour l'arithmétique à
précision arbitraire.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 52 Mo

8.19.1. Installation de GMP

Note
Si vous construisez pour un x86 32 bits, mais si vous avez un processeur capable d'exécuter du code 64
bits et si vous avez spécifié CFLAGS dans l'environnement, le script configure va essayer de configurer pour
du 64 bits et va échouer. Évitez cela en invoquant la commande configure ci-dessous avec
ABI=32 ./configure ...

Note
Les paramètres par défaut de GMP produisent des bibliothèques optimisées pour le processeur de l'hôte. Si
vous souhaitez obtenir des bibliothèques convenables pour des processeurs moins puissants, vous pouvez
créer des bibliothèques génériques comme suit :
cp -v [Link] [Link]
cp -v [Link] [Link]

Préparez la compilation de GMP :


./configure --prefix=/usr \
--enable-cxx \
--disable-static \
--docdir=/usr/share/doc/gmp-6.2.1

Voici la signification des nouvelles options de configure :

--enable-cxx
Ce paramètre active la prise en charge de C++
--docdir=/usr/share/doc/gmp-6.2.1
Cette variable indique le bon emplacement de la documentation.

Compilez le paquet et générez la documentation HTML :


make
make html

Important
La suite de tests de GMP dans cette section est considérée comme critique. Ne la sautez en aucun cas.

Testez les résultats :


make check 2>&1 | tee gmp-check-log

123
Linux From Scratch - Version 11.3-systemd

Attention
Le code de gmp est hautement optimisé pour le processeur sur lequel il est construit. Parfois, le code
chargé de détecter le processeur identifie mal les capacités du système et produira des erreurs dans les
tests ou d’autres applications utilisant les bibliothèques gmp avec le message « Illegal instruction ». Dans
ce cas, gmp devrait être reconfiguré avec l’option --build=x86_64-unknown-linux-gnu et reconstruit.

Assurez-vous que les 197 tests de la suite de tests réussissent tous. Vérifiez les résultats en exécutant la commande
suivante :
awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log

Installez le paquet et sa documentation :


make install
make install-html

8.19.2. Contenu de GMP


Bibliothèques installées: [Link] et [Link]
Répertoire installé: /usr/share/doc/gmp-6.2.1

Descriptions courtes
libgmp Contient les fonctions de maths de précision
libgmpxx Contient des fonctions de maths de précision pour C++

124
Linux From Scratch - Version 11.3-systemd

8.20. MPFR-4.2.0
Le paquet MPFR contient des fonctions d’arithmétique multi-précision.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 43 Mo

8.20.1. Installation de MPFR


Corrigez un cas de test basé sur un bogue des anciennes versions de Glibc :
sed -e 's/+01,234,567/+1,234,567 /' \
-e 's/13.10Pd/13Pd/' \
-i tests/tsprintf.c

Préparez la compilation de MPFR :


./configure --prefix=/usr \
--disable-static \
--enable-thread-safe \
--docdir=/usr/share/doc/mpfr-4.2.0

Compilez le paquet et générez la documentation HTML :


make
make html

Important
La suite de tests de MPFR dans cette section est considérée comme critique. Ne la sautez en aucun cas.

Testez les résultats et assurez-vous que les 197 tests sont réussis :
make check

Installez le paquet et sa documentation :


make install
make install-html

8.20.2. Contenu de MPFR


Bibliothèques installées: [Link]
Répertoire installé: /usr/share/doc/mpfr-4.2.0

Descriptions courtes
libmpfr Contient des fonctions arithmétique multi-précision

125
Linux From Scratch - Version 11.3-systemd

8.21. MPC-1.3.1
Le paquet MPC contient une bibliothèque pour le calcul arithmétique avec des nombres complexes à précision
arbitraire et l'arrondi correct du résultat.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 22 Mo

8.21.1. Installation de MPC


Préparez la compilation de MPC :
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/mpc-1.3.1

Compilez le paquet et générez la documentation HTML :


make
make html

Pour tester les résultats, lancez :


make check

Installez le paquet ainsi que sa documentation :


make install
make install-html

8.21.2. Contenu de MPC


Bibliothèques installées: [Link]
Dossier installé: /usr/share/doc/mpc-1.3.1

Descriptions courtes
libmpc Contient des fonctions mathématiques complexes

126
Linux From Scratch - Version 11.3-systemd

8.22. Attr-2.5.1
Le paquet attr contient des outils d'administration des attributs étendus des objets du système de fichier.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 4.1 Mo

8.22.1. Installation d'Attr


Préparez la compilation d'Attr :
./configure --prefix=/usr \
--disable-static \
--sysconfdir=/etc \
--docdir=/usr/share/doc/attr-2.5.1

Compilez le paquet :
make

Il faut lancer les tests sur un système de fichiers qui prend en charge les attributs étendus, comme les systèmes de
fichiers ext2, ext3, ou ext4. Pour tester les résultats, lancez :
make check

Installez le paquet :
make install

8.22.2. Contenu d'Attr


Programmes installés: attr, getfattr et setfattr
Bibliothèque installée: [Link]
Répertoires installés: /usr/include/attr et /usr/share/doc/attr-2.5.1

Descriptions courtes
attr Étend les attributs des objets d'un système de fichiers
getfattr Affiche les attributs étendus des objets d'un système de fichiers
setfattr Définit les attributs étendus des objets d'un système de fichiers
libattr Contient la bibliothèque de fonctions pour la manipulation des attributs étendus

127
Linux From Scratch - Version 11.3-systemd

8.23. Acl-2.3.1
Le paquet Acl contient des outils d'administration des Access Control Lists (listes de contrôle d'accès) qui sont
utilisés pour définir des droits d'accès discrétionnaires fins aux fichiers et aux répertoires.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 6.1 Mo

8.23.1. Installation d'Acl


Préparez la compilation d'Acl :
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/acl-2.3.1

Compilez le paquet :
make

Il faut lancer les tests d'Acl sur un système de fichiers qui prend en charge les contrôles d'accès après la construction
de Coreutils avec les bibliothèques Acl. Si vous le souhaitez, revenez à ce paquet et lancez make check après avoir
construit le paquetCoreutils plus loin dans ce chapitre.
Installez le paquet :
make install

8.23.2. Contenu d'Acl


Programmes installés: chacl, getfacl et setfacl
Bibliothèques installées: [Link]
Répertoires installés: /usr/include/acl et /usr/share/doc/acl-2.3.1

Descriptions courtes
chacl Modifie la liste de contrôle d'accès d'un fichier ou d'un répertoire
getfacl Donne les listes de contrôle des accès à un fichier
setfacl Définit les listes de contrôle d'accès à un fichier
libacl Contient la bibliothèque de fonction pour la manipulation de Access Control Lists

128
Linux From Scratch - Version 11.3-systemd

8.24. Libcap-2.67
Le paquet Libcap implémente les interfaces du niveau utilisateur avec les fonctions POSIX 1003.1e disponibles
dans les noyaux Linux. Ces possibilités établissent le partage des pouvoirs des privilèges root à un ensemble de
droits distincts.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 2.9 Mo

8.24.1. Installation de Libcap


Évitez que des bibliothèques statiques ne soient installées :
sed -i '/install -m.*STA/d' libcap/Makefile

Compilez le paquet :
make prefix=/usr lib=lib

Voici la signification de l'option make :


lib=lib
Ce paramètre fait en sorte que la bibliothèque soit installée dans /usr/lib plutôt que dans /usr/lib64 sur
x86_64. Il n'a aucun effet sur x86.
Pour tester les résultats, lancez :
make test

Installez le paquet :
make prefix=/usr lib=lib install

8.24.2. Contenu de Libcap


Programmes installés: capsh, getcap, getpcaps, et setcap
Bibliothèque installée: [Link] et [Link]

Descriptions courtes
capsh Une enveloppe shell pour voir et contraindre la prise en charge de ces capacités
getcap Examine les capacités d'un fichier
getpcaps Affiche les capacités des processus requis
setcap Définit les capacités d'un fichier
libcap Contient les fonctions de la bibliothèque de manipulation des capacités POSIX 1003.1e
libpsx Contient des fonctions pour la prise en charge de la sémantique POSIX des appels systèmes associés
avec la bibliothèque pthread

129
Linux From Scratch - Version 11.3-systemd

8.25. Shadow-4.13
Le paquet Shadow contient des programmes de gestion de mots de passe d'une façon sécurisée.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 46 Mo

8.25.1. Installation de Shadow


Note
Si vous souhaitez multiplier l'usage des mots de passe efficaces, reportez-vous à [Link]
[Link]/blfs/../view/blfs-stable-systemd/postlfs/[Link] pour l'installation de CrackLib
avant de compiler Shadow. Puis ajoutez --with-libcrack à la commande configure ci-dessous.

Désactivez l'installation du programme groups et de ses pages de manuel car Coreutils en fournit une meilleure
version. Cela empêche aussi l'installation de pages de manuel déjà installées dans Section 8.3, « Man-pages-6.03 » :
sed -i 's/groups$(EXEEXT) //' src/[Link]
find man -name [Link] -exec sed -i 's/groups\.1 / /' {} \;
find man -name [Link] -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name [Link] -exec sed -i 's/passwd\.5 / /' {} \;

Au lieu d'utiliser la méthode crypt par défaut, utilisez la méthode SHA-512 de chiffrement de mot de passe plus
sécurisée, qui autorise aussi les mots de passe plus longs que huit caractères. Configurez aussi le nombre d'itérations
à 500 000 au lieu de la valeur par défaut 5000, qui est bien trop faible pour prévenir les attaques par force brute sur
les mots de passe. Il est également nécessaire de changer l'emplacement obsolète de /var/spool/mail pour les boîtes
e-mail de l'utilisateur que Shadow utilise par défaut en l'endroit /var/mail utilisé actuellement. Ensuite, retirez /bin
et /sbin de PATH, car ce sont de simples liens symboliques vers leur contrepartie dans /usr.

Note
Si vous préférez garder /bin ou /sbin dans PATH pour une raison ou une autre, modifiez PATH dans .bashrc
après la construction de LFS.

sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \


-e 's@#\(SHA_CRYPT_..._ROUNDS 5000\)@\100@' \
-e 's:/var/spool/mail:/var/mail:' \
-e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \
-i etc/[Link]

Note
Si vous compilez Shadow avec la prise en charge de Cracklib, lancez la commande qui suit :
sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/[Link]

Préparez la compilation de Shadow :


touch /usr/bin/passwd
./configure --sysconfdir=/etc \
--disable-static \
--with-group-name-max-length=32

Voici la signification des nouvelles options de configuration :


touch /usr/bin/passwd
Le fichier /usr/bin/passwd a besoin d'exister parce que son emplacement est codé en dur dans certains
programmes. S'il n'existe pas, le script d'installation va en créer un par défaut au mauvais endroit.

130
Linux From Scratch - Version 11.3-systemd

--with-group-name-max-length=32
La longueur maximum d'un nom d'utilisateur est de 32 caractères. Le paramètre règle un plafond similaire
pour les noms de groupes.
Compilez le paquet :
make

Ce paquet n'a pas de suite de tests.


Installez le paquet :
make exec_prefix=/usr install
make -C man install-man

8.25.2. Configuration de Shadow


Ce paquet contient des outils pour ajouter, modifier, supprimer des utilisateurs et des groupes, initialiser et changer
leur mot de passe, et bien d'autres tâches administratives. Pour une explication complète de ce que signifie password
shadowing, jetez un œil dans le fichier doc/HOWTO à l'intérieur du répertoire source. Il reste une chose à garder à
l'esprit si vous décidez d'utiliser le support de Shadow : les programmes qui ont besoin de vérifier les mots de passe
(gestionnaires d'affichage, programmes FTP, démons pop3 , etc.) ont besoin d'être compatibles avec shadow, c'est-
à-dire qu'ils ont besoin d'être capables de fonctionner avec des mots de passe shadow.
Pour activer les mots de passe shadow, lancez la commande suivante :
pwconv

Pour activer les mots de passe shadow pour les groupes, lancez :
grpconv

La configuration par défaut de Shadow pour l'outil useraddprésente quelques inconvénients qui appellent quelques
explications. Tout d'abord, l'action par défaut de l'outil useradd est de créer un utilisateur et un groupe du même
nom que l'utilisateur. Par défaut les numéros d'ID utilisateur (UID) et d'ID de groupe (GID) commenceront à 1000.
Cela signifie que si vous ne passez pas de paramètres à useradd, chaque utilisateur sera membre d'un groupe unique
sur le système. Si vous ne désirez pas ce comportement, vous devrez passer le paramètre -g ou -N à useradd ou
changer le paramètre USERGROUPS_ENAB dans /etc/[Link]. Voir useradd(8) pour plus d'informations.
Ensuite, pour changer les paramètres par défaut, vous devez créer le fichier /etc/default/useradd et l'adapter à
vos besoins. Créez-le avec :
mkdir -p /etc/default
useradd -D --gid 999

Explication des paramètres de /etc/default/useradd


GROUP=999
Ce paramètre initialise le début des numéros de groupe utilisés dans le fichier /etc/group. La valeur 999
particulière provient du paramètre --gid ci-dessus. Vous pouvez le remplacer par la valeur de votre choix.
Remarquez que useradd ne réutilisera jamais un UID ou un GID. Si le numéro identifié dans ce paramètre est
déjà utilisé, il utilisera le numéro disponible suivant celui-ci. Remarquez aussi que si vous n'avez pas de groupe
de GID égal à ce numéro sur votre système la première fois que vous utilisez useradd sans le paramètre -g,
vous obtiendrez un message d'erreur sur le terminal qui dit : useradd: unknown GID 999, bien que le compte
soit correctement créé. C'est pourquoi nous avons créé le groupe users avec cet identifiant de groupe dans le
Section 7.6, « Création des fichiers et des liens symboliques essentiels ».
CREATE_MAIL_SPOOL=yes
Il résulte de ce paramètre que useradd crée un fichier de boîte mail pour chaque nouvel utilisateur. useradd
rendra le groupe mail propriétaire de ce fichier avec les droits 0660. Si vous préférez que useradd ne crée pas
ces fichiers de boîte mail, lancez la commande suivante :
sed -i '/MAIL/s/yes/no/' /etc/default/useradd

131
Linux From Scratch - Version 11.3-systemd

8.25.3. Configurer le mot de passe de root


Choisissez un mot de passe pour l'utilisateur root et configurez-le avec :
passwd root

8.25.4. Contenu de Shadow


Programmes installés: chage, chfn, chgpasswd, chpasswd, chsh, expiry, faillog, getsubids, gpasswd,
groupadd, groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, lastlog,
login, logoutd, newgidmap, newgrp, newuidmap, newusers, nologin, passwd, pwck,
pwconv, pwunconv, sg (lien vers newgrp), su, useradd, userdel, usermod, vigr (lien
vers vipw) et vipw
Répertoires installés: /etc/default et /usr/include/shadow
Bibliothèques installées: [Link]

Descriptions courtes
chage Utilisé pour modifier le nombre maximum de jours entre des modifications obligatoires du mot de
passe
chfn Utilisé pour modifier le nom complet de l'utilisateur et quelques autres informations
chgpasswd Utilisé pour mettre à jour des mots de passe en lot
chpasswd Utilisé pour mettre à jour les mots de passe utilisateurs en lot
chsh Utilisé pour modifier le shell de connexion par défaut d'un utilisateur
expiry Vérifie et renforce la politique d'expiration des mots de passe
faillog Est utilisé pour examiner les traces d'échecs de connexions, pour configurer le nombre maximum
d'échecs avant qu'un compte ne soit bloqué ou pour réinitialiser le nombre d'échecs
getsubids Est utilisé pour lister les intervalles des identifiants mineurs d'un utilisateurs
gpasswd Est utilisé pour ajouter et supprimer des membres et des administrateurs aux groupes
groupadd Crée un groupe avec le nom donné
groupdel Supprime le groupe ayant le nom donné
groupmems Permet à un utilisateur d'administrer la liste des membres de son groupe sans avoir besoin des
privilèges du super utilisateur.
groupmod Est utilisé pour modifier le nom ou le GID du groupe
grpck Vérifie l'intégrité des fichiers /etc/group et /etc/gshadow
grpconv Crée ou met à jour le fichier shadow à partir du fichier group standard
grpunconv Met à jour /etc/group à partir de /etc/gshadow puis supprime ce dernier
lastlog Indique les connexions les plus récentes de tous les utilisateurs ou d'un utilisateur donné
login Est utilisé par le système pour permettre aux utilisateurs de se connecter
logoutd Est un démon utilisé pour renforcer les restrictions sur les temps et ports de connexion
newgidmap Est utilisé pour configurer la correspondance des gid d'un espace de nom utilisateur
newgrp Est utilisé pour modifier le GID courant pendant une session de connexion
newuidmap Est utilisé pour configurer la correspondance des uid d'un espace de nom utilisateur
newusers Est utilisé pour créer ou mettre à jour toute une série de comptes utilisateur en une fois
nologin Affiche un message selon lequel un compte n'est pas disponible. Destiné à être utilisé comme shell
par défaut pour des comptes qui ont été désactivés

132
Linux From Scratch - Version 11.3-systemd

passwd Est utilisé pour modifier le mot de passe d'un utilisateur ou d'un groupe
pwck Vérifie l'intégrité des fichiers de mots de passe, /etc/passwd et /etc/shadow
pwconv Crée ou met à jour le fichier de mots de passe shadow à partir du fichier password habituel
pwunconv Met à jour /etc/passwd à partir de /etc/shadow puis supprime ce dernier
sg Exécute une commande donnée lors de l'initialisation du GID de l'utilisateur à un groupe donné
su Lance un shell en substituant les ID de l'utilisateur et du groupe
useradd Crée un nouvel utilisateur avec le nom donné ou met à jour les informations par défaut du nouvel
utilisateur
userdel Supprime le compte utilisateur indiqué
usermod Est utilisé pour modifier le nom de connexion de l'utilisateur, son UID (User Identification, soit
Identification Utilisateur), shell, groupe initial, répertoire personnel, etc.
vigr Édite les fichiers /etc/group ou /etc/gshadow
vipw Édite les fichiers /etc/passwd ou /etc/shadow
libsubid bibliothèque de traitement des intervalles subordonnés d'ID des utilisateurs et des groupes

133
Linux From Scratch - Version 11.3-systemd

8.26. GCC-12.2.0
Le paquet GCC contient la collection de compilateurs GNU, laquelle contient les compilateurs C et C++.
Temps de construction 43 SBU (avec les tests)
approximatif:
Espace disque requis: 5.1 Go

8.26.1. Installation de GCC


Si vous construisez sur x86_64, changez le nom du répertoire par défaut des bibliothèques 64 bits en « lib » :
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-[Link] gcc/config/i386/t-linux64
;;
esac

La documentation de GCC recommande de construire GCC dans un répertoire de construction dédié :


mkdir -v build
cd build

Préparez la compilation de GCC :


../configure --prefix=/usr \
LD=ld \
--enable-languages=c,c++ \
--enable-default-pie \
--enable-default-ssp \
--disable-multilib \
--disable-bootstrap \
--with-system-zlib

Remarquez que pour d'autres langages de programmation, il existe des pré-requis qui ne sont pas encore disponibles.
Consultez la page GCC du livre BLFS pour des instructions sur la manière de construire tous les langages pris en
charge par GCC.
Voici la signification des nouveaux paramètres de configuration :
LD=ld
Ce paramètre permet de s'assurer que le script configure utilise le ld installé par Binutils, construit plus tôt dans
ce chapitre, au lieu de la version compilée de manière croisée qui serait autrement utilisée.
--with-system-zlib
Ce paramètre dit à GCC de se lier à la copie de la bibliothèque Zlib installée sur le système, plutôt qu'à sa
propre copie interne.

Note
PIE (exécutable indépendant de la position) est une technique pour produire des programmes binaires
qui peuvent être chargés n'importe où en mémoire. Sans PIE, la fonctionnalité de sécurité nommée
ASLR (randomisation de l'agencement de l'espace d'adressage) peut être appliquée pour les bibliothèques
partagées, mais pas pour l'exécutable lui-même. Activer PIE permet l'ASLR des exécutables en plus des
bibliothèques partagées et réduit certaines attaques basées sur des adresses fixes de code sensible ou de
données dans les exécutables.
SSP (protection contre l'écrasement de la pile) est une technique qui s'assure que la pile des paramètres
n'est pas corrompue. La corruption de pile peut par exemple changer l'adresse de retour d'une sous-routine,
ce qui permettrait de transférer le contrôle à du code dangereux (qui existerait dans le programme ou les
bibliothèques partagées, ou éventuellement injecté par l'attaquant) au lieu du code d'origine.

134
Linux From Scratch - Version 11.3-systemd

Compilez le paquet :
make

Important
Dans cette section, la suite de tests de GCC est considérée comme importante, mais elle prend beaucoup
de temps. Les novices sont encouragés à ne pas l'ignorer. La durée des tests peut être significativement
réduite en ajoutant -jx à la commande make -k check ci-dessous, où x désigne le nombre de cœurs sur
votre système.

Un ensemble de tests dans la suite de tests de GCC est connu pour utiliser toute la pile par défaut, c'est pourquoi
vous devez augmenter la taille de la pile avant de lancer les tests :
ulimit -s 32768

Testez les résultats en tant qu'utilisateur non privilégié, mais ne vous arrêtez pas aux erreurs :
chown -Rv tester .
su tester -c "PATH=$PATH make -k check"

Pour recevoir un résumé des résultats de la suite de tests, lancez :


../contrib/test_summary

Pour n'avoir que les résumés, redirigez la sortie vers grep -A7 Summ.

Vous pouvez comparer les résultats avec ceux situés dans [Link] et
[Link]
Dans gcc, onze tests, dans la suite de tests i386, sont connus pour échouer. C'est dû au fait que les fichiers de tests
ne prennent pas en compte l'option --enable-default-pie.
Dans g++, quatre test liés à PR100400 sont connus pour être rapportés à la fois en XPASS et en FAIL. C'est parce
que le fichier de test pour ce problème connu n'est pas bien écrit.
Quelques échecs inattendus sont parfois inévitables. Les développeurs de GCC connaissent généralement ces
problèmes, mais ils ne les ont pas encore résolus. Sauf si les résultats des tests sont très différents de ceux sur
l'adresse ci-dessus, vous pouvez poursuivre en toute sécurité.
Installez le paquet :
make install

Le répertoire de construction de GCC appartient maintenant à tester et la propriété du répertoire des en-têtes installé
(et son contenu) sera incorrecte. Transférez la propriété à l'utilisateur et au groupe root :
chown -v -R root:root \
/usr/lib/gcc/$(gcc -dumpmachine)/12.2.0/include{,-fixed}

Créez un lien symbolique requis par le FHS pour des raisons « historiques ».
ln -svr /usr/bin/cpp /usr/lib

Ajoutez un lien symbolique de compatibilité pour permettre la compilation de programmes avec l'optimisation à
l'édition des liens (LTO) :
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so \
/usr/lib/bfd-plugins/

Maintenant que notre chaîne d'outils est en place, il est important de s'assurer à nouveau que la compilation et
l'édition de liens fonctionneront comme prévu. Vous devez alors effectuer plusieurs contrôles d'intégrité :
echo 'int main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> [Link]
readelf -l [Link] | grep ': /lib'

135
Linux From Scratch - Version 11.3-systemd

Il ne devrait pas y avoir d'erreur et la sortie de la dernière commande devrait être (avec des différences spécifiques
pour chaque plateforme dans le nom du chargeur dynamique) :
[Requesting program interpreter: /lib64/[Link].2]

Maintenant, assurez-vous que vous êtes prêt à utiliser les bons fichiers :
grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' [Link]

La sortie de la dernière commande devrait être :


/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../lib/Scrt1.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../lib/crti.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../lib/crtn.o succeeded

Selon l'architecture de votre machine, le message ci-dessus peut légèrement différer. La différence porte sur le
nom du répertoire après /usr/lib/gcc. Il est important de vérifier que gcc a trouvé les trois fichiers crt*.o sous
le répertoire /usr/lib.
Vérifiez que le compilateur recherche les bons fichiers d'en-têtes :
grep -B4 '^ /usr/include' [Link]

Cette commande devrait renvoyer la sortie suivante :


#include <...> search starts here:
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/include
/usr/local/include
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/include-fixed
/usr/include

À nouveau, le répertoire nommé selon votre triplet cible peut être différent de celui ci-dessus, selon l'architecture
de votre système.
Ensuite, vérifiez que le nouvel éditeur de liens est utilisé avec les bons chemins de recherche :
grep 'SEARCH.*/usr/lib' [Link] |sed 's|; |\n|g'

Les références au chemins qui ont des composantes comme « -linux-gnu » devraient être ignorés, mais sinon la
sortie de la dernière commande devrait être :
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
SEARCH_DIR("/usr/local/lib64")
SEARCH_DIR("/lib64")
SEARCH_DIR("/usr/lib64")
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");

Un système 32 bits peut voir quelques répertoires différemment. Par exemple, voici la sortie d'une machine i686 :
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32")
SEARCH_DIR("/usr/local/lib32")
SEARCH_DIR("/lib32")
SEARCH_DIR("/usr/lib32")
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");

Ensuite assurez-vous que vous utilisez la bonne libc :


grep "/lib.*/[Link].6 " [Link]

La sortie de la dernière commande devrait être :


attempt to open /usr/lib/[Link].6 succeeded

136
Linux From Scratch - Version 11.3-systemd

Assurez-vous que GCC utilise le bon éditeur dynamique :


grep found [Link]

La sortie de la dernière commande devrait être (avec éventuellement des différences spécifiques à votre plateforme
dans le nom de l'éditeur dynamique) :
found [Link].2 at /usr/lib/[Link].2

Si la sortie ne ressemble pas à celle montrée ci-dessus ou si elle n'est pas disponible du tout, cela signifie que quelque
chose s'est vraiment mal passé. Enquêtez et répétez les étapes pour trouver où les problèmes se trouvent et corrigez-
les. Tout problème doit être résolu avant de continuer le processus.
Une fois que tout fonctionne correctement, nettoyez les fichiers de test :
rm -v dummy.c [Link] [Link]

Enfin, déplacez un fichier mal placé :


mkdir -pv /usr/share/gdb/auto-load/usr/lib
mv -v /usr/lib/*[Link] /usr/share/gdb/auto-load/usr/lib

8.26.2. Contenu de GCC


Programmes installés: c++, cc (lien vers gcc), cpp, g++, gcc, gcc-ar, gcc-nm, gcc-ranlib, gcov, gcov-dump,
gcov-tool et lto-dump
Bibliothèques installées: libasan.{a,so}, libatomic.{a,so}, [Link], libgcc.a, libgcc_eh.a, libgcc_s.so,
libgcov.a, libgomp.{a,so}, libitm.{a,so}, liblsan.{a,so}, liblto_plugin.so,
libquadmath.{a,so}, libssp.{a,so}, libssp_nonshared.a, libstdc++.{a,so}, libstdc+
+fs.a, libsupc++.a, libtsan.{a,so} et libubsan.{a,so}
Répertoires installés: /usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc et /usr/share/gcc-12.2.0

Descriptions courtes
c++ Le compilateur C++
cc Le compilateur C
cpp Le pré-processeur C est utilisé par le compilateur pour l'extension des instructions #include,
#define et d'autres instructions similaires dans les fichiers source
g++ Le compilateur C++
gcc Le compilateur C
gcc-ar Une enveloppe autour de ar qui ajoute un greffon à la ligne de commande. Ce programme
n'est utilisé que pour ajouter « l'optimisation à l'édition des liens » et il n'est pas utile avec
les options de construction par défaut.
gcc-nm Une enveloppe autour de nm qui ajoute un greffon à la ligne de commande. Ce programme
n'est utilisé que pour ajouter « l'optimisation à l'édition des liens » et il n'est pas utile avec
les options de construction par défaut.
gcc-ranlib Une enveloppe autour de ranlib qui ajoute un greffon à la ligne de commande. Ce programme
n'est utilisé que pour ajouter « l'optimisation à l'édition des liens » et il n'est pas utile avec
les options de construction par défaut.
gcov Un outil de tests, qui est utilisé pour analyser les programmes et savoir où des optimisations
seraient suivies du plus d'effets
gcov-dump Outil d'affichage de profil gcda et gcno hors-ligne
gcov-tool Outil de traitement de profils gcda hors-ligne

137
Linux From Scratch - Version 11.3-systemd

lto-dump Outil pour afficher les fichiers objets produits par GCC quand LTO est activé
libasan La bibliothèque de vérification des adresses à l'exécution
libatomic Bibliothèque d'exécution intégrée pour les opérations atomiques de GCC
libcc1 La bibliothèque de pré-traitement C
libgcc Contient la prise en charge de gcc à l'exécution
libgcov Cette bibliothèque est liée à un programme si GCC active le profilage
libgomp L'implémentation GNU de l'API OpenMP API pour la programmation en mémoire parallèle
partagée sur plusieurs plateformes en C/C++ et Fortran
libitm La bibliothèque mémoire transactionnelle de GNU
liblsan La bibliothèque de vérification de fuites à l'exécution
liblto_plugin Le greffon LTO de GCC permet à Binutils de traiter les fichiers objets créés par GCC quand
LTO est activé
libquadmath API de la bibliothèque mathématique en quadruple précision de GCC
libssp Contient des routines qui prennent en charge la fonctionnalité de protection de GCC contre les
débordement de pile. Normalement elle n'est pas utilisée car glibc fournit aussi ces routines.
libstdc++ La bibliothèque C++ standard
libstdc++fs Bibliothèque de systèmes de fichiers ISO/IEC TS 18822:2015
libsupc++ Fournit des routines de prise en charge du langage de programmation C++
libtsan La bibliothèque de vérification des threads à l'exécution
libubsan La bibliothèque de vérification des comportements non définis à l'exécution

138
Linux From Scratch - Version 11.3-systemd

8.27. Pkg-config-0.29.2
Le paquet pkg-config contient un outil pour passer le chemin include et les chemins des bibliothèques afin de
construire les outils au moment de l'exécution de configure et de make.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 29 Mo

8.27.1. Installation de Pkg-config


Préparez la compilation de Pkg-config :
./configure --prefix=/usr \
--with-internal-glib \
--disable-host-tool \
--docdir=/usr/share/doc/pkg-config-0.29.2

Voici la signification des nouvelles options de configure :


--with-internal-glib
Cela permettra à pkg-config d'utiliser sa version interne de Glib car une version externe n'est pas disponible
dans LFS.
--disable-host-tool
Cette option désactive la création d'un lien matériel non souhaité vers le programme pkg-config.
Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.27.2. Contenu de Pkg-config


Programme installé: pkg-config
Répertoire installé: /usr/share/doc/pkg-config-0.29.2

Descriptions courtes
pkg-config Retourne des méta-informations sur la bibliothèque ou le paquet spécifié

139
Linux From Scratch - Version 11.3-systemd

8.28. Ncurses-6.4
Le paquet Ncurses contient les bibliothèques pour gérer les écrans type caractère indépendamment des terminaux.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 45 Mo

8.28.1. Installation de Ncurses


Préparez la compilation de Ncurses :
./configure --prefix=/usr \
--mandir=/usr/share/man \
--with-shared \
--without-debug \
--without-normal \
--with-cxx-shared \
--enable-pc-files \
--enable-widec \
--with-pkg-config-libdir=/usr/lib/pkgconfig

Voici la signification des nouvelles options de configuration :


--with-shared
Cette option fait construire et installer les bibliothèques C partagée de Ncurses.
--without-normal
Cette option empêche Ncurses de construire et d'installer les bibliothèques C statiques.
--without-debug
Cela empêche Ncurses de construire et d'installer les bibliothèques de débogage.
--with-cxx-shared
Cela fait construire et installer les liaisons C++ partagées de Ncurses. Cela empêche aussi de construire et
d'installer les liaisons C++ statiques.
--enable-pc-files
Ce paramètre génère et installe les fichiers .pc pour pkg-config.
--enable-widec
Cette option amène les bibliothèques « wide-character » (comme [Link].6.4) à être compilées au lieu
des bibliothèques normales (comme [Link].6.4). Ces bibliothèques « wide-character » sont utilisables
à la fois en locales multibyte et 8-bit traditionnelles, alors que les bibliothèques normales ne fonctionnent
correctement que dans les locales 8-bit. Les bibliothèques « Wide-character » et normales sont compatibles
entre leurs sources mais pas entre leurs binaires.
Compilez le paquet :
make

Ce paquet a une suite de tests, mais elle ne peut être exécutée qu'après l'installation du paquet. Les tests se situent
dans le répertoire test/. Voir le fichier README dans ce répertoire pour de plus amples détails.
L'installation de ce paquet écrasera [Link].6.4. Cela peut faire crasher le processus de shell qui utilise
du code et des données du fichier de bibliothèque. Installez le paquet avec DESTDIR, et remplacez le fichier de
bibliothèque correctement avec la commande install :
make DESTDIR=$PWD/dest install
install -vm755 dest/usr/lib/[Link].6.4 /usr/lib
rm -v dest/usr/lib/[Link].6.4
cp -av dest/* /

140
Linux From Scratch - Version 11.3-systemd

Beaucoup d'applications s'attendent encore à ce que l'éditeur de liens puisse trouver les bibliothèques Ncurses non
wide-character. Faites en sorte que ces applications croient au lien vers les bibliothèques wide-character par des
liens symboliques et des scripts d'éditeur de liens :
for lib in ncurses form panel menu ; do
rm -vf /usr/lib/lib${lib}.so
echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
ln -sfv ${lib}[Link] /usr/lib/pkgconfig/${lib}.pc
done

Finalement, assurez-vous que les vieilles applications qui cherchent -lcurses lors de la compilation sont encore
compilables :
rm -vf /usr/lib/[Link]
echo "INPUT(-lncursesw)" > /usr/lib/[Link]
ln -sfv [Link] /usr/lib/[Link]

Si désiré, installez la documentation de Ncurses :


mkdir -pv /usr/share/doc/ncurses-6.4
cp -v -R doc/* /usr/share/doc/ncurses-6.4

Note
Les instructions ci-dessus ne créent pas de bibliothèques Ncurses non-wide-character puisqu'aucun paquet
installé par la compilation à partir des sources ne se lie à elles lors de l'exécution. Pour le moment, les
seules applications binaires connues qui se lient aux bibliothèques Ncurses non-wide-character exigent la
version 5. Si vous devez avoir de telles bibliothèques à cause d'une application disponible uniquement en
binaire ou pour vous conformer à la LSB, compilez à nouveau le paquet avec les commandes suivantes :
make distclean
./configure --prefix=/usr \
--with-shared \
--without-normal \
--without-debug \
--without-cxx-binding \
--with-abi-version=5
make sources libs
cp -av lib/lib*.so.5* /usr/lib

8.28.2. Contenu de Ncurses


Programmes installés: captoinfo (lien vers tic), clear, infocmp, infotocap (lien vers tic), ncursesw6-config,
reset (lien vers tset), tabs, tic, toe, tput et tset
Bibliothèques installées: [Link] (lien symbolique et script de l'éditeur de liens vers [Link]),
[Link], [Link], [Link], libncurses++[Link], [Link], ainsi
que leurs équivalents non « non-wide » avec un nom identique, mais sans le « w ».
Répertoires installés: /usr/share/tabset, /usr/share/terminfo et /usr/share/doc/ncurses-6.4

Descriptions courtes
captoinfo Convertit une description termcap en description terminfo
clear Efface l'écran si possible
infocmp Compare ou affiche les descriptions terminfo
infotocap Convertit une description terminfo en description termcap
ncursesw6-config Fournit des informations de configuration de ncurses
reset Réinitialise un terminal avec ses valeurs par défaut

141
Linux From Scratch - Version 11.3-systemd

tabs Efface et initialise des taquets de tab sur un terminal


tic Le compilateur d'entrée de description terminfo qui traduit un fichier terminfo au format
source dans un format binaire nécessaire pour les routines des bibliothèques ncurses. Un
fichier terminfo contient des informations sur les capacités d'un terminal donné
toe Liste tous les types de terminaux disponibles, donnant pour chacun d'entre eux son nom
principal et sa description
tput Rend les valeurs de capacités dépendant du terminal disponibles au shell ; il peut aussi
être utilisé pour réinitialiser un terminal ou pour afficher son nom complet
tset Peut être utilisé pour initialiser des terminaux
libcursesw Un lien vers libncursesw
libncursesw Contient des fonctions pour afficher du texte de plusieurs façons complexes sur un écran
de terminal ; un bon exemple d'utilisation de ces fonctions est le menu affiché par le
make menuconfig du noyau
libncurses++w Contient les liaisons C++ pour les autres bibliothèques de ce paquet
libformw Contient des fonctions pour implémenter des formulaires
libmenuw Contient des fonctions pour implémenter des menus
libpanelw Contient des fonctions pour implémenter des panneaux

142
Linux From Scratch - Version 11.3-systemd

8.29. Sed-4.9
Le paquet Sed contient un éditeur de flux.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 31 Mo

8.29.1. Installation de Sed


Préparez la compilation de Sed :
./configure --prefix=/usr

Compilez le paquet et générez la documentation HTML :


make
make html

Pour tester les résultats, lancez :


chown -Rv tester .
su tester -c "PATH=$PATH make check"

Installez le paquet et sa documentation HTML :


make install
install -d -m755 /usr/share/doc/sed-4.9
install -m644 doc/[Link] /usr/share/doc/sed-4.9

8.29.2. Contenu de Sed


Programme installé: sed
Répertoire installé: /usr/share/doc/sed-4.9

Description courte
sed Filtre et transforme des fichiers texte en une seule passe

143
Linux From Scratch - Version 11.3-systemd

8.30. Psmisc-23.6
Le paquet Psmisc contient des programmes pour afficher des informations sur les processus en cours d'exécution.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 6.5 Mo

8.30.1. Installation de Psmisc


Préparez la compilation de Psmisc pour :
./configure --prefix=/usr

Compilez le paquet :
make

Ce paquet n'a pas de suite de tests.


Installez le paquet :
make install

8.30.2. Contenu de Psmisc


Programmes installés: fuser, killall, peekfd, prtstat, pslog, pstree et pstree.x11 (lien vers pstree)

Descriptions courtes
fuser Indique les PID de processus utilisant les fichiers ou systèmes de fichiers donnés
killall Tue les processus suivant leur nom. Il envoie un signal à tous les processus en cours
peekfd Observe les descripteurs d'un processus en cours d'exécution, selon son PID
prtstat Affiche des informations sur un processus
pslog Rapport le chemin du journal actuel d'un processus
pstree Affiche les processus en cours hiérarchiquement
pstree.x11 Identique à pstree, si ce n'est qu'il attend une confirmation avant de quitter

144
Linux From Scratch - Version 11.3-systemd

8.31. Gettext-0.21.1
Le paquet Gettext contient des outils pour l'internationalisation et la localisation. Ceci permet aux programmes
d'être compilés avec la prise en charge des langues natives (Native Language Support ou NLS), pour afficher des
messages dans la langue native de l'utilisateur.
Temps de construction 1.3 SBU
approximatif:
Espace disque requis: 241 Mo

8.31.1. Installation de Gettext


Préparez la compilation de Gettext :
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/gettext-0.21.1

Compilez le paquet :

make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install
chmod -v 0755 /usr/lib/preloadable_libintl.so

8.31.2. Contenu de Gettext


Programmes installés: autopoint, envsubst, gettext, [Link], gettextize, msgattrib, msgcat, msgcmp,
msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit,
msgmerge, msgunfmt, msguniq, ngettext, recode-sr-latin et xgettext
Bibliothèques installées: [Link], [Link], [Link], [Link], [Link] et
preloadable_libintl.so
Répertoires installés: /usr/lib/gettext, /usr/share/doc/gettext-0.21.1, /usr/share/gettext et /usr/share/
gettext-0.19.8

Descriptions courtes
autopoint Copie les fichiers d'infrastructure standard Gettext en un paquet source
envsubst Substitue les variables d'environnement dans des chaînes de format shell
gettext Traduit un message en langue naturelle dans la langue de l'utilisateur en recherchant
la traduction dans un catalogue de messages
[Link] Sert en priorité de bibliothèque de fonction shell pour gettext
gettextize Copie tous les fichiers standard Gettext dans le répertoire de haut niveau d'un paquet,
pour commencer son internationalisation
msgattrib Filtre les messages d'un catalogue de traduction suivant leurs attributs et manipule
les attributs
msgcat Concatène et fusionne les fichiers .po
msgcmp Compare deux fichiers .po pour vérifier que les deux contiennent le même ensemble
de chaînes msgid

145
Linux From Scratch - Version 11.3-systemd

msgcomm Trouve les messages qui sont communs aux fichiers .po donnés
msgconv Convertit un catalogue de traduction en un autre codage de caractères
msgen Crée un catalogue de traduction anglais
msgexec Applique une commande pour toutes les traductions d'un catalogue de traduction
msgfilter Applique un filtre à toutes les traductions d'un catalogue de traductions
msgfmt Génère un catalogue binaire de messages à partir d'un catalogue de traductions
msggrep Extrait tous les messages d'un catalogue de traductions correspondant à un modèle
donné ou appartenant à d'autres sources données
msginit Crée un nouveau fichier .po, initialise l'environnement de l'utilisateur
msgmerge Combine deux traductions brutes en un seul fichier
msgunfmt Décompile un catalogue de messages binaires en un texte brut de la traduction
msguniq Unifie les traductions dupliquées en un catalogue de traduction
ngettext Affiche les traductions dans la langue native d'un message texte dont la forme
grammaticale dépend d'un nombre
recode-sr-latin Recode du texte serbe de l'écrit cyrillique au latin
xgettext Extrait les lignes de messages traduisibles à partir des fichiers source donnés pour
réaliser la première traduction de modèle
libasprintf Définit la classe autosprintf qui rend les routines de sortie formatée C utilisables dans
les programmes C++ pour utiliser les chaînes de <string> et les flux de <iostream>
libgettextlib Une bibliothèque privée qui contient les routines communes utilisées par les
nombreux programmes Gettext. Ils ne sont pas faits pour un emploi général
libgettextpo Utilisé pour écrire les programmes spécialisés qui s'occupent des fichiers .po. Cette
bibliothèque est utilisée lorsque les applications standards livrées avec Gettext ne
vont pas suffire (comme msgcomm, msgcmp, msgattrib et msgen)
libgettextsrc Une bibliothèque privée qui contient les routines communes utilisées par les
nombreux programmes Gettext. Ils ne sont pas faits pour un emploi général
libtextstyle Bibliothèque de mise en forme de texte
preloadable_libintl Une bibliothèque faite pour être utilisée par LD_PRELOAD et qui aide libintl à
archiver des messages non traduits

146
Linux From Scratch - Version 11.3-systemd

8.32. Bison-3.8.2
Le paquet Bison contient un générateur d'analyseurs.
Temps de construction 2.3 SBU
approximatif:
Espace disque requis: 62 Mo

8.32.1. Installation de Bison


Préparez la compilation de Bison :
./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2

Compilez le paquet :
make

Pour tester les résultats (environ 5,5 SBU), lancez :


make check

Installez le paquet :
make install

8.32.2. Contenu de Bison


Programmes installés: bison et yacc
Bibliothèque installée: liby.a
Répertoire installé: /usr/share/bison

Descriptions courtes
bison Génère, à partir d'une série de règles, un programme d'analyse de structure de fichiers texte ; Bison est un
remplacement pour Yacc (Yet Another Compiler Compiler)
yacc Un emballage pour bison, utile pour les programmes qui appellent toujours yacc au lieu de bison ; il
appelle bison avec l'option -y
liby La bibliothèque Yacc contenant des implémentations, compatible Yacc, des fonctions yyerror et main ;
cette bibliothèque n'est généralement pas très utile mais POSIX en a besoin

147
Linux From Scratch - Version 11.3-systemd

8.33. Grep-3.8
Le paquet Grep contient des programmes de recherche du contenu de fichiers.
Temps de construction 0.4 SBU
approximatif:
Espace disque requis: 37 Mo

8.33.1. Installation de Grep


Tout d'abord, supprimez un avertissement sur l'utilisation d'egrep et fgrep qui fount échouer les tests de certains
paquets :
sed -i "s/echo/#echo/" src/[Link]

Préparez la compilation de Grep :


./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.33.2. Contenu de Grep


Programmes installés: egrep, fgrep et grep

Descriptions courtes
egrep Affiche les lignes qui correspondent à une expression rationnelle étendue. Il est obsolète, utilisez plutôt
grep -E
fgrep Affiche les lignes qui correspondent à une liste de chaînes fixes. Il est obsolète, utilisez plutôt grep -F
grep Affiche des lignes qui correspondent à une expression rationnelle basique

148
Linux From Scratch - Version 11.3-systemd

8.34. Bash-5.2.15
Le paquet Bash contient le Bourne-Again Shell.
Temps de construction 1.2 SBU
approximatif:
Espace disque requis: 52 Mo

8.34.1. Installation de Bash


Préparez la compilation de Bash :
./configure --prefix=/usr \
--without-bash-malloc \
--with-installed-readline \
--docdir=/usr/share/doc/bash-5.2.15

Voici la signification de la nouvelle option de configure :


--with-installed-readline
Cette option indique à Bash d'utiliser la bibliothèque readline déjà installée sur le système plutôt que d'utiliser
sa propre version de readline.
Compilez le paquet :
make

Sautez à « Installation du paquet » si vous n'exécutez pas la suite de test.


Pour préparer les tests, assurez-vous que l'utilisateur tester peut écrire dans l'arborescence des sources :
chown -Rv tester .

La suite de tests de ce paquet est conçue pour être lancée en tant qu'utilisateur non-root qui possède le terminal
connecté à l'entrée standard. Pour satisfaire ce prérequis, démarrez un nouveau pseudo-terminal avec Expect et
lancez les tests en tant qu'utilisateur tester :
su -s /usr/bin/expect tester << EOF
set timeout -1
spawn make tests
expect eof
lassign [wait] _ _ _ value
exit $value
EOF

La suite de tests utilise diff pour détecter les différences entre la sortie des scripts de test et la sortie attendue. Toute
sortie de diff (préfixée par < et >) indique un échec du test, à moins qu'un message disant que la différence est
ignorée n'apparaisse. Un test nommé run-builtins est connu pour échouer sur certaines distributions hôtes avec
une différence sur la première ligne de la sortie.
Installez le paquet :
make install

Lancez le programme bash nouvellement compilé (en remplaçant celui en cours d'exécution) :
exec /usr/bin/bash --login

8.34.2. Contenu de Bash


Programmes installés: bash, bashbug et sh (lien vers bash)
Répertoire installé: /usr/include/bash, /usr/lib/bash et /usr/share/doc/bash-5.2.15

149
Linux From Scratch - Version 11.3-systemd

Descriptions courtes
bash Un interpréteur de commandes largement utilisé ; il réalise un grand nombre d'expansions et de
substitutions sur une ligne de commande donnée avant de l'exécuter, ce qui fait de cet interpréteur un
outil très puissant
bashbug Un script shell qui aide l'utilisateur à composer et à envoyer des courriers électroniques contenant des
rapports de bogues formatés concernant bash
sh Un lien symbolique vers le programme bash ; à son appel en tant que sh, bash essaie de copier
le comportement initial des versions historiques de sh aussi fidèlement que possible, tout en se
conformant aussi au standard POSIX

150
Linux From Scratch - Version 11.3-systemd

8.35. Libtool-2.4.7
Le paquet Libtool contient le script de prise en charge générique des bibliothèques de GNU. Il facilite l'utilisation
des bibliothèques partagées dans une interface cohérente et portable.
Temps de construction 1.4 SBU
approximatif:
Espace disque requis: 44 Mo

8.35.1. Installation de Libtool


Préparez la compilation de Libtool :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make -k check

Note
Le temps de test de Libtool peut être considérablement réduit sur un système avec plusieurs cœurs. Pour
ce faire, ajoutez TESTSUITEFLAGS=-j<N> à la ligne ci-dessus. Par exemple, on peut réduire le temps
de test de plus de 60 pourcents en utilisant -j4.

Cinq tests ont tendance à échouer dans l'environnement de construction de LFS à cause d’une dépendance circulaire,
mais ces tests réussissent tous s'ils sont relancés après l'installation d’automake. De plus, deux tests déclenchent un
avertissement sur les expression régulières non-POSIX et échouent avec grep-3.8.
Installez le paquet :
make install

Supprimez une bibliothèque statique inutile :


rm -fv /usr/lib/libltdl.a

8.35.2. Contenu de Libtool


Programmes installés: libtool et libtoolize
Bibliothèques installées: [Link]
Répertoires installés: /usr/include/libltdl, et /usr/share/libtool

Descriptions courtes
libtool Fournit des services de prise en charge de construction généralisée de bibliothèques
libtoolize Fournit une façon standard d'ajouter la prise en charge de libtool dans un paquet
libltdl Cache les difficultés d'ouverture des bibliothèques dynamiques chargées

151
Linux From Scratch - Version 11.3-systemd

8.36. GDBM-1.23
Le paquet GDBM contient le gestionnaire de bases de données de GNU. C'est une bibliothèque de fonctions de bases
de données qui utilise du hachage extensible et qui fonctionne comme le dbm standard d'UNIX. La bibliothèque
offre les bases pour stocker des paires clés/données, chercher et extraire les données avec leur clé, effacer celles-
ci ainsi que leurs données associées.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 13 Mo

8.36.1. Installation de GDBM


Préparez la compilation de GDBM :
./configure --prefix=/usr \
--disable-static \
--enable-libgdbm-compat

Voici la signification de l'option de configuration :


--enable-libgdbm-compat
Ce paramètre permet de construire la bibliothèque de compatibilité libgdbm. D'autres paquets extérieurs à LFS
peuvent exiger les anciennes routines de DBM qu'elle fournit.
Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.36.2. Contenu de GDBM


Programmes installés: gdbm_dump, gdbm_load, et gdbmtool
Bibliothèques installées: [Link] et libgdbm_compat.so

Descriptions courtes
gdbm_dump Envoie une base de données GDBM vers un fichier
gdbm_load Recrée une base de données GDBM à partir d'un fichier
gdbmtool Règle et modifie une base de données GDBM
libgdbm Contient des fonctions pour manipuler une base de données hachée
libgdbm_compat Bibliothèque de compatibilité contenant les anciennes fonctions DBM

152
Linux From Scratch - Version 11.3-systemd

8.37. Gperf-3.1
Gperf génère une fonction de hachage parfait à partir d'un trousseau.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 6.1 Mo

8.37.1. Installation de Gperf


Préparez la compilation de Gperf :
./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1

Compilez le paquet :
make

Les tests sont connus pour échouer lors d'une exécution parallélisée (l'option -j plus grande que 1). Pour tester le
résultat lancez :
make -j1 check

Installez le paquet :
make install

8.37.2. Contenu de Gperf


Programme installé: gperf
Répertoire installé: /usr/share/doc/gperf-3.1

Descriptions courtes
gperf Génère un hachage parfait à partir d'un trousseau

153
Linux From Scratch - Version 11.3-systemd

8.38. Expat-2.5.0
Le paquet Expat contient une bibliothèque C orientée flux pour analyser du XML.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 12 Mo

8.38.1. Installation d'Expat


Préparez la compilation d'Expat :
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/expat-2.5.0

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

Si vous le désirez, installez la documentation :


install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.5.0

8.38.2. Contenu d'Expat


Programme installé: xmlwf
Bibliothèques installées: [Link]
Répertoire installé: /usr/share/doc/expat-2.5.0

Descriptions courtes
xmlwf Est un outil de validation pour vérifier si les documents XML sont bien formés ou non
libexpat Contient les fonctions de l'API de l'analyse XML

154
Linux From Scratch - Version 11.3-systemd

8.39. Inetutils-2.4
Le paquet Inetutils contient des programmes réseaux basiques.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 31 Mo

8.39.1. Installation de Inetutils


Préparez la compilation d'Inetutils :
./configure --prefix=/usr \
--bindir=/usr/bin \
--localstatedir=/var \
--disable-logger \
--disable-whois \
--disable-rcp \
--disable-rexec \
--disable-rlogin \
--disable-rsh \
--disable-servers

Voici la signification des options de configuration :

--disable-logger
Cette option empêche l'installation du programme logger par Inetutils. Ce programme est utilisé par les scripts
pour passer des messages au démon des traces système. Nous ne l'installons pas car Util-linux livre une version
plus récente.
--disable-whois
Cette option désactive la construction du client whois d'Inetutils qui est vraiment obsolète. Les instructions
pour un meilleur client whois sont dans le livre BLFS.
--disable-r*
Ces paramètres désactivent la construction de programmes obsolètes qui ne doivent pas être utilisés pour des
raisons de sécurité. Les fonctions fournies pas ces programmes peuvent être fournies par le paquet openssh
du livre BLFS.
--disable-servers
Ceci désactive l'installation des différents serveurs réseau inclus dans le paquet Inetutils. Ces serveurs semblent
inappropriés dans un système LFS de base. Certains ne sont pas sécurisés et ne sont considérés sûrs que sur
des réseaux de confiance. Remarquez que de meilleurs remplacements sont disponibles pour certains de ces
serveurs.
Compilez le paquet :
make

Pour tester les résultats, exécutez :


make check

Installez le paquet :
make install

Déplacez un programme au bon emplacement :


mv -v /usr/{,s}bin/ifconfig

155
Linux From Scratch - Version 11.3-systemd

8.39.2. Contenu de Inetutils


Programmes installés: dnsdomainname, ftp, ifconfig, hostname, ping, ping6, talk, telnet, tftp et traceroute

Descriptions courtes
dnsdomainname Affiche le nom de domaine du système
ftp Est le programme de transfert de fichier
hostname Affiche ou règle le nom de l'hôte
ifconfig Gère des interfaces réseaux
ping Envoie des paquets echo-request et affiche le temps mis pour que la réponse arrive
ping6 Une version de ping pour les réseaux IPv6
talk Est utilisé pour discuter avec un autre utilisateur
telnet Une interface du protocole TELNET
tftp Un programme de transfert trivial de fichiers
traceroute Trace le trajet que prennent vos paquets depuis l'endroit où vous travaillez jusqu'à un hôte sur
un réseau, en montrant tous les hops (passerelles) intermédiaires pendant le chemin

156
Linux From Scratch - Version 11.3-systemd

8.40. Less-608
Le paquet Less contient un visualiseur de fichiers texte.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 4.3 Mo

8.40.1. Installation de Less


Préparez la compilation de Less :
./configure --prefix=/usr --sysconfdir=/etc

Voici la signification des options de configuration :


--sysconfdir=/etc
Cette option indique aux programmes créés par le paquet de chercher leurs fichiers de configuration dans /etc.
Compilez le paquet :
make

Ce paquet n'est pas fourni avec une suite de test.


Installez le paquet :
make install

8.40.2. Contenu de Less


Programmes installés: less, lessecho et lesskey

Descriptions courtes
less Un visualiseur de fichiers. Il affiche le contenu d'un fichier, vous permettant de le faire défiler, de
chercher des chaînes et de sauter vers des repères
lessecho Nécessaire pour étendre les méta-caractères, comme * et ?, dans les noms de fichiers sur les systèmes
Unix
lesskey Utilisé pour spécifier les associations de touches pour less

157
Linux From Scratch - Version 11.3-systemd

8.41. Perl-5.36.0
Le paquet Perl contient le langage pratique d'extraction et de rapport (Practical Extraction and Report Language).
Temps de construction 7.9 SBU
approximatif:
Espace disque requis: 234 Mo

8.41.1. Installation de Perl


Cette version de Perl compile à présent les modules Compress::Raw::Zlib et Compress::Raw::BZip2. Par défaut,
Perl utilisera une copie interne du code source Zlib pour la compilation. Lancez la commande suivante afin que Perl
utilise les bibliothèques Zlib installées sur le système :
export BUILD_ZLIB=False
export BUILD_BZIP2=0

Si vous voulez avoir un contrôle total sur la façon dont Perl est configuré, vous pouvez supprimer les options « -
des » de la commande suivante et contrôler à la main la façon dont ce paquet est construit. Autrement, exécutez
l'exacte commande ci-dessous pour utiliser les paramètres par défaut que détecte Perl automatiquement :
sh Configure -des \
-Dprefix=/usr \
-Dvendorprefix=/usr \
-Dprivlib=/usr/lib/perl5/5.36/core_perl \
-Darchlib=/usr/lib/perl5/5.36/core_perl \
-Dsitelib=/usr/lib/perl5/5.36/site_perl \
-Dsitearch=/usr/lib/perl5/5.36/site_perl \
-Dvendorlib=/usr/lib/perl5/5.36/vendor_perl \
-Dvendorarch=/usr/lib/perl5/5.36/vendor_perl \
-Dman1dir=/usr/share/man/man1 \
-Dman3dir=/usr/share/man/man3 \
-Dpager="/usr/bin/less -isR" \
-Duseshrplib \
-Dusethreads

Voici la signification des options de configuration :


-Dvendorprefix=/usr
Ainsi, on s'assure que perl sait communiquer aux paquets l'emplacement où ils devraient installer leurs modules
Perl.
-Dpager="/usr/bin/less -isR"
Ceci assure que less est utilisé au lieu de more.
-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3
Étant donné que Groff n'est pas encore installé, Configure pense que nous ne voulons pas des pages de manuel
de Perl. Ces paramètres changent cette décision.
-Duseshrplib
Construit une bibliothèque partagée dont certains modules perl ont besoin.
-Dusethreads
Construisez perl avec la prise en charge des threads.
-Dprivlib,-Darchlib,-Dsitelib,...
Ces paramètres définissent où Perl cherche les modules installés. Les éditeurs de LFS ont choisi de les mettre
dans une structure de répertoires basée sur la version [Link] de Perl (5.36), qui permet de mettre Perl à
jour vers de nouvelles versions Patch (5.36.0) sans avoir besoin de réinstaller tous les modules.
Compilez le paquet :
make

158
Linux From Scratch - Version 11.3-systemd

Pour tester les résultats (approximativement 11 SBU), lancez :


make test

Installez le paquet et faites le ménage :


make install
unset BUILD_ZLIB BUILD_BZIP2

8.41.2. Contenu de Perl


Programmes installés: corelist, cpan, enc2xs, encguess, h2ph, h2xs, instmodsh, json_pp, libnetcfg, perl,
perl5.36.0 (lien matériel vers perl), perlbug, perldoc, perlivp, perlthanks (lien matériel
vers perlbug), piconv, pl2pm, pod2html, pod2man, pod2text, pod2usage, podchecker,
podselect, prove, ptar, ptardiff, ptargrep, shasum, splain, xsubpp et zipdetails
Bibliothèques installées: Plusieurs qui ne peuvent pas être listés ici
Répertoire installé: /usr/lib/perl5

Descriptions courtes
corelist Une interface en ligne de commande pour Module::CoreList
cpan Interagit avec le réseau d'archive Perl global (Comprehensive Perl Archive Network, CPAN) à
partir de la ligne de commande
enc2xs Construit une extension Perl pour le module Encode, soit à partir de Unicode Character Mappings
soit à partir de Tcl Encoding Files
encguess Devine le type d'encodage d'un ou plusieurs fichiers
h2ph Convertit les fichiers d'en-têtes C .h en fichiers d'en-têtes Perl .ph
h2xs Convertit les fichiers d'en-têtes C .h en extensions Perl
instmodsh Script shell pour examiner les modules Perl installés, et pouvant créer une archive tar à partir d'un
module installé
json_pp Convertit des données entre certains formats d'entrée et de sortie
libnetcfg Peut être utilisé pour configurer le module Perl libnet
perl Combine quelques-unes des meilleures fonctionnalités de C, sed, awk et sh en un langage style
couteau suisse
perl5.36.0 Un lien matériel vers perl
perlbug Utilisé pour générer des rapports de bogues sur Perl ou les modules l'accompagnant et pour les
envoyer par courrier électronique
perldoc Affiche une partie de la documentation au format pod, embarquée dans le répertoire d'installation
de Perl ou dans un script Perl
perlivp La procédure de vérification d'installation de Perl. Il peut être utilisé pour vérifier que Perl et ses
bibliothèques ont été installés correctement
perlthanks Utilisé pour générer des messages de remerciements par mail aux développeurs de Perl
piconv Une version Perl du convertisseur de codage des caractères iconv
pl2pm Un outil simple pour la conversion des fichiers Perl4 .pl en modules Perl5 .pm
pod2html Convertit des fichiers à partir du format pod vers le format HTML
pod2man Convertit des fichiers à partir du format pod vers une entrée formatée *roff
pod2text Convertit des fichiers à partir du format pod vers du texte ANSI

159
Linux From Scratch - Version 11.3-systemd

pod2usage Affiche les messages d'usage à partir des documents embarqués pod
podchecker Vérifie la syntaxe du format pod des fichiers de documentation
podselect Affiche les sections sélectionnées de la documentation pod
prove Outil en ligne de commande pour lancer des tests liés au module Test::Harness
ptar Un programme du genre tar écrit en Perl
ptardiff Un programme Perl qui compare une archive extraite et une non extraite
ptargrep Un programme Perl qui applique des modèles correspondant au contenu des fichiers d'une archive
tar
shasum Affiche ou vérifie des sommes de contrôle SHA
splain Utilisé pour forcer la verbosité des messages d'avertissement avec Perl
xsubpp Convertit le code Perl XS en code C
zipdetails Affiche des détails sur la structure interne d'un fichier Zip

160
Linux From Scratch - Version 11.3-systemd

8.42. XML::Parser-2.46
Le module XML::Parser est une interface Perl avec l'analyseur Expat de James Clark.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 2.3 Mo

8.42.1. Installation de XML::Parser


Préparez la compilation de XML::Parser :
perl [Link]

Compilez le paquet :
make

Pour tester les résultats, lancez :


make test

Installez le paquet :
make install

8.42.2. Contenu de XML::Parser


Module installé: [Link]

Descriptions courtes
Expat fournit l'interface Perl avec Expat

161
Linux From Scratch - Version 11.3-systemd

8.43. Intltool-0.51.0
Le paquet Intltool est un outil d'internationalisation utilisé pour extraire des chaînes traduisibles à partir de fichiers
sources.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 1.5 Mo

8.43.1. Installation d'Intltool


Corrigez un avertissement causé par perl-5.22 et les versions ultérieures :
sed -i 's:\\\${:\\\$\\{:' [Link]

Note
L'expression régulière ci-dessus a l'air inhabituelle à cause des antislashs. Elle ajoute un antislash avant
l'accolade ouvrante dans la séquence « \${ » ce qui donne « \&\{ ».

Préparez la compilation d'Intltool :


./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install
install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO

8.43.2. Contenu d'Intltool


Programmes installés: intltool-extract, intltool-merge, intltool-prepare, intltool-update et intltoolize
Répertoires installés: /usr/share/doc/intltool-0.51.0 et /usr/share/intltool

Descriptions courtes
intltoolize Prépare l'utilisation d'intltool par un paquet
intltool-extract Génère des fichiers d'en-tête lisibles par gettext
intltool-merge Rassemble les chaînes traduites dans divers types de fichiers
intltool-prepare Met à jour les fichiers pot et les synchronise avec les fichiers de traduction
intltool-update Met à jour les modèles po et les synchronise avec les traductions

162
Linux From Scratch - Version 11.3-systemd

8.44. Autoconf-2.71
Le paquet Autoconf contient des programmes conçus pour produire des scripts shell qui configurent
automatiquement du code source.
Temps de construction moins de 0.1 SBU (environ 6.2 SBU avec les tests)
approximatif:
Espace disque requis: 24 Mo

8.44.1. Installation d’Autoconf


Bash-5.2 et ses versions ultérieures entraînent de nombreux problèmes lors des tests. Vous devez d’abord les
corriger :
sed -e 's/SECONDS|/&SHLVL|/' \
-e '/BASH_ARGV=/a\ /^SHLVL=/ d' \
-[Link] tests/[Link]

Préparez la compilation d'Autoconf :


./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :

make check

Note
Sur un système avec plusieurs cœurs, il est possible de réduire considérablement le temps de test
d’autoconf. Pour cela, ajoutez TESTSUITEFLAGS=-j<N> à la ligne ci-dessus. Par exemple, avec -j4,
on peut réduire le temps de test de plus de 60 pourcents.

Installez le paquet :
make install

8.44.2. Contenu d’Autoconf


Programmes installés: autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate et ifnames
Répertoire installé: /usr/share/autoconf

Descriptions courtes
autoconf Produit des scripts shell qui configurent automatiquement des paquets de code source logiciel,
permettant ainsi de les adapter à tous les types de systèmes Unix. Les scripts de configuration
qu'autoconf produit sont indépendants. Il n’y a pas besoin du programme autoconf pour les
exécuter.
autoheader Un outil pour créer des fichiers modèles d'instructions C #define que la commande configure
pourra utiliser
autom4te Un emballage pour le processeur de macro M4
autoreconf Exécute automatiquement autoconf, autoheader, aclocal, automake, gettextize et libtoolize
dans le bon ordre pour gagner du temps lorsque les fichiers modèles d'autoconf et d'automake
sont modifiés.

163
Linux From Scratch - Version 11.3-systemd

autoscan Aide à la création de fichiers [Link] pour un paquet logiciel. Il examine les fichiers source
d'une arborescence de répertoires pour y trouver d’éventuels problèmes de portabilité communs,
et crée un fichier [Link] servant de fichier [Link] préliminaire pour le paquet
autoupdate Modifie un fichier [Link] qui désigne toujours les macros autoconf par leurs anciens
noms pour qu’il utilise leurs noms actuels
ifnames Aide à l’écriture des fichiers [Link] pour un paquet logiciel. Il affiche les identifiants que
le paquet utilise dans les conditions du préprocesseur C. Si un paquet a déjà été configuré pour
avoir une certaine portabilité, ce programme aide à déterminer ce que configure doit vérifier. Il
peut aussi remplir les blancs dans un fichier [Link] généré par autoscan.

164
Linux From Scratch - Version 11.3-systemd

8.45. Automake-1.16.5
Le paquet Automake contient des programmes de génération de Makefile à utiliser avec Autoconf.
Temps de construction moins de 0.1 SBU (environ 7.3 SBU avec les tests)
approximatif:
Espace disque requis: 114 Mo

8.45.1. Installation de Automake


Préparez la compilation d'Automake :
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.5

Compilez le paquet :
make

L'option -j4 de make accélère la vitesse des tests, même sur les processeurs à un seul cœur en raison de délais
internes de chaque test. Pour tester les résultats, lancez :
make -j4 check

Le test t/[Link] est connu pour échouer.


Installez le paquet :
make install

8.45.2. Contenu de Automake


Programmes installés: aclocal, aclocal-1.16 (lié matériel avec aclocal), automake, et automake-1.16 (lié
matériel avec automake)
Répertoires installés: /usr/share/aclocal-1.16, /usr/share/automake-1.16, et /usr/share/doc/automake-1.16.5

Descriptions courtes
aclocal Génère des fichiers aclocal.m4 basés sur le contenu du fichier [Link]
aclocal-1.16 Un lien matériel vers aclocal
automake Un outil pour générer automatiquement des fichiers [Link] à partir de fichiers Makefile.
am. Pour créer tous les fichiers [Link] d'un paquet, lancez ce programme dans le
répertoire de haut niveau. En parcourant le fichier [Link], il trouve automatiquement
chaque fichier [Link] approprié et génère le fichier [Link] correspondant.
automake-1.16 Un lien matériel vers automake

165
Linux From Scratch - Version 11.3-systemd

8.46. OpenSSL-3.0.8
Le paquet OpenSSL contient des outils de gestion et des bibliothèques cryptographiques. Ils servent à fournir des
fonctions cryptographiques à d'autres paquets, comme OpenSSH, des applications de messagerie électronique et
des navigateurs Internet (pour accéder à des sites HTTPS).
Temps de construction 3.2 SBU
approximatif:
Espace disque requis: 520 Mo

8.46.1. Installation d'OpenSSL


Préparez la compilation d'OpenSSL :
./config --prefix=/usr \
--openssldir=/etc/ssl \
--libdir=lib \
shared \
zlib-dynamic

Compilez le paquet :
make

Pour tester les résultats, lancez :


make test

Un test, 30-test_afalg.t, est connu pour échouer sur certaines configuration du noyau (il dépend de valeurs
incohérentes des paramètres CONFIG_CRYPTO_USER_API*). S'il échoue, vous pouvez l'ignorer.
Installez le paquet :
sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile
make MANSUFFIX=ssl install

Ajoutez la version au nom de répertoire de la documentation, pour rester cohérent avec d'autres paquets :
mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.0.8

Si vous le souhaitez, installez de la documentation supplémentainre :


cp -vfr doc/* /usr/share/doc/openssl-3.0.8

Note
Open SSL doit être mis à jour lorsqu'une nouvelle version corrigeant des vulnérabilités est annoncée.
Depuis OpenSSL 3.0.0, les versions d'OpenSSL suivent le schéma [Link]. La
compatibilité d'API/ABI est assurée pour les mêmes numéros de version MAJOR. Comme LFS n'installe
que les bibliothèques partagées, vous n'avez pas besoin de recompiler les programmes qui renvoient vers
[Link] ni [Link] lorsque vous mettez à jour vers une version qui a le même numéro MAJOR.

Cependant, tout programme en cours d'exécution lié à ces bibliothèque doit être arrêté et redémarré. Lisez
les sections en rapport à ce problème dans Section 8.2.1, « Problèmes de mise à jour » pour plus de détails.

8.46.2. Contenu d'OpenSSL


Programmes installés: c_rehash et openssl
Bibliothèques installées: [Link] et [Link]
Répertoires installés: /etc/ssl, /usr/include/openssl, /usr/lib/engines et /usr/share/doc/openssl-3.0.8

166
Linux From Scratch - Version 11.3-systemd

Descriptions courtes
c_rehash est un script Perl qui scanne tous les fichiers dans un répertoire et ajoute des liens symboliques
vers leur valeur hashée. L'utilisation de c_rehash est considérée comme obsolète et devrait être
remplacée par la commande openssl rehash
openssl est un outil en ligne de commande qui permet d'utiliser les diverses fonctions cryptographiques
de la bibliothèque crypto d'OpenSSL depuis le shell. Il peut être utilisé pour diverses fonctions
documentées dans man 1 openssl
[Link] implémente un large éventail d'algorithmes cryptographiques utilisés dans divers standards
Internet. Les services fournis par cette bibliothèque sont utilisés par les implémentations
OpenSSL de SSL, TLS et S/MIME. Ils ont aussi été utilisés pour implémenter OpenSSH,
OpenPGP et d'autres standards de cryptographie
[Link] implémente le protocole Transport Layer Security (TLS v1). Elle fournit une API riche, et sa
documentation peut être trouvée en lançant man 7 ssl

167
Linux From Scratch - Version 11.3-systemd

8.47. Kmod-30
Le paquet Kmod contient des bibliothèques et des outils pour charger les modules du noyau
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 12 Mo

8.47.1. Installation de Kmod


Préparez la compilation de Kmod :
./configure --prefix=/usr \
--sysconfdir=/etc \
--with-openssl \
--with-xz \
--with-zstd \
--with-zlib

Voici la signification des options de configuration :


--with-openssl
Cette option permet à Kmod de gérer les signatures PKCS7 des modules du noyau.
--with-xz, --with-zlib et --with-zstd
Ces options permettent à Kmod de gérer les modules noyau compressés.
Compilez le paquet :
make

La suite de tests de ce paquet nécessite les en-têtes brutes (pas les en-têtes du noyau « nettoyées » installés plus
tôt), qui sont en-dehors des buts de LFS.
Installez le paquet et créez des liens symboliques à des fins de compatibilité avec Module-Init-Tools (le paquet qui
gérait auparavant les modules du noyau Linux) :
make install

for target in depmod insmod modinfo modprobe rmmod; do


ln -sfv ../bin/kmod /usr/sbin/$target
done

ln -sfv kmod /usr/bin/lsmod

8.47.2. Contenu de Kmod


Programmes installés: depmod (lien vers kmod), insmod (lien vers kmod), kmod, lsmod (lien vers kmod),
modinfo (lien vers kmod), modprobe (lien vers kmod) et rmmod (lien vers kmod)
Bibliothèque installée: [Link]

Descriptions courtes
depmod Crée un fichier de dépendances basé sur les symboles qu'il trouve dans l'ensemble de modules
existant ; ce fichier de dépendance est utilisé par modprobe pour charger automatiquement les
modules requis
insmod Installe un module chargeable dans le noyau en cours d'exécution
kmod Charge et décharge les modules du noyau
lsmod Liste les modules actuellement chargés

168
Linux From Scratch - Version 11.3-systemd

modinfo Examine un fichier objet associé à un module du noyau et affiche toute information récoltée
modprobe Utilise un fichier de dépendance, créé par depmod, pour charger automatiquement les modules
adéquats
rmmod Décharge les modules du noyau en cours d'exécution
libkmod Cette bibliothèque est utilisée par d’autres programmes pour charger et décharger les modules du
noyau

169
Linux From Scratch - Version 11.3-systemd

8.48. Libelf de Elfutils-0.188


Libelf est une bibliothèque pour gérer les fichiers ELF (Executable and Linkable Format).
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 120 Mo

8.48.1. Installation de Libelf


Libelf fait partie du paquet elfutils-0.188. Utilisez [Link].bz2 comme archive des sources.
Préparez la compilation de Libelf :
./configure --prefix=/usr \
--disable-debuginfod \
--enable-libdebuginfod=dummy

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Le test nommé [Link] est connu pour échouer.


Installez uniquement Libelf :
make -C libelf install
install -vm644 config/[Link] /usr/lib/pkgconfig
rm /usr/lib/libelf.a

8.48.2. Contenu de Libelf


Bibliothèque installée: [Link] (lien symbolique) et [Link]
Répertoire installé: /usr/include/elfutils

Descriptions courtes
libelf Contient les fonction de l'API pour gérer les fichiers objet ELF

170
Linux From Scratch - Version 11.3-systemd

8.49. Libffi-3.4.4
La bibliothèque Libffi fournit une interface de programmation portable et de haut niveau pour diverses conventions
d'appel. Cela permet au programmeur d'appeler des fonctions par la description de leur interface d'appel à l'exécution.
FFI signifie Foreign Function Interface (Interface de fonction étrangère). Une FFI permet à un programme écrit
dans une langue de faire appel à un programme écrit dans une autre langue. Libffi peut notamment créer un pont
entre un interprète comme Perl, ou Python, et partager une librairie de sous-programmes écrite en C ou C++.
Temps de construction 1.8 SBU
approximatif:
Espace disque requis: 11 Mo

8.49.1. Installation de Libffi


Note
Comme GMP, libffi est construite avec des optimisations spécifiques au processeur utilisé. Si vous
construisez pour un autre système, modifiez la valeur du paramètre --with-gcc-arch= dans la commande
suivante pour spécifier le nom de l'architecture implémentée par le CPU de ce système. Dans le cas
contraire, toutes les applications qui se lient à libffi afficheront des erreurs de type opération illégale.

Préparez la compilation de libffi :


./configure --prefix=/usr \
--disable-static \
--with-gcc-arch=native

Voici la signification de l'option de configuration :


--with-gcc-arch=native
Vérifie que GCC active les optimisations pour le système actuel. Si l'option n'est pas spécifiée, il essaiera de
deviner le système et le code généré peut ne pas être correct pour certains systèmes. Si le code généré est copié
du système actuel vers un système avec moins de fonctionnalités, utilisez ce dernier dans le paramètre. Pour
des détails concernant les types de systèmes alternatifs, voyez les options x86 dans le manuel de GCC.
Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.49.2. Contenu de Libffi


Bibliothèque installée: [Link]

Descriptions courtes
libffi Contient les fonctions de l'API de l'interface pour les fonctions externes.

171
Linux From Scratch - Version 11.3-systemd

8.50. Python-3.11.2
Le paquet Python 3 contient l'environnement de développement Python. Il est utile pour la programmation orientée
objet, écrire des scripts, prototyper de plus grands programmes ou pour développer des applications complètes.
Temps de construction 2.0 SBU
approximatif:
Espace disque requis: 372 Mo

8.50.1. Installation de Python 3


Préparez la compilation de Python :
./configure --prefix=/usr \
--enable-shared \
--with-system-expat \
--with-system-ffi \
--enable-optimizations

Voici la signification des options de configuration :


--with-system-expat
Ce paramètre active la liaison avec la version du système de Expat.
--with-system-ffi
Ce paramètre active la liaison avec la version du système de [Link].
--enable-optimizations
Ce paramètre permet d’établir des étapes d’optimisation approfondis, mais prenant beaucoup de temps.
L’interprète est construit deux fois ;les tests effectués pendant la première construction sont utilisés pour
concevoir la version finale optimisée.
Compilez le paquet :
make

Il n’est pas recommandé de lancer les tests à ce moment. Les tests sont connus pour bloquer indéfiniment dans
l'environnement partiel de LFS. Si vous le souhaitez, vous pouvez relancer les tests à la fin de ce chapitre ou quand
vous réinstallerez Python 3 dans BLFS. Pour tout de même lancer les tests, lancez make test.
Installez le paquet :
make install

À plusieurs reprises dans ce livre, on utilise la commande pip3 pour installer les programmes et les modules Python 3
pour chaque utilisateur en tant que root. Cela entre en conflit avec les recommandations des développeurs de Python :
pour installer des paquets dans un environnement virtuel, ou dans le répertoire home d’un utilisateur régulier (en
exécutant pip3 en tant que cet utilisateur). Un avertissement multi-lignes s’affiche à chaque fois que pip3 est détecté
par l’utilisateur root.
La principale raison de cette recommandation est d’éviter les conflits avec le paquet de gestion du système (dpkg,
par exemple). Ce n’est pas un problème, puisque LFS n’a pas de paquet de gestion s’appliquant à l’intégralité du
système. pip3 vérifiera également si une nouvelle version est disponible dès qu’il sera exécuté. Étant donné que la
résolution du nom de domaine n’est pas encore configuré dans l’environnement chroot de LFS, pip3 ne pourra pas
procéder à la recherche d’une mise à jour, et un message d’avertissement s’affichera.
Après avoir lancé le système LFS et établi une connexion au réseau, un nouvel avertissement apparaîtra, prévenant
l’utilisateur de mettre à jour pip3 d’après une roue de pré-construction su PyPI (dès qu’une nouvelle version est
disponible). LFS considère cependant pip3 comme faisant partie de Python 3, il est donc conseillé de ne pas le
mettre à jour indépendamment. Une amélioration depuis une roue pré-construite pourrait aussi nous faire dévier de

172
Linux From Scratch - Version 11.3-systemd

l’objectif : construire un système Linux sur un code source. L’avertissement à propos d’une nouvelle version de
pip3 peut donc lui aussi être ignoré. Vous pouvez, si vous le désirez, désactiver tous ces avertissements en activant
la commande suivante, ce qui créera un fichier de configuration :
cat > /etc/[Link] << EOF
[global]
root-user-action = ignore
disable-pip-version-check = true
EOF

Important
Dans LFS et BLFS nous construisons et installons normalement les modules Python avec la commande
pip3. Remarquez bien que les commandes pip3 install dans les deux livres doivent être lancées en root
à moins qu'il s'agisse d'un environnement virtuel Python. Exécuter pip3 install en tant qu'utilisateur ou
utilisatrice non root peut sembler fonctionner, mais cela rendra les modules installés indisponibles pour
les autres.
pip3 install ne réinstallera pas les modules déjà installés par défaut. Pour utiliser la commande pip3
install pour mettre à jour un module (par exemple, de meson-0.61.3 vers meson-0.62.0), ajoutez l'option
--upgrade à la ligne de commande. S'il est vraiment nécessaire de revenir à une version précédente d'un
module ou de réinstaller la même version, ajoutez l'option --force-reinstall --no-deps à la ligne de
commande.

Si vous le souhaitez, installez la documentation préformatée :


install -v -dm755 /usr/share/doc/python-3.11.2/html

tar --strip-components=1 \
--no-same-owner \
--no-same-permissions \
-C /usr/share/doc/python-3.11.2/html \
-xvf ../[Link].bz2

Voici la signification des commandes d'installation de la documentation :


--no-same-owner et --no-same-permissions
Garantit que les fichiers installés ont la bonne appartenance et les bonnes permissions. Sans ces options, utiliser
tar installera les fichiers du paquet avec les valeurs du créateur en amont.

8.50.2. Contenu de Python 3


Programmes installés: 2to3, idle3, pip3, pydoc3, python3 et python3-config
Bibliothèques installées: [Link] et [Link]
Répertoires installés: /usr/include/python3.11, /usr/lib/python3 et /usr/share/doc/python-3.11.2

Descriptions courtes
2to3 est un programme Python qui lit du code source Python 2.x et applique une série de corrections pour
le transformer en code Python 3.x valide
idle3 est un script enveloppe qui ouvre un éditeur en GUI qui connait Python. Pour que ce script puisse
tourner, vous devez avoir installé Tk avant Python pour que le module python Tkinter soit construit.
pip3 L'installateur de paquets pour Python. Vous pouvez utiliser pip pour installer des paquets de Python
Package Index et d'autres répertoires.
pydoc3 est l'outil de documentation de Python
python3 est un langage de programmation interprété, interactif et orienté objet.

173
Linux From Scratch - Version 11.3-systemd

8.51. Wheel-0.38.4
Wheel est une bibliothèque Python qui est l'implémentation de référence du standard de gestion des paquets wheel
de Python.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 1.3 Mo

8.51.1. Installation de Wheel


Compilez wheel avec la commande suivante :
PYTHONPATH=src pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Installez wheel avec la commande suivante :


pip3 install --no-index --find-links=dist wheel

Voici la signification des options de pip3 :


PYTHONPATH=src
Permet à ce paquet (pas encore installé) de construire une archive wheel de lui même, afin d'éviter un paradoxe
de l'œuf et de la poule.
wheel
Cette commande construit une archive wheel pour ce paquet.
-w dist
Ordonne à pip de placer wheel dans le répertoire dist.
install
Cette commande installe le paquet.
--no-build-isolation, --no-deps, and --no-index
Ces options empêchent la récupération de fichier à partir du dépôt de paquets en ligne (PyPI). Si les paquets
sont installés dans le bon ordre, il n'est pas nécessaire de récupérer des fichiers, mais cette option ajoute une
sécurité en cas d'erreur.
--find-links dist
Ordonne à pip de chercher des archives wheel dans le répertoire dist.

8.51.2. Contenu de Wheel


Programme installé: wheel
Répertoires installés: /usr/lib/python3.11/site-packages/wheel et /usr/lib/python3.11/site-packages/
[Link]-info

Descriptions courtes
wheel est un utilitaire pour décompresser, compresser ou convertir des paquets wheel

174
Linux From Scratch - Version 11.3-systemd

8.52. Ninja-1.11.1
Ninja est un petit système de construction qui met l'accent sur la rapidité.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 77 Mo

8.52.1. Installation de Ninja


Lorsqu'il est exécuté, ninja lance un nombre maximum de processus en parallèle. Par défaut c'est le nombre de
cœurs du système plus deux. Dans certains cas, cela peut surchauffer le CPU ou épuiser la mémoire. Si ninja est
exécuté depuis la ligne de commande, passer le paramètre -jN limitera le nombre de processus en parallèle, mais
certains paquets incluent l'exécution de ninja et ne passent pas le paramètre -j.
Utiliser la procédure facultative ci-dessous permet à l'utilisateur de limiter le nombre de processus en parallèle via
une variable d'environnement, NINJAJOBS. Par exemple initialiser :
export NINJAJOBS=4

limitera ninja à 4 processus en parallèle.


Si vous le souhaitez, ajoutez la possibilité à ninja d'utiliser la variable d'environnement NINJAJOBS en lançant
l'éditeur de flux :
sed -i '/int Guess/a \
int j = 0;\
char* jobs = getenv( "NINJAJOBS" );\
if ( jobs != NULL ) j = atoi( jobs );\
if ( j > 0 ) return j;\
' src/[Link]

Construisez Ninja avec :


python3 [Link] --bootstrap

Voici la signification des options de construction :


--bootstrap
Ce paramètre force ninja à se reconstruire pour le système actuel.
Pour tester les résultats, lancez :
./ninja ninja_test
./ninja_test --gtest_filter=-[Link]

Installez le paquet :
install -vm755 ninja /usr/bin/
install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja
install -vDm644 misc/zsh-completion /usr/share/zsh/site-functions/_ninja

8.52.2. Contenu de Ninja


Programmes installés: ninja

Descriptions courtes
ninja est le système de construction Ninja

175
Linux From Scratch - Version 11.3-systemd

8.53. Meson-1.0.0
Meson est un système de construction open source conçu pour être très rapide et aussi convivial que possible.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 41 Mo

8.53.1. Installation de Meson


Compilez Meson avec la commande suivante :
pip3 wheel -w dist --no-build-isolation --no-deps $PWD

La suite de tests requiert des paquets débordant la portée de LFS.


Installez le paquet :
pip3 install --no-index --find-links dist meson
install -vDm644 data/shell-completions/bash/meson /usr/share/bash-completion/completions/meson
install -vDm644 data/shell-completions/zsh/_meson /usr/share/zsh/site-functions/_meson

Voici la signification des paramètres d'installation :


-w dist
Place les wheels créées dans le répertoire dist.
--find-links dist
Installe les wheels du répertoire dist.

8.53.2. Contenu de Meson


Programmes installés: meson
Répertoire installé: /usr/lib/python3.11/site-packages/[Link]-info et /usr/lib/python3.11/site-
packages/mesonbuild

Descriptions courtes
meson Un système de construction pour une plus grande productivité

176
Linux From Scratch - Version 11.3-systemd

8.54. Coreutils-9.1
Le paquet Coreutils contient les utilitaires de base requis dans tous les systèmes d'exploitation.
Temps de construction 0.9 SBU
approximatif:
Espace disque requis: 156 Mo

8.54.1. Installation de Coreutils


POSIX exige que les programmes de Coreutils reconnaissent correctement les limites de caractères même pour des
encodages sur plusieurs octets. Le correctif suivant corrige cette absence de conformité et d'autres bogues liés à
l'internationalisation.
patch -Np1 -i ../[Link]

Note
Certains utilisateurs ont trouvé plusieurs bogues dans ce correctif. Avant de signaler des nouveaux bogues
aux mainteneurs de Coreutils, veuillez vérifier si les bogues se reproduisent quand le correctif n'est pas
déployé.

Maintenant, préparez la compilation de Coreutils :


autoreconf -fiv
FORCE_UNSAFE_CONFIGURE=1 ./configure \
--prefix=/usr \
--enable-no-install-program=kill,uptime

Voici la signification des options de configuration :


autoreconf
Le correctif pour l'internationalisation a modifié le système de construction. Les fichiers de configuration
doivent être régénérés.
FORCE_UNSAFE_CONFIGURE=1
Cette variable d'environnement permet à l'utilisateur root de compiler le paquet.
--enable-no-install-program=kill,uptime
Ce paramètre empêche Coreutils d'installer des programmes qui seront installés plus tard par d'autres paquets.
Compilez le paquet :
make

Passez à la partie « Installez le paquet » si vous n'exécutez pas la suite de test.


Maintenant, la suite de tests peut être lancée. Tout d'abord, lancez les quelques tests qui ont besoin d'être lancés
en tant que root :
make NON_ROOT_USERNAME=tester check-root

Nous allons exécuter le reste des tests en tant qu'utilisateur tester. Certains tests exigent cependant que l'utilisateur
soit membre de plus d'un groupe. Afin que ces tests ne soient pas sautés, nous allons ajouter un groupe temporaire
et y ajouter l'utilisateur tester :
echo "dummy:x:102:tester" >> /etc/group

Corrigez des droits afin qu'un utilisateur non-root puisse compiler et exécuter les tests :
chown -Rv tester .

177
Linux From Scratch - Version 11.3-systemd

Maintenant lancez les tests :


su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"

Le test de vérification test-getlogin peut échouer dans l'environnement chroot de LFS.


Supprimez le groupe temporaire :
sed -i '/dummy/d' /etc/group

Installez le paquet :
make install

Déplacez certains programmes aux emplacements spécifiés par le FHS :


mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
sed -i 's/"1"/"8"/' /usr/share/man/man8/chroot.8

8.54.2. Contenu de Coreutils


Programmes installés: [, b2sum, base32, base64, basename, basenc, cat, chcon, chgrp, chmod, chown,
chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo,
env, expand, expr, factor, false, fmt, fold, groups, head, hostid, id, install, join, link,
ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc,
numfmt, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath,
rm, rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum,
shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, sync, tac, tail, tee, test, timeout,
touch, tr, true, truncate, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who,
whoami et yes
Bibliothèque installée: [Link] (dans /usr/libexec/coreutils)
Répertoire installé: /usr/libexec/coreutils

Descriptions courtes
[ La commande /usr/bin/[ est une vraie commande. Il s'agit d'une équivalente de la commande test
base32 Encode et décode des données selon la spécification de la base32 (RFC 4648)
base64 Encode et décode des données selon la spécification de la base64 (RFC 4648)
b2sum Affiche ou vérifie des sommes de contrôle 512-bit BLAKE2
basename Supprime tout le chemin et un suffixe donné à partir d'un nom de fichier
basenc Encode ou décode des données avec divers algorithmes
cat Concatène des fichiers sur la sortie standard
chcon Modifie le contexte de sécurité des fichiers et des dossiers
chgrp Change le groupe propriétaire de certains fichiers et répertoires
chmod Change les droits de chaque fichier au mode indiqué. Le mode peut être une représentation
symbolique des modifications à faire ou un nombre octal représentant les nouveaux droits
chown Modifie le propriétaire utilisateur et le groupe de certains fichiers et répertoires
chroot Lance une commande avec le répertoire spécifié en tant que répertoire racine (/)
cksum Affiche la somme de vérification CRC (Cyclic Redundancy Check) et le nombre d'octets de chaque
fichier
comm Compare deux fichiers triés et affiche sur trois colonnes les lignes uniques et les lignes communes

178
Linux From Scratch - Version 11.3-systemd

cp Copie des fichiers


csplit Divise un fichier donné en plusieurs fichiers. Les nouveaux fichiers sont séparés par des motifs
donnés ou des numéros de lignes et le nombre total d'octets de chaque nouveau fichier est affiché
cut Affiche des parties de lignes et sélectionne ces parties suivant des champs ou positions donnés
date Affiche la date et l'heure actuelle dans le format donné ou initialise la date et l'heure du système
dd Copie un fichier en utilisant la taille et le nombre de blocs donnés tout en réalisant des conversions
optionnelles
df Affiche l'espace disque disponible (et utilisé) sur tous les systèmes de fichiers montés ou seulement
sur les systèmes de fichiers contenant les fichiers donnés
dir Liste le contenu de chaque répertoire donné (identique à la commande ls)
dircolors Affiche les commandes pour initialiser la variable d'environnement LS_COLOR ce qui permet de
changer le schéma de couleurs utilisé par ls
dirname Extrait les parties d'un répertoire des noms donnés
du Affiche le total de l'espace disque utilisé par le répertoire actuel, ou par chacun des répertoires
donnés dont tous les sous-répertoires, ou par chacun des fichiers donnés
echo Affiche les chaînes données
env Lance une commande dans un environnement modifié
expand Convertit les tabulations en espaces
expr Évalue des expressions
factor Affiche les facteurs premiers des entiers spécifiés
false Ne fait rien, comme prévu, et renvoie toujours un code d'erreur indiquant l'échec
fmt Reformate les paragraphes dans les fichiers donnés
fold Emballe les lignes des fichiers donnés
groups Affiche les groupes auxquels appartient un utilisateur
head Affiche les dix premières lignes (ou le nombre demandé de lignes) pour chaque fichier donné
hostid Affiche l'identifieur numérique de l'hôte (en hexadécimal)
id Affiche l'identifieur effectif de l'utilisateur courant ou de l'utilisateur précisé, l'identifieur du groupe
et les groupes auxquels appartient cet utilisateur
install Copie les fichiers en initialisant leurs droits et, si possible, leur propriétaire et groupe
join Joint à partir de deux fichiers les lignes qui ont des champs de jointure identiques
link Crée un lien matériel, avec le nom donné, vers un fichier
ln Crée des liens symboliques ou matériels entre des fichiers
logname Indique l'identifiant de l'utilisateur actuel
ls Liste le contenu de chaque répertoire donné
md5sum Affiche ou vérifie les sommes de vérification MD5 (Message Digest 5)
mkdir Crée des répertoires avec les noms donnés
mkfifo Crée des fichiers FIFO (First-In, First-Out), des « tubes nommés » dans le jargon Unix, avec les
noms donnés
mknod Crée des nœuds de périphériques avec les noms donnés. Un nœud de périphérique est de type
caractère, bloc, ou FIFO

179
Linux From Scratch - Version 11.3-systemd

mktemp Crée des fichiers temporaires de manière sécurisée, il est utilisé dans des scripts
mv Déplace ou renomme des fichiers ou répertoires
nice Lance un programme avec une priorité modifiée
nl Numérote les lignes de fichiers donnés
nohup Lance une commande immune aux arrêts brutaux, dont la sortie est redirigée vers le journal de traces
nproc Affiche le nombre d'unités d'action disponibles pour un processus
numfmt Convertit des numéros en chaînes lisibles par un humain ou vice-versa
od Affiche les fichiers en octal ou sous d'autres formes
paste Joint les fichiers donnés en plaçant les lignes correspondantes l'une à côté de l'autre, en les séparant
par des caractères de tabulation
pathchk Vérifie que les noms de fichier sont valides ou portables
pinky Un client finger léger qui affiche certaines informations sur les utilisateurs indiqués
pr Fait de la pagination, principalement en colonne, des fichiers pour une impression
printenv Affiche l'environnement
printf Affiche les arguments donnés suivant le format demandé, un peu comme la fonction C printf
ptx Produit un index permuté à partir du contenu des fichiers indiqués, avec chaque mot dans son
contexte
pwd Indique le nom du répertoire courant
readlink Indique la valeur du lien symbolique
realpath Affiche le chemin résolu
rm Supprime des fichiers ou des répertoires
rmdir Supprime les répertoires vides
runcon Lance une commande avec le contexte de sécurité spécifié
seq Affiche une séquence de nombres, à l'intérieur d'un intervalle et avec un incrément spécifié
sha1sum Affiche ou vérifie des sommes de contrôle 160-bit Secure Hash Algorithm (SHA1)
sha224sum Affiche ou vérifie des sommes de contrôle 224-bit Secure Hash Algorithm (SHA1)
sha256sum Affiche ou vérifie des sommes de contrôle 256-bit Secure Hash Algorithm (SHA1)
sha384sum Affiche ou vérifie des sommes de contrôle 384-bit Secure Hash Algorithm (SHA1)
sha512sum Affiche ou vérifie des sommes de contrôle 512-bit Secure Hash Algorithm (SHA1)
shred Efface les fichiers indiqués en écrivant dessus des modèles aléatoires pour rendre la récupération
des données difficile
shuf Mélange des lignes de texte
sleep Fait une pause d'un certain temps
sort Trie les lignes des fichiers donnés
split Divise les fichiers donnés en plusieurs éléments, par taille ou par nombre de lignes
stat Affiche le statut du fichier ou du système de fichiers
stdbuf Lance des commandes avec des opérations de mise en tampon différentes pour ses flux standards
stty Initialise ou affiche les paramètres de la ligne de terminal
sum Affiche la somme de contrôle et le nombre de blocs pour chacun des fichiers donnés

180
Linux From Scratch - Version 11.3-systemd

sync Vide les tampons du système de fichiers. Cela force l'enregistrement sur disque des blocs modifiés
et met à jour le superbloc
tac Concatène les fichiers donnés à l'envers
tail Affiche les dix dernières lignes (ou le nombre de lignes indiqué) pour chaque fichier précisé
tee Lit à partir de l'entrée standard en écrivant à la fois sur la sortie standard et sur les fichiers indiqués
test Compare des valeurs et vérifie les types de fichiers
timeout Lance une commande avec une limite de temps
touch Modifie l'horodatage d'un fichier, initialise les dates et les heures d'accès et de modification des
fichiers indiqués à l'heure actuelle. Les fichiers inexistants sont créés avec une longueur nulle
tr Convertit, compresse et supprime les caractères lus depuis l'entrée standard
true Ne fait rien, comme prévu, et quitte toujours avec un code de sortie indiquant une réussite
truncate Réduit ou augmente un fichier selon la taille spécifiée
tsort Réalise un tri topologique et écrit une liste totalement ordonnée suivant un fichier donné
partiellement ordonné
tty Indique le nom du fichier du terminal connecté à l'entrée standard
uname Affiche des informations système
unexpand Convertit les espaces en tabulations
uniq Ne conserve qu'une seule ligne parmi plusieurs lignes successives identiques
unlink Supprime le fichier donné
users Indique les noms des utilisateurs actuellement connectés
vdir Est identique à ls -l
wc Signale le nombre de lignes, mots et octets de chaque fichier indiqué ainsi que le grand total lorsque
plus d'un fichier est donné
who Indique qui est connecté
whoami Indique le nom de l'utilisateur associé avec l'identifieur utilisateur effectif
yes Affiche indéfiniment « y », ou la chaîne précisée, jusqu'à ce que le processus s'arrête
libstdbuf Bibliothèque utilisée par stdbuf

181
Linux From Scratch - Version 11.3-systemd

8.55. Check-0.15.2
Check est un environnement de tests unitaires pour C.
Temps de construction 0.1 SBU (environ 1.7 SBU avec les tests)
approximatif:
Espace disque requis: 12 Mo

8.55.1. Installation de Check


Préparez la compilation de Check :
./configure --prefix=/usr --disable-static

Construisez le paquet :
make

La compilation est maintenant terminée. Pour lancer la suite de tests de Check, lancez la commande suivante :
make check

Installez le paquet :
make docdir=/usr/share/doc/check-0.15.2 install

8.55.2. Contenu de Check


Programme installé: checkmk
Bibliothèque installÃé: [Link]

Descriptions courtes
checkmk Script awk pour générer des tests unitaires C à utiliser avec l'environnement de tests unitaires
de Check
[Link] Contient les fonctions permettant à Check d'être appelé depuis un programme de test

182
Linux From Scratch - Version 11.3-systemd

8.56. Diffutils-3.9
Le paquet Diffutils contient des programmes qui affichent les différences entre fichiers ou répertoires.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 35 Mo

8.56.1. Installation de Diffutils


Préparez la compilation de Diffutils :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez ce paquet :
make install

8.56.2. Contenu de Diffutils


Programmes installés: cmp, diff, diff3 et sdiff

Descriptions courtes
cmp Compare deux fichiers et indique les différences octet par octet
diff Compare deux fichiers ou répertoires et rapporte les lignes où les fichiers diffèrent
diff3 Compare trois fichiers ligne par ligne
sdiff Assemble deux fichiers et affiche le résultat de façon interactive

183
Linux From Scratch - Version 11.3-systemd

8.57. Gawk-5.2.1
Le paquet Gawk contient des programmes de manipulation de fichiers texte.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 43 Mo

8.57.1. Installation de Gawk


Tout d'abord, assurez-vous que certains fichiers inutiles ne sont pas installés :
sed -i 's/extras//' [Link]

Préparez la compilation de Gawk :


./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make LN='ln -f' install

Signification de la variable make du override :


LN= "ln -f
Cette variable garantit que le précédent lien en dur installé sur Section 6.9, « Gawk-5.2.1 » soit actualisé ici.
Si vous le souhaitez, installez la documentation :
mkdir -pv /usr/share/doc/gawk-5.2.1
cp -v doc/{[Link],*.{eps,pdf,jpg}} /usr/share/doc/gawk-5.2.1

8.57.2. Contenu de Gawk


Programmes installés: awk (lien vers gawk), gawk et awk-5.2.1
Bibliothèques installées: [Link], [Link], [Link], [Link], [Link], [Link], [Link],
[Link], [Link], [Link], [Link], et [Link] (toutes dans /usr/lib/
gawk)
Répertoires installés: /usr/lib/gawk, /usr/libexec/awk, /usr/share/awk, et /usr/share/doc/gawk-5.2.1

Descriptions courtes
awk Un lien vers gawk
gawk Un programme de manipulation de fichiers texte. C'est l'implémentation GNU d'awk
gawk-5.2.1 Un lien matériel vers gawk

184
Linux From Scratch - Version 11.3-systemd

8.58. Findutils-4.9.0
Le paquet Findutils contient des programmes de recherche de fichiers. Ces programmes sont fournis pour parcourir
tous les fichiers dans une hiérarchie de répertoires et pour créer, maintenir et parcourir une base de données (souvent
plus rapide que la recherche récursive mais moins fiable si la base de données n'a pas été mise à jour récemment).
Findutils fournit également le programme xargs, qui peut être utilisé pour exécuter une commande spécifique sur
chaque fichier sélectionné par la recherche.
Temps de construction 0.4 SBU
approximatif:
Espace disque requis: 51 Mo

8.58.1. Installation de Findutils


Préparez la compilation de Findutils :
case $(uname -m) in
i?86) TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
x86_64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
esac

Voici la signification des options de configuration :


TIME_32_BIT_OK=yes
Ce paramètre est requis pour la construction sur un système 32 bits.
--localstatedir
Cette option modifie l'emplacement de la base de données locate pour qu'elle soit dans /var/lib/locate, qui
est un emplacement compatible avec le FHS.
Compilez le paquet :
make

Pour tester les résultats, lancez :


chown -Rv tester .
su tester -c "PATH=$PATH make check"

Installez le paquet :
make install

8.58.2. Contenu de Findutils


Programmes installés: find, locate, updatedb et xargs
Répertoire installé: /var/lib/locate

Descriptions courtes
find Cherche dans les hiérarchies de répertoires donnés les fichiers correspondant à un critère spécifié
locate Recherche à travers la base de données des noms de fichiers et renvoie ceux qui contiennent une
certaine chaîne ou qui correspondent à un certain modèle
updatedb Met à jour la base de données locate. Il parcourt le système de fichiers entier (y compris les autres
systèmes de fichiers actuellement montés, sauf si le contraire est spécifié) et place tous les noms de
fichiers qu'il trouve dans la base de données
xargs Peut être utilisé pour lancer une commande donnée sur une liste de fichiers

185
Linux From Scratch - Version 11.3-systemd

8.59. Groff-1.22.4
Le paquet Groff contient des programmes pour le traitement et la mise en forme des textes et des images.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 89 Mo

8.59.1. Installation de Groff


Groff s'attend à ce que la variable d'environnement PAGE contienne la taille du papier par défaut. Pour les utilisateurs
américains, PAGE=letter est adéquate. PAGE=A4 pourrait aller mieux ailleurs. Même si la taille du papier par défaut
est configurée lors de la compilation, elle peut être réécrite plus tard en écrivant « A4 » ou « letter » dans le fichier
/etc/papersize.

Préparez la compilation de Groff :


PAGE=<taille_papier> ./configure --prefix=/usr

Compilez le paquet :
make

Ce paquet n'est pas fourni avec une suite de test.


Installez le paquet :
make install

8.59.2. Contenu de Groff


Programmes installés: addftinfo, afmtodit, chem, eqn, eqn2graph, gdiffmk, glilypond, gperl, gpinyin,
grap2graph, grn, grodvi, groff, groffer, grog, grolbp, grolj4, gropdf, grops, grotty,
hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pdfmom, pdfroff, pfbtops, pic,
pic2graph, post-grohtml, preconv, pre-grohtml, refer, roff2dvi, roff2html, roff2pdf,
roff2ps, roff2text, roff2x, soelim, tbl, tfmtodit, et troff
Répertoires installés: /usr/lib/groff and /usr/share/doc/groff-1.22.4, /usr/share/groff

Descriptions courtes
addftinfo Lit un fichier de polices troff et ajoute quelques informations métriques supplémentaires sur la
police qui est utilisée par le système groff
afmtodit Crée un fichier de police à utiliser avec groff et grops
chem Préprocesseur Groff pour produire des diagrammes de structure chimique
eqn Compile les descriptions d'équations imbriquées dans les fichiers d'entrée de troff pour obtenir
des commandes comprises par troff
eqn2graph Convertit une équation EQN troff en une image recadrée
gdiffmk Marque les différences entre des fichiers groff/nroff/troff
glilypond Transforme les partitions de musiques du langage lilypond en langage groff
gperl Préprocesseur de groff permettant d'ajouter du code perl dans les fichiers groff
gpinyin Préprocesseur de groff permettant d'ajouter du Pinyin (mandarin épelé avec l'alphabet latin)
dans les fichiers groff.
grap2graph Convertit un fichier grap en une image matricielle recadrée (grap est un ancien langage de
programmation Unix dédié à la création de diagrammes)

186
Linux From Scratch - Version 11.3-systemd

grn Un préprocesseur groff pour les fichiers gremlin


grodvi Un pilote pour groff qui produit des fichiers avec le format de sortie dvi TeX
groff Une interface au système de formatage de document groff. Normalement, elle lance le
programme troff et un post-processeur approprié au périphérique sélectionné
groffer Affiche des fichiers groff et des pages man sur des terminaux X et tty
grog Lit des fichiers et devine les options -e, -man, -me, -mm, -ms, -p, -s, et -t de groff requises pour
l'impression des fichiers. Il indique la commande groff incluant ces options
grolbp Est un pilote groff pour les imprimantes Canon CAPSL (imprimantes laser de la série LBP-4
et LBP-8)
grolj4 Est un pilote pour groff produisant une sortie au format PCL5 adapté aux imprimantes HP
Laserjet 4
gropdf Traduit la sortie de GNU troff en PDF
grops Traduit la sortie de GNU troff en PostScript
grotty Traduit la sortie de GNU troff en un format compatible pour les périphériques de type machine
à écrire
hpftodit Crée un fichier de polices à utiliser avec groff -Tlj4 à partir d'un fichier métrique de police HP
indxbib Crée un index inversé d'un fichier spécifié, utilisé pour les bases de données bibliographiques
avec refer, lookbib et lkbib
lkbib Recherche dans les bases de données bibliographiques des références contenant certaines clés
et indique toute référence trouvée
lookbib Affiche une invite sur la sortie des erreurs (sauf si l'entrée standard n'est pas un terminal), lit
à partir de l'entrée standard une ligne contenant un ensemble de mots clés, recherche dans les
bases de données bibliographiques dans un fichier spécifié les références contenant ces mots
clés, affiche toute référence trouvée sur la sortie standard et répète ce processus jusqu'à la fin
de l'entrée
mmroff Un simple pré-processeur pour groff
neqn Formate les équations pour une sortie ASCII (American Standard Code for Information
Interchange)
nroff Un script qui émule la commande nroff en utilisant groff
pdfmom Est une enveloppe autour de groff qui facilite la production de documents PDF depuis des
fichiers formattés avec les macros parentes.
pdfroff Crée des documents pdf en utilisant groff
pfbtops Traduit une police Postscript au format .pfb vers le format ASCII
pic Compile les descriptions d'images embarquées à l'intérieur de fichiers d'entrées troff ou TeX
en des commandes comprises par TeX ou troff
pic2graph Convertit un diagramme PIC en une image recadrée
post-grohtml Traduit la sortie de GNU troff en HTML
preconv Convertit l'encodage de fichiers en entrée vers quelque chose que comprend GNU troff
pre-grohtml Traduit la sortie de GNU troff en HTML
refer Copie le contenu d'un fichier sur la sortie standard, sauf pour les lignes entre les symboles .
[ et .] interprétées comme des citations, et les lignes entre .R1 et .R2 interprétées comme des
commandes sur la façon de gérer les citations

187
Linux From Scratch - Version 11.3-systemd

roff2dvi Transforme des fichiers roff en fichiers DVI


roff2html Transforme les fichiers roff en fichiers HTML
roff2pdf Transforme les fichiers roff en fichiers PDF
roff2ps Transforme les fichiers roff en fichiers ps
roff2text Transforme les fichiers roff en fichiers textes
roff2x Transforme les fichiers roff vers d'autres formats
soelim Lit des fichiers et remplace les lignes de la forme .so fichier par le contenu du fichier mentionné
tbl Compile les descriptions des tables imbriquées dans les fichiers d'entrées troff en commandes
comprises par troff
tfmtodit Crée un fichier de police à utiliser avec groff -Tdvi
troff Est hautement compatible avec la commande Unix troff. Habituellement, il devrait être appelé
en utilisant la commande groff qui lance aussi les pré-processeurs et post-processeurs dans
l'ordre approprié et avec les options appropriées

188
Linux From Scratch - Version 11.3-systemd

8.60. GRUB-2.06
Le paquet Grub contient un chargeur de démarrage, le GRand Unified Bootloader.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 161 Mo

8.60.1. Installation de GRUB


Note
Si votre système prend en charge l'UEFI et que vous souhaitez démarrer LFS avec l'UEFI, vous pouvez
ignorer ce paquet dans LFS et installer GRUB avec la prise en charge de l'UEFI (et ses dépendances) en
suivant les instructions de la page BLFS à la fin de ce chapitre.

Avertissement
Déconfigurez les variables d'environnement qui pourrait perturber la construction :
unset {C,CPP,CXX,LD}FLAGS

N'essayez pas de « customiser » ce paquet avec des options de compilation personnalisées. Ce paquet
est un chargeur de démarrage. Un optimisation agressive du paquet pourrait casser les opérations de bas-
niveau dans le code source.

Corrigez un problème qui fait échouer grub-install quand la partition /boot (ou la partition racine si /boot n'est pas
une partition séparée) est créée par e2fsprogs-1.47.0 ou supérieur :
patch -Np1 -i ../grub-2.06-upstream_fixes-[Link]

Préparez la compilation de GRUB :


./configure --prefix=/usr \
--sysconfdir=/etc \
--disable-efiemu \
--disable-werror

La signification des nouvelles options de configurations :

--disable-werror
Cette option permet de terminer la compilation avec les avertissements ajoutés dans des versions de Flex plus
récentes.
--disable-efiemu
Cette option désactive les fonctionnalités et des programmes de tests non nécessaires pour LFS pour minimiser
la construction.
Compilez le paquet :
make

Les suites de tests de ces paquets ne sont pas recommandées. La plupart des tests dépendent de paquets qui ne sont
pas disponibles dans l'environnement LFS limité. Pour lancer les tests malgré tout, lancez make check.
Installez le paquet :
make install
mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions

189
Linux From Scratch - Version 11.3-systemd

Le chapitre Section 10.4, « Utiliser GRUB pour paramétrer le processus de démarrage » explique comment permettre
au système LFS de démarrer avec GRUB.

8.60.2. Contenu de GRUB


Programmes installés: grub-bios-setup, grub-editenv, grub-file, grub-fstest, grub-glue-efi, grub-install, grub-
kbdcomp, grub-macbless, grub-menulst2cfg, grub-mkconfig, grub-mkimage, grub-
mklayout, grub-mknetdir, grub-mkpasswd-pbkdf2, grub-mkrelpath, grub-mkrescue,
grub-mkstandalone, grub-ofpathname, grub-probe, grub-reboot, grub-render-label,
grub-script-check, grub-set-default, grub-sparc64-setup et grub-syslinux2cfg
Répertoires installés: /usr/lib/grub, /etc/grub.d, /usr/share/grub et boot/grub (après avoir lancé grub-install
pour la première fois)

Descriptions courtes
grub-bios-setup Programme d'aide pour grub-install
grub-editenv Est un outil qui permet d'éditer le bloc d'environnement
grub-file Vérifie que le type du fichier sélectionné est celui attendu
grub-fstest Est un outil de débogage du pilote d'un système de fichiers
grub-glue-efi Assemble des binaires 32-bits et 64-bits en un seul fichier (pour les ordinateurs
Apple)
grub-install Installe GRUB sur votre disque
grub-kbdcomp Est un script qui convertit un plan xkb dans un plan reconnu par GRUB
grub-macbless Est l'équivalent Mac de la commande bless pour les systèmes de fichiers HFS ou
HFS+ (la commande bless est exclusive au ordinateurs Apple : elle permet au
système de démarrer)
grub-menulst2cfg Convertit un [Link] du GRUB de base en fichier [Link] utilisable avec GRUB
2
grub-mkconfig Génère un fichier [Link]
grub-mkimage Crée une image GRUB démarrable
grub-mklayout Génère un fichier de plan de clavier pour GRUB
grub-mknetdir Prépare un répertoire GRUB d'amorçage par le réseau
grub-mkpasswd-pbkdf2 Génère un mot de passe PBKDF2 chiffré pour une utilisation dans le menu de
démarrage
grub-mkrelpath Rend relatif le nom de chemin vers la racine d'un système
grub-mkrescue Crée une image GRUB démarrable adaptée à une disquette, à un CDROM/DVD
ou à un clé USB
grub-mkstandalone Génère une image autonome
grub-ofpathname Est un programme d'aide qui affiche le chemin d'un périphérique GRUB
grub-probe Teste les informations de périphérique pour un chemin ou un périphérique donné
grub-reboot Règle l'entrée d'amorçage par défaut pour GRUB uniquement pour le prochain
démarrage
grub-render-label Produit des .disk_label Apple pour les Macs Apple
grub-script-check Cherche les erreurs de syntaxe dans le script de configuration de GRUB
grub-set-default Règle l'entrée d'amorçage par défaut pour GRUB

190
Linux From Scratch - Version 11.3-systemd

grub-sparc64-setup Est un programme d'aide pour grub-setup


grub-syslinux2cfg Transforme un fichier de configuration syslinux vers le format de [Link]

191
Linux From Scratch - Version 11.3-systemd

8.61. Gzip-1.12
Le paquet Gzip contient des programmes de compression et décompression de fichiers.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 21 Mo

8.61.1. Installation de Gzip


Préparez la compilation de Gzip :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.61.2. Contenu de Gzip


Programmes installés: gunzip, gzexe, gzip, uncompress (lien matériel vers gunzip), zcat, zcmp, zdiff, zegrep,
zfgrep, zforce, zgrep, zless, zmore et znew

Descriptions courtes
gunzip Décompresse les fichiers gzip
gzexe Crée des fichiers exécutables auto-extractibles
gzip Compresse les fichiers donnés en utilisant le codage Lempel-Ziv (LZ77)
uncompress Décompresse les fichiers compressés
zcat Décompresse les fichiers gzip sur la sortie standard
zcmp Lance cmp sur des fichiers compressés avec gzip
zdiff Lance diff sur des fichiers compressés avec gzip
zegrep Lance egrep sur des fichiers compressés avec gzip
zfgrep Lance fgrep sur des fichiers compressés avec gzip
zforce Force une extension .gz sur tous les fichiers donnés qui sont au format gzip, pour que gzip ne
les compresse pas de nouveau ; ceci est utile quand les noms de fichiers sont tronqués lors d'un
transfert de fichiers
zgrep Lance grep sur des fichiers compressés avec gzip
zless Lance less sur des fichiers compressés avec gzip
zmore Lance more sur des fichiers compressés avec gzip
znew Recompresse les fichiers formatés avec compress au format gzip— de .Z vers .gz

192
Linux From Scratch - Version 11.3-systemd

8.62. IPRoute2-6.1.0
Le paquet IPRoute2 contient des programmes pour le réseau, basique ou avancé, basé sur IPV4.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 17 Mo

8.62.1. Installation de IPRoute2


Le programme arpd inclus dans ce paquet ne sera pas chargé car il dépend de Berkeley DB et ce dernier n'est pas
installé dans LFS. Un répertoire et une page de manuel pour arpd seront tout de même installés. Empêchez-le en
exécutant la commande suivante. (Si vous avez besoin du programme arpd, vous trouvez des instructions pour la
compilation de Berkeley DB dans le livre BLFS sur [Link]
server/[Link].)
sed -i /ARPD/d Makefile
rm -fv man/man8/arpd.8

Compilez le paquet :
make NETNS_RUN_DIR=/run/netns

Ce paquet n'a pas de suite de tests fonctionnelle.


Installez le paquet :
make SBINDIR=/usr/sbin install

Si vous le souhaitez, installez la documentation :


mkdir -pv /usr/share/doc/iproute2-6.1.0
cp -v COPYING README* /usr/share/doc/iproute2-6.1.0

8.62.2. Contenu de IPRoute2


Programmes installés: bridge, ctstat (lien vers lnstat), genl, ifstat, ip, lnstat, nstat, routel, rtacct, rtmon, rtpr,
rtstat (lien vers lnstat), ss et tc
Répertoires installés: /etc/iproute2, /usr/lib/tc et /usr/share/doc/iproute2-6.1.0

Descriptions courtes
bridge Configure des ponts réseaux
ctstat Outil donnant le statut de la connexion
genl Interface utilitaire du générique Netlink
ifstat Affiche les statistiques d'une interface, incluant le nombre de paquets transmis et reçus par l'interface
ip L'exécutable principal. Il a plusieurs fonctions différentes dont :
ip link <périphérique> autorise les utilisateurs à regarder l'état des périphériques et à faire des
changements
ip addr autorise les utilisateurs à regarder les adresses et leurs propriétés, à ajouter de nouvelles adresses
et à supprimer les anciennes
ip neighbor autorise les utilisateurs à regarder dans les liens des voisins et dans leurs propriétés, à ajouter
de nouvelles entrées et à supprimer les anciennes
ip rule autorise les utilisateurs à regarder les politiques de routage et à les modifier
ip route autorise les utilisateurs à regarder la table de routage et à modifier les règles de routage
ip tunnel autorise les utilisateurs à regarder les tunnels IP et leurs propriétés, et à les modifier

193
Linux From Scratch - Version 11.3-systemd

ip maddr autorise les utilisateurs à regarder les adresses multicast et leurs propriétés, et à les changer
ip mroute autorise les utilisateurs à configurer, modifier ou supprimer le routage multicast
ip monitor autorise les utilisateurs à surveiller en continu l'état des périphériques, des adresses et des
routes
lnstat Fournit les statistiques réseau Linux. C'est un remplacement plus généraliste et plus complet de l'ancien
programme rtstat
nstat Affiche les statistiques du réseau
routel Un composant de ip route qui affiche les tables de routage
rtacct Affiche le contenu de /proc/net/rt_acct
rtmon Outil de surveillance de routes
rtpr Convertit la sortie de ip -o en un format lisible
rtstat Outil de statut de routes
ss Similaire à la commande netstat ; affiche les connexions actives
tc Contrôle du trafic utile pour l'implémentation de la qualité de service (QOS) et de la classe de service
(COS)
tc qdisc autorise les utilisateurs à configurer la mise en file d'attente
tc class autorise les utilisateurs à configurer les classes suivant la planification de la mise en file d'attente
tc filter autorise les utilisateurs à configurer les filtres de paquets QOS/COS
tc monitor peut être utilisé pour voir les modifications faites au contrôle de trafic dans le noyau.

194
Linux From Scratch - Version 11.3-systemd

8.63. Kbd-2.5.1
Le paquet Kbd contient les fichiers de tables de caractères, les polices de la console et des outils pour le clavier.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 35 Mo

8.63.1. Installation de Kbd


Le comportement des touches Retour Arrière et Supprimer n'est pas cohérent dans toutes les tables de
correspondance du clavier du paquet Kbd. Le correctif suivant répare ce problème pour les tables de correspondance
i386 du clavier :
patch -Np1 -i ../[Link]

Après la correction, la touche Retour Arrière génère le caractère de code 127, et la touche Supprimer génère une
séquence d'échappement bien connue.
Supprimez le programme resizecons redondant (il exige feu svgalib pour fournir les fichiers du mode graphique -
pour une utilisation normale, setfont redimensionne correctement la console) ainsi que sa page de man.
sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure
sed -i 's/resizecons.8 //' docs/man/man8/[Link]

Préparez la compilation de Kbd :


./configure --prefix=/usr --disable-vlock

Voici la signification de l'option de configuration :

--disable-vlock
Cette option empêche la construction de l'utilitaire vlock car il requiert la bibliothèque PAM qui n'est pas
disponible dans l'environnement chroot.
Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

Note
Pour certaines langues (comme le biélorusse), le paquet Kbd ne fournit pas une table de correspondance
utile, puisque le contenu de la table « by » suppose l'encodage ISO-8859-5, et la table CP1251 est
normalement utilisée. Les utilisateurs de telles langues doivent télécharger les tables de correspondance
qui conviennent séparément.

Si vous le souhaitez, installez la documentation :


mkdir -pv /usr/share/doc/kbd-2.5.1
cp -R -v docs/doc/* /usr/share/doc/kbd-2.5.1

195
Linux From Scratch - Version 11.3-systemd

8.63.2. Contenu de Kbd


Programmes installés: chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, kbdinfo, kbd_mode, kbdrate,
loadkeys, loadunimap, mapscrn, openvt, psfaddtable (lien vers psfxtable),
psfgettable (lien vers psfxtable), psfstriptable (lien vers psfxtable), psfxtable,
setfont, setkeycodes, setleds, setmetamode, setvtrgb, showconsolefont, showkey,
unicode_start et unicode_stop
Répertoires installés: /usr/share/consolefonts, /usr/share/consoletrans, /usr/share/keymaps, /usr/share/doc/
kbd-2.5.1 et /usr/share/unimaps

Descriptions courtes
chvt Change le terminal virtuel en avant plan
deallocvt Désalloue les terminaux virtuels inutilisés
dumpkeys Affiche la table de traduction du clavier
fgconsole Affiche le numéro du terminal virtuel actif
getkeycodes Affiche la table de correspondance des « scancode » avec les « keycode »
kbdinfo Obtient des informations sur l'état d'une console
kbd_mode Affiche ou initialise le mode du clavier
kbdrate Initialise les taux de répétition et de délai du clavier
loadkeys Charge les tables de traduction du clavier
loadunimap Charge la table de correspondance du noyau unicode-police
mapscrn Un programme obsolète utilisé pour charger une table de correspondance des caractères
de sortie définie par l'utilisateur dans le pilote de la console. Ceci est maintenant fait par
setfont
openvt Lance un programme sur un nouveau terminal virtuel (VT)
psfaddtable Ajoute une table de caractères Unicode à la police d'une console
psfgettable Extrait la table de caractères Unicode embarquée dans la police de la console
psfstriptable Supprime la table de caractères Unicode embarquée dans la police de la console
psfxtable Gère les tables de caractères Unicode pour les polices de la console
setfont Modifie les polices EGA/VGA (Enhanced Graphic Adapter-Video Graphics Array) sur
la console
setkeycodes Charge les entrées de la table de correspondance entre scancode et keycode, utile si vous
avez des touches inhabituelles sur votre clavier
setleds Initialise les drapeaux et LED du clavier
setmetamode Définit la gestion de la touche méta du clavier
setvtrgb Définit la table de couleur console dans tous les terminaux virtuels
showconsolefont Affiche la police de l'écran pour la console EGA/VGA
showkey Affiche les scancodes, keycodes et codes ASCII des touches appuyées sur le clavier
unicode_start Met le clavier et la console en mode UNICODE. N'utilisez pas ce programme sauf si
votre fichier de correspondance est encodé en ISO-8859-1. Pour les autres encodages, cet
utilitaire donne de mauvais résultats.
unicode_stop Ramène le clavier et la console dans le mode avant UNICODE

196
Linux From Scratch - Version 11.3-systemd

8.64. Libpipeline-1.5.7
Le paquet Libpipeline contient une bibliothèque pour manipuler des pipelines (tubes) de sous-processus de façon
flexible et commode.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 10 Mo

8.64.1. Installation de Libpipeline


Préparez la compilation de Libpipeline :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.64.2. Contenu de Libpipeline


Bibliothèque installée: [Link]

Descriptions courtes
libpipeline Cette bibliothèque est utilisée pour construire de façon sécurisée des pipelines entre des sous-
processus

197
Linux From Scratch - Version 11.3-systemd

8.65. Make-4.4
Le paquet Make contient un programme pour contrôler la génération d'exécutables et d'autres fichiers non-sources
d'un paquet à partir des fichiers sources.
Temps de construction 0.5 SBU
approximatif:
Espace disque requis: 13 Mo

8.65.1. Installation de Make


Tout d'abord, résolvez les problèmes identifiés au préalable :
sed -e '/ifdef SIGPIPE/,+2 d' \
-e '/undef FATAL_SIG/i FATAL_SIG (SIGPIPE);' \
-i src/main.c

Préparez la compilation de Make :


./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.65.2. Contenu de Make


Programme installé: make

Description courte
make Détermine automatiquement quelles pièces d'un paquet doivent être (re)compilées. Puis, il lance les
commandes adéquates

198
Linux From Scratch - Version 11.3-systemd

8.66. Patch-2.7.6
Le paquet Patch contient un programme permettant de modifier et de créer des fichiers en appliquant un fichier
correctif (appelé habituellement « patch ») généralement créé par le programme diff.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 12 Mo

8.66.1. Installation de Patch


Préparez la compilation de Patch :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, exécutez :


make check

Installez le paquet :
make install

8.66.2. Contenu de Patch


Programme installé: patch

Description courte
patch Modifie des fichiers suivant les indications d'un fichier patch, aussi appelé correctif. Un fichier patch est
généralement une liste de différences créée par le programme diff. En appliquant ces différences sur les
fichiers originaux, patch crée les versions corrigées.

199
Linux From Scratch - Version 11.3-systemd

8.67. Tar-1.34
Le paquet Tar fournit la possibilité de créer des archives tar et effectuer diverses manipulations d'archives. Tar peut
être utilisé sur des archives précédemment créées pour extraire des fichiers, ajouter des fichiers supplémentaires,
mettre à jour ou lister les fichiers qui étaient déjà stockés.
Temps de construction 1.5 SBU
approximatif:
Espace disque requis: 40 Mo

8.67.1. Installation de Tar


Préparez la compilation de Tar :
FORCE_UNSAFE_CONFIGURE=1 \
./configure --prefix=/usr

Voici la signification de l'option de configuration :


FORCE_UNSAFE_CONFIGURE=1
Ceci oblige le test de mknod à se lancer en tant que root. On considère généralement que lancer ce test en tant
qu'utilisateur root est dangereux, mais comme on ne l'exécute que sur un système qui n'a été construit que
partiellement, ce remplacement est acceptable.
Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Un test, capabiblities: binary store/restore, est connu pour échouer s'il est lancé car LFS n'a pas selinux, mais
sera passé si le noyau hôte ne prend pas en charge les attributs étendus sur le système de fichiers utilisé pour la
construction de LFS.
Installez le paquet :
make install
make -C doc install-html docdir=/usr/share/doc/tar-1.34

8.67.2. Contenu de Tar


Programmes installés: tar
Répertoire installé: /usr/share/doc/tar-1.34

Descriptions courtes
tar Crée, extrait des fichiers à partir d'archives et liste le contenu d'archives, connues sous le nom d'archives tar

200
Linux From Scratch - Version 11.3-systemd

8.68. Texinfo-7.0.2
Le paquet Texinfo contient des programmes de lecture, écriture et conversion des pages Info.
Temps de construction 0.3 SBU
approximatif:
Espace disque requis: 128 Mo

8.68.1. Installation de Texinfo


Préparez la compilation de Texinfo :
./configure --prefix=/usr

Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

De manière optionnelle, installez les composants appartenant à une installation TeX :

make TEXMF=/usr/share/texmf install-tex

Voici la signification du paramètre de make :


TEXMF=/usr/share/texmf
La variable TEXMF du Makefile contient l'emplacement de la racine de votre répertoire TeX si, par exemple,
un paquet TeX est installé plus tard.
Le système de documentation Info utilise un fichier texte pour contenir sa liste des entrées de menu. Le fichier
est situé dans /usr/share/info/dir. Malheureusement, à cause de problèmes occasionnels dans les Makefile de
différents paquets, il peut être non synchronisé avec les pages info. Si le fichier /usr/share/info/dir a besoin d'être
recréé, les commandes suivantes accompliront cette tâche :
pushd /usr/share/info
rm -v dir
for f in *
do install-info $f dir 2>/dev/null
done
popd

8.68.2. Contenu de Texinfo


Programmes installés: info, install-info, makeinfo (lien vers texi2any), pdftexi2dvi, pod2texi, texi2any,
texi2dvi, texi2pdf et texindex
Bibliothèque installée: [Link], [Link] et [Link] (le tout dans /usr/lib/texinfo)
Répertoires installés: /usr/share/texinfo et /usr/lib/texinfo

Descriptions courtes
info Utilisé pour lire des pages info similaires aux pages man mais qui vont souvent plus loin que la
simple explication des arguments disponibles. Par exemple, comparez man bison et info bison.
install-info Utilisé pour installer les pages info ; il met à jour les entrées dans le fichier index d'info

201
Linux From Scratch - Version 11.3-systemd

makeinfo Traduit les sources Texinfo données dans différents autres langages : pages info, texte ou
HTML
pdftexi2dvi Utilisé pour formater le document Texinfo indiqué en un fichier PDF (Portable Document
Format)
pod2texi Convertit des documents Pod vers le format Texinfo
texi2any Traduit des documentations source Texinfo vers différents autres formats
texi2dvi Utilisé pour formater le document Texinfo indiqué en un fichier indépendant des périphériques,
pouvant être imprimé
texi2pdf Utilisé pour formater le document Texinfo indiqué en un fichier PDF (Portable Document
Format)
texindex Utilisé pour trier les fichiers d'index de Texinfo

202
Linux From Scratch - Version 11.3-systemd

8.69. Vim-9.0.1273
Le paquet Vim contient un puissant éditeur de texte.
Temps de construction 2.4 SBU
approximatif:
Espace disque requis: 235 Mo

Alternatives à Vim
Si vous préférez un autre éditeur—comme Emacs, Joe, ou Nano—merci de vous référer à
[Link] pour des instructions
d'installation.

8.69.1. Installation de Vim


Tout d'abord, modifiez l'emplacement par défaut du fichier de configuration vimrc en /etc :
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h

Préparez la compilation de Vim :


./configure --prefix=/usr

Compilez le paquet :
make

Pour préparer les tests, assurez-vous que l'utilisateur tester puisse écrire dans l'arborescence des sources :
chown -Rv tester .

Maintenant lancez les tests en tant qu'utilisateur tester :


su tester -c "LANG=en_US.UTF-8 make -j1 test" &> [Link]

La suite de tests affiche à l'écran beaucoup de caractères binaires. Ils peuvent causer des soucis avec les paramètres
de votre terminal actuel. Le problème peut se résoudre en redirigeant la sortie vers un journal de traces comme
montré ci-dessus. Un test réussi donnera les mots « ALL DONE » à la fin.
Installez le paquet :
make install

Beaucoup d'utilisateurs sont habitués à utiliser vi au lieu de vim. Pour permettre l'exécution de vim quand les
utilisateurs saisissent habituellement vi, créez un lien symbolique vers les binaires et vers les pages de man dans
les langues fournies :
ln -sv vim /usr/bin/vi
for L in /usr/share/man/{,*/}man1/vim.1; do
ln -sv vim.1 $(dirname $L)/vi.1
done

Par défaut, la documentation de Vim s'installe dans /usr/share/vim. Le lien symbolique suivant permet d'accéder à
la documentation via /usr/share/doc/vim-9.0.1273, en cohérence avec l'emplacement de la documentation d'autres
paquets :
ln -sv ../vim/vim90/doc /usr/share/doc/vim-9.0.1273

Si vous allez installer le système de fenêtrage X sur votre système LFS, il pourrait être nécessaire de recompiler Vim
après avoir installé X. Vim fournit une version graphique de l'éditeur qui requiert X et quelques autres bibliothèques
pour s'installer. Pour plus d'informations sur ce processus, référez-vous à la documentation de Vim et à la page
d'installation de Vim dans le livre BLFS sur [Link]
[Link].

203
Linux From Scratch - Version 11.3-systemd

8.69.2. Configuration de Vim


Par défaut, vim est lancé en mode compatible vi. Ceci pourrait être nouveau pour les personnes qui ont utilisé d'autres
éditeurs dans le passé. Le paramètre « nocompatible » est inclus ci-dessous pour surligner le fait qu'un nouveau
comportement est en cours d'utilisation. Il rappelle aussi à ceux qui voudraient le changer en mode « compatible »
qu'il devrait être le premier paramètre dans le fichier de configuration. Ceci est nécessaire car il modifie d'autres
paramètres et la surcharge doit survenir après ce paramètre. Créez un fichier de configuration vim par défaut en
lançant ce qui suit :
cat > /etc/vimrc << "EOF"
" Début de /etc/vimrc

" Ensure defaults are set before customizing settings, not after
source $VIMRUNTIME/[Link]
let skip_defaults_vim=1

set nocompatible
set backspace=2
set mouse=
syntax on
if (&term == "xterm") || (&term == "putty")
set background=dark
endif

" Fin de /etc/vimrc


EOF

L'option set nocompatible change le comportement de vim d'une façon plus utile (par défaut) que le comportement
compatible vi. Supprimez « no » pour conserver l'ancien comportement de vi. Le paramètre set backspace=2
permet le retour en arrière après des sauts de ligne, l'indentation automatique et le début de l'insertion. L'instruction
syntax on active la coloration syntaxique. Le paramètre set mouse=r permet de coller du texte avec la souris
correctement dans un environnement chroot ou au travers d'une connexion à distance. Enfin, l'instruction if avec set
background=dark corrige l'estimation de vim concernant la couleur du fond de certains émulateurs de terminaux.
Ceci permet d'utiliser de meilleures gammes de couleurs pour la coloration syntaxique, notamment avec les fonds
noirs de ces programmes.

La documentation pour les autres options disponibles peut être obtenue en exécutant la commande suivante :
vim -c ':options'

Note
Par défaut, Vim installe uniquement les fichiers de dictionnaires pour l'anglais. Pour installer des fichiers
de dictionnaires pour votre langue, copiez le fichier .spl et éventuellement, le .sug pour votre langue et
votre encodage de runtime/spell vers /usr/share/vim/vim90/spell/.

Pour utiliser ces fichiers dictionnaires, il faut une configuration dans /etc/vimrc, comme :
set spelllang=en,ru
set spell

Pour plus d’information, voir runtime/spell/[Link].

8.69.3. Contenu de Vim


Programmes installés: ex (lien vers vim), rview (lien vers vim), rvim (lien vers vim), vi (lien vers vim), view
(lien vers vim), vim, vimdiff (lien vers vim), vimtutor, et xxd
Répertoire installé: /usr/share/vim
204
Linux From Scratch - Version 11.3-systemd

Descriptions courtes
ex Démarre vim en mode ex
rview Une version restreinte de view : aucune commande shell ne peut être lancée et view ne peut pas être
suspendu
rvim Une version restreinte de vim : aucune commande shell ne peut être lancée et vim ne peut pas être
suspendu
vi Lien vers vim
view Démarre vim en mode lecture seule
vim L'éditeur
vimdiff Édite deux ou trois versions d'un fichier avec vim et montre les différences
vimtutor Vous apprend les touches et les commandes basiques de vim
xxd Fait un affichage hexa du fichier donné. Il peut aussi faire l'inverse pour une correspondance binaire

205
Linux From Scratch - Version 11.3-systemd

8.70. MarkupSafe-2.1.2
MarkupSafe est un module Python qui implémente les chaînes sures pour le balisage XML/HTML/XHTML.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 544 Ko

8.70.1. Installation de MarkupSafe


Compilez MarkupSafe avec la commande suivante :
pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Ce paquet n'a pas de suite de tests.


Installez le paquet :
pip3 install --no-index --no-user --find-links dist Markupsafe

8.70.2. Contenu de MarkupSafe


Répertoire installé: /usr/lib/python3.11/site-packages/[Link]-info

206
Linux From Scratch - Version 11.3-systemd

8.71. Jinja2-3.1.2
Jinja2 est un module Python qui implémente un langage de modèles simple qui ressemble à python.
Temps de construction moins de 0.1 SBU
approximatif:
Espace disque requis: 3.4 Mo

8.71.1. Installation de Jinja2


Construisez le paquet :
pip3 wheel -w dist --no-build-isolation --no-deps $PWD

Installez le paquet :
pip3 install --no-index --no-user --find-links dist Jinja2

8.71.2. Contenu de Jinja2


Répertoire installé: /usr/lib/python3.11/site-packages/[Link]-info

207
Linux From Scratch - Version 11.3-systemd

8.72. Systemd-252
Le paquet Systemd contient des programmes pour contrôler le démarrage, l'exécution et l'arrêt du système.
Temps de construction 0.7 SBU
approximatif:
Espace disque requis: 258 Mo

8.72.1. Installation de Systemd


Tout d'abord, corrigez un problème de sécurité dans systemd-coredump :
patch -Np1 -i ../systemd-252-security_fix-[Link]

Supprimez deux groupes inutiles, render et sgx, des règles udev par défaut :
sed -i -e 's/GROUP="render"/GROUP="video"/' \
-e 's/GROUP="sgx", //' rules.d/[Link]

Préparez la compilation de Systemd :


mkdir -p build
cd build

meson --prefix=/usr \
--buildtype=release \
-Ddefault-dnssec=no \
-Dfirstboot=false \
-Dinstall-tests=false \
-Dldconfig=false \
-Dsysusers=false \
-Drpmmacrosdir=no \
-Dhomed=false \
-Duserdb=false \
-Dman=false \
-Dmode=release \
-Dpamconfdir=no \
-Ddocdir=/usr/share/doc/systemd-252 \
..

Voici la signification des options de meson :


--buildtype=release
Ce paramètre remplace le type de construction par défaut (« debug »), ce qui produit des binaires non optimisés.
-Ddefault-dnssec=no
Cet argument désactive la prise en charge expérimentale de DNSSEC.
-Dfirstboot=false
Ce paramètre empêche l'installation d'un service de systemd qui est responsable de la mise en place du système
pour la première fois. Ceux-ci ne sont pas utiles dans LFS car tout est fait manuellement.
-Dinstall-tests=false
Ce paramètre évite l'installation des tests compilés.
-Dldconfig=false
Ce paramètre empêche l'installation d'une unité de systemd qui lance ldconfig au démarrage, inutile pour les
distributions source comme LFS et qui rend celui-ci plus long. Retirez cette option pour activer le lancement
de ldconfig au démarrage.
-Dsysusers=false
Ce paramètre empêche l’installation de services de systemd responsables de la mise en place des fichiers /etc/
group et /etc/passwd. Ces deux fichiers sont créés plus tôt dans ce chapitre. Ce démon n'est pas utile sur un
système LFS car les comptes utilisateurs sont créés manuellement.

208
Linux From Scratch - Version 11.3-systemd

-Drpmmacrosdir=no
Ce paramètre désactive l'installation des macros RPM pour systemd parce que LFS ne prend pas en charge
RPM.
-D{userdb,homed}=false
Supprimez deux démons qui ont des dépendances qui ne rentrent pas dans le cadre de LFS.
-Dman=false
Évitez la génération de pages de manuel pour éviter des dépendances supplémentaires. Nous installerons les
pages de manuels pré-générées pour systemd à partir d'une archive.
-Dmode=release
Désactivez certaines fonctionnalités considérées comme expérimentales en amont.
-Dpamconfdir=no
Empêchez l'installation d'un fichier de configuration de PAM qui ne fonctionne pas sur LFS.

Compilez le paquet :
ninja

Installez le paquet :
ninja install

Installez les pages de manuel :

tar -xf ../../[Link] --strip-components=1 -C /usr/share/man

Créez le fichier /etc/machine-id dont a besoin systemd-journald :


systemd-machine-id-setup

Mettez en place la structure cible de base :


systemctl preset-all

Désactivez deux services pour la mise à jour des distributions binaires. Ils sont inutiles sur un système Linux de
base construit à partir de sources et ils rapporteront tous une erreur si activés mais non configurés :
systemctl disable systemd-sysupdate{,-reboot}

209
Linux From Scratch - Version 11.3-systemd

8.72.2. Contenu de systemd


Programmes installés: busctl, coredumpctl, halt (lien symbolique vers systemctl), hostnamectl, init,
journalctl, kernel-install, localectl, loginctl, machinectl, networkctl, oomctl,
portablectl, poweroff (lien symbolique vers systemctl), reboot (lien symbolique
vers systemctl), resolvconf (lien symbolique vers resolvectl), resolvectl, runlevel
(lien symbolique vers systemctl), shutdown (lien symbolique vers systemctl),
systemctl, systemd-analyze, systemd-ask-password, systemd-cat, systemd-cgls,
systemd-cgtop, systemd-creds, systemd-delta, systemd-detect-virt, systemd-dissect,
systemd-escape, systemd-hwdb, systemd-id128, systemd-inhibit, systemd-machine-
id-setup, systemd-mount, systemd-notify, systemd-nspawn, systemd-path, systemd-
repart, systemd-resolve (lien symbolique vers resolvectl), systemd-run, systemd-
socket-activate, systemd-stdio-bridge, systemd-sysext, systemd-tmpfiles, systemd-
tty-ask-password-agent, systemd-umount (lien symbolique vers systemd-mount),
telinit (lien symbolique vers systemctl), timedatectl et udevadm
Bibliothèques installées: libnss_myhostname.so.2, libnss_mymachines.so.2, libnss_resolve.so.2,
libnss_systemd.so.2, [Link], [Link] (dans /usr/lib/
systemd) et [Link]
Répertoires installés: /etc/binfmt.d, /etc/init.d, /etc/kernel, /etc/modules-load.d, /etc/sysctl.d, /etc/systemd, /
etc/tmpfiles.d, /etc/udev, /etc/xdg/systemd, /usr/lib/systemd, /usr/lib/udev, /usr/
include/systemd, /usr/lib/binfmt.d, /usr/lib/environment.d, /usr/lib/kernel, /usr/lib/
modules-load.d, /usr/lib/sysctl.d, /usr/lib/systemd, /usr/lib/tmpfiles.d, /usr/share/doc/
systemd-252, /usr/share/factory, /usr/share/systemd, /var/lib/systemd et /var/log/
journal

Descriptions courtes
busctl Est utilisé pour examiner et surveiller le bus D-Bus
coredumpctl Est utilisé pour récupérer les fichiers coredumps du journal de
Systemd
halt Appelle en principe shutdown avec le paramètre -h, sauf si on est
déjà au niveau d'exécution 0, où il dit au noyau d'arrêter le système ;
il inscrit dans le fichier /var/log/wtmp que le système va s'éteindre
hostnamectl Est utilisé pour voir et changer le nom d'hôte du système et les
paramètres afférents
init Est le premier processus qui démarre après que le noyau a initialisé
le matériel. init poursuit le processus de démarrage et lance les
processus spécifiés dans ses fichiers de configuration. Dans ce cas,
il démarre systemd
journalctl Est utilisé pour voir le contenu du journal de systemd
kernel-install Est utilisé pour ajouter et supprimer des images de noyau et des
initramfs dans /boot. Dans LFS, on le fait manuellement
localectl Est utilisé pour voir et modifier les paramètres linguistiques et de la
disposition clavier du système
loginctl Est utilisé pour examiner et contrôler l'état du gestionnaire
d'identification de systemd
machinectl Est utilisé pour examiner et contrôler l'état du gestionnaire des
enregistrements de machines virtuelles et de conteneurs de systemd

210
Linux From Scratch - Version 11.3-systemd

networkctl Est utilisé pour examiner et configurer l'état des liens réseaux
configurés par systemd-networkd
oomctl Contrôle le démon Out Of Memory de systemd
portablectl Est utilisé pour attacher ou détacher des services portables d'un
système local
poweroff Dit au noyau d'arrêter le système et d'éteindre l'ordinateur (voir halt)
reboot Dit au noyau de redémarrer le système (voir halt)
resolvconf Enregistre la configuration des serveurs DNS et des domaines avec
systemd-resolved
resolvectl Envoie des commandes de contrôle au gestionnaire de résolution de
noms réseaux ou résout des noms de domaines, des adresses IPv4
ou IPv6, des enregistrements DNS et des services
runlevel Renvoie le niveau d'exécution actuel et précédent indiqué dans le
journal du dernier niveau d'exécution situé dans /run/utmp
shutdown Éteint le système de manière sécurisée en envoyant à tous les
processus un signal et en notifiant tous les utilisateurs connectés
systemctl Est utilisé pour examiner et contrôler l'état du gestionnaire des
services du système de systemd
systemd-analyze Est utilisé pour analyser les performances de démarrage et pour
identifier les unités systemd problématiques
systemd-ask-password Est utilisé pour demander le mot ou la phrase de passe d'un
utilisateur en utilisant un message spécifié sur la ligne de commande
Linux
systemd-cat Est utilisé pour relier les STDOUT et STDERR d'un processus au
journal de systemd
systemd-cgls Affiche de manière récursive le contenu de la hiérarchie des groupes
de Linux sélectionnée dans une arborescence
systemd-cgtop Affiche les groupes de contrôle dans la hiérarchie des groupes du
Linux local, triés par processus, charge mémoire et d'E/S disque
systemd-creds Affiche et traite les identifiants
systemd-delta Est utilisé pour identifier et comparer des fichiers de configuration
de /etc, qui remplacent les valeurs par défaut dans /usr
systemd-detect-virt Détecte si le système est lancé dans un environnement virtuel, et
ajuste udev en fonction
systemd-dissect Est utilisé pour inspecter les images disques de systèmes
d'exploitations
systemd-escape Est utilisé pour échapper les chaînes de caractères pour les utiliser
dans les noms d'unités de systemd
systemd-hwdb Est utilisé pour gérer la base de données matérielle (hwdb)
systemd-id128 Génère et afficher des chaînes id128 (UUID)
systemd-inhibit Est utilisé pour exécuter un programme avec un marqueur
d'extinction, de veille ou d'inactivité qui le verrouille, pour éviter
une action comme l'arrêt du système jusqu'à ce que le processus
termine

211
Linux From Scratch - Version 11.3-systemd

systemd-machine-id-setup Est utilisé par les outils d'installation de systemd pour initialiser l'ID
de la machine contenu dans /etc/machine-id lors de l'installation,
avec un ID généré de façon aléatoire
systemd-mount Est utilisé pour monter ou monter automatiquement un périphérique
temporairement
systemd-notify Est utilisé par les scripts des démons pour indiquer les changements
d'état au système d'initialisation
systemd-nspawn Est utilisé pour lancer une commande ou un OS entier dans un
conteneur léger (espace de nom séparé)
systemd-path Est utilisé pour voir les path système et utilisateur
systemd-repart Est utilisé pour agrandir et ajouter des partitions à une table de
partition quand systemd est utilisé dans une image d'OS (p. ex. dans
un conteneur)
systemd-resolve Est utilisé pour résoudre les noms de domaines, les adresses IPV4
et IPV6, les enregistrements DNS et les services
systemd-run Est utilisé pour créer et démarrer une unité transitoire .service
ou .scope et pour y lancer la commande spécifiée. C'est utile pour
valider des unités systemd
systemd-socket-activate Est utilisé pour écouter sur des périphériques de socket et lancer un
processus lors d'une connexion
systemd-sysext Active les images d'extension du système
systemd-tmpfiles Crée, efface et nettoie les fichiers et les répertoires volatiles et
temporaires sur la base d'un format et d'un emplacement du fichier
de configuration indiqué dans les répertoires tmpfiles.d
systemd-umount Démonte des points de montage
systemd-tty-ask-password-agent Est utilisé pour lister ou traiter les requêtes de mots de passe en
attente
telinit Dit à init quel niveau d'exécution adopter
timedatectl Est utilisé pour voir et modifier l'horloge du système et ses
paramètres
udevadm Est un outil générique d'administration d'Udev qui contrôle le
démon udevd, donne des infos à partir de la base de données
matérielle d'Udev, surveille les uevents, attend la fin des uevents,
teste la configuration d'Udev et déclenche des événements pour un
périphérique donné
libsystemd Est la bibliothèque d'outils principale de systemd
libudev Est une bibliothèque pour accéder aux informations d'Udev

212
Linux From Scratch - Version 11.3-systemd

8.73. D-Bus-1.14.6
D-Bus est un système de bus de messages, une manière simple pour les applications de se parler. D-Bus fournit
un démon système (pour les événements comme « l'ajout de nouveaux matériels » ou le « changement de la file
d'impression ») et un démon individuel à chaque utilisateur connecté (pour les besoins généraux de communication
entre les processus des applications de l'utilisateur). De plus, le bus des messages est construit sur la base d'un
environnement de circulation des messages par communication directe, ce qui peut être utilisé par deux applications
pour communiquer directement (sans passer par le démon de bus de messages).
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 19 Mo

8.73.1. Installation de D-Bus


Préparez la compilation de D-Bus :
./configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--runstatedir=/run \
--disable-static \
--disable-doxygen-docs \
--disable-xml-docs \
--docdir=/usr/share/doc/dbus-1.14.6 \
--with-system-socket=/run/dbus/system_bus_socket

Voici la signification des options de configuration :


--runstatedir=/run et --with-system-socket=/run/dbus/system_bus_socket
Ces paramètres font que l'emplacement du fichier de PID et du socket du bus système sera dans /run au lieu
du répertoire obsolète /var/run.
Compilez le paquet :
make

Ce paquet est fourni avec une suite de tests, mais elle exige des paquets non inclus dans LFS. Vous pouvez trouver
des instructions pour lancer la suite de tests dans BLFS, sur [Link]
systemd/general/[Link].
Installez le paquet :
make install

Créez un lien symbolique pour que D-Bus et systemd puissent utiliser le même fichier machine-id :
ln -sv /etc/machine-id /var/lib/dbus

8.73.2. Contenu de D-Bus


Programmes installés: dbus-cleanup-sockets, dbus-daemon, dbus-launch, dbus-monitor, dbus-run-session,
dbus-send, dbus-test-tool, dbus-update-activation-environment et dbus-uuidgen
Bibliothèques installées: libdbus-1.{a,so}
Répertoires installés: /etc/dbus-1, /usr/include/dbus-1.0, /usr/lib/dbus-1.0, /usr/share/dbus-1, /usr/share/
doc/dbus-1.14.6, et /var/lib/dbus

Descriptions courtes
dbus-cleanup-sockets est utilisé pour nettoyer les sockets fantômes d'un répertoire

213
Linux From Scratch - Version 11.3-systemd

dbus-daemon Est le démon de bus de messages D-Bus


dbus-launch Démarre dbus-daemon à partir d'un script shell
dbus-monitor Surveille les messages circulant dans un bus de message D-
Bus
dbus-run-session Démarre une instance de bus de session de dbus-daemon à
partir d'un script shell et démarre un programme spécifié dans
cette session
dbus-send Envoie un message à un bus de message D-Bus
dbus-test-tool Est un outil pour aider les paquets à tester D-Bus
dbus-update-activation-environment Met à jour les variables d'environnement qui seront
initialisées pour les services de session de D-Bus
dbus-uuidgen Génère un ID universel et unique
libdbus-1 Contient les fonctions de l'API utilisée pour communiquer
avec le bus de message de D-Bus

214
Linux From Scratch - Version 11.3-systemd

8.74. Man-DB-2.11.2
Le paquet Man-DB contient des programmes pour chercher et voir des pages de manuel.
Temps de construction 0.2 SBU
approximatif:
Espace disque requis: 40 Mo

8.74.1. Installation de Man-DB


Préparez la compilation de man-DB :
./configure --prefix=/usr \
--docdir=/usr/share/doc/man-db-2.11.2 \
--sysconfdir=/etc \
--disable-setuid \
--enable-cache-owner=bin \
--with-browser=/usr/bin/lynx \
--with-vgrind=/usr/bin/vgrind \
--with-grap=/usr/bin/grap

Voici la signification des options de configuration :


--disable-setuid
Ceci empêche que le programme man se voit attribué l'ID de l'utilisateur man.
--enable-cache-owner=bin
Cela attribue les fichiers de cache du système à l'utilisateur bin.
--with-...
Ces trois paramètres sont utilisés pour initialiser quelques programmes par défaut. lynx est un navigateur
Web en mode console (voir BLFS pour les instructions d'installation), vgrind convertit du code source de
programme en entrée Groff et grap est utile pour la composition de texte de graphes dans les documents
Groff. Les programmes vgrind et grap ne sont normalement pas nécessaires pour la visualisation des pages
de manuel. Ils ne font pas partie de LFS ou de BLFS, mais vous devriez pouvoir les installer vous-même après
avoir fini LFS si vous le souhaitez.
Compilez le paquet :
make

Pour tester les résultats, lancez :


make check

Installez le paquet :
make install

8.74.2. Pages de manuel non anglophones dans LFS


Le tableau suivant montre l'encodage présumé avec lequel Man-DB encodera les pages de manuel installées dans /
usr/share/man/<ll>. En outre, Man-DB détermine correctement si les pages de manuel installées dans ce répertoire
sont encodées en UTF-8.

Tableau 8.1. Encodage de caractère attendu des pages de manuel 8-bit de base

Langue (code) Encodage Langue (code) Encodage


Danois (da) ISO-8859-1 Croate (hr) ISO-8859-2
Allemand (de) ISO-8859-1 Hongrois (hu) ISO-8859-2

215
Linux From Scratch - Version 11.3-systemd

Langue (code) Encodage Langue (code) Encodage


Anglais (en) ISO-8859-1 Japonais (ja) EUC-JP
Espagnol (es) ISO-8859-1 Coréen (ko) EUC-KR
Estonien (et) ISO-8859-1 Lituanien (lt) ISO-8859-13
Finnois (fi) ISO-8859-1 Letton (lv) ISO-8859-13
Français (fr) ISO-8859-1 Macédonien (mk) ISO-8859-5
Irlandais (ga) ISO-8859-1 Polonais (pl) ISO-8859-2
Galicien (gl) ISO-8859-1 Roumain (ro) ISO-8859-2
Indonésien (id) ISO-8859-1 Grec (el) ISO-8859-7
Islandais (is) ISO-8859-1 Slovaque (sk) ISO-8859-2
Italien (it) ISO-8859-1 Slovène (sl) ISO-8859-2
Norvégien bokmål ISO-8859-1 Latin serbe (sr@latin) ISO-8859-2
(nb)
Hollandais (nl) ISO-8859-1 Serbe (sr) ISO-8859-5
Norvégien Nynorsk ISO-8859-1 Turc (tr) ISO-8859-9
(nn)
Norvégien (no) ISO-8859-1 Ukrainien (uk) KOI8-U
Portugais (pt) ISO-8859-1 Vietnamien (vi) TCVN5712-1
Suédois (sv) ISO-8859-1 Chinois simplifié (zh_CN) GBK
Biélorusse (be) CP1251 Chinois simplifié, Singapour GBK
(zh_SG)
Bulgare (bg) CP1251 Chinois traditionnel, Hong Kong BIG5HKSCS
(zh_HK)
Tchèque (cs) ISO-8859-2 Chinois traditionnel (zh_TW) BIG5

Note
Les pages de manuel dans des langues non incluses dans la liste ne sont pas prises en charge.

8.74.3. Contenu de Man-DB


Programmes installés: accessdb, apropos (lien vers whatis), catman, lexgrog, man, man-recode, mandb,
manpath et whatis
Bibliothèques installées: [Link] et [Link] (tous deux dans /usr/lib/man-db)
Répertoires installés: /usr/lib/man-db, /usr/libexec/man-db et /usr/share/doc/man-db-2.11.2

Descriptions courtes
accessdb Transforme le contenu de la base de données whatis en format lisible par un humain
apropos Recherche la base de données whatis et affiche les descriptions courtes des commandes système
qui contiennent une chaîne donnée
catman Crée ou met à jour les pages de manuel préformatées
lexgrog Affiche des informations sous forme de résumé d'une ligne à propos d'une page de manuel donnée
man Formate et affiche les pages de manuel demandées

216
Linux From Scratch - Version 11.3-systemd

man-recode Converti les pages de manuel vers un autre encodage


mandb Crée ou met à jour la base de données whatis
manpath Affiche le contenu de $MANPATH ou (si $MANPATH n'est pas paramétré) d'un chemin de
recherche convenable basé sur les paramètres de [Link] et de l'environnement de l'utilisateur
whatis Recherche la base de données whatis et affiche les descriptions courtes des commandes système
qui contiennent le mot-clé donné sous forme d'un mot séparé
libman Contient le support au moment de l'exécution de man
libmandb Contient le support au moment de l'exécution de man

217
Linux From Scratch - Version 11.3-systemd

8.75. Procps-4.0.2
Le paquet Procps-ng contient des programmes pour surveiller les processus.
Temps de construction 0.1 SBU
approximatif:
Espace disque requis: 26 Mo

8.75.1. Installation de Procps-ng


Préparez maintenant la compilation de procps-ng :
./configure --prefix=/usr \
--docdir=/usr/share/doc/procps-ng-4.0.2 \
--disable-static \
--disable-kill \
--with-systemd

Voici la signification de l'option de configuration :


--disable-kill
Cette option désactive la construction de la commande kill installée dans le paquet util-linux.
Compilez le paquet :
make

Pour lancer la suite de tests, lancez :


make check

Un test nommé free with commit peut échouer si certaines applications avec un allocateur mémoire personnalisé
(par exemple la JVM et les navigateurs web) s'exécutent sur la distribution hôte.
Installez le paquet :
make install

8.75.2. Contenu de Procps-ng


Programmes installés: free, pgrep, pidof, pkill, pmap, ps, pwdx, slabtop, sysctl, tload, top, uptime, vmstat,
w et watch
Bibliothèque installée: [Link]
Répertoires installés: /usr/include/procps et /usr/share/doc/procps-ng-4.0.2

Descriptions courtes
free Indique le total de mémoire libre et utilisé sur le système à la fois pour la mémoire physique et
pour la mémoire swap
pgrep Recherche les processus suivant leur nom et autres attributs
pidof Indique le PID des programmes précisés
pkill Envoie des signaux aux processus suivant leur nom et autres attributs
pmap Affiche le plan mémoire du processus désigné
ps Donne un aperçu des processus en cours d'exécution
pwdx Indique le répertoire d'exécution courant d'un processus
slabtop Affiche des informations détaillées sur le cache slab du noyau en temps réel
sysctl Modifie les paramètres du noyau en cours d'exécution

218
Linux From Scratch - Version 11.3-systemd

tload Affiche un graphe de la charge système actuelle


top Affiche une liste des processus demandant le maximum de ressources CPU ; il fournit un affichage
agréable sur l'activité du processeur en temps réel
uptime Affiche le temps d'exécution du système, le nombre d'utilisateurs connectés et les moyennes de
charge système
vmstat Affiche les statistiques de mémoire virtuelle, donne des informations sur les processus, la mémoire,
la pagination, le nombre de blocs en entrées/sorties, les échappements et l'activité CPU
w Affiche les utilisateurs actuellement connectés, où et depuis quand
watch Lance une commande de manière répétée, affichant le premier écran de sa sortie ; ceci vous permet
de surveiller la sortie
libproc-2 Contient les fonctions utilisées par la plupart des programmes de ce paquet

219
Linux From Scratch - Version 11.3-systemd

8.76. Util-linux-2.38.1
Le paquet Util-linux contient différents outils. Parmi eux se trouvent des outils de gestion des systèmes de fichiers,
de consoles, de partitions et des messages.
Temps de construction 0.5 SBU
approximatif:
Espace disque requis: 283 Mo

8.76.1. Installation d'Util-linux


Préparez la compilation d'Util-linux :
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
--bindir=/usr/bin \
--libdir=/usr/lib \
--sbindir=/usr/sbin \
--disable-chfn-chsh \
--disable-login \
--disable-nologin \
--disable-su \
--disable-setpriv \
--disable-runuser \
--disable-pylibmount \
--disable-static \
--without-python \
--docdir=/usr/share/doc/util-linux-2.38.1

Les options --disable et --without préviennent des avertissements à propos d'éléments de construction qui requièrent
des paquets non compris dans LFS ou incohérents avec les programmes installés par d'autres paquets.

Compilez le paquet :
make

Si vous le souhaitez, lancez la suite de tests en tant qu'utilisateur non root :

Avertissement
L'exécution de la suite de tests en tant qu'utilisateur root peut être dangereuse pour votre système. Pour la
lancer, l'option CONFIG_SCSI_DEBUG du noyau doit être disponible sur le système en cours d'exécution
et doit être construite en tant que module. Si elle est compilée en dur dans le noyau, cela empêchera le
démarrage. Pour une exécution complète, il faut installer d'autres paquets de BLFS. Si vous le souhaitez,
vous pouvez lancer ce test après le redémarrage dans le système LFS terminé, en exécutant :
bash tests/[Link] --srcdir=$PWD --builddir=$PWD

chown -Rv tester .


su tester -c "make -k check"

Les tests hardlink échoueront si le noyau de l'hôte n'a pas l'option CONFIG_CRYPTO_USER_API_HASH. En
plus, deux sous-tests de la suite misc:mbsencode et un sous-test de la suite script:replay sont connus pour échouer.

Installez le paquet :
make install

220
Linux From Scratch - Version 11.3-systemd

8.76.2. Contenu d'Util-linux


Programmes installés: addpart, agetty, blkdiscard, blkid, blkzone, blockdev, cal, cfdisk, chcpu, chmem,
choom, chrt, col, colcrt, colrm, column, ctrlaltdel, delpart, dmesg, eject, fallocate,
fdisk, fincore, findfs, findmnt, flock, fsck, [Link], [Link], fsfreeze, fstrim,
getopt, hexdump, hwclock, i386, ionice, ipcmk, ipcrm, ipcs, irqtop, isosize, kill,
last, lastb (lien vers last), ldattach, linux32, linux64, logger, look, losetup, lsblk,
lscpu, lsipc, lsirq, lslocks, lslogins, lsmem, lsns, mcookie, mesg, mkfs, [Link],
[Link], [Link], mkswap, more, mount, mountpoint, namei, nsenter, partx,
pivot_root, prlimit, readprofile, rename, renice, resizepart, rev, rfkill, rtcwake, script,
scriptlive, scriptreplay, setarch, setsid, setterm, sfdisk, sulogin, swaplabel, swapoff
(lien vers swapon), swapon, switch_root, taskset, uclampset, ul, umount, uname26,
unshare, utmpdump, uuidd, uuidgen, uuidparse, wall, wdctl, whereis, wipefs, x86_64
et zramctl
Bibliothèques installées: [Link], [Link], [Link], [Link] et [Link]
Répertoires installés: /usr/include/blkid, /usr/include/libfdisk, /usr/include/libmount, /usr/include/
libsmartcols, /usr/include/uuid, /usr/share/doc/util-linux-2.38.1 et /var/lib/hwclock

Descriptions courtes
addpart Informe le noyau Linux de nouvelles partitions
agetty Ouvre un port tty, demande un nom de connexion puis appelle le programme login
blkdiscard Désactive des secteurs d'un périphérique
blkid Un outil en ligne de commande pour trouver et afficher les attributs d'un périphérique bloc
blkzone Lance des commandes de zone sur le périphérique bloc donné
blockdev Permet aux utilisateurs d'appeler les ioctl d'un périphérique bloc à partir de la ligne de
commande
cal Affiche un calendrier simple
cfdisk Manipule la table des partitions du périphérique donné
chcpu Modifie l'état des processeurs
chmem Configure la mémoire
choom Affiche et adapte les résultats OOM-killer qui déterminent quel processus supprimer en premier
quand la mémoire de Linux sature
chrt Manipule les attributs d'un processus en temps réel
col Filtre les retours de chariot inversés
colcrt Filtre la sortie de nroff pour les terminaux manquant de capacités comme le texte barré ou les
demi-lignes
colrm Filtre les colonnes données
column Formate un fichier donné en plusieurs colonnes
ctrlaltdel Initialise la combinaison des touches Ctrl+Alt+Del pour une réinitialisation matérielle ou
logicielle
delpart Demande au noyau Linux de supprimer une partition
dmesg Affiche les messages du noyau lors du démarrage
eject Éjecte un média amovible
fallocate Pré-alloue de l'espace à un fichier

221
Linux From Scratch - Version 11.3-systemd

fdisk Manipule la table des partitions du périphérique donné


fincore Compte les pages de contenu d'un fichier en mémoire
findfs Trouve un système de fichiers par étiquette ou UUID (Universally Unique Identifier, soit
Identifiant Unique Universel)
findmnt Est une interface en ligne de commande avec la bibliothèque libmount pour du travail avec les
fichiers mountinfo, fstab et mtab
flock Acquiert le verrouillage d'un fichier puis exécute une commande en maintenant le verrouillage
fsck Est utilisé pour vérifier, et parfois réparer, les systèmes de fichiers
[Link] Réalise un test de cohérence sur le système de fichiers Cramfs du périphérique donné
[Link] Réalise un test de cohérence sur le système de fichiers Minix du périphérique donné
fsfreeze Est une enveloppe très simple autour des opérations du pilote noyau FIFREEZE/FITHAW ioctl
fstrim Écarte les blocs inutilisés sur un système de fichiers monté
getopt Analyse les options sur la ligne de commande donnée
hardlink Crée des liens durs pour renforcer les fichiers dupliqués
hexdump Affiche le fichier indiqué en hexadécimal ou dans un autre format donné
hwclock Lit ou initialise l'horloge du matériel, aussi appelée horloge RTC (Real-Time Clock, horloge à
temps réel) ou horloge du BIOS (Basic Input-Output System)
i386 Un lien symbolique vers setarch
ionice Obtient ou initialise la classe de planification IO (ES) et la priorité pour un programme
ipcmk Crée diverses ressources IPC
ipcrm Supprime la ressource IPC (inter-process communication) donnée
ipcs Fournit l'information de statut IPC
irqtop Affiche le compteur d'interruption noyau dans un affichage similaire à top(1)
isosize Affiche la taille d'un système de fichiers iso9660
kill Envoie des signaux aux processus
last Affiche les utilisateurs connectés (et déconnectés) dernièrement en s'appuyant sur le fichier
/var/log/wtmp ; il affiche également les démarrages du système, les extinctions et les
changements de niveau d'exécution
lastb Affiche les tentatives de connexions enregistrées dans /var/log/btmp
ldattach Attache une discipline de ligne à une ligne série
linux32 Un lien symbolique vers setarch
linux64 Un lien symbolique vers setarch
logger Enregistre le message donné dans les traces système
look Affiche les lignes commençant par la chaîne donnée
losetup Initialise et contrôle les périphériques loop
lsblk Liste les informations sur tous les périphériques blocs ou ceux sélectionnés dans un format
semblable à une arborescence
lscpu Affiche des informations sur l'architecture du processeur
lsfd Montre les informations sur les fichiers ouverts ; remplace lsof
lsipc Affiche les informations sur les fonctions IPC actuellement utilisées sur le système

222
Linux From Scratch - Version 11.3-systemd

lsirq Affiche les information du compteur d'interruption du noyau


lslocks Liste les verrous du système local
lslogins Liste les informations sur les comptes utilisateurs, groupes et systèmes
lsmem Liste les intervalles de mémoire disponibles avec leur statut en ligne
lsns Liste les espaces de noms
mcookie Génère des cookies magiques, nombres hexadécimaux aléatoires sur 128 bits, pour xauth
mesg Contrôle si d'autres utilisateurs peuvent envoyer des messages au terminal de l'utilisateur actuel
mkfs Construit un système de fichiers sur un périphérique (habituellement une partition du disque
dur)
[Link] Crée un système de fichiers bfs de SCO (Santa Cruz Operations)
[Link] Crée un système de fichiers cramfs
[Link] Crée un système de fichiers Minix
mkswap Initialise le périphérique ou le fichier à utiliser comme swap
more Est un filtre pour visualiser un texte un écran à la fois
mount Attache le système de fichiers du périphérique donné sur un répertoire spécifié dans le système
de fichiers
mountpoint Vérifie si le répertoire est un point de montage
namei Affiche les liens symboliques dans les chemins donnés
nsenter Lance un programme avec un nom espacé des autres processus
partx Signale au noyau la présence et le nombre de partitions sur un disque
pivot_root Fait en sorte que le système de fichiers donné soit le nouveau système de fichiers racine du
processus actuel
prlimit Récupère et envoie la limite des ressources d'un processus
readprofile Lit les informations de profilage du noyau
rename Renomme les fichiers donnés, remplaçant une chaîne donnée par une autre
renice Modifie la priorité des processus exécutés
resizepart Demande au noyau Linux de redimensionner une partition
rev Inverse les lignes d'un fichier donné
rkfill Outil pour activer et désactiver les périphériques sans fil
rtcwake Utilisé pour mettre un système en sommeil jusqu'à un moment de réveil spécifié
script Crée un script type à partir d'une session du terminal
scriptlive Rejoue des scripts type de session en utilisant les informations de temps
scriptreplay Rejoue des scripts type en utilisant les informations de temps
setarch Change d'architecture signalée dans un nouvel environnement de programme et initialise les
commutateurs adéquats
setsid Lance le programme donné dans une nouvelle session
setterm Initialise les attributs du terminal
sfdisk Est un manipulateur de table de partitions disque
sulogin Permet la connexion de root. Il est normalement appelé par init lorsque le système passe en
mono-utilisateur

223
Linux From Scratch - Version 11.3-systemd

swaplabel Permet de modifier l'UUID et l'étiquette d'un espace d'échange


swapoff Désactive des périphériques et des fichiers pour la pagination et l'échange
swapon Active les périphériques et fichiers de pagination et d'échange et liste les périphériques et
fichiers en cours d'utilisation
switch_root Change de système de fichiers racine pour une arborescence montée
taskset Récupère ou initialise un processus vis-à-vis du processeur
uclampset Manipule les attributs de verrouillage d'utilisation du système ou d'un processus
ul Un filtre pour traduire les soulignements en séquences d'échappement indiquant un
soulignement pour le terminal utilisé
umount Déconnecte un système de fichiers à partir de la hiérarchie de fichiers du système
uname26 Un lien symbolique vers setarch
unshare Lance un programme avec quelques espaces de nom non partagés avec le parent
utmpdump Affiche le contenu du fichier de connexion donné dans un format convivial
uuidd Un démon utilisé par la bibliothèque UUID pour générer des UUIDs basés sur l'heure de
manière sécurisée et avec une garantie d'unicité
uuidgen Crée un nouvel UUID. Chaque nouvel UUID peut être raisonnablement considéré unique parmi
tous les UUID créés, sur le système local mais aussi sur les autres, dans le passé et dans le
futur, avec une forte probabilité (environ 340 trillions de trillions de trillons d'UUIDS unique
sont possibles).
uuidparse Un utilitaire pour analyser des identifiants uniques
wall Affiche le contenu d'un fichier ou, par défaut, son entrée standard, sur les terminaux de tous
les utilisateurs actuellement connectés
wdctl Affiche l'état du watchdog matériel
whereis Affiche l'emplacement du binaire, les sources et la page de manuel de la commande donnée
wipefs Nettoie la signature d'un système de fichiers à partir du périphérique
x86_64 Un lien symbolique vers setarch
zramctl Un programme pour configurer et contrôler les périphériques zram (mémoire ram compressée)
libblkid Contient des routines pour l'identification des périphériques et l'extraction des modèles
libfdisk Contient des routines pour la manipulation de table de partition
libmount Contient les routines pour le montage et le démontage des périphériques de bloc
libsmartcols Contient les routines pour la sortie d'écran d'aide sous forme de tableau
libuuid Contient des routines pour la génération d'identifiants uniques pour des objets qui peuvent être
accessibles en dehors du système local

224
Linux From Scratch - Version 11.3-systemd

8.77. E2fsprogs-1.47.0
Le paquet e2fsprogs contient les outils de gestion du système de fichiers ext2. Il prend aussi en charge les systèmes
de fichiers journalisés ext3 et ext4.
Temps de construction 2.4 SBU on a spinning disk, 0.4 SBU on an SSD
approximatif:
Espace disque requis: 95 Mo

8.77.1. Installation de E2fsprogs


La documentation d'e2fsprogs recommande de construire le paquet dans un sous-répertoire du répertoire source :
mkdir -v build
cd build

Préparez la compilation d'e2fsprogs :


../configure --prefix=/usr \
--sysconfdir=/etc \
--enable-elf-shlibs \
--disable-libblkid \
--disable-libuuid \
--disable-uuidd \
--disable-fsck

Voici la signification des options de configuration :


--enable-elf-shlibs
Cette option crée les bibliothèques partagées que certains programmes de ce paquet utilisent.
--disable-*
Cette option empêche la construction et l'installation des bibliothèques libuuid et libblkid, du démon uuidd
et de l'outil fsck, car util-Linux installe des versions plus récentes.
Compilez le paquet :
make

Pour lancer les tests, lancez :


make check

Un test, u_direct_io, est connu pour échouer sur certains systèmes.


Installez le paquet :
make install

Supprimez des bibliothèques statiques inutiles :


rm -fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a

Ce paquet installe un fichier .info gzippé mais ne met pas à jour le fichier dir du système. Dézippez ce fichier puis
mettez à jour le fichier dir du système en utilisant les commandes suivantes :
gunzip -v /usr/share/info/[Link]
install-info --dir-file=/usr/share/info/dir /usr/share/info/[Link]

Si vous le désirez, créez et installez de la documentation supplémentaire en exécutant les commandes suivantes :
makeinfo -o doc/com_err.info ../lib/et/com_err.texinfo
install -v -m644 doc/com_err.info /usr/share/info
install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info

225
Linux From Scratch - Version 11.3-systemd

8.77.2. Configuration de E2fsprogs


/etc/[Link] contient les valeurs par défaut de diverses optionsqde la ligne de commande de mke2fs. Vous
pouvez modifier le fichier pour rendre les valeurs par défaut plus utiles. Par exemple, certains utilitaires (absents de
LFS et BLFS) ne peuvent pas reconnaitre un système de fichiers ext4 avec la fonctionnalité metadata_csum_seed.
Si vous avez besoin d'un tel utilitaire, vous pouvez supprimer la fonctionnalité de la liste des fonctionnalités par
défaut pour ext4 avec la commande :
sed 's/metadata_csum_seed,//' -i /etc/[Link]

Consultez la page de manuel [Link](5) pour plus de détails.

8.77.3. Contenu de E2fsprogs


Programmes installés: badblocks, chattr, compile_et, debugfs, dumpe2fs, e2freefrag, e2fsck, e2image,
e2label, e2mmpstatus, e2scrub, e2scrub_all, e2undo, e4crypt, e4defrag, filefrag,
fsck.ext2, fsck.ext3, fsck.ext4, logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2,
mkfs.ext3, mkfs.ext4, mklost+found, resize2fs et tune2fs
Bibliothèques installées: libcom_err.so, [Link], [Link] et [Link]
Répertoires installés: /usr/include/e2p, /usr/include/et, /usr/include/ext2fs, /usr/include/ss, /usr/lib/
e2fsprogs, /usr/share/et et /usr/share/ss

Descriptions courtes
badblocks Recherche les blocs défectueux sur un périphérique (habituellement une partition d'un disque)
chattr Modifie les propriétés des fichiers sur les systèmes de fichiers ext{234}
compile_et Un compilateur de table d'erreurs qui convertit une table de noms d'erreurs et des messages
associés en un fichier source C à utiliser avec la bibliothèque com_err
debugfs Un débogueur de système de fichiers qui peut être utilisé pour analyser et modifier l'état de
systèmes de fichiers ext{234}
dumpe2fs Affiche le superbloc et les informations de groupes de blocs sur le système de fichiers présent
sur un périphérique donné
e2freefrag Rend compte des informations de fragmentation de l'espace libre
e2fsck Permet de vérifier et le cas échéant, de réparer des systèmes de fichiers ext{234}
e2image Permet de sauvegarder les données critiques d'un système de fichiers ext{234} dans un fichier
e2label Affiche ou modifie le label d'un système de fichiers ext{234} sur un périphérique donné
e2mmpstatus Vérifie le statut MMP d'un système de fichiers ext4
e2scrub Vérifie le contenu d'un système de fichiers monté ext{234}
e2scrub_all Recherche les erreurs des systèmes de fichiers montés ext{234}
e2undo Rejoue le log d'annulation pour un système de fichiers ext{234} trouvé sur un périphérique. Il
peut être utilisé pour annuler une opération échouée par un programme e2fsprogs.
e4crypt Utilitaire de chiffrement du système de fichiers ext4
e4defrag Défragmenteur en ligne pour les systèmes de fichiers ext4
filefrag Signale à quel point un fichier particulier peut être mal fragmenté
fsck.ext2 Vérifie par défaut les systèmes de fichiers ext2. C'est un lien matériel vers e2fsck
fsck.ext3 Vérifie par défaut les systèmes de fichiers ext3. C'est un lien matériel vers e2fsck
fsck.ext4 Vérifie par défaut les systèmes de fichiers ext4. C'est un lien matériel vers e2fsck

226
Linux From Scratch - Version 11.3-systemd

logsave Sauvegarde la sortie d'une commande dans un fichier journal


lsattr Liste les attributs de fichiers sur un système de fichiers ext2
mk_cmds Convertit une table de noms de commandes et de messages d'aide en un fichier source C
utilisable avec la bibliothèque sous-système libss
mke2fs Crée un système de fichiers ext{234} sur le périphérique spécifié
mkfs.ext2 Crée par défaut un système de fichiers ext2. C'est un lien matériel vers mke2fs
mkfs.ext3 Crée par défaut un système de fichiers ext3. C'est un lien matériel vers mke2fs
mkfs.ext4 Crée par défaut un système de fichiers ext4. C'est un lien matériel vers mke2fs
mklost+found Crée un répertoire lost+found sur un système de fichiers ext{234}. Il pré-alloue des blocs de
disque à ce répertoire pour alléger la tâche d'e2fsck
resize2fs Permet d'agrandir ou de réduire des systèmes de fichiers ext{234}
tune2fs Ajuste les paramètres des systèmes de fichiers ext{234}
libcom_err La routine d'affichage d'erreurs courantes
libe2p Est utilisé par dumpe2fs, chattr et lsattr
libext2fs Contient des routines pour permettre aux programmes de niveau utilisateur de manipuler des
systèmes de fichiers ext{234}
libss Est utilisé par debugfs

227
Linux From Scratch - Version 11.3-systemd

8.78. À propos des symboles de débogage


La plupart des programmes et des bibliothèques sont compilés, par défaut, en incluant les symboles de débogage
(avec l'option -g de gcc). Ceci signifie que, lors du débogage d'un programme ou d'une bibliothèque compilés avec
les informations de débogage, le débogueur peut vous donner non seulement les adresses mémoire mais aussi le
nom des routines et des variables.

Néanmoins, l'intégration de ces symboles de débogage font grossir le programme ou la bibliothèque de façon
significative. Voici des exemples de l'espace occupé par ces symboles :

• Un binaire bash avec les symboles de débogage : 1 200 Ko


• Un binaire bash sans les symboles de débogage : 480 Ko
• Les fichiers Glibc et GCC (/lib et /usr/lib) avec les symboles de débogage : 87 Mo
• Les fichiers Glibc et GCC sans les symboles de débogage : 16 Mo

La taille des fichiers va varier en fonction de quel compilateur ou de quelle bibliothèque du C a été utilisé. Cependant,
un programme dont les symboles de débogage ont été supprimés est en général plus léger de 50 à 80% comparé à un
programme qui les a encore. Comme la plupart des gens n'utiliseront jamais un débogueur sur leur système, beaucoup
d'espace disque peut être gagné en supprimant ces symboles. La prochaine section montre comment supprimer tous
les symboles de débogage des programmes et bibliothèques.

8.79. Nettoyage
Cette section est facultative. Si l'utilisateur ou l'utilisatrice prévu·e ne programme pas et ne prévoit pas de déboguer
les logiciels du système, vous pouvez réduire la taille du système d'environ 2 Go en supprimant les symboles de
débogage et les entrées inutiles de la table des symboles de débogage des binaires et des bibliothèques. Cela ne pose
aucun problème en dehors du fait de ne plus pouvoir déboguer les logiciels complètement.

La plupart des gens utilise les commandes mentionnées ci-dessous sans difficulté. Cependant, il est facile de causer
une coquille et de rendre le nouveau système inutilisable, donc avant de lancer les commandes strip, il vaut mieux
faire une sauvegarde du système LFS dans son état actuel.
La commande strip avec le paramètre —strip-unneeded supprime tous les symboles de débogage d'un binaire ou
d'une bibliothèque. Elle supprime aussi toutes les entrées de la table des symboles qui ne sont pas requises par
l'éditeur des liens (pour les binaires liés dynamiquement et les bibliothèques partagées).
Les symboles de débogage pour les bibliothèques choisies sont placés dans des fichiers séparés. Ces informations
de débogage sont requises si vous lancez des tests de régression qui utilisent valgrind ou gdb plus tard dans BLFS.

Remarquez que strip remplacera le binaire ou la bibliothèque qu'il traite. Cela peut faire crasher les processus qui
utilisent du code ou des données de ce fichier. Si le processus exécutant strip lui-même est affecté, le binaire ou la
bibliothèque en cours de nettoyage peut être détruit. Cela peut rendre le système complètement inutilisable. Pour
éviter cela, nous copierons certains bibliothèques et binaires dans /tmp, les nettoierons là, et les installerons de
nouveau avec la commande install. Lisez les entrées liées dans le Section 8.2.1, « Problèmes de mise à jour » pour
connaître les différentes raisons d'utilisation de la commande install ici.

Note
Le nom du chargeur ELF est [Link].2 sur les systèmes 64 bits et [Link].2 sur les systèmes
32 bits. La construction ci-dessous choisit le bon nom pour l'architecture actuelle, en excluant tout ce qui
fini en « g », au cas où les commandes ci-dessous ont déjà été lancées.

228
Linux From Scratch - Version 11.3-systemd

Important
Si un paquet dont la version est différente de la version spécifiée dans le livre (que se soit pour suivre une
recommendation de sécurité ou pour vos préférences personnelles), il peut être nécessaire de mettre à jour
le nom de fichier de la bibliothèque dans save_usrlib ou online_usrlib. Si vous ne le faites pas, votre
système peut devenir complètement inutilisable.

save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])


[Link].6
libthread_db.so.1
[Link].0.0.0
libstdc++.so.6.0.30
[Link].1.0.0
[Link].1.2.0"

cd /usr/lib

for LIB in $save_usrlib; do


objcopy --only-keep-debug $LIB $[Link]
cp $LIB /tmp/$LIB
strip --strip-unneeded /tmp/$LIB
objcopy --add-gnu-debuglink=$[Link] /tmp/$LIB
install -vm755 /tmp/$LIB /usr/lib
rm /tmp/$LIB
done

online_usrbin="bash find strip"


online_usrlib="[Link]
[Link].0.0.0
[Link].8.2
[Link].6.4
[Link].6
[Link].8.2
[Link].1.2.13
$(cd /usr/lib; find libnss*.so* -type f)"

for BIN in $online_usrbin; do


cp /usr/bin/$BIN /tmp/$BIN
strip --strip-unneeded /tmp/$BIN
install -vm755 /tmp/$BIN /usr/bin
rm /tmp/$BIN
done

for LIB in $online_usrlib; do


cp /usr/lib/$LIB /tmp/$LIB
strip --strip-unneeded /tmp/$LIB
install -vm755 /tmp/$LIB /usr/lib
rm /tmp/$LIB
done

for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \


$(find /usr/lib -type f -name \*.a) \
$(find /usr/{bin,sbin,libexec} -type f); do
case "$online_usrbin $online_usrlib $save_usrlib" in
*$(basename $i)* )
;;
* ) strip --strip-unneeded $i
;;
esac
done

unset BIN LIB save_usrlib online_usrbin online_usrlib

229
Linux From Scratch - Version 11.3-systemd

La commande rapportera un grand nombre de fichiers comme ayant une extension non reconnue. Vous pouvez
ignorer ces avertissements sans problème. Cela signifie que ces fichiers sont des scripts et non des binaires.

8.80. Nettoyage
Enfin, nettoyez les quelques fichiers laissés par l'exécution des tests :
rm -rf /tmp/*

Il y a aussi plusieurs fichiers installés dans les répertoires /usr/lib et /usr/libexec avec l'extension .la. Ce sont
des fichiers « d'archive libtool ». Sur les systèmes Linux modernes, ils ne sont utiles que pour libltdl. Aucune
bibliothèque de LFS ne devrait être chargée par libltdl et certains fichiers .la sont connus pour empêcher la
construction des paquets de BLFS. Supprimez maintenant ces fichiers :
find /usr/lib /usr/libexec -name \*.la -delete

Pour plus d'information sur les fichiers d'archive libtool, voir la section BLFS « Ã# propos des fichiers d'archive
libtool (.la) ».
Le compilateur construit au Chapitre 6 et au Chapitre 7 est toujours partiellement installé mais n'est plus utile.
Supprimez-le avec :
find /usr -depth -name $(uname -m)-lfs-linux-gnu\* | xargs rm -rf

Enfin, supprimez le compte utilisateur « tester » créé au début du chapitre précédent.


userdel -r tester

230
Linux From Scratch - Version 11.3-systemd

Chapitre 9. Configuration du système


9.1. Introduction
Ce chapitre traite des fichiers de configuration et des services systemd. Tout d'abord, les fichiers de configuration
générale nécessaires à la mise en place du réseau sont présentés.
• Section 9.2, « Configuration générale du réseau. »
• Section 9.2.3, « Configurer le nom d'hôte du système. »
• Section 9.2.4, « Personnaliser le fichier /etc/hosts. »
Ensuite, Les problèmes qui affectent la bonne configuration des périphériques sont décrits.
• Section 9.3, « Manipulation des périphériques et modules. »
• Section 9.4, « Gérer les périphériques. »
Puis, la configuration de l'horloge du système et de l'agencement du clavier est expliquée.
• Section 9.5, « Configurer l'horloge système. »
• Section 9.6, « Configurer la Console Linux. »
De plus, une brève introduction aux scripts et aux fichiers de configuration utilisés quand l'utilisateur se connecte
au système est faite.
• Section 9.7, « Configuration des paramètres régionaux du système. »
• Section 9.8, « Créer le fichier /etc/inputrc. »
Et enfin, la configuration du comportement de systemd est expliquée.
• Section 9.10, « Utilisation et configuration de Systemd. »

9.2. Configuration générale du réseau


Cette section s'applique seulement si une carte réseau doit être configurée.

9.2.1. Fichiers de configuration d'interface réseau


À partir de la version 209, systemd contient un démon de configuration réseau nommé systemd-networkd qui peut
être utilisé pour la configuration basique du réseau. De plus, depuis la version 213, la résolution de nom DNS peut
être prise en charge par systemd-resolved au lieu d'un fichier /etc/[Link] statique. Ces deux services sont
activés par défaut.

Note
Si vous n'utiliserez pas systemd-networkd pour la configuration du réseau (par exemple si le système
n'est pas connecté à un réseau ou que vous voulez utiliser un autre utilitaire comme NetworkManager pour
la configuration du réseau), désactivez un service pour éviter un message d'erreur au démarrage :
systemctl disable systemd-networkd-wait-online

Les fichiers de configuration pour systemd-networkd (et systemd-resolved) peuvent être placés dans /usr/lib/
systemd/network ou /etc/systemd/network. Les fichiers dans /etc/systemd/network ont une priorité supérieure à
ceux dans /usr/lib/systemd/network. Il existe trois types de fichiers de configuration : .link, .netdev et .network.
Pour une description détaillée et des exemples de contenu de ces fichiers de configuration, consultez des pages de
manuel systemd-link(5), systemd-netdev(5) et systemd-network(5).

231
Linux From Scratch - Version 11.3-systemd

[Link]. Nommage des périphériques réseau


Udev assigne normalement des noms d'interface basés sur les caractéristiques physiques du système comme enp2s1.
Si vous n'êtes pas sûr de votre nom d'interface, vous pouvez toujours lancer ip link après avoir démarré votre
système.

Note
Les noms d'interface dépendent de l'implémentation et de la configuration du démon udev exécuté sur
le système. Le démon udev de LFS (systemd-udevd, installé au Section 8.72, « Systemd-252 ») ne
sera pas exécuté à moins de démarrer le système LFS. Il n'est donc pas fiable de déterminer les noms
d'interface utilisés dans le système LFS en exécutant ces commandes sur la distribution hôte, même dans
l'environnement chroot.

Pour la plupart des systèmes, il n'y a qu'une interface réseau pour chaque type de connexion. Par exemple, le nom
classique pour une connexion filaire est eth0. Une connexion sans fil aura souvant pour nom wifi0 ou wlan0.

Si vous préférez utiliser les noms d'interfaces réseau classiques ou personnalisés, il y a trois manières de procéder :
• Masquez le fichier .link d'udev pour la politique par défaut :
ln -s /dev/null /etc/systemd/network/[Link]

• Créez une convention de nommage manuelle, par exemple en nommant les interface comme « internet0 »,
« dmz0 » ou « lan0 ». Pour ce faire, créez des fichiers .link dans /etc/systemd/network/, qui choisissent un nom
explicite ou une meilleure convention de nommage pour vos interfaces. Par exemple :
cat > /etc/systemd/network/[Link] << "EOF"
[Match]
# Changez l'adresse MAC comme il faut pour votre périphérique réseau
MACAddress=[Link]

[Link]
Name=ether0
EOF

Voir la page de manuel de [Link](5) pour plus d'informations.


• Dans /boot/grub/[Link], passez l'option [Link]=0 sur la ligne de commande du noyau.

[Link]. Configuration d'une IP statique


La commande suivante crée un fichier de configuration basique pour la configuration d'une adresse ip statique (en
utilisant systemd-networkd et systemd-resolved) :

cat > /etc/systemd/network/[Link] << "EOF"


[Match]
Name=<network-device-name>

[Network]
Address=[Link]/24
Gateway=[Link]
DNS=[Link]
Domains=<Your Domain Name>
EOF

Vous pouvez ajouter plusieurs entrées DNS si vous avez plus d’un serveur DNS. Ne rajoutez pas d’entrée DNS ou
Domains si vous voulez utiliser un fichier /etc/[Link] statique.

232
Linux From Scratch - Version 11.3-systemd

[Link]. Configuration du DHCP


La commande suivante crée un fichier de configuration basique pour la configuration de DHCP en IPv4 :
cat > /etc/systemd/network/[Link] << "EOF"
[Match]
Name=<network-device-name>

[Network]
DHCP=ipv4

[DHCPv4]
UseDomains=true
EOF

9.2.2. Créer le fichier /etc/[Link]


Si le système doit se connecter à Internet, il devra résoudre les noms de domaines Internet (DNS) en adresse IP, et
vice-versa. Ceci se fait en plaçant les adresses IP des serveurs DNS, disponibles auprès du FAI ou de l'administrateur
système, dans /etc/[Link].

[Link]. Configuration de systemd-resolved

Note
Si vous utilisez un moyen incompatible pour configurer vos interfaces réseaux (par exemple ppp, etc),
ou si vous utilisez un résolveur local (par exemple bind, dnsmasq, unbound, etc), ou tout autre logiciel
générant un fichier /etc/[Link] (par exemple resolvconf), le service systemd-resolved ne devrait
pas être utilisé.
Pour désactiver systemd-resolved, exécutez la commande suivante :
systemctl disable systemd-resolved

Lorsque vous utilisez systemd-resolved pour la configuration DNS, il créera le fichier /run/systemd/resolve/
[Link]. Et, si /etc/[Link] n'existe pas, il sera créé par systemd-resolved en tant que lien
symbolique vers /run/systemd/resolve/[Link]. Il est donc inutile de créer un fichier /etc/[Link]
manuellement.

[Link]. Configuration de [Link] statique


Si un fichier statique /etc/[Link] est désiré, créez-le en exécutant la commande suivante :
cat > /etc/[Link] << "EOF"
# Début de /etc/[Link]

domain <Votre nom de domaine>


nameserver <Adresse IP du DNS primaire>
nameserver <Adresse IP du DNS secondaire>

# Fin de /etc/[Link]
EOF

Le paramètre domain peut être omis ou remplacé par un paramètre search. Voir la page de manuel de [Link]
pour plus de détails.
Remplacez <Adresse IP du DNS> par l'adresse IP du DNS le plus approprié pour votre configuration. Il y aura
souvent plus d'une entrée (les serveurs secondaires sont utiles en cas d'indisponibilité du premier). Si vous avez
seulement besoin ou si vous voulez seulement un serveur DNS, supprimez la seconde ligne nameserver du fichier.
L'adresse IP pourrait aussi être un routeur sur le réseau local. Une autre possibilité est d'utiliser le service DNS
public de Google avec les adresse IP suivantes comme serveurs de noms.

233
Linux From Scratch - Version 11.3-systemd

Note
Les adresses des DNS publiques de Google sont [Link] et [Link] en IPv4 et [Link] et
[Link] en IPv6. Autrement, vous pouvez aussi utiliser les résolveurs de FDN: 80.67.169.
12 et [Link] en IPv4 et [Link] et [Link] en IPv6.

9.2.3. Configurer le nom d'hôte du système


Pendant le processus de démarrage, le fichier /etc/hostname est utilisé pour donner un nom d'hôte au système.
Créez le fichier /etc/network et saisissez le nom du système en lançant :
echo "<lfs>" > /etc/hostname

<lfs> doit être remplacé par le nom de l'ordinateur. Ne saisissez pas le FQDN (Fully Qualified Domain Name) ici.
Cette information sera saisie dans le fichier /etc/hosts.

9.2.4. Personnaliser le fichier /etc/hosts


Choisissez un nom de domaine pleinement qualifié (fully-qualified domain name, ou FQDN) et les alias possibles
à déclarer dans le fichier /etc/hosts. Si vous utilisez des adresses statiques, vous devrez aussi choisir une adresse
IP. La syntaxe d’une entrée du fichier hosts est :
IP_address [Link] aliases

Sauf si votre ordinateur doit être visible à partir d'Internet (c-à-d que c'est un domaine enregistré et un bloc d'adresses
IP valide—ce que la plupart des utilisateurs n'ont pas), assurez-vous que l'adresse IP se trouve dans la plage
d'adresses réservée aux réseaux privés. Les plages valides sont :
Plage d'adresses réseau privés Préfixe normal
[Link] - [Link] 8
172.x.0.1 - 172.x.255.254 16
192.168.y.1 - 192.168.y.254 24

x peut être un nombre compris entre 16 et 31. y peut être un nombre compris entre 0 et 255.
Une adresse IP privée valide pourrait être [Link]. Un FQDN valide pour cette IP pourrait être [Link].
Même si vous ne possédez pas de carte réseau, un FQDN valide est toujours requis. Certains programmes, comme
les MTA, en ont besoin pour fonctionner correctement.
Créez le fichier /etc/hosts avec la commande suivante :
cat > /etc/hosts << "EOF"
# Begin /etc/hosts

[Link] [Link] localhost


[Link] <FQDN> <HOSTNAME>
<[Link]> <FQDN> <HOSTNAME> [alias1] [alias2] ...
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# End /etc/hosts
EOF

Les valeurs <[Link]>, <FQDN> et <HOSTNAME> doivent être remplacées suivant les contraintes et les besoins
spécifiques (si la machine se voit affecter une adresse IP par un administrateur réseau/système et qu'elle est connectée
à un réseau existant). Vous pouvez omettre le ou les noms d'alias facultatifs, ainsi que la ligne <[Link] si vous
utilisez une connexion configurée avec DHCP ou l'autoconfiguration IPv6.

234
Linux From Scratch - Version 11.3-systemd

L'adresse ::1 est l'équivalent en IPv6 de [Link] et représente l'interface de rebouclage IPv6. [Link] est une
entrée de rebouclage réservée spécifiquement pour le FQDN.

9.3. Manipulation des périphériques et modules


Au Chapitre 8, nous avons installé le paquet udev en construisant systemd. Avant d'entrer dans les détails concernant
son fonctionnement, un bref historique des méthodes précédentes de gestion des périphériques est nécessaire.
Traditionnellement, les systèmes Linux utilisaient une méthode de création de périphériques statiques avec laquelle
un grand nombre de nœuds de périphériques étaient créés sous /dev (quelques fois littéralement des milliers de
nœuds), que le matériel correspondant existe ou non. Ceci était le plus souvent réalisé avec un script MAKEDEV,
qui contient des appels au programme mknod avec les numéros de périphériques majeurs et mineurs pour chaque
périphérique possible qui pourrait exister dans le monde.
En utilisant la méthode udev, seuls les nœuds des périphériques détectés par le noyau sont créés. Comme ces nœuds
de périphériques sont créés à chaque lancement du système, ils sont stockés dans un système de fichiers devtmpfs
(un système de fichiers virtuel qui réside entièrement dans la mémoire du système). Les nœuds de périphériques ne
requièrent pas beaucoup d'espace, donc la mémoire utilisée est négligeable.

9.3.1. Historique
En février 2000, un nouveau système de fichiers appelé devfs a été intégré au noyau 2.3.46 et rendu disponible
pour la série 2.4 des noyaux stables. Bien qu'il soit présent dans les sources du noyau, cette méthode de création
dynamique des périphériques n'a jamais reçu un support inconditionnel des développeurs du noyau.
Le principal problème de l'approche adopté par devfs était la façon dont il gérait la détection, la création et le
nommage des périphériques. Ce dernier problème, le nommage des périphériques, était peut-être le plus critique.
Il est généralement entendu que s'il est possible de configurer les noms des périphériques, alors la politique de
nommage des périphériques revient à l'administrateur du système, et non imposée par quelque développeur. Le
système de fichiers devfs souffrait aussi de restrictions particulières inhérentes à sa conception et qui ne pouvaient
être corrigées sans une revue importante du noyau. devfs a aussi été marqué comme obsolète pendant une longue
période, à cause d'un manque de maintenance, et a finalement été supprimé du noyau en juin 2006.
Avec le développement de la branche instable 2.5 du noyau, sortie ensuite avec la série 2.6 des noyaux stables, un
nouveau système de fichiers virtuel appelé sysfs est arrivé. Le rôle de sysfs est d'exporter une vue de la configuration
matérielle du système pour les processus en espace utilisateur. Avec cette représentation visible en espace utilisateur,
la possibilité de développer un remplacement en espace utilisateur de devfs est devenu beaucoup plus réaliste.

9.3.2. Implémentation d'Udev


[Link]. Sysfs
Le système de fichiers sysfs a été brièvement mentionné ci-dessus. On pourrait se demander comment sysfs connaît
les périphériques présents sur un système et quels numéros de périphériques devraient être utilisés. Les pilotes qui
ont été compilés directement dans le noyau enregistrent leurs objets avec le sysfs (en interne, devtmpfs) quand ils
sont détectés par le noyau. Pour les pilotes compilés en tant que modules, cet enregistrement surviendra quand le
module sera chargé. Une fois que le système de fichier sysfs est monté (sur /sys), les données enregistrées par les
pilotes avec sysfs sont disponibles pour les processus en espace utilisateur ainsi que pour udevd pour traitement (y
compris des modifications aux nœuds de périphériques).

[Link]. Création de nœuds de périphérique


Les fichiers de périphérique sont créés par le noyau avec le système de fichiers devtmpfs. Tout pilote souhaitant
enregistrer un nœud de périphérique ira dans le devtmpfs (par le cœur du pilote) pour le faire. Quand une instance
devtmpfs est montée sur /dev, le nœud de périphérique sera créé dès le départ avec un nom, des droits et un
propriétaire figés.

235
Linux From Scratch - Version 11.3-systemd

Peu de temps après, le noyau enverra un uevent à udevd. À partir des règles indiquées dans les fichiers contenus
dans les répertoires /etc/udev/rules.d, /usr/lib/udev/rules.d et /run/udev/rules.d, udevd créera les liens
symboliques supplémentaires vers le nœud de périphérique, ou bien il modifiera ses droits, son propriétaire ou son
groupe, ou l'entrée dans la base de données interne d'udevd concernant cet objet.
Les règles de ces trois répertoires sont numérotées et les trois répertoires sont fusionnés. Si udevd ne peut pas
trouver de règles pour le périphérique qu'il crée, il en donnera la propriété et les droits à n'importe quel devtmpfs
utilisé au départ.

[Link]. Chargement d'un module


Il se peut que les pilotes des périphériques compilés en module aient aussi des alias compilés. Les alias sont visibles
dans la sortie du programme modinfo et sont souvent liés aux identifiants de bus spécifiques des périphériques
pris en charge par un module. Par exemple, le pilote snd-fm801 prend en charge les périphériques PCI ayant l'ID
fabricant 0x1319 et l'ID de périphérique 0x0801 a aussi un alias « pci:v00001319d00000801sv*sd*bc04sc01i* ».
Pour la plupart des périphériques, le pilote du bus définit l'alias du pilote qui gérerait le périphérique
via sysfs. Par exemple, le fichier /sys/bus/pci/devices/[Link].0/modalias pourrait contenir la chaîne
« pci:v00001319d00000801sv00001319sd00001319bc04sc01i00 ». Les règles par défaut fournies par Udev feront
que udevd appellera /sbin/modprobe avec le contenu de la variable d'environnement de l'uevent MODALIAS (qui
devrait être la même que le contenu du fichier modalias dans sysfs), donc chargera tous les modules dont les alias
correspondent à cette chaîne après les expansions génériques.
Dans cet exemple, cela signifie que, outre snd-fm801, le pilote obsolète (et non désiré) forte sera chargé s'il est
disponible. Voir ci-dessous les moyens d'empêcher le chargement des modules indésirables.
Le noyau lui-même est aussi capable de charger des modules de protocole réseau, de prise en charge pour des
systèmes de fichiers et de prise en charge native des langues sur demande.

[Link]. Gestion des périphériques dynamiques ou montables à chaud


Lorsque vous connectez un périphérique, comme un lecteur MP3 USB, le noyau reconnaît que le périphérique est
maintenant connecté et génère un uevent. Cet uevent est alors géré par udevd comme décrit ci-dessus.

9.3.3. Problèmes avec le chargement des modules et la création des


périphériques
Il existe quelques problèmes connus pour la création automatique des nœuds de périphériques.

[Link]. Un module noyau n'est pas chargé automatiquement


Udev ne chargera un module que s'il possède un alias spécifique au bus et que le pilote du bus envoie correctement
les alias nécessaires vers sysfs. Autrement, il faut organiser le chargement des modules par d'autres moyens. Avec
Linux-6.1.11, udev est connu pour charger les pilotes correctement écrits pour les périphériques INPUT, IDE, PCI,
USB, SCSI, SERIO et FireWire.
Pour déterminer si le pilote du périphérique dont vous avez besoin prend en charge udev, lancez modinfo avec le
nom du module en argument. Puis, essayez de localiser le répertoire du périphérique sous /sys/bus et vérifiez s'il
y a un fichier modalias.
Si le fichier modalias existe dans sysfs, alors le pilote prend en charge le périphérique et peut lui parler directement,
mais s'il n'a pas d'alias, c'est un bogue dans le pilote. Chargez le pilote sans l'aide d'udev et attendez que le problème
soit corrigé ultérieurement.
S'il n'y a pas de fichier modalias dans le bon répertoire sous /sys/bus, cela signifie que les développeurs du noyau
n'ont pas encore ajouté de prise en charge de modalias à ce type de bus. Avec Linux-6.1.11, c'est le cas pour les bus
ISA. Attendez que ce problème soit corrigé dans les versions ultérieures du noyau.

236
Linux From Scratch - Version 11.3-systemd

Udev n'a pas du tout pour but de charger des pilotes « wrapper » (qui emballent un autre pilote) comme snd-pcm-
oss et des pilotes non matériels comme loop.

[Link]. Un module du noyau n'est pas chargé automatiquement et udev n'est pas prévu
pour le charger
Si le module « enveloppe » n'améliore que la fonctionnalité fournie par un autre module (comme snd-pcm-oss
améliore la fonctionnalité de snd-pcm en rendant les cartes son disponibles pour les applications OSS), configurez
modprobe pour charger l'enveloppe après qu'udev a chargé le module enveloppé. Pour cela, ajoutez une ligne
« softdep » dans tous les fichiers /etc/modprobe.d/<filename>.conf. Par exemple :
softdep snd-pcm post: snd-pcm-oss

Remarquez que la commande « softdep » autorise aussi les dépendances pre:, ou un mélange de pre: et de post:.
Voir la page de manuel de modprobe.d(5) pour plus d'informations sur la syntaxe et les possibilités de « softdep ».

[Link]. Udev charge un module indésirable


Ne compilez pas le module, ou mettez-le en liste noire dans un fichier /etc/modprobe.d/[Link] comme
réalisé avec le module forte dans l'exemple ci-dessous :
blacklist forte

Les modules en liste noire peuvent toujours être chargés manuellement avec la commande explicite modprobe.

[Link]. Udev crée un périphérique incorrect, ou un mauvais lien symbolique


Cela se produit habituellement si une règle correspond à un périphérique de façon imprévue. Par exemple, une règle
lacunaire peut correspondre à un disque SCSI (comme désiré) et au périphérique SCSI générique du même fabricant
(de façon incorrecte). Trouvez la règle défectueuse et affinez-la, à l'aide de la commande udevadm info.

[Link]. Une règle Udev fonctionne de manière non fiable


Cela peut être une autre manifestation du problème précédent. Si ce n'est pas le cas, et si votre règle utilise les
attributs de sysfs, il se peut que ce soit un problème de timing du noyau, sur le point d'être corrigé dans les noyaux
ultérieurs. Pour le moment, vous pouvez contourner cela en créant une règle qui attend l'attribut sysfs utilisé et
en le mettant dans le fichier /etc/udev/rules.d/10-wait_for_sysfs.rules (créez ce fichier s'il n'existe pas). Merci
d'informer la liste de développement de LFS si vous faites ainsi et que cela vous aide.

[Link]. Udev ne crée pas de périphérique


Les textes suivants supposent que le pilote est compilé statiquement dans le noyau ou bien déjà chargé comme
module et que vous avez vérifié que udev ne crée pas de périphérique mal nommé.
Udev n'a pas les informations pour créer un nœud si un pilote noyau n'exporte pas ses informations vers sysfs.
C'est le plus souvent le cas des pilotes tiers ne provenant pas du noyau. Créez un nœud de périphérique statique
dans /usr/lib/udev/devices avec les numéros majeurs/mineurs appropriés (regardez le fichier [Link] dans la
documentation du noyau du vendeur du pilote tiers). Le nœud statique sera copié dans /dev par udev.

[Link]. L'ordre de nommage des périphériques change de manière aléatoire après le


redémarrage
Cela est dû au fait qu'udev, par nature, gère les uevents et charge les modules en parallèle, donc dans un ordre
imprévisible. Cela ne sera jamais « corrigé ». Vous ne devriez pas supposer que les noms des périphériques du
noyau sont stables. Créez plutôt vos propres règles qui rendent les liens symboliques stables basés sur des attributs
stables du périphérique, comme une série de nombres ou la sortie de divers utilitaires *_id installés par udev. Voir la
Section 9.4, « Gérer les périphériques » et la Section 9.2, « Configuration générale du réseau » pour des exemples.

237
Linux From Scratch - Version 11.3-systemd

9.3.4. Lecture utile


Des documentations supplémentaires sont disponibles sur les sites suivants :
• A Userspace Implementation of devfs [Link]
[Link] (NdT : Une implémentation en espace utilisateur de devfs)
• The sysfs Filesystem [Link]
(NdT : Le système de fichiers sysfs)

9.4. Gérer les périphériques


9.4.1. Gérer des périphériques dupliqués
Comme expliqué à la Section 9.3, « Manipulation des périphériques et modules », l'ordre dans lequel les
périphériques ayant la même fonction apparaissent dans /dev est essentiellement aléatoire. Par exemple, si vous
avez une webcam USB et un récepteur TV, parfois /dev/video0 renvoie à la webcam, et /dev/video1 renvoie au
récepteur, et parfois après un redémarrage l'ordre d'apparition des périphériques s'inverse. Pour toutes les classes de
matériel sauf les cartes son et les cartes réseau, ceci peut se corriger en créant des règles udev pour créer des liens
symboliques constants. Le cas des cartes réseau est traité séparément dans Section 9.2, « Configuration générale du
réseau », et vous pouvez trouver la configuration des cartes son dans BLFS.
Pour chacun des périphériques susceptibles d'avoir ce problème (même si le problème n'apparaît pas dans
votre distribution Linux actuelle), trouvez le répertoire correspondant sous /sys/class ou /sys/block. Pour les
périphériques vidéo, cela peut être /sys/class/video4linux/videoX. Calculez les attributs qui identifient de façon
unique un périphérique (normalement basé sur l'ID du fabricant et du produit ou les numéros de série) :
udevadm info -a -p /sys/class/video4linux/video0

Puis, écrivez des règles qui créent les liens symboliques, comme :
cat > /etc/udev/rules.d/83-duplicate_devs.rules << "EOF"

# Persistent symlinks for webcam and tuner


KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", SYMLINK+="webcam"
KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{vendor}=="0x109e", SYMLINK+="tvtuner"

EOF

Il en résulte que les périphériques /dev/video0 et /dev/video1 renvoient encore de manière aléatoire au tuner et à
la webcam (et donc ne devrait jamais être utilisé directement), mais certains des liens symboliques /dev/tvtuner
et /dev/webcam pointent toujours vers le bon périphérique.

9.5. Configurer l'horloge système


Cette section parle de la manière de configurer le service système systemd-timedated, qui configure l'horloge et
le fuseau horaire système.
Si vous ne vous souvenez pas si l'horloge matérielle est configurée en UTC ou non, trouvez le en exécutant la
commande hwclock --localtime --show. Cela va afficher l'heure actuelle d'après l'horloge matérielle. Si l'heure
correspond à celle de votre montre, alors votre horloge système est configurée à l'heure locale. Si la sortie de hwclock
n'est pas l'heure locale, il y a des chances qu'elle soit configurée en UTC. Vérifiez cela en ajoutant ou retirant le bon
nombre d'heures par rapport à l'heure affichée par hwclock. Par exemple si vous êtes dans le fuseau horaire MST,
qui est aussi connu comme GMT -7, ajoutez 7 heures à l'heure locale.
systemd-timedated lit /etc/adjtime, et en fonction de ce qui est écrit dans le fichier, met l'horloge en UTC ou
en heure locale.

238
Linux From Scratch - Version 11.3-systemd

Créez le fichier /etc/adjtime avec le contenu suivant si votre horloge matérielle est configurée en heure locale :
cat > /etc/adjtime << "EOF"
0.0 0 0.0
0
LOCAL
EOF

Si le fichier /etc/adjtime n'est pas présent au premier démarrage, systemd-timedated va considérer que l'horloge
matérielle est configurée en UTC et ajuster le fichier en accord avec cela.
Vous pouvez également utiliser l'utilitaire timedatectl pour signaler à systemd-timedated si votre horloge
matérielle est initialisée en UTC ou en temps local :
timedatectl set-local-rtc 1

timedatectl peut également être utilisé pour changer l'heure système et le fuseau horaire.
Pour changer l'heure actuelle du système, tapez :
timedatectl set-time YYYY-MM-DD HH:MM:SS

L'horloge matérielle sera également mise à jour en conséquence.


Pour changer de fuseau horaire, tapez:
timedatectl set-timezone TIMEZONE

Vous pouvez avoir une liste des fuseaux horaires disponibles en tapant :
timedatectl list-timezones

Note
Remarquez que la commande timedatectl ne fonctionne pas dans l'environnement chroot. Elle ne peut
être utilisée qu'après avoir démarré le système LFS avec systemd.

9.5.1. Synchronisation réseau du temps


Depuis la version 213, systemd livre un démon appelé systemd-timesyncd qui peut être utilisé pour synchroniser
l'heure système avec les serveurs NTP distants.
Le démon n'est pas prévu pour remplacer le démon bien établit NTP, mais comme client du protocole SNTP qui
peut être utilisé pour les tâches moins avancées et sur les systèmes à ressources limitées.
Depuis la version 216, le démon systemd-timesyncd est activé par défaut. Si vous voulez le désactiver, tapez la
commande suivante :
systemctl disable systemd-timesyncd

Le fichier /etc/systemd/[Link] peut être utilisé pour changer les serveurs NTP avec lesquels systemd-
timesyncd se synchronise.
Remarquez que lorsque l'horloge système est initialisée en temps local, systemd-timesyncd ne mettra pas à jour
l'horloge système.

9.6. Configurer la Console Linux


Cette section traite de la manière de configurer le service système systemd-vconsole-setup qui configure la police
de la console virtuelle et la disposition du clavier dans la console.

239
Linux From Scratch - Version 11.3-systemd

Le service systemd-vconsole-setup lit les informations de configuration dans le fichier /etc/[Link].


Décidez de la disposition du clavier et de la police à l'écran qui seront utilisées. Il existe divers guides pratiques
spécifiques à chaque langue qui peuvent vous aider, voir [Link]
html. Observez la sortie de localectl list-keymaps pour une liste des dispositions de clavier valides sur la console.
Regardez le répertoire /usr/share/consolefonts pour une liste des polices d'écran valides.
Le fichier /etc/[Link] devrait contenir des lignes de la forme : VARIABLE="valeur". Les variables
suivantes sont reconnues :
KEYMAP
Cette variable spécifie la table de disposition du clavier. Si vous ne la définissez pas, elle est par défaut us.
KEYMAP_TOGGLE
Vous pouvez utiliser cette variable pour configurer une disposition alternative par défaut où vous pouvez
basculer.
FONT
Cette variable spécifie la police utilisée par la console virtuelle.
FONT_MAP
Cette variable spécifie la présentation de la console.
FONT_UNIMAP
Cette variable spécifie la police de l'Unicode.
Voici un exemple pour un clavier allemand :

cat > /etc/[Link] << "EOF"


KEYMAP=de-latin1
FONT=Lat2-Terminus16
EOF

Vous pouvez modifier la valeur de KEYMAP lors de l'exécution en utilisant l'outil localectl :
localectl set-keymap MAP

Note
Remarquez que la commande localectl ne fonctionne pas dans l'environnement chroot. Elle ne peut être
utilisée qu'après avoir démarré le système LFS avec systemd.

Vous pouvez aussi utiliser l'utilitaire localectl avec les paramètres correspondants pour changer la disposition, le
modèle, la variante et d'autres options du clavier :
localectl set-x11-keymap LAYOUT [MODEL] [VARIANT] [OPTIONS]

Pour lister les différentes valeurs possibles pour les paramètres localectl set-x11-keymap, lancez localectl avec les
paramètres ci-dessous :
list-x11-keymap-models
Affiche les modèles connus de claviers X11.
list-x11-keymap-layouts
Affiche les dispositions connues de claviers X11.
list-x11-keymap-variants
Affiche les variantes connues de claviers X11.
list-x11-keymap-options
Affiche les options connues de claviers X11.

240
Linux From Scratch - Version 11.3-systemd

Note
L'utilisation des paramètres listés ci-dessus nécessite le paquet XKeyboard-Config de BLFS.

9.7. Configuration des paramètres régionaux du système


Le fichier /etc/[Link] ci-dessous défini certaines variables d'environnement nécessaires pour la prise en
charge native des langues. Les configurer a pour résultat :
• La sortie des programmes est traduite dans votre langue maternelle
• Le classement correct des caractères en lettres, chiffres et autres classes. Cela est nécessaire pour bash pour
accepter correctement les caractères non-ASCII pour les paramètres linguistiques non anglais
• Le classement alphabétique correct pour les autres pays
• La taille de papier par défaut appropriée
• Le formatage correct de la monnaie, du temps et de la date
Remplacez <ll> ci-dessous par les deux lettres de la langue désirée (par exemple « fr ») et remplacez <CC> par les
deux lettres du pays approprié (par exemple « FR »). <charmap> doit être remplacé par la table de caractères classique
pour le paramètre linguistique choisi. On peut aussi ajouter des modificateurs facultatifs comme « @euro ».
La liste des paramètre régionaux pris en charge par Glibc peut être obtenue en exécutant la commande suivante :
locale -a

Les jeux de caractères peuvent aussi avoir certains alias, par exemple « ISO-8859-1 » est aussi référencé comme
« iso8859-1 » et « iso88591 ». Certaines applications ne peuvent pas gérer les différents synonymes (il est par
exemple requis que « UTF-8 » soit écrit « UTF-8 » et pas « utf8 »), il est donc plus sur de choisir le nom classique
pour un paramètre linguistique particulier. Pour déterminer le nom classique, lancez la commande suivante, où <nom
du paramètre linguistique> est la sortie donnée par locale -a pour votre langue préférée (« fr_FR.iso88591 » dans
notre exemple).
LC_ALL=<nom du paramètre linguistique> locale charmap

Pour le paramètre « fr_FR.iso885915 », la commande va afficher :


ISO-8859-15

Cela résulte en un paramètre de régionalisation final de « fr_FR.ISO-8859-15 ». Il est important que le paramètre
trouvé en utilisant la syntaxe précédente soit testé avant d'être ajouté aux fichiers de démarrage de bash :
LC_ALL=<nom du paramètre linguistique> locale language
LC_ALL=<nom du paramètre linguistique> locale charmap
LC_ALL=<nom du paramètre linguistique> locale int_curr_symbol
LC_ALL=<nom du paramètre linguistique> locale int_prefix

Les commandes ci-dessus devraient afficher la langue, l'encodage des caractères utilisé par le paramètre, la monnaie
locale ainsi que le préfixe de téléphone à composer afin d'entrer dans le pays. Si une de ces commandes précédentes
échoue, cela signifie que votre paramètre n'a pas été installé dans le chapitre 8 ou n'est pas prise en charge par
l'installation par défaut de Glibc.
locale: Cannot set LC_* to default locale: No such file or directory

Si cela arrive, vous devez soit installer le paramètre régional désiré en utilisant la commande localedef, ou en
utilisant un autre paramètre. Les instructions suivantes supposent qu'il n'y a pas de tels messages d'erreur de Glibc.
Certains paquets au-delà de LFS peuvent ne pas prendre en charge le paramètre linguistique que vous avez choisi.
Un exemple est la bibliothèque X (partie du système X Window), qui renvoie le message d'erreur suivant si le
paramètre ne correspond pas exactement à l'un des jeux de caractères de ses fichiers internes :
Warning: locale not supported by Xlib, locale set to C

241
Linux From Scratch - Version 11.3-systemd

Dans plusieurs cas Xlib s'attend à ce que le jeu de caractères soit inscrit en notation majuscule avec les tirets
classiques. Par exemple « ISO-8859-1 » plutôt que « iso88591 ». Il est aussi possible de trouver la spécification
appropriée en retirant la partie correspondant au jeu de caractères de la spécification du paramètre régional. Cela
peut être testé en exécutant la commande locale charmap des deux paramètres. Par exemple, il faudra changer
« de_DE.ISO-8859-15@euro » en « de_DE@euro » pour que ce paramètre soit reconnu par Xlib.
D'autres programmes ne vont aussi pas fonctionner correctement (mais ne vont pas nécessairement afficher un
message d'erreur) si le nom du paramètre régional ne rencontre pas leurs attentes. Dans d'autres cas, rechercher
comment d'autres distributions Linux prennent en charge votre paramètre régional peut fournir des informations
utiles.
Une fois que les bonnes configurations de paramètres linguistiques ont été effectuées, créez le fichier /etc/locale.
conf :

cat > /etc/[Link] << "EOF"


LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Remarquez que vous devez modifier /etc/[Link] avec l'utilitaire systemd localectl. Pour utiliser localectl
avec l'exemple précédent, lancez :
localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"

Vous pouvez aussi spécifier d'autres variables d'environnement comme LANG, LC_CTYPE, LC_NUMERIC ou n'importe
quel autre variable de la sortie de locale. Un exemple où LANG est définie à en_US.UTF-8 mais LC_CTYPE est défini
juste à en_US est :
localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"

Note
Remarquez que la commande localectl ne fonctionne pas dans l'environnement chroot. Elle ne peut être
utilisée qu'après avoir démarré le système LFS avec systemd.

Les paramètres « C » (par défaut) et « en_US » (recommandé pour les utilisateurs anglophones des États-Unis) sont
différents. « C » utilise le jeu de caractères US-ASCII 7-bit et traite les octets avec le bit de point fort à 1 comme des
caractères invalides. C'est pourquoi, par exemple, la commande ls les remplace par des points d'interrogation sous
ce paramètre. De plus, les messages contenant ces caractères envoyés avec Mutt ou Pine ne sont pas conformes aux
RFC (le jeu de caractères dans le mail sortant est indiqué comme « unknown 8-bit »). Vous ne pouvez donc utiliser
le paramètre régional « C » que si vous êtes sûr que vous n'aurez jamais besoins de caractère 8 bits.

9.8. Créer le fichier /etc/inputrc


Le fichier inputrc est un fichier de configuration pour la bibliothèque readline, qui fournit des fonctions d'édition
lors de la saisie de commandes dans le terminal. Elle fonctionne en traduisant l'entrée du clavier en des actions
spécifiques. Readline est utilisé par bash et par la plupart des autres shells ainsi que par de nombreuses autres
applications.
La plupart des personnes n'ont pas besoin de fonctionnalités personnalisées, donc la commande ci-dessous crée un
fichier /etc/inputrc global utilisé par tous ceux qui se connectent. Si vous décidez plus tard que vous avez besoin de
surcharger les valeurs par défaut utilisateur par utilisateur, vous pouvez créer un fichier .inputrc dans le répertoire
personnel de l'utilisateur avec les correspondances modifiées.
Pour plus d'informations sur l'édition du fichier inputrc, voir info bash à la section Fichier d'initialisation Readline
(ou Readline Init File). info readline est aussi une bonne source d'informations.

242
Linux From Scratch - Version 11.3-systemd

Ci-dessous se trouve un fichier inputrc générique avec des commentaires expliquant l'utilité des différentes options.
Remarquez que les commentaires ne peuvent pas être sur la même ligne que les commandes. Créez le fichier en
utilisant la commande suivante :
cat > /etc/inputrc << "EOF"
# Début de /etc/inputrc
# Modifié par Chris Lynn <roryo@[Link]>

# Permettre à l'invite de commande d'aller à la ligne


set horizontal-scroll-mode Off

# Activer l'entrée sur 8 bits


set meta-flag On
set input-meta On

# Ne pas supprimer le 8ème bit


set convert-meta Off

# Conserver le 8ème bit à l'affichage


set output-meta On

# « none », « visible » ou « audible »


set bell-style none

# Toutes les indications qui suivent font correspondre la séquence


# d'échappement contenue dans le 1er argument à la fonction
# spécifique de readline
"\eOd": backward-word
"\eOc": forward-word

# Pour la console linux


"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert

# pour xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# pour Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line

# Fin de /etc/inputrc
EOF

9.9. Créaction du fichier /etc/shells


Le fichier shells contient une liste des shells de connexion présents sur le système. Les applications utilisent
ce fichier pour déterminer si un shell est valide. Pour chaque shell, une seule ligne doit être présente, contenant
l'emplacement du shell relativement à la racine (/).

Par exemple, ce fichier est consulté par chsh pour déterminer si un utilisateur non privilégié peut modifier le shell
de connexion de son compte. Si le nom de la commande n'est pas listé, l'utilisateur n'aura pas le droit d'en changer.

243
Linux From Scratch - Version 11.3-systemd

C'est nécessaire pour des applications telles que GDM qui ne peuplent pas le navigateur d'interface s'il ne peut pas
trouver /etc/shells, ou les démons FTP qui interdisent traditionnellement aux utilisateurs l'accès avec des shells
qui ne sont pas inclus dans ce fichier.
cat > /etc/shells << "EOF"
# Begin /etc/shells

/bin/sh
/bin/bash

# Fin de /etc/shells
EOF

9.10. Utilisation et configuration de Systemd


9.10.1. Configuration basique
Le fichier /etc/systemd/[Link] contient un ensemble d'options pour contrôler les opérations de base de
systemd. Le fichier par défaut a toutes ses entrées commentées indiquant les paramètres par défaut. Ce fichier est
l'endroit où le niveau de journalisation (log) peut être modifié ainsi que les paramètres de base de journalisation.
Voir la page de manuel de [Link](5) pour plus de détails à propos de chaque option de configuration.

9.10.2. Désactiver l'effacement de l'écran durant le démarrage


Le comportement normal de systemd est d'effacer l'écran à la fin de la séquence de démarrage. Si désiré, ce
comportement peut être changé en exécutant la commande suivante :
mkdir -pv /etc/systemd/system/getty@[Link].d

cat > /etc/systemd/system/getty@[Link].d/[Link] << EOF


[Service]
TTYVTDisallocate=no
EOF

Les messages de démarrage peuvent toujours être examinés en utilisant la commande journalctl -b en tant
qu'utilisateur root.

9.10.3. Désactiver tmpfs pour /tmp


Par défaut, /tmp est créé comme un tmpfs. Si vous ne le voulez pas, il est possible de l'en empêcher de la manière
suivante :
ln -sfv /dev/null /etc/systemd/system/[Link]

Autrement, si vous souhaitez avoir une partition séparée pour /tmp, spécifiez-la dans une entrée de /etc/fstab.

Avertissement
Ne créez pas le lien symbolique ci-dessus si vous utilisez une partition séparée pour /tmp. Cela empêche
la partition racine (/) d'être remontée en lecture-écriture et rend le système inutilisable au démarrage.

9.10.4. Configurer la création et la suppression automatique de fichiers


Il existe de nombreux services pour créer ou supprimer des fichiers ou des dossiers :
• [Link]
• [Link]
• [Link]

244
Linux From Scratch - Version 11.3-systemd

L'emplacement système des fichiers de configuration est /usr/lib/tmpfiles.d/*.conf. Les fichiers locaux de
configuration sont dans /etc/tmpfiles.d. Les fichiers dans /etc/tmpfiles.d prévallent sur les fichiers du même
nom dans /usr/lib/tmpfiles.d. Voir la page de manuel tmpfiles.d(5) pour plus de détails sur le format de fichier.
Remarquez que la syntaxe pour les fichiers /usr/lib/tmpfiles.d/*.conf peut être déroutante. Par exemple, la
suppression de fichiers par défaut dans le répertoire /tmp se trouve dans /usr/lib/tmpfiles.d/[Link] à cette
ligne :
q /tmp 1777 root root 10d

. Le champ type, q, parle de créer un sous-volume avec des quotas, ce qui n'est vraiment possible que pour les
système de fichiers btrfs. Il fait référence au type v qui lui-même fait référence au type d (répertoire). Cela crée
ensuite le répertoire spécifié s'il n'est pas présent et ajuste ensuite les permissions et la propriété comme indiqué. Le
contenu du répertoire sera sujet au nettoyage basé sur l'âge si l'argument d'âge est spécifié.
Si les paramètres par défaut ne sont pas désirés, alors vous devrez copier le fichier vers /etc/tmpfiles.d et le
modifier comme vous le voulez. Par exemple :
mkdir -p /etc/tmpfiles.d
cp /usr/lib/tmpfiles.d/[Link] /etc/tmpfiles.d

9.10.5. Redéfinition des comportements par défaut des services


Les paramètres d’une unité peuvent être redéfinis en créant un dossier et un fichier de configuration dans /etc/
systemd/system. Par exemple :

mkdir -pv /etc/systemd/system/[Link].d

cat > /etc/systemd/system/[Link].d/[Link] << EOF


[Service]
Restart=always
RestartSec=30
EOF

Voir la page de manuel [Link](5) pour plus d'informations. Après la création du fichier de configuration,
exécutez systemctl daemon-reload et systemctl restart foobar pour activer les changements à un service.

9.10.6. Débogage de la séquence de démarrage


Plutôt que des scripts shell utilisés par les systèmes d’init du style de SysVinit ou BSD, systemd utilise un
format unifié pour différents types de fichiers de démarrage (ou unités). La commande systemctl est utilisée pour
activer, désactiver, contrôler l’état et obtenir le statut d’un fichier d’unité. Voici quelques exemples de commandes
fréquentes :
• systemctl list-units -t <service> [--all]: liste les fichiers d’unité chargés de type service.
• systemctl list-units -t <target> [--all]: liste les fichiers d’unité chargés de type target.
• systemctl show -p Wants <[Link]> : montre toutes les unités qui dépendent de la cible multi-user.
Les cibles sont des fichiers d’unité spéciaux qui sont analogues aux niveaux d’exécution de SysVinit.
• systemctl status <[Link]>: montre le statut du service servicename. L’extension .service peut
être omise s’il n’y a pas d’autres fichiers d’unité portant le même nom, comme des fichiers .socket (qui créent
un socket en écoute qui fourni les même fonctionnalités qu'inetd/xinetd).

9.10.7. Utiliser le journal Systemd


La journalisation d’un système démarré avec systemd est géré par systemd-journald (par défaut), plutôt qu’un démon
syslog unix typique. Vous pouvez aussi ajouter un démon syslog normal et faire travailler les deux côte à côte si
vous le souhaitez. Le programme systemd-journald stocke les entrées du journal dans un format binaire plutôt que
dans un fichier en texte brut. La commande journalctl est fournie pour aider à analyser le fichier. Voici quelques
exemples de commandes usuelles :

245
Linux From Scratch - Version 11.3-systemd

• journalctl -r : montre tout le contenu du journal en sens chronologique inverse.


• journalctl -u UNIT : montre les entrées du journal associées avec le fichier UNIT spécifié.
• journalctl -b[=ID] -r : montre les entrées du journal depuis le dernier démarrage réussi (ou pour le démarrage
d’identifiant ID) en sens chronologique inverse.
• journalctl -f : fournit une fonctionnalité similaire à tail -f (suivre).

9.10.8. Travailler avec les core dumps


Les « core dumps » sont utiles pour déboguer des programmes crashés, surtout quand un processus démon plante.
Sur un système démarré avec systemd, les core dumps sont gérés par systemd-coredump. Il enregistrera le core
dump das le journal et stockera le fichier core dans /var/lib/systemd/coredump. Pour récupérer et utiliser le fichier
core, système fourni l'outil coredumpctl. Voici quelques exemples de commandes fréquentes :
• coredumpctl -r : montre tous les core dumps en ordre chronologique inverse.
• coredumpctl -1 info : montre les informations du dernier core dump.
• coredumpctl -1 debug : charge le dernier core dump dans GDB.
Les core dumps peuvent utiliser beaucoup d'espace disque. L'espace disque maximal utilisé par les core dumps se
limite en créant un fichier de configuration dans /etc/systemd/[Link].d. Par exemple :
mkdir -pv /etc/systemd/[Link].d

cat > /etc/systemd/[Link].d/[Link] << EOF


[Coredump]
MaxUse=5G
EOF

Voir les pages de manuel systemd-coredump(8), coredumpctl(1), and [Link].d(5) pour plus d'information.

9.10.9. Processus lancés durablement


Depuis la version systemd-230, tous les processus utilisateurs sont tués lorsque la session utilisateur se termine,
même en utilisant nohup, ou que le processus utilise les fonctions daemon() ou setsid(). Ceci est un changement
délibéré par rapport à un environnement historiquement plus permissif vers un environnement plus restrictif. Le
nouveau comportement peut causer des problèmes si vous dépendez de programmes lancés durablement (par
exemple, screen ou tmux) qui restent actifs après la fin de votre session utilisateur. Il y a trois moyens de permettre
la persistance des processus après la fin d'une session utilisateur.
• N'activez les processus persistants que pour les utilisateurs qui en ont besoin : les utilisateurs ont la
possibilité d'activer les processus persistants avec la commande loginctl enable-linger pour eux-mêmes. Les
administrateurs systèmes peuvent utiliser la même commande avec un argument utilisateur pour les activer
pour un utilisateur. Cet utilisateur peut alors utiliser la commande systemd-run pour débuter une tâche durable.
Par exemple : systemd-run --scope --user /usr/bin/screen. Si vous souhaitez activer les tâches durables
pour votre utilisateur, le service [email protected] sera toujours présent même après la fermeture de toutes les
sessions, et démarrera automatiquement au démarrage du système. Ceci a l'avantage d'autoriser et d'interdire
explicitement aux programmes de s'exécuter après que la session utilisateur est fermée, mais cela casse la rétro-
compatibilité avec des outils comme nohup et les utilitaires qui utilisent daemon().
• Activer les processus persistant sur tout le système : vous pouvez définir KillUserProcesses=no dans /etc/
systemd/[Link] pour autoriser globalement la persistance pour tous les utilisateurs. Ceci a l'avantage de
laisser disponibles les vieilles méthodes à tous les utilisateurs au prix de la perte de contrôle explicite.
• Désactiver à la construction : vous pouvez autoriser les processus persistants par défaut pendant la construction
de systemd en ajoutant le paramètre -Ddefault-kill-user-processes=false à la commande meson de systemd.
Ceci désactive complètement la capacité que systemd a de tuer les processus utilisateurs à la fin de la session.

246
Linux From Scratch - Version 11.3-systemd

Chapitre 10. Rendre le système LFS amorçable


10.1. Introduction
Il est temps de rendre amorçable le système LFS. Ce chapitre traite de la création d'un fichier fstab, de la construction
d'un noyau pour le nouveau système LFS et de l'installation du chargeur de démarrage GRUB afin que le système
LFS puisse être sélectionné au démarrage.

10.2. Créer le fichier /etc/fstab


Le fichier /etc/fstab est utilisé par quelques programmes pour déterminer les systèmes de fichiers à monter par
défaut, dans quel ordre, et lesquels doivent être vérifiés (recherche d'erreurs d'intégrité) avant le montage. Créez
une nouvelle table des systèmes de fichiers comme ceci :
cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system mount-point type options dump fsck


# order

/dev/<xxx> / <fff> defaults 1 1


/dev/<yyy> swap swap pri=1 0 0

# End /etc/fstab
EOF

Remplacez <xxx>, <yyy> et <fff> par les valeurs appropriées pour votre système, par exemple sda2, sda5 et ext4.
Pour tous les détails sur les six champs de cette table, voyez man 5 fstab.
Les systèmes de fichiers ayant pour origine MS-DOS ou Windows (c-à-d. vfat, ntfs, smbfs, cifs, iso9660, udf) ont
besoin d'une option spéciale, utf8, pour que les caractères non-ascii dans les noms de fichiers soient interprétés
correctement. Pour les paramètres linguistiques non-utf-8, la valeur de iocharset devrait être la même que le jeu
de caractères de votre locale, ajustée de telle sorte que le noyau la comprenne. Cela fonctionne si la définition
du codage adéquat (que vous trouverez sous File systems -> Native Language Support lors de la configuration
du noyau) a été compilée en dur dans le noyau ou en module. Cependant, si le jeu de caractères des paramètres
linguistiques est UTF-8, l'option correspondante iocharset=utf8 rendrait le système de fichier sensible à la casse.
Pour corriger cela, utilisez l'option spéciale utf8 au lieu de iocharset=utf8 pour les paramètres linguistiques UTF-8.
L'option « codepage » est aussi nécessaire aux systèmes de fichiers vfat et smbfs. Elle devrait être paramétrée pour
correspondre à la page de code utilisée sous MS-DOS dans votre pays. Par exemple, pour monter des lecteurs flash
USB, un utilisateur ru_RU.KOI8-R aurait besoin de ce qui suit dans la partie des options de sa ligne de montage
dans /etc/fstab :
noauto,user,quiet,showexec,codepage=866,iocharset=koi8r

Le fragment d'options correspondantes pour les utilisateurs ru_RU.UTF-8 est :


noauto,user,quiet,showexec,codepage=866,utf8

Remarquez que l'utilisation de iocharset se fait par défaut pour iso8859-1 (ce qui laisse le système de fichiers
insensible à la casse) et l'option utf8 dit au noyau de convertir les noms de fichiers en UTF-8 pour qu'ils puissent
être interprétés dans les paramètres linguistiques UTF-8.
Il est aussi possible de spécifier les valeurs de page de code et de codage entrée/sortie (iocharset) par défaut
pour certains systèmes de fichiers pendant la configuration du noyau. Les paramètres pertinents sont nommés
« Default NLS Option » (CONFIG_NLS_DEFAULT), « Default Remote NLS Option » (CONFIG_SMB_NLS_DEFAULT),
« Default codepage for FAT » (CONFIG_FAT_DEFAULT_CODEPAGE) et « Default iocharset for FAT » (CONFIG_FAT_
DEFAULT_IOCHARSET). Il n'y a aucun moyen de spécifier ces paramètres pour les systèmes de fichiers ntfs au moment
de la compilation du noyau.

247
Linux From Scratch - Version 11.3-systemd

Il est possible de rendre le système de fichiers ext3 résistant aux coupures de courant pour certains types de disques
durs. Pour cela, ajoutez l'option de montage barrier=1 à l'entrée appropriée dans /etc/fstab. Pour vérifier si le
périphérique prend en charge cette option, lancez hdparm sur le périphérique où elle s'appliquera. Par exemple, si :
hdparm -I /dev/sda | grep NCQ

ne retourne pas une sortie non vide, l'option est prise en charge.
Remarque : Les partitions basées sur Logical Volume Management (LVM) ne peuvent pas utiliser l'option barrier.

248
Linux From Scratch - Version 11.3-systemd

10.3. Linux-6.1.11
Le paquet Linux contient le noyau Linux.
Temps de construction 1.5 - 130.0 SBU (en général environ 12 SBU)
approximatif:
Espace disque requis: 1200 - 8800 Mo (en général environ 1700 Mo)

10.3.1. Installation du noyau


Construire le noyau implique un certain nombre d'étapes — configuration, compilation et installation. Pour connaître
les autres méthodes que celle employée par ce livre pour configurer le noyau, lisez le fichier README contenu dans
les sources du noyau.

Préparez la compilation en exécutant la commande suivante :


make mrproper

Ceci nous assure que le répertoire du noyau est propre. L'équipe du noyau recommande le lancement de cette
commande avant chaque compilation du noyau. Vous ne devez pas supposer que le répertoire des sources est propre
juste après avoir été déballé.

Il y a plusieurs manière de configurer les options du noyau. Habituellement, à travers une interface à menus, par
exemple :
make menuconfig

Voici la signification des variables d’environnement facultatives de make :

LANG=<valeur_LANG_de_l_hote> LC_ALL=
Ceci rend identique les paramétrages régionaux à ceux utilisés sur l'hôte. C'est indispensable pour que
l’interface ncurses de menuconfig soit correctement dessinée sur la console texte de Linux en UTF-8.
Assurez-vous si besoin de remplacer <valeur_LANG_de_l_hote> par la valeur de la variable $LANG de votre hôte.
Vous pouvez utiliser à la place les valeurs $LC_ALL ou $LC_CTYPE de l'hôte.
make menuconfig
Cela lance une interface à menus en ncurses. Pour d'autres interfaces (graphiques), tapez make help.
Pour des informations d'ordre général sur la configuration du noyau, consultez [Link]
org/view/astuces/[Link]. BLFS offre aussi quelques informations complémentaires concernant
les besoins particuliers de configuration pour les paquets en dehors de LFS sur [Link]
org/blfs/../view/blfs-stable-systemd/[Link]#kernel-config-index. Vous pouvez trouver des informations
supplémentaires sur la configuration et la construction du noyau sur [Link]

249
Linux From Scratch - Version 11.3-systemd

Note
Un bon point de départ pour effectuer la configuration du noyau est de lancer make defconfig. Cela
opérera une configuration de base de bonne qualité en prenant en compte l'architecture actuelle de votre
système.
Assurez-vous d'activer, désactiver ou indiquer les fonctionnalités suivantes ou le système ne démarrera
pas correctement voir pas du tout :
Processor type and features --->
[*] Build a relocatable kernel [CONFIG_RELOCATABLE]
[*] Randomize the address of the kernel image (KASLR) [CONFIG_RANDOMIZE_BASE]
General setup --->
[ ] Compile the kernel with warnings as errors [CONFIG_WERROR]
[ ] Auditing Support [CONFIG_AUDIT]
CPU/Task time and stats accounting --->
[*] Pressure stall information tracking [CONFIG_PSI]
< > Enable kernel headers through /sys/kernel/[Link] [CONFIG_IKHEADERS]
[*] Control Group support [CONFIG_CGROUPS] --->
[*] Memory controller [CONFIG_MEMCG]
[ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
[*] Configure standard kernel features (expert users) [CONFIG_EXPERT] --->
[*] open by fhandle syscalls [CONFIG_FHANDLE]
General architecture-dependent options --->
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
[*] Stack Protector buffer overflow detection [CONFIG_STACKPROTECTOR]
[*] Strong Stack Protector [CONFIG_STACKPROTECTOR_STRONG]
Networking support --->
Networking options --->
<*> The IPv6 protocol [CONFIG_IPV6]
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs [CONFIG_DEVTMPFS_MOUNT]
Firmware Loader --->
[ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER]
Firmware Drivers --->
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
Graphics support --->
Frame buffer Devices --->
<*> Support for frame buffer devices --->
Console display driver support --->
[*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
File systems --->
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
Pseudo filesystems --->
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]

Activez certaines fonctionnalités supplémentaires si vous construisez un système 64 bits. Si vous utilisez
menuconfig, activez-les dans l'ordre : d'abord CONFIG_PCI_MSI, puis CONFIG_IRQ_REMAP et enfin CONFIG_
X86_X2APIC car une option ne s'affiche qu'après avoir sélectionné ses dépendances.

Processor type and features --->


[*] Support x2apic [CONFIG_X86_X2APIC]
Device Drivers --->
[*] PCI Support ---> [CONFIG_PCI]
[*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI]
[*] IOMMU Hardware Support ---> [CONFIG_IOMMU_SUPPORT]
[*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]

250
Linux From Scratch - Version 11.3-systemd

Note
Même si "Le Protocole IPv6" n'est pas strictement nécéssaire, il est fortement recommandé par les
dévelopeurs de systemd.

Note
Si votre matériel hôte utilise UEFI et que vous souhaitez démarrer LFS sans, vous devrez ajuster certaines
configurations du noyau en suivant la page BLFS.

Voici pourquoi on vise les éléments de configuration ci-dessus :

Randomize the address of the kernel image (KASLR)


Active l'ASLR pour l'image du noyau, pour éviter certaines attaques basées sur les adresses fixes de données
sensible ou de code dans le noyau.
Compile the kernel with warnings as errors
Cela peut causer un échec à la construction si le compilateur ou la configuration diffère de ceux des
développeurs du noyau.
Enable kernel headers through /sys/kernel/[Link]
Cela demandera cpio pour construire le noyau. cpio n'est pas installé par LFS.
Strong Stack Protector
Active SSP pour le noyau. Nous l'avons activée pour l'intégralité de l'espace utilisateur avec --enable-default-
ssp en configurant GCC, mais le noyau n'utilise pas le paramètre GCC par défaut pour SSP. Nous l'activons
ici explicitement.
Support for uevent helper
L'activation de cette option peut interférer avec la gestion de périphériques quand on utilise Udev/Eudev.
Maintain a devtmpfs
Ceci créera des nœuds de périphérique automatiquement, générés par le noyau même sans Udev. Udev
fonctionne alors sur cette base pour gérer les droits et l'ajout de liens symboliques. Cet élément de configuration
est nécessaire pour tous les utilisateurs d'udev/eudev.
Automount devtmpfs at /dev
Cela montera la vue des périphériques du noyau sur /dev au changement de système de fichiers racine juste
avant de charger l'init.
Framebuffer Console support
C'est requis pour afficher la console Linux sur un frame buffer. Pour permettre au noyau d'afficher les messages
de débogages très tôt pendant le démarrage, il ne devrait pas être construit en tant que module à moins d'utiliser
un initramfs. En plus, si CONFIG_DRM (Direct Rendering Manager, le gestionnaire de rendu direct) est activé,
il est probable que CONFIG_DRM_FBDEV_EMULATION (activation de la prise en charge de fbdev pour votre pilote
de gestion d'écran) doive aussi être activé.
Support x2apic
Prend en charge le contrôleur d'interruption des processeurs x86 64 bits dans le mode x2APIC. x2APIC peut être
activé par le micrologiciel sur les systèmes x86 64 bits, et un noyau sans cette option paniquera au démarrage
si x2APIC est activé par le micrologiciel. Cette option n'a aucun effet mais ne cause aucun problème non plus
si x2APIC est désactivé par le micrologiciel.
Sinon, make oldconfig peut être plus approprié dans certaines situations. Voir le fichier README pour plus
d'informations.

251
Linux From Scratch - Version 11.3-systemd

Si vous le désirez, vous pouvez sauter la configuration du noyau en copiant le fichier de configuration, .config,
du système hôte (en supposant qu'il est disponible) dans le répertoire linux-6.1.11 tout juste déballé. Néanmoins,
nous ne recommandons pas cette option. Il est souvent meilleur d'explorer tous les menus de configuration et de
créer la configuration du noyau à partir de zéro.
Compilez l'image du noyau et les modules :
make

Si vous utilisez des modules du noyau, il peut être nécessaire de les configurer dans le fichier /etc/modprobe.d. Des
informations au sujet de la configuration du noyau et des modules se trouvent à la Section 9.3, « Manipulation des
périphériques et modules » et dans le répertoire linux-6.1.11/Documentation de la documentation du noyau. Enfin,
modprobe.d(5) pourrait aussi être intéressant.

À moins d'avoir désactivé la prise en charge des modules dans la configuration du noyau, installez les modules :
make modules_install

Une fois la compilation du noyau terminée, des étapes supplémentaires sont encore nécessaires pour terminer
l'installation. Certains fichiers ont besoin d'être copiés dans le répertoire /boot.

Attention
Si vous avez décidé d'utliiser une partition /boot séparée pour le système LFS (en partageant
éventuellement une partition /boot avec la distribution hôte), les fichiers copiés ci-dessous devraient aller
là. La manière la plus simple de procéder est de lier /boot sur l’hôte (en dehors du chroot) à /mnt/lfs/boot
avant de continuer. En tant qu'utilisateur root sur le système hôte :
mount /boot

Le chemin vers le nœud de périphérique est omis dans la commande car mount peut le lire dans /etc/
fstab.

Le chemin vers l'image du noyau pourrait varier suivant la plateforme utilisée. Vous pouvez changer le nom du
fichier ci-dessous selon votre goût, mais la nomenclature du nom de fichier devrait ressembler à vmlinuz pour être
compatible avec le paramétrage automatique du processus de démarrage décrit dans la section à venir. La commande
suivante présuppose une architecture x86 :
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.1.11-lfs-11.3-systemd

[Link] est un fichier de symboles pour le noyau. Il cartographie les points d'entrée de chaque fonction dans
l'API du noyau, ainsi que les adresses de ses structures de données pendant l'exécution. Il sert de référence lors des
investigations sur les problèmes de noyau. Lancez la commande suivante pour installer le fichier de symboles :
cp -iv [Link] /boot/[Link]-6.1.11

Le fichier de configuration du noyau .config produit à l'étape make menuconfig ci-dessus contient toutes les
options de configuration choisies pour le noyau qui vient d'être compilé. Conserver ce fichier est une bonne idée
pour pouvoir s'y référer plus tard :
cp -iv .config /boot/config-6.1.11

Installez la documentation du noyau Linux :


install -d /usr/share/doc/linux-6.1.11
cp -r Documentation/* /usr/share/doc/linux-6.1.11

Il est important de noter que les fichiers dans le répertoire des sources du noyau n'appartiennent pas à root. Chaque
fois qu'un paquet est déballé par l'utilisateur root (comme on a fait dans chroot), les fichiers ont les ID de l'utilisateur
et du groupe de l'empaqueteur sur son système hôte. En principe ce n'est pas un problème car l'arborescence des

252
Linux From Scratch - Version 11.3-systemd

sources est supprimée après l'installation. En revanche, l'arborescence de Linux est souvent conservée longtemps.
Du coup, il y a des chances que tout ce que l'ID de l'utilisateur ayant déballé le paquet a utilisé ne soit affecté à
quelqu'un d'autre sur la machine. Cette personne pourrait alors avoir un droit d'écriture sur les sources du noyau.

Note
Dans de nombreux cas, la configuration du noyau aura besoin d'être mise à jour pour les paquets qui
serojnt installés plutard dans BLFS. Contrairement aux autres paquets, il n'est pas nécessaire de supprimer
les sources du noyau après l'installation du noyau nouvellement construit.
Si vous conservez l'arborescence des sources du noyau, lancez chown -R 0:0 sur le répertoire linux-6.
1.11 pour vous assurer que tous les fichiers appartiennent à root.

Avertissement
Certaines documentations du noyau recommandent de créer un lien symbolique à partir de /usr/src/linux
pointant vers le répertoire des sources du noyau. Ceci est spécifique aux noyaux antérieurs à la série 2.6
et ne doit pas être réalisé sur un système LFS car il peut poser des problèmes pour les paquets que vous
souhaitez construire une fois votre système LFS de base complet.

Avertissement
Les en-têtes du répertoire système include (/usr/include) devraient toujours être ceux avec lesquels Glibc
a été compilée, à savoir, les en-têtes nettoyés installés au Section 5.4, « Linux-6.1.11 API Headers ».
Donc, ils ne devraient jamais être remplacés par les en-têtes du noyau brut ou par d'autres en-têtes nettoyés
du noyau.

10.3.2. Configuration de l'ordre de chargement des modules Linux


La plupart du temps, les modules Linux sont chargés automatiquement, mais il faut parfois des directives
supplémentaires. Le programme qui charge les modules, modprobe ou insmod, utilise /etc/modprobe.d/[Link]
à cette fin. Il faut créer ce fichier afin que, si les pilotes USB (ehci_hcd, ohci_hcd et uhci_hcd) ont été construits
en module, ils soient chargés dans le bon ordre ; ehci_hcd doit être chargé avant ohci_hcd et uhci_hcd afin d'éviter
un avertissement au moment du démarrage.
Créez un nouveau /etc/modprobe.d/[Link] en lançant ce qui suit :
install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/[Link] << "EOF"
# Début de /etc/modprobe.d/[Link]

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true


install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# Fin de /etc/modprobe.d/[Link]
EOF

10.3.3. Contenu de Linux


Fichiers installés: config-6.1.11, vmlinuz-6.1.11-lfs-11.3-systemd et [Link]-6.1.11
Répertoires installés: /lib/modules, /usr/share/doc/linux-6.1.11

Descriptions courtes
config-6.1.11 Contient toutes les options de configuration choisies pour le noyau
vmlinuz-6.1.11-lfs-11.3-systemd Le moteur du système Linux. Au démarrage de l'ordinateur,
le noyau est la première partie du système d'exploitation à

253
Linux From Scratch - Version 11.3-systemd

être chargée. Il détecte et initialise tous composants matériels


de l'ordinateur, puis rend disponible les composants dans
une arborescence de fichiers pour les logiciels qui en ont
besoin, et transforme une machine monoprocesseur en une
machine multitâche capable d'exécuter plusieurs programmes
quasi simultanément
[Link]-6.1.11 Une liste d'adresses et de symboles donnant la correspondance
entre les points d'entrée, et les adresses de toutes les fonctions et
structures de données du noyau

254
Linux From Scratch - Version 11.3-systemd

10.4. Utiliser GRUB pour paramétrer le processus de


démarrage
Note
Si votre système prend en charge l'UEFI et que vous souhaitez démarrer LFS avec l'UEFI, ignorez cette
page et configurez GRUB avec la prise en charge de l'UEFI en suivant les instructions de la page BLFS.

10.4.1. Introduction
Avertissement
Une mauvaise configuration de GRUB peut rendre votre système inutilisable si vous n'avez pas d'autre
périphérique d'amorçage comme un cédérom. Cette section n'est pas obligatoire pour démarrer votre
système LFS. Il se peut que vous vouliez simplement modifier votre chargeur de démarrage actuel, comme
Grub-Legacy, GRUB2 ou LILO.

Assurez-vous d'avoir un disque de démarrage de façon à pouvoir « dépanner » l'ordinateur si celui-ci devenait
inutilisable (non amorçable). Si vous n'avez pas déjà de périphérique de démarrage, vous pouvez en créer un. Afin
que la procédure ci-dessous fonctionne, vous devez faire un tour du côté de BLFS et installer xorriso qui est dans
le paquet libisoburn.
cd /tmp
grub-mkrescue --output=[Link]
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed [Link]

10.4.2. Conventions de nommage de GRUB


GRUB utilise son propre système de dénomination des disques et des partitions. Il prend la forme (hdn,m) : n indique
le numéro du disque dur et m le numéro de la partition. Le numéro du disque dur commence à partir de zéro, mais
le numéro de la partition commence à partir d'un pour les partitions normales et à partir de cinq pour les partitions
étendues. Ceci diffère des versions précédentes où les deux numéros commençaient à partir de zéro. Par exemple,
la partition sda1 correspond à (hd0,1) pour GRUB et la partition sdb3 correspond à (hd1,3). Contrairement à Linux,
GRUB ne considère pas les lecteurs de CD-ROM comme des disques durs. Par exemple, si un CD se trouve sur hdb
et un second disque dur sur hdc, ce dernier disque sera malgré tout (hd1).

10.4.3. Réglage de la configuration


GRUB fonctionne en écrivant les données sur le premier secteur physique du disque dur. Ce secteur ne fait partie
d'aucun système de fichiers. Les programmes accèdent alors aux modules de GRUB dans la partition de démarrage.
L'emplacement par défaut est /boot/grub/.
L'emplacement de la partition de démarrage est un choix de l'utilisateur qui conditionne la configuration.
L'utilisation d'une petite partition distincte (la taille suggérée est de 200 Mo) pour les informations de démarrage est
recommandée. De cette façon, chaque construction, que ce soit LFS ou d'autres distributions commerciales, peut
accéder aux mêmes fichiers de démarrage et n'importe quel système démarré peut y accéder. Si vous choisissez
cette option, vous aurez besoin de monter la partition séparément, de déplacer tous les fichiers du répertoire /boot
actuel (par exemple, le noyau linux que avez construit à l'étape précédente) vers la nouvelle partition. Vous aurez
ensuite besoin de démonter la partition puis de la remonter en tant que /boot. Si vous procédez à ce changement,
assurez-vous de mettre à jour /etc/fstab.
Il est possible de laisser la partition LFS actuelle dans le répertoire /boot, mais cela rendra la configuration de
plusieurs systèmes plus difficile.

255
Linux From Scratch - Version 11.3-systemd

En utilisant les informations ci-dessus, déterminez le nom adapté à la partition racine (ou partition de démarrage,
s'il en existe une distincte). Pour l'exemple suivant, supposons que la partition racine (ou la partition de démarrage)
est sda2.

Installez les fichiers de GRUB dans /boot/grub et paramétrez le secteur d'amorçage :

Avertissement
La commande suivante va écraser le chargeur de démarrage actuel. Ne lancez pas la commande si ce n'est
pas ce que vous désirez, par exemple si vous utilisez un gestionnaire de démarrage extérieur pour gérer
le Master Boot Record (MBR).

grub-install /dev/sda

Note
Si le système a été démarré en UEFI, grub-install essayera d'installer des fichiers pour la cible x86_64-
efi, mais ces fichiers n'ont pas été installés au Chapitre 8. Si c'est le cas, ajoutez --target i386-pc à la
commande ci-dessus.

10.4.4. Créer le fichier de configuration de GRUB


Générez /boot/grub/[Link] :
cat > /boot/grub/[Link] << "EOF"
# Début de /boot/grub/[Link]
set default=0
set timeout=5

insmod ext2
set root=(hd0,2)

menuentry "GNU/Linux, Linux 6.1.11-lfs-11.3-systemd" {


linux /boot/vmlinuz-6.1.11-lfs-11.3-systemd root=/dev/sda2 ro
}
EOF

Note
Du point de vue de GRUB, les fichiers du noyau sont relatifs à la partition utilisée. Si vous avez utilisé
une partition /boot distincte, supprimez /boot de la ligne linux ci-dessus. Vous devrez aussi modifier la
ligne set root pour pointer vers la partition d'amorçage.

256
Linux From Scratch - Version 11.3-systemd

Note
La désignation GRUB pour une partition peut changer si vous ajoutez ou retirez des disques (dont les
disques amovibles comme les clés USB). Le changement peut causer des échecs de démarrage parce que
[Link] se réfère à « d'anciennes » désignations. Pour éviter ce problème, vous pouvez utiliser l'UUID de
la partition et du système de fichiers pour indiquer une partition plutôt que d'utiliser la désignation GRUB.
Exécutez lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT pour afficher l'UUID de vos systèmes
de fichiers (dans la colonne UUID) et de vos partitions (dans la colonne PARTUUID). Remplacez ensuite
set root=(hdx,y) par search --set=root --fs-uuid <UUID du système de fichiers où le noyau
est installé> et remplacez root=/dev/sda2 par root=PARTUUID=<UUID de la partition où LFS est
construit>.

L'UUID d'une partition et l'UUID du système de fichiers dans cette partition sont complètement différents.
Certaines ressources en ligne peuvent vous indiquer d'utiliser root=UUID=<UUID du système de fichiers>
au lieu de root=PARTUUID=<UUID de la partition>, mais cela nécessitera un initramfs qui va au-delà des
objectifs de LFS.
Le nom du nœud de périphérique pour une partition dans /dev peut aussi changer (plus rarement que les
désignations GRUB cependant). Vous pouvez aussi remplacer les chemins vers les nœuds de périphériques
comme /dev/sda1 par PARTUUID=<UUID de la partition> dans /etc/fstab pour éviter un échec au
démarrage éventuel dans le cas où le nom du nœud de périphérique aurait changé.

GRUB est un programme extrêmement puissant et il offre un très grand nombre d'options pour démarrer depuis une
large gamme de périphériques, de systèmes d'exploitation et de types de partition. Il a aussi beaucoup d'options de
personnalisation telles que les écrans d'accueil graphiques, les annonces sonores, l'entrée à la souris, etc. Les détails
de ces options vont au-delà des objectifs de cette introduction.

Attention
Il existe une commande, grub-mkconfig qui peut écrire automatiquement un fichier de configuration. Elle
utilise un ensemble de scripts situés dans /etc/grub.d/ et elle détruira les personnalisations que vous aurez
faites. Ces scripts sont d'abord conçus pour des distributions qui ne se basent pas sur les sources et ils ne
sont pas recommandés pour LFS. Si vous installez une distribution Linux commerciale, il est fort probable
que ce programme soit lancé. Assurez-vous de sauvegarder votre fichier [Link].

257
Linux From Scratch - Version 11.3-systemd

Chapitre 11. La fin


11.1. Fin
Bien joué ! Le nouveau système LFS est installé ! Nous vous souhaitons de bien vous amuser avec votre tout nouveau
système Linux fabriqué sur mesure.
Il est recommandé de créer le fichier /etc/lfs-release. Avec ce fichier, il vous est très facile (ainsi que pour nous
si vous avez besoin de demander de l'aide) de savoir quelle version de LFS vous avez installé sur votre système.
Créez ce fichier en lançant :
echo 11.3-systemd > /etc/lfs-release

Certains paquets que vous installerez sur votre système pourront utiliser deux fichiers décrivant le système installé,
soit sous forme binaire, soit à la construction.
Le premier affiche l'état de votre nouveau système, en respectant la Linux Standards Base (LSB). Pour créer ce
fichier, lancez :
cat > /etc/lsb-release << "EOF"
DISTRIB_ID="Linux From Scratch"
DISTRIB_RELEASE="11.3-systemd"
DISTRIB_CODENAME="<votre nom ici>"
DISTRIB_DESCRIPTION="Linux From Scratch"
EOF

Le deuxième contient à peu près les mêmes informations et est utilisé par systemd et certains environnements de
bureau. Pour créer ce fichier, lancez :
cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="11.3-systemd"
ID=lfs
PRETTY_NAME="Linux From Scratch 11.3-systemd"
VERSION_CODENAME="<votre nom ici>"
EOF

Assurez-vous de personnaliser les champs « DISTRIB_CODENAME » et « VERSION_CODENAME » pour que


ce système ne soit que le vôtre.

11.2. Enregistrez-vous
Maintenant que vous avez terminé le livre, voulez-vous être enregistré comme utilisateur de LFS ? Allez directement
sur [Link] et enregistrez-vous comme utilisateur LFS en entrant
votre nom et la première version de LFS que vous ayez utilisée.
Redémarrons sur LFS maintenant.

11.3. Redémarrer le système


Tous les logiciels sont à présent installés. Mais avant de redémarrer votre ordinateur, il y a encore quelques petites
choses à vérifier :
• Si besoin, installez les micrologiciels nécessaires au bon fonctionnement du pilote de noyau de votre
équipement.
• À ce stade, une relecture des fichiers de configuration suivants s'impose.
• /etc/bashrc

258
Linux From Scratch - Version 11.3-systemd

• /etc/dircolors
• /etc/fstab
• /etc/hosts
• /etc/inputrc
• /etc/profile
• /etc/[Link]
• /etc/vimrc
• /root/.bash_profile
• /root/.bashrc
Une fois cela fait, vous pouvez démarrer votre toute nouvelle installation LFS pour la première fois ! Tout d'abord,
quittez l'environnement chroot :
logout

Puis, démontez les systèmes de fichiers virtuels :


umount -v $LFS/dev/pts
mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
umount -v $LFS/dev
umount -v $LFS/run
umount -v $LFS/proc
umount -v $LFS/sys

Si plusieurs partitions ont été créées, démontez les autres partitions avant de démonter la principale en exécutant :
umount -v $LFS/home
umount -v $LFS

Démontez le système de fichiers LFS :


umount -v $LFS

Maintenant, redémarrez le système.


En supposant que le chargeur d'amorçage GRUB a été initialisé comme indiqué plus tôt, le menu est prêt à démarrer
automatiquement LFS 11.3-systemd.
Une fois le redémarrage terminé, le système LFS est fonctionnel et vous pouvez installer davantage de logiciels
en fonction de vos besoins.

11.4. Ressources supplémentaires


Merci d'avoir lu le livre LFS. Nous espérons que vous avez trouvé ce livre utile et que vous en avez appris davantage
sur le processus de création d'un système.
Maintenant que le système LFS est installé, vous êtes peut-être en train de vous demander « Et ensuite ? » Pour
répondre à cette question, nous vous avons préparé une liste de ressources.
• Maintenance
Les bogues et informations de sécurité sont rapportés régulièrement pour tous les logiciels. Comme un système
LFS est compilé à partir des sources, c'est à vous de prendre en compte ces rapports. Il existe plusieurs
ressources en ligne pour garder trace de tels rapports, quelques-unes d'entre elles sont indiquées ci-dessous :
• Informations de sécurité LFS
C'est une liste de vulnérabilités de sécurité découvertes dans le livre LFS après sa publication.

259
Linux From Scratch - Version 11.3-systemd

• Open Source Security Mailing List


C'est une liste de diffusion pour discuter des failles de sécurité, des concepts et des pratiques de sécurité dans
la communauté Open Source.
• Astuces LFS
Les astuces LFS sont une collection de documents éducatifs soumis par des volontaires à la communauté LFS.
Ces astuces sont disponibles sur [Link]
• Listes de diffusion
Il existe plusieurs listes de diffusion LFS auxquelles vous pouvez vous abonner si vous cherchez de l'aide,
voulez suivre les derniers développements, voulez contribuer au projet et plus. Consultez le Chapitre 1 —
Listes de diffusion pour plus d'informations.
• Le projet de documentation Linux
Le projet de documentation Linux (LDP) a pour but de favoriser la collaboration concernant la documentation
de Linux. Le LDP offre une large collection de guides pratiques, livres et pages de manuel. Il est disponible sur
[Link]

11.5. Débuter After LFS


11.5.1. Décider que faire ensuite
Maintenant que LFS est terminé et que vous avez un système démarrable, que faire ? L'étape suivante est de décider
comment l'utiliser. En général, il y a deux catégories génériques à prendre en compte : système de bureau ou serveur.
Ces catégories ne sont pas mutuellement exclusives. Les applications requises pour chaque catégorie peuvent être
combinées au sein d'un unique système, mais regardons les séparément pour le moment.
Un serveur est la catégorie la plus simple. En général elle consiste en un serveur web comme le serveur HTTP
Apache et en un serveur de base de données comme MariaDB. Cependant d'autres services sont possibles. Le
système d'exploitation inclus dans un appareil à but unique se trouve dans cette catégorie.
Un système de bureau, en revanche, est plus complexe car il requiert généralement un environnement utilisateur
graphique tel que LXDE, XFCE, KDE, ou Gnome basé sur un environnement graphique de base et plusieurs
applications à base graphique tel que Firefox web browser, Thunderbird email client, ou LibreOffice office suite.
Ces applications requièrent encore plus de paquets (plusieurs centaines selon les capacités souhaitées) de prise en
charge des applications et de bibliothèques.
Outre les aspects déjà mentionnés, il existe un ensemble d'applications d'administration système pour toutes sortes
de systèmes. Ces applications sont dans le livre BLFS. Tous les paquets ne sont pas nécessaires dans tous les
environnements. Par exemple dhcpcd, n'est pas approprié pour un serveur et wireless_tools, n'est utile que pour un
système portable.

11.5.2. Travailler dans un environnement LFS de base


Lorsque vous vous lancez dans LFS, vous disposez de tous les outils internes pour construire des paquets
supplémentaires. Malheureusement, l'environnement utilisateur est plutôt sommaire. Il y a plusieurs façons
d'améliorer cela :

[Link]. Travailler à partir du hôte LFS dans l’environnement chroot


Cette méthode permet de disposer d'un environnement graphique avec un navigateur intégral et des fonctions de
copier/coller disponibles. Cette méthode permet d'utiliser des applications comme la version de l'hôte de wget pour
télécharger les sources des paquets à un emplacement disponible lorsque l'on travaille dans l'environnement chroot.

260
Linux From Scratch - Version 11.3-systemd

Afin de construire correctement les paquets dans l'environnement chroot, montez les systèmes de fichiers virtuels
s'ils ne sont pas déjà montés. Une façon de le faire est de créer un script sur le système HOST :
cat > ~/[Link] << "EOF"
#!/bin/bash

function mountbind
{
if ! mountpoint $LFS/$1 >/dev/null; then
$SUDO mount --bind /$1 $LFS/$1
echo $LFS/$1 mounted
else
echo $LFS/$1 already mounted
fi
}

function mounttype
{
if ! mountpoint $LFS/$1 >/dev/null; then
$SUDO mount -t $2 $3 $4 $5 $LFS/$1
echo $LFS/$1 mounted
else
echo $LFS/$1 already mounted
fi
}

if [ $EUID -ne 0 ]; then


SUDO=sudo
else
SUDO=""
fi

if [ x$LFS == x ]; then
echo "LFS not set"
exit 1
fi

mountbind dev
mounttype dev/pts devpts devpts -o gid=5,mode=620
mounttype proc proc proc
mounttype sys sysfs sysfs
mounttype run tmpfs run
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
else
mounttype dev/shm tmpfs tmpfs -o nosuid,nodev
fi

#mountbind usr/src
#mountbind boot
#mountbind home
EOF

Remarquez que les trois dernières commandes du script sont commentées. Elles sont utiles si ces répertoires sont
montés comme des partitions séparées sur le système hôte et s'ils seront montés lors du démarrage du système LFS/
BLFS finalisé.
Le script peut être exécuté avec bash ~/[Link] en tant qu'utilisateur normal (recommandé) ou en tant que
root. S'il est exécuté en tant qu'utilisateur normal, sudo est requis dans le système hôte.

Un autre problème signalé par le script est où stocker les fichiers de paquets téléchargés. Cet emplacement
est arbitraire. Il peut être dans le répertoire personnel d'un utilisateur ordinaire comme ~/sources ou dans un
emplacement global comme /usr/src. Notre recommandation est de ne pas mélanger les sources BLFS et les sources
LFS dans (à partir de l'environnement chroot) /sources. Dans tous les cas, les paquets doivent être accessibles à
l'intérieur de l'environnement chroot.

261
Linux From Scratch - Version 11.3-systemd

Une dernière fonctionnalité pratique présentée ici permet de rationaliser le processus d'entrée dans l'environnement
chroot. Cela peut être fait avec un alias placé dans le fichier ~/.bashrc d'un utilisateur sur le système hôte :
alias lfs='sudo /usr/sbin/chroot /mnt/lfs /usr/bin/env -i HOME=/root TERM="$TERM" PS1="\u:\w\\\\$ "
PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login'

Cet alias est un peu délicat à cause des guillemets et des niveaux de barres obliques. Tout doit figurer sur une seule
ligne. La commande ci-dessus a été divisée en deux pour des raisons de présentation.

[Link]. Travailler à distance via ssh


Cette méthode offre également un environnement graphique complet, mais nécessite d'abord d'installer sshd et wget
sur le système LFS. Cette méthode requiert aussi un deuxième ordinateur. Cette méthode a l'avantage d'être simple
en ne nécessitant pas la complexité de l'environnement chroot. Cette méthode utilise le noyau LFS déjà construit
pour l'installation de paquets supplémentaires en fournissant tout de même un système complet pour l'installation
des paquets.

[Link]. Travailler depuis la ligne de commande LFS


Cette méthode nécessite l’installation de libtasn1, p11-kit, make-ca, wget, gpm, et links (ou lynx) dans chroot et
ensuite d’un redémarrage dans le nouveau système LFS. À ce stade, le système par défaut possède six consoles
virtuelles. Changer de console est aussi simple que d'utiliser les combinaisons de touches Alt+Fx où Fx est entre
F1 et F6. Les combinaisons des touches Alt+← et Alt+→ changeront aussi la console.
Maintenant, vous pouvez vous connecter à deux consoles virtuelles différentes et exécuter le navigateur web links
ou lynx dans une console tandis que vous exécutez bash dans l'autre. GPM permet alors de copier les commandes
du navigateur avec le bouton gauche de la souris, de changer de console et de les coller dans l'autre console.

Note
À titre d'information, le changement de console virtuelle peut également être effectué à partir d'une fenêtre
X avec la combinaison de touches Ctrl+Alt+Fx, mais l'opération de copie de la souris ne fonctionne pas
entre l'interface graphique et une console virtuelle. Vous pouvez revenir à l'affichage de la fenêtre X avec
la combinaison Ctrl+Alt+Fx, où Fx est généralement F1 mais peut être F7.

262
Linux From Scratch - Version 11.3-systemd

Partie V. Annexes
Linux From Scratch - Version 11.3-systemd

Annexe A. Acronymes et termes


ABI Application Binary Interface ou interface binaire-programme
ALFS Automated Linux From Scratch
API Interface de programmation d'application
ASCII American Standard Code for Information Interchange ou code américain normalisé pour l'échange
d'information
BIOS Basic Input/Output System ou système d'entrées/sorties de base
BLFS Beyond Linux From Scratch
BSD Berkeley Software Distribution
chroot change root
CMOS Complementary Metal Oxide Semiconductor ou semi-conducteur à oxyde métallique complémentaire
COS Class Of Service
CPU Central Processing Unit ou unité centrale de traitement
CRC Contrôle de redondance cyclique
CVS Concurrent Versions System ou système de gestion de versions
DHCP Dynamic Host Configuration Protocol ou protocole de configuration dynamique d'adressage serveur
DNS Domain Name Service ou service de nom de domaine
EGA Enhanced Graphics Adapter ou adaptateur graphique amélioré
ELF Format exécutable et liable
EOF End of File ou fin de fichier
EQN Équation
ext2 second extended file system
ext3 third extended file system
ext4 fourth extended file system
FAQ Foire aux questions
FHS Filesystem Hierarchy Standard ou hiérarchie standard des systèmes de fichiers
FIFO First-In, First Out ou premier arrivé, premier servi
FQDN Fully Qualified Domain Name ou nom de domaine pleinement qualifié
FTP File Transfer Protocol ou protocole de transfert de fichiers
Go Gigaoctet
GCC GNU Compiler Collection
GID Identificateur de groupe
GMT Temps moyen de Greenwich
HTML Hypertext Markup Language
IDE Integrated Drive Electronics ou gestion de périphériques à électronique intégrée
IEEE Institute of Electrical and Electronic Engineers
IO Input/Output ou Entrées/Sorties
IP Protocole Internet

264
Linux From Scratch - Version 11.3-systemd

IPC Communication inter-processus


IRC Internet Relay Chat ou service d'échanges textuels en temps réel
ISO International Organization for Standardization
ISP Internet Service Provider ou fournisseur d'accès Internet (FAI)
Ko Kilooctet
LED Light Emitting Diode ou diode électroluminescente
LFS Linux From Scratch
LSB Linux Standard Base
Mo Mégaoctet
MBR Master Boot Record ou secteur d'amorçage
MD5 Message Digest 5
NIC Network Interface Card ou carte d'interface réseau
NLS Native Language Support ou prise en charge de la langue maternelle
NNTP Network News Transport Protocol ou protocole de transfert UseNet
NPTL Native POSIX Threading Library
OSS Open Sound System
PCH Pre-Compiled Headers
PCRE Perl Compatible Regular Expression
PID Identificateur de processus
PTY Pseudo terminal
QOS Quality Of Service ou qualité de service
RAM Random Access Memory ou mémoire vive
RPC Remote Procedure Call ou appel de procédure distante
RTC Real Time Clock ou horloge temps réel
SBU Standard Build Unit
SCO The Santa Cruz Operation
SHA1 Secure-Hash Algorithm 1
TLDP The Linux Documentation Project
TFTP Trivial File Transfer Protocol ou protocole simplifié de transfert de fichiers
TLS Thread-Local Storage ou mémoire locale de thread
UID Identificateur utilisateur
umask user file-creation mask
USB Universal Serial Bus
UTC Temps universel coordonné
UUID Identificateur universellement unique
VC Console Virtuelle
VGA Adaptateur graphique vidéo
VT Terminal virtuel

265
Linux From Scratch - Version 11.3-systemd

Annexe B. Remerciements
Nous aimerions remercier les personnes et organisations suivantes pour leurs contributions au projet Linux From
Scratch.
• Gerard Beekmans <gerard@[Link]> – Créateur de LFS
• Bruce Dubbs <bdubbs@[Link]> – Rédacteur en chef de LFS
• Jim Gifford <jim@[Link]> – Co-Leader du projet CLFS
• Pierre Labastie <pierre@[Link]> – Rédacteur de BLFS et meneur de ALFS
• DJ Lucas <dj@[Link]> – Rédacteur de LFS et de BLFS
• Ken Moffat <ken@[Link]> – Rédacteur de BLFS
• Sans compter les autres personnes sur les diverses listes de diffusion de LFS et BLFS qui ont aidé à rendre
possible ce livre par leurs suggestions, leurs tests ; leurs soumissions de rapports de bogue, d'instructions et
leurs retours d'expérience en installant divers paquets.

Traducteurs
• Manuel Canales Esparcia <macana@[Link]> – Projet de traduction de LFS en espagnol
• Johan Lenglet <johan@[Link]> – Projet de traduction de LFS en français jusqu'en 2008
• Jean-Philippe Mengual <jmengual@[Link]> – Projet de traduction de LFS en français de 2008
à 2016
• Julien Lepiller <jlepiller@[Link]> – Projet de traduction de LFS en français depuis 2017
• Anderson Lizardo <lizardo@[Link]> – Projet de traduction de LFS en portugais
• Thomas Reitelbach <tr@[Link]> – Projet de traduction de LFS en allemand

Mainteneurs de miroirs
Miroirs nord-américains
• Scott Kveton <scott@[Link]> – miroir [Link]
• William Astle <lost@[Link]> – miroir [Link]
• Eujon Sellers <jpolen@[Link]> – miroir [Link]
• Justin Knierim <tim@[Link]> – miroir [Link]

Miroirs sud-américains
• Manuel Canales Esparcia <manuel@[Link]> – miroir [Link]
• Luis Falcon <Luis Falcon> – miroir [Link]

Miroirs européens
• Guido Passet <guido@[Link]> – miroir [Link]
• Bastiaan Jacques <baafie@[Link]> – miroir [Link]
• Sven Cranshoff <[Link]@[Link]> – miroir [Link]
• Scarlet Belgium – miroir [Link]
• Sebastian Faulborn <info@[Link]> – miroir [Link]

266
Linux From Scratch - Version 11.3-systemd

• Stuart Fox <stuart@[Link]> – miroir [Link]


• Ralf Uhlemann <admin@[Link]> – miroir [Link]
• Antonin Sprinzl <[Link]@[Link]> – miroir [Link]
• Fredrik Danerklint <fredan-lfs@[Link]> – miroir [Link]
• Franck <franck@[Link]> – miroir [Link]
• Philippe Baque <baque@[Link]> – miroir [Link]
• Vitaly Chekasin <gyouja@[Link]> – miroir [Link]
• Benjamin Heil <kontakt@[Link]> – miroir [Link]
• Anton Maisak <info@[Link]> – miroir [Link]

Miroirs asiatiques
• Satit Phermsawang <satit@[Link]> – miroir [Link]
• Shizunet Co.,Ltd. <info@[Link]> – miroir [Link]

Miroirs australiens
• Jason Andrade <jason@[Link]> – miroir [Link]

Anciens membres de l'équipe du projet


• Christine Barczak <theladyskye@[Link]> – Rédacteur du livre LFS
• Archaic <archaic@[Link]> – Rédacteur technique LFS, leader du projet HLFS, éditeur de BLFS,
mainteneur des projets d'astuces et correctifs
• Matthew Burgess <matthew@[Link]> – Leader du projet LFS, rédacteur technique LFS/éditeur
• Nathan Coulson <nathan@[Link]> – Mainteneur de LFS-Bootscripts
• Timothy Bauscher
• Robert Briggs
• Ian Chilton
• Jeroen Coumans <jeroen@[Link]> – Développeur du site Web, mainteneur de la FAQ
• Manuel Canales Esparcia <manuel@[Link]> – Mainteneur de LFS/BLFS/HLFS en XML et
XSL
• Alex Groenewoud – Rédacteur technique LFS
• Marc Heerdink
• Jeremy Huntwork <jhuntwork@[Link]> – Rédacteur technique LFS, mainteneur du LiveCD
LFS
• Bryan Kadzban <bryan@[Link]> – Rédacteur technique LFS
• Mark Hymers
• Seth W. Klein – Mainteneur de la FAQ
• Nicholas Leippe <nicholas@[Link]> – Mainteneur du Wiki
• Anderson Lizardo <lizardo@[Link]> – Mainteneur des scripts d'arrière-plan du site Web
• Randy McMurchy <randy@[Link]> – Leader du projet BLFS, éditeur LFS
• Dan Nicholson <dnicholson@[Link]> – Rédacteur de LFS et BLFS

267
Linux From Scratch - Version 11.3-systemd

• Alexander E. Patrakov <alexander@[Link]> – Rédacteur Technique LFS, éditeur des


traductions LFS, mainteneur du LiveCD LFS
• Simon Perreault
• Scot Mc Pherson <scot@[Link]> – Mainteneur de LFS NNTP Gateway
• Douglas R. Reno <renodr@[Link]> – Rédacteur Systemd
• Ryan Oliver <ryan@[Link]> – Co-Leader du projet CLFS
• Greg Schafer <gschafer@[Link]> – Rédacteur technique LFS et architecte de la nouvelle méthode de
construction activant le 64 bits
• Jesse Tie-Ten-Quee – Rédacteur technique LFS
• James Robertson <jwrober@[Link]> – Mainteneur Bugzilla
• Tushar Teredesai <tushar@[Link]> – Rédacteur du livre BLFS, leader du projet d'astuces et
correctifs
• Jeremy Utley <jeremy@[Link]> – Rédacteur technique LFS, mainteneur Bugzilla, mainteneur
de LFS-Bootscripts
• Zack Winkles <zwinkles@[Link]> – Rédacteur technique LFS

268
Linux From Scratch - Version 11.3-systemd

Annexe C. Dépendances
La bonne compilation et la bonne installation de chaque paquet compilé dans LFS dépend d'un ou de plusieurs
autres paquets. Certains paquets participent même aux dépendances circulaires, c'est-à-dire que le premier paquet
dépend du second qui dépend à son tour du premier. À cause de ces dépendances, l'ordre dans lequel les paquets
sont compilés dans LFS est très important. Le but de cette page est de documenter les dépendances de chaque paquet
compilé dans LFS.
Pour chaque paquet que nous compilons, nous avons listé trois, voire cinq types de dépendances. La première
répertorie quels autres paquets doivent être disponibles afin de compiler et d'installer le paquet en question. La
deuxième liste les paquets qui doivent être disponibles lorsqu'un programme ou une bibliothèque du paquet est
exécuté. La troisième concerne les paquets qui, en plus de ceux de la première liste, doivent être disponibles afin
de lancer les suites de test. La quatrième liste de dépendances contient les paquets qui exigent que ce paquet soit
compilé et installé à l'emplacement final avant qu'ils ne soient compilés et installés. Dans la plupart des cas, c'est
parce que ces paquets encoderont les chemins vers les binaires à l'intérieur de leurs scripts. S'ils ne sont pas compilés
dans un certain ordre, ceci pourrait aboutir à ce que des chemins vers /tools/bin/[binaire] soient placés à l'intérieur
de scripts installés dans le système final, ce qui n'est évidemment pas souhaitable.
La dernière liste de dépendances répertorie les paquets facultatifs qui ne sont pas destinées à LFS mais qui
pourraient vous être utiles. Ces paquets peuvent avoir eux-mêmes des dépendances supplémentaires obligatoires ou
facultatives. Pour ces dépendances, la pratique recommandée consiste à les installer après avoir terminé le livre LFS
puis à revenir en arrière pour reconstruire le paquet LFS. Dans certains cas, la réinstallation est traitée dans BLFS.

Acl
L'installation dépend de: Attr, Bash, Binutils, Coreutils, GCC, Gettext, Grep, M4, Make, Perl, Sed et Texinfo
Requis à l'exécution: Attr et Glibc
La suite de tests dépend Automake, Diffutils, Findutils et Libtool
de:
Doit être installé avant: Coreutils, Sed, Tar et Vim
Dépendances Aucun
facultatives:

Attr
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, M4, Make, Perl, Sed et Texinfo
Requis à l'exécution: Glibc
La suite de tests dépend Automake, Diffutils, Findutils et Libtool
de:
Doit être installé avant: Acl et Libcap
Dépendances Aucun
facultatives:

Autoconf
L'installation dépend de: Bash, Coreutils, Grep, M4, Make, Perl, Sed et Texinfo
Requis à l'exécution: Bash, Coreutils, Grep, M4, Make, Sed et Texinfo
La suite de tests dépend Automake, Diffutils, Findutils, GCC et Libtool
de:
Doit être installé avant: Automake
Dépendances Emacs
facultatives:

269
Linux From Scratch - Version 11.3-systemd

Automake
L'installation dépend de: Autoconf, Bash, Coreutils, Gettext, Grep, M4, Make, Perl, Sed et Texinfo
Requis à l'exécution: Bash, Coreutils, Grep, M4, Sed et Texinfo
La suite de tests dépend Binutils, Bison, Bzip2, DejaGNU, Diffutils, Expect, Findutils, Flex, GCC, Gettext,
de: Gzip, Libtool et Tar
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Bash
L'installation dépend de: Bash, Binutils, Bison, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses,
Patch, Readline, Sed et Texinfo
Requis à l'exécution: Glibc, Ncurses et Readline
La suite de tests dépend Expect et Shadow
de:
Doit être installé avant: Aucun
Dépendances Xorg
facultatives:

Bc
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make et Readline
Requis à l'exécution: Glibc, Ncurses et Readline
La suite de tests dépend Gawk
de:
Doit être installé avant: Linux
Dépendances Aucun
facultatives:

Binutils
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, File, Flex, Gawk, GCC, Glibc, Grep, Make, Perl,
Sed, Texinfo et Zlib
Requis à l'exécution: Glibc et Zlib
La suite de tests dépend DejaGNU et Expect
de:
Doit être installé avant: Aucun
Dépendances Elfutils et Jansson
facultatives:

Bison
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, M4, Make, Perl et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Diffutils, Findutils et Flex
de:
Doit être installé avant: Kbd et Tar
Dépendances Doxygen
facultatives:

270
Linux From Scratch - Version 11.3-systemd

Bzip2
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make, et Patch
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: File
Dépendances Aucun
facultatives:

Check
L'installation dépend de: Gawk, GCC, Grep, Make, Sed et Texinfo
Requis à l'exécution: Bash et Gawk
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Coreutils
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, GMP, Grep, Libcap, Make, OpenSSL,
Patch, Perl, Sed et Texinfo
Requis à l'exécution: Glibc
La suite de tests dépend Diffutils, E2fsprogs, Findutils, Shadow et Util-linux
de:
Doit être installé avant: Bash, Diffutils, Findutils, Man-DB et Systemd
Dépendances [Link] et IO::Tty
facultatives:

D-Bus
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed, Systemd
et Util-linux
Requis à l'exécution: Glibc et Systemd
La suite de tests dépend Plusieurs paquets dans BLFS
de:
Doit être installé avant: Aucun
Dépendances Bibliothèques Xorg
facultatives:

DejaGNU
L'installation dépend de: Bash, Coreutils, Diffutils, Expect, GCC, Grep, Make, Sed et Texinfo
Requis à l'exécution: Expect et Bash
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

271
Linux From Scratch - Version 11.3-systemd

Diffutils
L'installation dépend de: Bash, Binutils, Coreutils, Gawk, GCC, Gettext, Glibc, Grep, Make, Sed et Texinfo
Requis à l'exécution: Glibc
La suite de tests dépend Perl
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

E2fsprogs
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Gzip, Make, Sed,
Texinfo et Util-linux
Requis à l'exécution: Glibc et Util-linux
La suite de tests dépend Procps-ng et Psmisc
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Expat
L'installation dépend de: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: Python et XML::Parser
Dépendances Aucun
facultatives:

Expect
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Patch, Sed et Tcl
Requis à l'exécution: Glibc et Tcl
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Tk
facultatives:

File
L'installation dépend de: Bash, Binutils, Bzip2, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed, Xz
et Zlib
Requis à l'exécution: Glibc, Bzip2, Xz et Zlib
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances libseccomp
facultatives:

272
Linux From Scratch - Version 11.3-systemd

Findutils
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Sed et Texinfo
Requis à l'exécution: Bash et Glibc
La suite de tests dépend DejaGNU, Diffutils et Expect
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Flex
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, M4, Make, Patch, Sed et
Texinfo
Requis à l'exécution: Bash, Glibc et M4
La suite de tests dépend Bison et Gawk
de:
Doit être installé avant: Binutils, IProute2, Kbd, Kmod et Man-DB
Dépendances Aucun
facultatives:

Gawk
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, GMP, Grep, Make, MPFR, Patch,
Readline, Sed et Texinfo
Requis à l'exécution: Bash, Glibc et Mpfr
La suite de tests dépend Diffutils
de:
Doit être installé avant: Aucun
Dépendances libsigsegv
facultatives:

GCC
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC, Gettext, Glibc, GMP,
Grep, M4, Make, MPC, MPFR, Patch, Perl, Sed, Tar, Texinfo et Zstd
Requis à l'exécution: Bash, Binutils, Glibc, Mpc et Python
La suite de tests dépend DejaGNU, Expect et Shadow
de:
Doit être installé avant: Aucun
Dépendances GNAT et ISL
facultatives:

GDBM
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Grep, Make et Sed
Requis à l'exécution: Bash, Glibc et Readline
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

273
Linux From Scratch - Version 11.3-systemd

Gettext
L'installation dépend de: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make, Ncurses, Sed et Texinfo
Requis à l'exécution: Acl, Bash, Gcc et Glibc
La suite de tests dépend Diffutils, Perl et Tcl
de:
Doit être installé avant: Automake et Bison
Dépendances Aucun
facultatives:

Glibc
L'installation dépend de: Bash, Binutils, Bison, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Gzip, Linux
API Headers, Make, Perl, Python, Sed et Texinfo
Requis à l'exécution: Aucun
La suite de tests dépend File
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

GMP
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, M4, Make, Sed et
Texinfo
Requis à l'exécution: GCC et Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: MPFR et GCC
Dépendances Aucun
facultatives:

Gperf
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc et Make
Requis à l'exécution: GCC et Glibc
La suite de tests dépend Diffutils et Expect
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Grep
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Patch, Sed et
Texinfo
Requis à l'exécution: Glibc
La suite de tests dépend Gawk
de:
Doit être installé avant: Man-DB
Dépendances PCRE2 et libsigsegv
facultatives:

274
Linux From Scratch - Version 11.3-systemd

Groff
L'installation dépend de: Bash, Binutils, Bison, Coreutils, Gawk, GCC, Glibc, Grep, Make, Patch, Sed et
Texinfo
Requis à l'exécution: GCC, Glibc et Perl
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Man-DB et Perl
Dépendances ghostscript et Uchardet
facultatives:

GRUB
L'installation dépend de: Bash, Binutils, Bison, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses,
Sed, Texinfo et Xz
Requis à l'exécution: Bash, GCC, Gettext, Glibc, Xz et Sed.
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Gzip
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make, Sed, et Texinfo
Requis à l'exécution: Bash et Glibc
La suite de tests dépend Diffutils et Less
de:
Doit être installé avant: Man-DB
Dépendances Aucun
facultatives:

Iana-Etc
L'installation dépend de: Coreutils
Requis à l'exécution: Aucun
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Perl
Dépendances Aucun
facultatives:

Inetutils
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make, Ncurses, Patch, Sed, Texinfo et
Zlib
Requis à l'exécution: GCC, Glibc, Ncurses et Readline
La suite de tests dépend Aucun
de:
Doit être installé avant: Tar
Dépendances Aucun
facultatives:

275
Linux From Scratch - Version 11.3-systemd

Intltool
L'installation dépend de: Bash, Gawk, Glibc, Make, Perl, Sed et XML::Parser
Requis à l'exécution: Autoconf, Automake, Bash, Glibc, Grep, Perl et Sed
La suite de tests dépend Perl
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

IProute2
L'installation dépend de: Bash, Bison, Coreutils, Flex, GCC, Glibc, Make, Libcap, Libelf, Linux API Headers
et Zlib
Requis à l'exécution: Bash, Coreutils, Glibc, Libcap, Libelf et Zlib
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Aucun
Dépendances Berkeley DB et iptables
facultatives:

Jinja2
L'installation dépend de: MarkupSafe et Python
Requis à l'exécution: MarkupSafe et Python
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Systemd
Dépendances Aucun
facultatives:

Kbd
L'installation dépend de: Bash, Binutils, Bison, Check, Coreutils, Flex, GCC, Gettext, Glibc, Gzip, Make, Patch
et Sed
Requis à l'exécution: Bash, Coreutils et Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Kmod
L'installation dépend de: Bash, Binutils, Bison, Coreutils, Flex, GCC, Gettext, Glibc, Gzip, Make, OpenSSL,
Pkg-config, Sed, Xz et Zlib
Requis à l'exécution: Glibc, Xz et Zlib
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Systemd
Dépendances Aucun
facultatives:

276
Linux From Scratch - Version 11.3-systemd

Less
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses et Sed
Requis à l'exécution: Glibc et Ncurses
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Gzip
Dépendances PCRE2 ou PCRE
facultatives:

Libcap
L'installation dépend de: Attr, Bash, Binutils, Coreutils, GCC, Glibc, Perl, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: IProute2 et Shadow
Dépendances Linux-PAM
facultatives:

Libelf
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc et Make
Requis à l'exécution: Glibc et Zlib
La suite de tests dépend Aucun
de:
Doit être installé avant: IProute2 et Linux
Dépendances Aucun
facultatives:

Libffi
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend DejaGNU
de:
Doit être installé avant: Python
Dépendances Aucun
facultatives:

Libpipeline
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed et Texinfo
Requis à l'exécution: Glibc
La suite de tests dépend Check
de:
Doit être installé avant: Man-DB
Dépendances Aucun
facultatives:

277
Linux From Scratch - Version 11.3-systemd

Libtool
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed et Texinfo
Requis à l'exécution: Autoconf, Automake, Bash, Binutils, Coreutils, File, GCC, Glibc, Grep, Make et Sed
La suite de tests dépend Autoconf, Automake et Findutils
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Linux
L'installation dépend de: Bash, Bc, Binutils, Coreutils, Diffutils, Findutils, GCC, Glibc, Grep, Gzip, Kmod,
Libelf, Make, Ncurses, OpenSSL, Perl et Sed
Requis à l'exécution: Aucun
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Aucun
Dépendances cpio et LLVM (avec Clang)
facultatives:

Linux API Headers


L'installation dépend de: Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Perl et Sed
Requis à l'exécution: Aucun
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

M4
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make, Sed, et Texinfo
Requis à l'exécution: Bash et Glibc
La suite de tests dépend Diffutils
de:
Doit être installé avant: Autoconf et Bison
Dépendances libsigsegv
facultatives:

Make
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Sed et Texinfo
Requis à l'exécution: Glibc
La suite de tests dépend Perl et Procps-ng
de:
Doit être installé avant: Aucun
Dépendances Guile
facultatives:

278
Linux From Scratch - Version 11.3-systemd

Man-DB
L'installation dépend de: Bash, Binutils, Bzip2, Coreutils, Flex, GCC, GDBM, Gettext, Glibc, Grep, Groff,
Gzip, Less, Libpipeline, Make, Sed et Xz
Requis à l'exécution: Bash, GDBM, Groff, Glibc, Gzip, Less, Libpipeline et Zlib
La suite de tests dépend Util-linux
de:
Doit être installé avant: Aucun
Dépendances libseccomp et po4a
facultatives:

Man-Pages
L'installation dépend de: Bash, Coreutils et Make
Requis à l'exécution: Aucun
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

MarkupSafe
L'installation dépend de: Python
Requis à l'exécution: Python
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Jinja2
Dépendances Aucun
facultatives:

Meson
L'installation dépend de: Ninja et Python
Requis à l'exécution: Python
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Systemd
Dépendances Aucun
facultatives:

MPC
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, GMP, Make, MPFR,
Sed et Texinfo
Requis à l'exécution: Glibc, GMP et MPFR
La suite de tests dépend Aucun
de:
Doit être installé avant: GCC
Dépendances Aucun
facultatives:

279
Linux From Scratch - Version 11.3-systemd

MPFR
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, GMP, Make, Sed et
Texinfo
Requis à l'exécution: Glibc et GMP
La suite de tests dépend Aucun
de:
Doit être installé avant: Gawk et GCC
Dépendances Aucun
facultatives:

Ncurses
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Patch et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Bash, GRUB, Inetutils, Less, Procps-ng, Psmisc, Readline, Texinfo, Util-linux et Vim
Dépendances Aucun
facultatives:

Ninja
L'installation dépend de: Binutils, Coreutils, GCC et Python
Requis à l'exécution: GCC et Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: Meson
Dépendances Asciidoc, Doxygen, Emacs et re2c
facultatives:

OpenSSL
L'installation dépend de: Binutils, Coreutils, GCC, Make et Perl
Requis à l'exécution: Glibc et Perl
La suite de tests dépend Aucun
de:
Doit être installé avant: Coreutils, Kmod et Linux
Dépendances Aucun
facultatives:

Patch
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Grep, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Diffutils
de:
Doit être installé avant: Aucun
Dépendances Ed
facultatives:

280
Linux From Scratch - Version 11.3-systemd

Perl
L'installation dépend de: Bash, Binutils, Coreutils, Gawk, GCC, GDBM, Glibc, Grep, Groff, Make, Sed et Zlib
Requis à l'exécution: GDBM et Glibc
La suite de tests dépend Iana-Etc, Less et Procps-ng
de:
Doit être installé avant: Autoconf
Dépendances Berkeley DB
facultatives:

Pkg-config
L'installation dépend de: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: Kmod
Dépendances Glib2
facultatives:

Procps-ng
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Make et Ncurses
Requis à l'exécution: Glibc
La suite de tests dépend DejaGNU
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Psmisc
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, et Sed
Requis à l'exécution: Glibc et Ncurses
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Python
L'installation dépend de: Bash, Binutils, Coreutils, Expat, GCC, Gdbm, Gettext, Glibc, Grep, Libffi, Make,
Ncurses, OpenSSL, Sed et Util-linux
Requis à l'exécution: Bzip2, Expat, Gdbm, Glibc, Libffi, Ncurses, OpenSSL et Zlib
La suite de tests dépend GDB et Valgrind
de:
Doit être installé avant: Ninja
Dépendances Berkeley DB, libnsl, SQLite et Tk
facultatives:

281
Linux From Scratch - Version 11.3-systemd

Readline
L'installation dépend de: Bash, Binutils, Coreutils, Gawk, GCC, Glibc, Grep, Make, Ncurses, Patch, Sed et
Texinfo
Requis à l'exécution: Glibc et Ncurses
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Bash, Bc et Gawk
Dépendances Aucun
facultatives:

Sed
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Sed et Texinfo
Requis à l'exécution: Acl, Attr et Glibc
La suite de tests dépend Diffutils et Gawk
de:
Doit être installé avant: E2fsprogs, File, Libtool et Shadow
Dépendances Aucun
facultatives:

Shadow
L'installation dépend de: Acl, Attr, Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC, Gettext, Glibc,
Grep, Libcap, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Coreutils
Dépendances CrackLib et Linux-PAM
facultatives:

Systemd
L'installation dépend de: Acl, Attr, Bash, Binutils, Coreutils, Diffutils, Expat, Gawk, GCC, Glibc, Gperf, Grep,
Jinja2, Libcap, Meson, Sed, Util-linux et Zstd
Requis à l'exécution: Acl, Attr, Glibc, Libcap et Util-linux
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances btrfs-progs, cURL, cryptsetup, docbook-xml, docbook-xsl-nons, elfutils, Git, gnu-
facultatives: efi, GnuTLS, iptables, kexec-tools, libfido2, libgcrypt, libidn2, Libmicrohttpd,
libpwquality, libseccomp, libxkbcommon, libxslt, Linux-PAM, lxml, LZ4, make-ca,
p11-kit, PCRE2, Polkit, qemu, qrencode, quota-tools, rsync, Sphinx, tpm2-tss,
Valgrind et zsh

282
Linux From Scratch - Version 11.3-systemd

Tar
L'installation dépend de: Acl, Attr, Bash, Binutils, Bison, Coreutils, GCC, Gettext, Glibc, Grep, Inetutils,
Make, Sed et Texinfo
Requis à l'exécution: Acl, Attr, Bzip2, Glibc, Gzip et Xz
La suite de tests dépend Autoconf, Diffutils, Findutils, Gawk et Gzip
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Tcl
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make et Sed
Requis à l'exécution: Glibc et Zlib
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Texinfo
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Patch et Sed
Requis à l'exécution: Glibc et Ncurses
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Aucun
facultatives:

Util-linux
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC, Gettext, Glibc, Grep,
Make, Ncurses, Sed, Systemd et Zlib
Requis à l'exécution: Glibc, Ncurses, Readline et Zlib
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Libcap-NG, Linux-PAM et smartmontools
facultatives:

Vim
L'installation dépend de: Acl, Attr, Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Grep, Make, Ncurses et
Sed
Requis à l'exécution: Acl, Attr, Glibc, Python, Ncurses et Tcl
La suite de tests dépend Aucun
de:
Doit être installé avant: Aucun
Dépendances Xorg, GTK+2, LessTif, Ruby et GPM
facultatives:

283
Linux From Scratch - Version 11.3-systemd

wheel
L'installation dépend de: Python
Requis à l'exécution: Python
La suite de tests dépend Aucune suite de tests disponible
de:
Doit être installé avant: Jinja2
Dépendances Aucun
facultatives:

XML::Parser
L'installation dépend de: Bash, Binutils, Coreutils, Expat, GCC, Glibc, Make et Perl
Requis à l'exécution: Expat, Glibc et Perl
La suite de tests dépend Perl
de:
Doit être installé avant: Intltool
Dépendances Aucun
facultatives:

Xz
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc et Make
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: File, GRUB, Kmod, Man-DB et Systemd
Dépendances Aucun
facultatives:

Zlib
L'installation dépend de: Bash, Binutils, Coreutils, GCC, Glibc, Make et Sed
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: File, Kmod, Perl et Util-linux
Dépendances Aucun
facultatives:

Zstd
L'installation dépend de: Binutils, Coreutils, GCC, Glibc, Gzip, Make et Xz
Requis à l'exécution: Glibc
La suite de tests dépend Aucun
de:
Doit être installé avant: GCC et Systemd
Dépendances LZ4
facultatives:

284
Linux From Scratch - Version 11.3-systemd

Annexe D. Licences LFS


Ce livre est couvert par la licence Creative Commons Attribution-NonCommercial-ShareAlike 2.0.
Les instructions destinées à l'ordinateur peuvent être extraites selon les termes de la licence MIT.

D.1. Creative Commons License


Creative Commons Legal Code
Attribution-NonCommercial-ShareAlike 2.0

Important
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-
CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON
AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
ITS USE.

License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS
PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR
OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS
LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED
HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work
in its entirety in unmodified form, along with a number of other contributions, constituting separate and
independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective
Work will not be considered a Derivative Work (as defined below) for the purposes of this License.
b. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works,
such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound
recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast,
transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a
Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical
composition or sound recording, the synchronization of the Work in timed-relation with a moving image
("synching") will be considered a Derivative Work for the purpose of this License.
c. "Licensor" means the individual or entity that offers the Work under the terms of this License.
d. "Original Author" means the individual or entity who created the Work.
e. "Work" means the copyrightable work of authorship offered under the terms of this License.
f. "You" means an individual or entity exercising rights under this License who has not previously violated the
terms of this License with respect to the Work, or who has received express permission from the Licensor to
exercise rights under this License despite a previous violation.
285
Linux From Scratch - Version 11.3-systemd

g. "License Elements" means the following high-level license attributes as selected by Licensor and indicated
in the title of this License: Attribution, Noncommercial, ShareAlike.
2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair
use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other
applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide,
royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights
in the Work as stated below:
a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the
Work as incorporated in the Collective Works;
b. to create and reproduce Derivative Works;
c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means
of a digital audio transmission the Work including as incorporated in Collective Works;
d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means
of a digital audio transmission Derivative Works;
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above
rights include the right to make such modifications as are technically necessary to exercise the rights in other
media and formats. All rights not expressly granted by Licensor are hereby reserved, including but not limited
to the rights set forth in Sections 4(e) and 4(f).
4. [Link] license granted in Section 3 above is expressly made subject to and limited by the following
restrictions:
a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under
the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this
License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform,
or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the
terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense
the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties.
You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any
technological measures that control access or use of the Work in a manner inconsistent with the terms of this
License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not
require the Collective Work apart from the Work itself to be made subject to the terms of this License. If
You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove
from the Collective Work any reference to such Licensor or the Original Author, as requested. If You create
a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the
Derivative Work any reference to such Licensor or the Original Author, as requested.
b. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only
under the terms of this License, a later version of this License with the same License Elements as this License,
or a Creative Commons iCommons license that contains the same License Elements as this License (e.g.
Attribution-NonCommercial-ShareAlike 2.0 Japan). You must include a copy of, or the Uniform Resource
Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord
of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform.
You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License
or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to
this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform,
or publicly digitally perform the Derivative Work with any technological measures that control access or use

286
Linux From Scratch - Version 11.3-systemd

of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the
Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart
from the Derivative Work itself to be made subject to the terms of this License.
c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily
intended for or directed toward commercial advantage or private monetary compensation. The exchange of
the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to
be intended for or directed toward commercial advantage or private monetary compensation, provided there
is no payment of any monetary compensation in connection with the exchange of copyrighted works.
d. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative
Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original
Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym
if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably
practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work,
unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of
a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation
of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit
may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or
Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears
and in a manner at least as prominent as such other comparable authorship credit.
e. For the avoidance of doubt, where the Work is a musical composition:
i. Performance Royalties Under Blanket Licenses. Licensor reserves the exclusive right to collect, whether
individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public
performance or public digital performance (e.g. webcast) of the Work if that performance is primarily
intended for or directed toward commercial advantage or private monetary compensation.
ii. Mechanical Rights and Statutory Royalties. Licensor reserves the exclusive right to collect, whether
individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any
phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license
created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions), if Your
distribution of such cover version is primarily intended for or directed toward commercial advantage or
private monetary compensation. 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt,
where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually
or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance
(e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US
Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily
intended for or directed toward commercial advantage or private monetary compensation.
f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording,
Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society
(e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to
the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other
jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial
advantage or private monetary compensation.
5. Representations, Warranties and Disclaimer

UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR


OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS
FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR

287
Linux From Scratch - Version 11.3-systemd

OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR


NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT
WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL,
CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR
THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the
terms of this License. Individuals or entities who have received Derivative Works or Collective Works from
You under this License, however, will not have their licenses terminated provided such individuals or entities
remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of
this License.
b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the
applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at any time; provided, however that any
such election will not serve to withdraw this License (or any other license that has been, or is required to
be, granted under the terms of this License), and this License will continue in full force and effect unless
terminated as stated above.
8. Miscellaneous
a. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers
to the recipient a license to the Work on the same terms and conditions as the license granted to You under
this License.
b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a
license to the original Work on the same terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity
or enforceability of the remainder of the terms of this License, and without further action by the parties to
this agreement, such provision shall be reformed to the minimum extent necessary to make such provision
valid and enforceable.
d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver
or consent shall be in writing and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with respect to the Work licensed here.
There are no understandings, agreements or representations with respect to the Work not specified here.
Licensor shall not be bound by any additional provisions that may appear in any communication from You.
This License may not be modified without the mutual written agreement of the Licensor and You.

288
Linux From Scratch - Version 11.3-systemd

Important
Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with
the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special, incidental or consequential damages arising
in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has
expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither
party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons
without the prior written consent of Creative Commons. Any permitted use will be in compliance with
Creative Commons' then-current trademark usage guidelines, as may be published on its website or
otherwise made available upon request from time to time.
Creative Commons may be contacted at [Link]

D.2. The MIT License


Copyright © 1999-2023 Gerard Beekmans
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR
A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

289
Linux From Scratch - Version 11.3-systemd

Gawk: 184
Index outils: 64
Gawk: 184
Paquets outils: 64
GCC: 134
Acl: 128 outils, libstdc++ passe 1: 53
Attr: 127 outils, passe 1: 46
Autoconf: 163 outils, passe 2: 73
Automake: 165 GCC: 134
Bash: 149 outils, libstdc++ passe 1: 53
outils: 59 outils, passe 1: 46
Bash: 149 outils, passe 2: 73
outils: 59 GCC: 134
Bc: 114 outils, libstdc++ passe 1: 53
Binutils: 120 outils, passe 1: 46
outils, passe 1: 44 outils, passe 2: 73
outils, passe 2: 72 GCC: 134
Binutils: 120 outils, libstdc++ passe 1: 53
outils, passe 1: 44 outils, passe 1: 46
outils, passe 2: 72 outils, passe 2: 73
Binutils: 120 GDBM: 152
outils, passe 1: 44 Gettext: 145
outils, passe 2: 72 outils: 81
Bison: 147 Gettext: 145
outils: 82 outils: 81
Bison: 147 Glibc: 97
outils: 82 outils: 50
Bzip2: 105 Glibc: 97
Check: 182 outils: 50
Coreutils: 177 GMP: 123
outils: 60 Gperf: 153
Coreutils: 177 Grep: 148
outils: 60 outils: 65
D-Bus: 213 Grep: 148
DejaGNU: 119 outils: 65
Diffutils: 183 Groff: 186
outils: 61 GRUB: 189
Diffutils: 183 Gzip: 192
outils: 61 outils: 66
E2fsprogs: 225 Gzip: 192
Expat: 154 outils: 66
Expect: 118 Iana-Etc: 96
File: 110 Inetutils: 155
outils: 62 Intltool: 162
File: 110 IPRoute2: 193
outils: 62 Jinja2: 207
Findutils: 185 Kbd: 195
outils: 63 Kmod: 168
Findutils: 185 Less: 157
outils: 63 Libcap: 129
Flex: 115

290
Linux From Scratch - Version 11.3-systemd

Libelf: 170 Shadow: 130


libffi: 171 configuration: 131
Libpipeline: 197 systemd: 208
Libtool: 151 Tar: 200
Linux: 249 outils: 70
outils, en-têtes API: 49 Tar: 200
Linux: 249 outils: 70
outils, en-têtes API: 49 Tcl: 116
M4: 113 Texinfo: 201
outils: 56 temporary: 85
M4: 113 Texinfo: 201
outils: 56 temporary: 85
Make: 198 Udev
outils: 67 utilisation: 235
Make: 198 Util-linux: 220
outils: 67 outils: 86
Man-DB: 215 Util-linux: 220
Man-pages: 95 outils: 86
MarkupSafe: 206 Vim: 203
Meson: 176 wheel: 174
MPC: 126 XML::Parser: 161
MPFR: 125 Xz: 107
Ncurses: 140 outils: 71
outils: 57 Xz: 107
Ncurses: 140 outils: 71
outils: 57 Zlib: 104
Ninja: 175 zstd: 109
OpenSSL: 166
Patch: 199 Programmes
outils: 68
Patch: 199 [: 177, 178
outils: 68 2to3: 172
Perl: 158 accessdb: 215, 216
outils: 83 aclocal: 165, 165
Perl: 158 aclocal-1.16: 165, 165
outils: 83 addftinfo: 186, 186
Pkgconfig: 139 addpart: 220, 221
Procps-ng: 218 addr2line: 120, 121
Psmisc: 144 afmtodit: 186, 186
Python: 172 agetty: 220, 221
temporary: 84 apropos: 215, 216
Python: 172 ar: 120, 121
temporary: 84 as: 120, 121
Readline: 111 attr: 127, 127
Sed: 143 autoconf: 163, 163
outils: 69 autoheader: 163, 163
Sed: 143 autom4te: 163, 163
outils: 69 automake: 165, 165
Shadow: 130 automake-1.16: 165, 165
configuration: 131 autopoint: 145, 145
autoreconf: 163, 163

291
Linux From Scratch - Version 11.3-systemd

autoscan: 163, 164 chmod: 177, 178


autoupdate: 163, 164 choom: 220, 221
awk: 184, 184 chown: 177, 178
b2sum: 177, 178 chpasswd: 130, 132
badblocks: 225, 226 chroot: 177, 178
base64: 177, 178, 177, 178 chrt: 220, 221
base64: 177, 178, 177, 178 chsh: 130, 132
basename: 177, 178 chvt: 195, 196
basenc: 177, 178 cksum: 177, 178
bash: 149, 150 clear: 140, 141
bashbug: 149, 150 cmp: 183, 183
bc: 114, 114 col: 220, 221
bison: 147, 147 colcrt: 220, 221
blkdiscard: 220, 221 colrm: 220, 221
blkid: 220, 221 column: 220, 221
blkzone: 220, 221 comm: 177, 178
blockdev: 220, 221 compile_et: 225, 226
bridge: 193, 193 coredumpctl: 208, 210
bunzip2: 105, 106 corelist: 158, 159
busctl: 208, 210 cp: 177, 179
bzcat: 105, 106 cpan: 158, 159
bzcmp: 105, 106 cpp: 134, 137
bzdiff: 105, 106 csplit: 177, 179
bzegrep: 105, 106 ctrlaltdel: 220, 221
bzfgrep: 105, 106 ctstat: 193, 193
bzgrep: 105, 106 cut: 177, 179
bzip2: 105, 106 c_rehash: 166, 167
bzip2recover: 105, 106 date: 177, 179
bzless: 105, 106 dbus-cleanup-sockets: 213, 213
bzmore: 105, 106 dbus-daemon: 213, 214
c++: 134, 137 dbus-launch: 213, 214
c++filt: 120, 121 dbus-monitor: 213, 214
cal: 220, 221 dbus-run-session: 213, 214
capsh: 129, 129 dbus-send: 213, 214
captoinfo: 140, 141 dbus-test-tool: 213, 214
cat: 177, 178 dbus-update-activation-environment: 213, 214
catman: 215, 216 dbus-uuidgen: 213, 214
cc: 134, 137 dc: 114, 114
cfdisk: 220, 221 dd: 177, 179
chacl: 128, 128 deallocvt: 195, 196
chage: 130, 132 debugfs: 225, 226
chattr: 225, 226 dejagnu: 119, 119
chcon: 177, 178 delpart: 220, 221
chcpu: 220, 221 depmod: 168, 168
checkmk: 182, 182 df: 177, 179
chem: 186, 186 diff: 183, 183
chfn: 130, 132 diff3: 183, 183
chgpasswd: 130, 132 dir: 177, 179
chgrp: 177, 178 dircolors: 177, 179
chmem: 220, 221 dirname: 177, 179

292
Linux From Scratch - Version 11.3-systemd

dmesg: 220, 221 [Link]: 220, 222


dnsdomainname: 155, 156 fsck.ext2: 225, 226
du: 177, 179 fsck.ext3: 225, 226
dumpe2fs: 225, 226 fsck.ext4: 225, 226
dumpkeys: 195, 196 [Link]: 220, 222
e2freefrag: 225, 226 fsfreeze: 220, 222
e2fsck: 225, 226 fstrim: 220, 222
e2image: 225, 226 ftp: 155, 156
e2label: 225, 226 fuser: 144, 144
e2mmpstatus: 225, 226 g++: 134, 137
e2scrub: 225, 226 gawk: 184, 184
e2scrub_all: 225, 226 gawk-5.2.1: 184, 184
e2undo: 225, 226 gcc: 134, 137
e4crypt: 225, 226 gc-ar: 134, 137
e4defrag: 225, 226 gc-nm: 134, 137
echo: 177, 179 gc-ranlib: 134, 137
egrep: 148, 148 gcov: 134, 137
eject: 220, 221 gcov-dump: 134, 137
elfedit: 120, 121 gcov-tool: 134, 137
enc2xs: 158, 159 gdbmtool: 152, 152
encguess: 158, 159 gdbm_dump: 152, 152
env: 177, 179 gdbm_load: 152, 152
envsubst: 145, 145 gdiffmk: 186, 186
eqn: 186, 186 gencat: 97, 102
eqn2graph: 186, 186 genl: 193, 193
ex: 203, 205 getcap: 129, 129
expand: 177, 179 getconf: 97, 102
expect: 118, 118 getent: 97, 102
expiry: 130, 132 getfacl: 128, 128
expr: 177, 179 getfattr: 127, 127
factor: 177, 179 getkeycodes: 195, 196
faillog: 130, 132 getopt: 220, 222
fallocate: 220, 221 getpcaps: 129, 129
false: 177, 179 getsubids: 130, 132
fdisk: 220, 222 gettext: 145, 145
fgconsole: 195, 196 [Link]: 145, 145
fgrep: 148, 148 gettextize: 145, 145
file: 110, 110 glilypond: 186, 186
filefrag: 225, 226 gpasswd: 130, 132
fincore: 220, 222 gperf: 153, 153
find: 185, 185 gperl: 186, 186
findfs: 220, 222 gpinyin: 186, 186
findmnt: 220, 222 gprof: 120, 121
flex: 115, 115 gprofng: 120, 121
flex++: 115, 115 grap2graph: 186, 186
flock: 220, 222 grep: 148, 148
fmt: 177, 179 grn: 186, 187
fold: 177, 179 grodvi: 186, 187
free: 218, 218 groff: 186, 187
fsck: 220, 222 groffer: 186, 187

293
Linux From Scratch - Version 11.3-systemd

grog: 186, 187 hostnamectl: 208, 210


grolbp: 186, 187 hpftodit: 186, 187
grolj4: 186, 187 hwclock: 220, 222
gropdf: 186, 187 i386: 220, 222
grops: 186, 187 iconv: 97, 102
grotty: 186, 187 iconvconfig: 97, 102
groupadd: 130, 132 id: 177, 179
groupdel: 130, 132 idle3: 172
groupmems: 130, 132 ifconfig: 155, 156
groupmod: 130, 132 ifnames: 163, 164
groups: 177, 179 ifstat: 193, 193
grpck: 130, 132 indxbib: 186, 187
grpconv: 130, 132 info: 201, 201
grpunconv: 130, 132 infocmp: 140, 141
grub-bios-setup: 189, 190 infotocap: 140, 141
grub-editenv: 189, 190 init: 208, 210
grub-file: 189, 190 insmod: 168, 168
grub-fstest: 189, 190 install: 177, 179
grub-glue-efi: 189, 190 install-info: 201, 201
grub-install: 189, 190 instmodsh: 158, 159
grub-kbdcomp: 189, 190 intltool-extract: 162, 162
grub-macbless: 189, 190 intltool-merge: 162, 162
grub-menulst2cfg: 189, 190 intltool-prepare: 162, 162
grub-mkconfig: 189, 190 intltool-update: 162, 162
grub-mkimage: 189, 190 intltoolize: 162, 162
grub-mklayout: 189, 190 ionice: 220, 222
grub-mknetdir: 189, 190 ip: 193, 193
grub-mkpasswd-pbkdf2: 189, 190 ipcmk: 220, 222
grub-mkrelpath: 189, 190 ipcrm: 220, 222
grub-mkrescue: 189, 190 ipcs: 220, 222
grub-mkstandalone: 189, 190 irqtop: 220, 222
grub-ofpathname: 189, 190 isosize: 220, 222
grub-probe: 189, 190 join: 177, 179
grub-reboot: 189, 190 journalctl: 208, 210
grub-render-label: 189, 190 json_pp: 158, 159
grub-script-check: 189, 190 kbdinfo: 195, 196
grub-set-default: 189, 190 kbdrate: 195, 196
grub-setup: 189, 191 kbd_mode: 195, 196
grub-syslinux2cfg: 189, 191 kernel-install: 208, 210
gunzip: 192, 192 kill: 220, 222
gzexe: 192, 192 killall: 144, 144
gzip: 192, 192 kmod: 168, 168
h2ph: 158, 159 last: 220, 222
h2xs: 158, 159 lastb: 220, 222
halt: 208, 210 lastlog: 130, 132
hardlink: 220, 222 ld: 120, 121
head: 177, 179 [Link]: 120, 122
hexdump: 220, 222 [Link]: 120, 122
hostid: 177, 179 ldattach: 220, 222
hostname: 155, 156 ldconfig: 97, 102

294
Linux From Scratch - Version 11.3-systemd

ldd: 97, 102 lzdiff: 107, 107


lddlibc4: 97, 102 lzegrep: 107, 107
less: 157, 157 lzfgrep: 107, 107
lessecho: 157, 157 lzgrep: 107, 107
lesskey: 157, 157 lzless: 107, 107
lex: 115, 115 lzma: 107, 107
lexgrog: 215, 216 lzmadec: 107, 107
lfskernel-6.1.11: 249, 253 lzmainfo: 107, 107
libasan: 134, 138 lzmore: 107, 107
libatomic: 134, 138 m4: 113, 113
libcc1: 134, 138 machinectl: 208, 210
libnetcfg: 158, 159 make: 198, 198
libtool: 151, 151 makedb: 97, 102
libtoolize: 151, 151 makeinfo: 201, 202
link: 177, 179 man: 215, 216
linux32: 220, 222 man-recode: 215, 217
linux64: 220, 222 mandb: 215, 217
lkbib: 186, 187 manpath: 215, 217
ln: 177, 179 mapscrn: 195, 196
lnstat: 193, 194 mcookie: 220, 223
loadkeys: 195, 196 md5sum: 177, 179
loadunimap: 195, 196 mesg: 220, 223
locale: 97, 102 meson: 176, 176
localectl: 208, 210 mkdir: 177, 179
localedef: 97, 102 mke2fs: 225, 227
locate: 185, 185 mkfifo: 177, 179
logger: 220, 222 mkfs: 220, 223
login: 130, 132 [Link]: 220, 223
loginctl: 208, 210 [Link]: 220, 223
logname: 177, 179 mkfs.ext2: 225, 227
logoutd: 130, 132 mkfs.ext3: 225, 227
logsave: 225, 227 mkfs.ext4: 225, 227
look: 220, 222 [Link]: 220, 223
lookbib: 186, 187 mklost+found: 225, 227
losetup: 220, 222 mknod: 177, 179
ls: 177, 179 mkswap: 220, 223
lsattr: 225, 227 mktemp: 177, 180
lsblk: 220, 222 mk_cmds: 225, 227
lscpu: 220, 222 mmroff: 186, 187
lsfd: 220, 222 modinfo: 168, 169
lsipc: 220, 222 modprobe: 168, 169
lsirq: 220, 223 more: 220, 223
lslocks: 220, 223 mount: 220, 223
lslogins: 220, 223 mountpoint: 220, 223
lsmem: 220, 223 msgattrib: 145, 145
lsmod: 168, 168 msgcat: 145, 145
lsns: 220, 223 msgcmp: 145, 145
lto-dump: 134, 138 msgcomm: 145, 146
lzcat: 107, 107 msgconv: 145, 146
lzcmp: 107, 107 msgen: 145, 146

295
Linux From Scratch - Version 11.3-systemd

msgexec: 145, 146 perldoc: 158, 159


msgfilter: 145, 146 perlivp: 158, 159
msgfmt: 145, 146 perlthanks: 158, 159
msggrep: 145, 146 pfbtops: 186, 187
msginit: 145, 146 pgrep: 218, 218
msgmerge: 145, 146 pic: 186, 187
msgunfmt: 145, 146 pic2graph: 186, 187
msguniq: 145, 146 piconv: 158, 159
mtrace: 97, 102 pidof: 218, 218
mv: 177, 180 ping: 155, 156
namei: 220, 223 ping6: 155, 156
ncursesw6-config: 140, 141 pinky: 177, 180
neqn: 186, 187 pip3: 172
networkctl: 208, 211 pivot_root: 220, 223
newgidmap: 130, 132 pkg-config: 139, 139
newgrp: 130, 132 pkill: 218, 218
newuidmap: 130, 132 pl2pm: 158, 159
newusers: 130, 132 pldd: 97, 102
ngettext: 145, 146 pmap: 218, 218
nice: 177, 180 pod2html: 158, 159
ninja: 175, 175 pod2man: 158, 159
nl: 177, 180 pod2texi: 201, 202
nm: 120, 122 pod2text: 158, 159
nohup: 177, 180 pod2usage: 158, 160
nologin: 130, 132 podchecker: 158, 160
nproc: 177, 180 podselect: 158, 160
nroff: 186, 187 portablectl: 208, 211
nscd: 97, 102 post-grohtml: 186, 187
nsenter: 220, 223 poweroff: 208, 211
nstat: 193, 194 pr: 177, 180
numfmt: 177, 180 pre-grohtml: 186, 187
objcopy: 120, 122 preconv: 186, 187
objdump: 120, 122 printenv: 177, 180
od: 177, 180 printf: 177, 180
oomctl: 208, 211 prlimit: 220, 223
openssl: 166, 167 prove: 158, 160
openvt: 195, 196 prtstat: 144, 144
partx: 220, 223 ps: 218, 218
passwd: 130, 133 psfaddtable: 195, 196
paste: 177, 180 psfgettable: 195, 196
patch: 199, 199 psfstriptable: 195, 196
pathchk: 177, 180 psfxtable: 195, 196
pcprofiledump: 97, 102 pslog: 144, 144
pdfmom: 186, 187 pstree: 144, 144
pdfroff: 186, 187 pstree.x11: 144, 144
pdftexi2dvi: 201, 202 ptar: 158, 160
peekfd: 144, 144 ptardiff: 158, 160
perl: 158, 159 ptargrep: 158, 160
perl5.36.0: 158, 159 ptx: 177, 180
perlbug: 158, 159 pwck: 130, 133

296
Linux From Scratch - Version 11.3-systemd

pwconv: 130, 133 setcap: 129, 129


pwd: 177, 180 setfacl: 128, 128
pwdx: 218, 218 setfattr: 127, 127
pwunconv: 130, 133 setfont: 195, 196
pydoc3: 172 setkeycodes: 195, 196
python3: 172 setleds: 195, 196
ranlib: 120, 122 setmetamode: 195, 196
readelf: 120, 122 setsid: 220, 223
readlink: 177, 180 setterm: 220, 223
readprofile: 220, 223 setvtrgb: 195, 196
realpath: 177, 180 sfdisk: 220, 223
reboot: 208, 211 sg: 130, 133
recode-sr-latin: 145, 146 sh: 149, 150
refer: 186, 187 sha1sum: 177, 180
rename: 220, 223 sha224sum: 177, 180
renice: 220, 223 sha256sum: 177, 180
reset: 140, 141 sha384sum: 177, 180
resize2fs: 225, 227 sha512sum: 177, 180
resizepart: 220, 223 shasum: 158, 160
resolvconf: 208, 211 showconsolefont: 195, 196
resolvectl: 208, 211 showkey: 195, 196
rev: 220, 223 shred: 177, 180
rkfill: 220, 223 shuf: 177, 180
rm: 177, 180 shutdown: 208, 211
rmdir: 177, 180 size: 120, 122
rmmod: 168, 169 slabtop: 218, 218
roff2dvi: 186, 188 sleep: 177, 180
roff2html: 186, 188 sln: 97, 102
roff2pdf: 186, 188 soelim: 186, 188
roff2ps: 186, 188 sort: 177, 180
roff2text: 186, 188 sotruss: 97, 102
roff2x: 186, 188 splain: 158, 160
routel: 193, 194 split: 177, 180
rtacct: 193, 194 sprof: 97, 102
rtcwake: 220, 223 ss: 193, 194
rtmon: 193, 194 stat: 177, 180
rtpr: 193, 194 stdbuf: 177, 180
rtstat: 193, 194 strings: 120, 122
runcon: 177, 180 strip: 120, 122
runlevel: 208, 211 stty: 177, 180
runtest: 119, 119 su: 130, 133
rview: 203, 205 sulogin: 220, 223
rvim: 203, 205 sum: 177, 180
script: 220, 223 swaplabel: 220, 224
scriptlive: 220, 223 swapoff: 220, 224
scriptreplay: 220, 223 swapon: 220, 224
sdiff: 183, 183 switch_root: 220, 224
sed: 143, 143 sync: 177, 181
seq: 177, 180 sysctl: 218, 218
setarch: 220, 223 systemctl: 208, 211

297
Linux From Scratch - Version 11.3-systemd

systemd-analyze: 208, 211 toe: 140, 142


systemd-ask-password: 208, 211 top: 218, 219
systemd-cat: 208, 211 touch: 177, 181
systemd-cgls: 208, 211 tput: 140, 142
systemd-cgtop: 208, 211 tr: 177, 181
systemd-creds: 208, 211 traceroute: 155, 156
systemd-delta: 208, 211 troff: 186, 188
systemd-detect-virt: 208, 211 true: 177, 181
systemd-dissect: 208, 211 truncate: 177, 181
systemd-escape: 208, 211 tset: 140, 142
systemd-hwdb: 208, 211 tsort: 177, 181
systemd-id128: 208, 211 tty: 177, 181
systemd-inhibit: 208, 211 tune2fs: 225, 227
systemd-machine-id-setup: 208, 212 tzselect: 97, 102
systemd-mount: 208, 212 uclampset: 220, 224
systemd-notify: 208, 212 udevadm: 208, 212
systemd-nspawn: 208, 212 ul: 220, 224
systemd-path: 208, 212 umount: 220, 224
systemd-repart: 208, 212 uname: 177, 181
systemd-resolve: 208, 212 uname26: 220, 224
systemd-run: 208, 212 uncompress: 192, 192
systemd-socket-activate: 208, 212 unexpand: 177, 181
systemd-sysext: 208, 212 unicode_start: 195, 196
systemd-tmpfiles: 208, 212 unicode_stop: 195, 196
systemd-tty-ask-password-agent: 208, 212 uniq: 177, 181
systemd-umount: 208, 212 unlink: 177, 181
tabs: 140, 142 unlzma: 107, 107
tac: 177, 181 unshare: 220, 224
tail: 177, 181 unxz: 107, 108
talk: 155, 156 updatedb: 185, 185
tar: 200, 200 uptime: 218, 219
taskset: 220, 224 useradd: 130, 133
tbl: 186, 188 userdel: 130, 133
tc: 193, 194 usermod: 130, 133
tclsh: 116, 117 users: 177, 181
tclsh8.6: 116, 117 utmpdump: 220, 224
tee: 177, 181 uuidd: 220, 224
telinit: 208, 212 uuidgen: 220, 224
telnet: 155, 156 uuidparse: 220, 224
test: 177, 181 vdir: 177, 181
texi2dvi: 201, 202 vi: 203, 205
texi2pdf: 201, 202 view: 203, 205
texi2any: 201, 202 vigr: 130, 133
texindex: 201, 202 vim: 203, 205
tfmtodit: 186, 188 vimdiff: 203, 205
tftp: 155, 156 vimtutor: 203, 205
tic: 140, 142 vipw: 130, 133
timedatectl: 208, 212 vmstat: 218, 219
timeout: 177, 181 w: 218, 219
tload: 218, 219 wall: 220, 224

298
Linux From Scratch - Version 11.3-systemd

watch: 218, 219 libanl: 97, 102


wc: 177, 181 libasprintf: 145, 146
wdctl: 220, 224 libattr: 127, 127
whatis: 215, 217 libbfd: 120, 122
wheel: 174 libblkid: 220, 224
whereis: 220, 224 libBrokenLocale: 97, 102
who: 177, 181 libbz2: 105, 106
whoami: 177, 181 libc: 97, 102
wipefs: 220, 224 libcap: 129, 129
x86_64: 220, 224 libcheck: 182, 182
xargs: 185, 185 libcom_err: 225, 227
xgettext: 145, 146 libcrypt: 97, 102
xmlwf: 154, 154 [Link]: 166, 167
xsubpp: 158, 160 libctf: 120, 122
xtrace: 97, 102 libctf-nobfd: 120, 122
xxd: 203, 205 libcursesw: 140, 142
xz: 107, 108 libc_malloc_debug: 97, 102
xzcat: 107, 108 libdbus-1: 213, 214
xzcmp: 107, 108 libdl: 97, 102
xzdec: 107, 108 libe2p: 225, 227
xzdiff: 107, 108 libelf: 170, 170
xzegrep: 107, 108 libexpat: 154, 154
xzfgrep: 107, 108 libexpect-5.45.4: 118, 118
xzgrep: 107, 108 libext2fs: 225, 227
xzless: 107, 108 libfdisk: 220, 224
xzmore: 107, 108 libffi: 171
yacc: 147, 147 libfl: 115, 115
yes: 177, 181 libformw: 140, 142
zcat: 192, 192 libg: 97, 102
zcmp: 192, 192 libgcc: 134, 138
zdiff: 192, 192 libgcov: 134, 138
zdump: 97, 102 libgdbm: 152, 152
zegrep: 192, 192 libgdbm_compat: 152, 152
zfgrep: 192, 192 libgettextlib: 145, 146
zforce: 192, 192 libgettextpo: 145, 146
zgrep: 192, 192 libgettextsrc: 145, 146
zic: 97, 102 libgmp: 123, 124
zipdetails: 158, 160 libgmpxx: 123, 124
zless: 192, 192 libgomp: 134, 138
zmore: 192, 192 libhistory: 111, 111
znew: 192, 192 libitm: 134, 138
zramctl: 220, 224 libkmod: 168
zstd: 109, 109 liblsan: 134, 138
zstdgrep: 109, 109 libltdl: 151, 151
zstdless: 109, 109 liblto_plugin: 134, 138
liblzma: 107, 108
Bibliothèques libm: 97, 102
libmagic: 110, 110
Expat: 161, 161 libman: 215, 217
[Link]: 97, 102 libmandb: 215, 217
libacl: 128, 128

299
Linux From Scratch - Version 11.3-systemd

libmcheck: 97, 103 console


libmemusage: 97, 103 configuration: 239
libmenuw: 140, 142 hostname
libmount: 220, 224 configuration: 234
libmpc: 126, 126 localnet
libmpfr: 125, 125 /etc/hosts: 234
libmvec: 97, 103 network
libncurses++w: 140, 142 /etc/hosts: 234
libncursesw: 140, 142 configuration: 231
libnsl: 97, 103 network
libnss_*: 97, 103 /etc/hosts: 234
libopcodes: 120, 122 configuration: 231
libpanelw: 140, 142 dwp: 120, 121
libpcprofile: 97, 103
libpipeline: 197 Autres
libproc-2: 218, 219
libpsx: 129, 129 /boot/config-6.1.11: 249, 253
libpthread: 97, 103 /boot/[Link]-6.1.11: 249, 254
libquadmath: 134, 138 /dev/*: 75
libreadline: 111, 112 /etc/fstab: 247
libresolv: 97, 103 /etc/group: 78
librt: 97, 103 /etc/hosts: 234
libsframe: 120, 122 /etc/inputrc: 242
libsmartcols: 220, 224 /etc/[Link]: 101
libss: 225, 227 /etc/lfs-release: 258
[Link]: 166, 167 /etc/localtime: 100
libssp: 134, 138 /etc/lsb-release: 258
libstdbuf: 177, 181 /etc/[Link]: 226
libstdc++: 134, 138 /etc/modprobe.d/[Link]: 253
libstdc++fs: 134, 138 /etc/[Link]: 100
libsubid: 130, 133 /etc/os-release: 258
libsupc++: 134, 138 /etc/passwd: 78
libsystemd: 208, 212 /etc/protocols: 96
[Link]: 116, 117 /etc/[Link]: 233
libtclstub8.6.a: 116, 117 /etc/services: 96
libtextstyle: 145, 146 /etc/vimrc: 204
libthread_db: 97, 103 /run/utmp: 78
libtsan: 134, 138 /usr/include/asm-generic/*.h: 49, 49
libubsan: 134, 138 /usr/include/asm/*.h: 49, 49
libudev: 208, 212 /usr/include/drm/*.h: 49, 49
libutil: 97, 103 /usr/include/linux/*.h: 49, 49
libuuid: 220, 224 /usr/include/misc/*.h: 49, 49
liby: 147, 147 /usr/include/mtd/*.h: 49, 49
libz: 104, 104 /usr/include/rdma/*.h: 49, 49
libzstd: 109, 109 /usr/include/scsi/*.h: 49, 49
preloadable_libintl: 145, 146 /usr/include/sound/*.h: 49, 49
/usr/include/video/*.h: 49, 49
Scripts /usr/include/xen/*.h: 49, 49
/var/log/btmp: 78
clock /var/log/lastlog: 78
configuration: 238 /var/log/wtmp: 78

300
Linux From Scratch - Version 11.3-systemd

/etc/[Link]: 241
/etc/shells: 243
man pages: 95, 95
Personnalisation de Systemd: 244

301

Vous aimerez peut-être aussi