Linux From Sratch Gerard Beekmans Version 2.2, 3 avril 2000 Ce document décrit comment créer de toute pièce un système Linux à partir des sources des applications et d'une distribution déjà installée. ______________________________________________________________________ Table des matières 1. Introduction 1.1 De quoi s'agit-il ? 1.2 Mises à jour 1.3 Historique de ce document 1.4 Listes de diffusion 1.4.1 Inscription 1.4.2 Résilier une inscription 1.5 Contact 2. Conventions utilisées dans ce document 2.1 A propos de $LFS 2.2 Comment télécharger les applications 2.3 Comment installer les applications 3. Les paquetages que vous devez télécharger 3.1 Applications indispensables 3.2 Applications facultatives 4. Préparer le nouveau système 4.1 Comment allons-nous procéder 4.2 Créer une nouvelle partition 4.3 Créer un système de fichiers 4.4 Monter la nouvelle partition 4.5 Créer les répertoire 4.6 Copier le répertoire 5. Rendre le système LFS amorçable 5.1 Installer Sysvinit 5.2 Configurer Sysvinit 5.3 Créer les fichiers passwd et group 5.4 Installer le shell Bash 5.5 Ajouter une entrée à LILO 5.6 Tester le système 6. Installer un noyau 6.1 Remarque au sujet de ftp.kernel.org 6.2 Configurer le noyau 6.3 Mettre à jour LILO 6.4 Tester le système 7. Installer les applications de base 7.1 A propos des symboles de débogage 7.2 Préparer le système LFS pour installer les applications de base 7.2.1 Installer Binutils 7.2.2 Installer Bzip2 7.2.3 Installer Diffutils 7.2.4 Installer Fileutils 7.2.5 Installer GCC sur le système normal si nécessaire 7.2.6 Installer GCC sur le système LFS 7.2.6.1 Création des liens symboliques nécessaires 7.2.7 Installer Glibc 7.2.7.1 Copier les anciens fichiers de la bibliothèque NSS 7.2.8 Installer grep 7.2.9 Installer gzip 7.2.10 Installer Make 7.2.11 Installer Sed 7.2.12 Installer Sh-utils 7.2.13 Installer Tar 7.2.14 Installer Textutils 7.2.15 Installer Util-linux 7.3 Installer les applications de base 7.3.1 Remonter la partition et activer le swap 7.3.2 Installer GCC 7.3.3 Installer Bison 7.3.4 Installer Mawk 7.3.5 Installer Findutils 7.3.6 Installer Termcap 7.3.7 Installer Ncurses 7.3.8 Installer Less 7.3.9 Installer Perl 7.3.10 Installer M4 7.3.11 Installer Texinfo 7.3.12 Installer Autoconf 7.3.13 Installer Automake 7.3.14 Installer Bash 7.3.15 Installer Flex 7.3.16 Installer Binutils 7.3.17 Installer Bzip2 7.3.18 Installer Diffutils 7.3.19 Installer E2fsprogs 7.3.20 Installer File 7.3.21 Installer Fileutils 7.3.22 Installer Grep 7.3.23 Installer Groff 7.3.24 Installer Gzip 7.3.25 Installer Ld.so 7.3.26 Installer Libtool 7.3.27 Installer Linux86 7.3.28 Installer Lilo 7.3.29 Installer Make 7.3.30 Installer Sh-Utils 7.3.31 Installer Shadow Password Suite 7.3.32 Installer Man 7.3.33 Installer Modutils 7.3.34 Installer Procinfo 7.3.35 Installer Procps 7.3.36 Installer Psmisc 7.3.37 Installer Sed 7.3.38 Installer le démon start-stop 7.3.39 Installer Sysklogd 7.3.40 Installer Sysvinit 7.3.41 Install Tar 7.3.42 Installer Textutils 7.3.43 Installer Vim 7.3.44 Installer Util-linux 7.4 Suppression des anciens fichiers de la bibliothèque NSS 7.5 Configurer les applications 7.5.1 Configurer Glib 7.5.2 Configurer LILO 7.5.3 Configurer Sysklogd 7.5.4 Configurer Shadow Password Suite 7.5.5 Configurer Sysvinit 7.5.6 Créer le fichier 8. Créez les scripts de démarrage du système 8.1 Préparer les répertoires et les fichiers principaux 8.2 Créer le script de redémarrage 8.3 Créer le script d'arrêt 8.4 Créer le script 8.5 Créer le script 8.6 Créer le script 8.7 Créer le script de démarrage 8.8 Créer le script de démarrage 8.9 Créer les liens symboliques et fixer les permissions 8.10 Créer le fichier 9. Configurer la base du réseau 9.1 Installer Netkit-base 9.2 Installer Net-tools 9.2.1 Créer le script de démarrage 9.2.2 Paramétrer les permissions et les liens symboliques 9.2.3 Créer le fichier 9.2.4 Créez le fichier 9.2.5 Créer le fichier 9.2.6 Paramétrer les permissions et liens symboliques pour 9.2.7 Tester la configuration du réseau 9.3 Tester le système 10. Installer les démons réseau 10.1 Configurer SMTP 10.1.1 Créer les groupes et utilisateurs 10.1.2 Créer les répertoires 10.1.3 Installer Sendmail 10.1.4 Configuring Sendmail 10.1.5 Installer Procmail 10.1.6 Créer le script de démarrage 10.1.7 Paramétrer les permissions et liens symboliques 10.2 Configurer FTP 10.2.1 Créer les groupes et utilisateurs 10.2.2 Installer Proftpd 10.2.3 Créer le script de démarrage 10.2.4 Paramétrer les permissions et les liens symboliques 10.3 Configurer HTTP 10.3.1 Installer Apache 10.3.2 Configurer Apache 10.3.3 Créer le script de démarrage 10.3.4 Paramétrer les permissions et liens symboliques 10.4 Configurer Telnet 10.4.1 Installer le démon et le client telnet 10.4.2 Créer le fichier de configuration 10.4.3 Créer le script de démarrage 10.4.4 Paramétrer les permissions et liens symboliques 10.5 Configurer PPP 10.5.1 Configurer le noyau 10.5.2 Créer le groupe 10.5.3 Installer PPP 10.5.4 Créer le fichier 10.5.5 Créer le fichier 10.5.6 Créer le fichier 10.5.7 Remarque concernant l'authentification des mots de passe 11. Installer les clients réseau 11.1 Installer les clients Email 11.1.1 Installer Mailx 11.1.2 Installer Mutt 11.1.3 Installer Fetchmail 11.1.4 Tester le système email 11.2 Installer le client FTP 11.2.1 Installer Netkit-ftp 11.2.2 Tester le système FTP 11.3 Installer le client HTTP 11.3.1 Installer Zlib 11.3.2 Installer Lynx 11.3.3 Tester le système HTTP 11.4 Installer le client Telnet 11.4.1 Tester le système Telnet 11.5 Installer les clients PPP 11.5.1 Créer le script de connexion 11.5.2 Créer le script de déconnexion 11.5.3 Tester le système PPP 12. Installer le système X Window 12.1 Installer X 12.2 Créer 12.3 Créer le lien symbolique 12.4 Créer le lien symbolique 12.5 Ajouter 12.6 Configurer X 12.7 Tester X 12.8 Installer Window Maker 12.9 Préparer le système pour l'installation de Window Maker 12.9.1 Installer libPropList 12.9.2 Installer libXpm 12.9.3 Installer libpng 12.9.4 Installer libtiff 12.9.5 Installer libjpeg 12.9.6 Installer libungif 12.9.7 Installer WindowMaker 12.10 Mettre à jour le cache du chargeur dynamique 12.11 Configurer Window Maker 12.12 Tester Window Maker 13. Ressources 13.1 Livres 13.2 HOWTOs 13.3 Autre 14. La Fin 15. Copyright & information de licence ______________________________________________________________________ 11.. IInnttrroodduuccttiioonn 11..11.. DDee qquuooii ss''aaggiitt--iill ?? J'ai utilisé de nombreuses distributions Linux différentes, toutefois aucune d'elles ne m'a jamais vraiment satisfait. Parfois l'agencement des scripts de démarrage ne me convenait pas, parfois la configuration par défaut des programmes n'était pas à mon goût. J'en suis venu à penser que je ne serai jamais complètement satisfait par un système Linux tant que je n'en construirais pas un moi-même. L'idéal était de partir uniquement des fichiers sources de chaque application et donc de n'utiliser aucun paquetage préconstruit ni disquette ou CDROM installant un système de base. A première vue, cette idée semblait saugrenue, voire presque irréalisable. La plupart des problèmes qui freinaient ma progression venaient de mon manque de connaissances au sujet de certains programmes et mécanismes. Ainsi après avoir rencontré et résolu tous les problèmes liés à la dépendance, à la compilation, etc, je parvins à mettre en place un système Linux opérationnel. J'ai nommé alors ce système LFS, qui signifie en anglais Linux From Scratch (NDT : approximativement "Linux de Zéro"). En pratique, nous mettrons en place ce système idéal à partir d'une distribution Linux déjà en place . 11..22.. MMiisseess àà jjoouurr La dernière version anglaise de ce document est disponible à tout moment à l'adresse : http://www.linuxfromscratch.org 11..33.. HHiissttoorriiqquuee ddee ccee ddooccuummeenntt 2.1.5 - 26 mars 2000 Il ne s'agit pas d'une liste exhaustive des modifications. Comme la version 2.0 est une mise à jour majeure, seuls les changements majeurs sont mentionnés. · Modification de la structure de l'arborescence - LFS est conforme à la norme FHS. Peut-être pas à 100%. · Nouvelle méthode d'installation de la Glibc · Nouvelle méthode d'installation de GCC · Suppression de l'utilisation de paquetages préconstruits Debian. · Méthode d'installation des applications complètement révisée - élimination de la nécessité d'utiliser des paquetages liés statiquement dans le chapitre 6.1. · Divers bogues corrigés concernant l'installation des applications · Quelques programmes supplémentaires du paquetage util-linux installés · Ajout de l'installation du programme Bzip2 · Explications plus détaillées concernant $LFS - ce qu'il faut et ce qu'il ne faut pas faire. · Procédure d'installation simplifiée pour tous les paquetages des chapitres 5 à 9.1 · Installation de la Glibc et de GCC, possédant jusqu'à présent leur propre chapitre, incluse dans le chapitre 7. · Chapitre concernant les serveurs Internet modifié : création de deux chapitres : Démons Réseau et Clients Réseau. Le chapitre concernant Internet a été partagé entre ceux-ci. · Echange des chapitres 13 et 14 (X et Internet) et concaténation des chapitres concernant X et WindowMaker. · Un nouveau programme Man est utilisé. Il est plus facile à manipuler et à configurer que le man-db utilisé précédemment. Les deux versions réalisent sensiblement le même travail. · Ajout du chapitre 13 : les ressources. Ce chapitre contient les références de nombreux livres et HOWTOs qui vous seront utilisés au cours ou au terme de la construction du système LFS. · Chapitre 3 : lien bzip2 corrigé · Chapitre 7.2.42 : méthode d'installation d'Util-Linux simplifiée. · Chapitre 3.1 : emplacement de procps modifié · Chapitre 7.2 : échange de l'installation de Vim et d'Util-Linux (car nous avons besoin d'un éditeur de textes pour installer Util- Linux) · Chapitre 7.3.33: installation de procps corrigée · Chapitre 5.2: fichier inittab modifié de manière à ce que le système ne signale plus de fichiers manquants au démarrage de la machine. · Chapitre 6: réécriture de l'installation du noyau · Chapitre 10.3: Script de démarrage d'Apache modifié · Chapitre 10.3.2: section concernant la modification du fichier httpd.conf supprimée. Elle n'est plus nécessaire. Ajout des fichiers de /usr/apache/man dans le fichier /usr/share/misc/man.conf. · Chapitre 11.1: Correction du fichier Makefile du paquetage mailx afin de simplifier la procédure d'installation. · Chapitre 11.3.1: Ajout de l'option --shared lors de l'exécution de configure afin que la Zlib soit installée comme une bibliothèque dynamique plutôt que statique. · Chapitre 11.6: Lynx lié à la bibliothèque Ncurses plutôt que Slang. · Chapitre 12: Le fichier man_db.config de la nouvelle application man-db contient toujours le répertoire X11/man. 2.2 - 3 avril 2000 · Les domaines linuxfromscratch.org et linuxfromscratch.com sont opérationnels. Tous les liens vers huizen.dds.nl/glb et tts.ookhio.dds.nl ont été remplacés par les liens appropriés vers www.linuxfromscratch.org. · Après le redémarrage de la machine au chapitre 7.3, la partition swap est activée avant de commencer à compiler les applications. 11..44.. LLiisstteess ddee ddiiffffuussiioonn Il existe deux listes auxquelles vous pouvez vous inscrire : lfs- discuss et lfs-announce. La première est une liste publique non modérée concernant tout ce qui a trait à ce document. La seconde est une liste publique modérée. Tout le monde peut s'y inscrire mais personne ne peut y poster de message, à l'exception des modérateurs. Cette liste est principalement dédiée aux annonces de nouvelles versions de ce document. Si vous êtes inscrits à la liste de diffusion lfs-discuss, vous n'avez pas besoin de vous inscrire à lfs-announce. En effet, tout ce qui est envoyé sur la liste lfs-announce est également envoyé sur lfs-discuss. 11..44..11.. IInnssccrriippttiioonn Pour vous inscrire à une liste, envoyez un email, dont le corps contient soit _s_u_b_s_c_r_i_b_e _l_f_s_-_d_i_s_c_u_s_s, soit _s_u_b_s_c_r_i_b_e _l_f_s_-_a_n_n_o_u_n_c_e_, à mailto:majordomo@fist.org Majordomo vous enverra une demande de confirmation. Celle-ci contiendra un code d'authentification et la marche à suivre pour poursuivre la demande d'inscription. Une fois que vous aurez répondu à ce mail, vous serez alors inscrit à la liste. 11..44..22.. RRééssiilliieerr uunnee iinnssccrriippttiioonn Pour résilier votre inscription à une liste, envoyez un email, dont le corps contient soit _u_n_s_u_b_s_c_r_i_b_e _l_f_s_-_d_i_s_c_u_s_s soit _u_n_s_u_b_s_c_r_i_b_e _l_f_s_- _a_n_n_o_u_n_c_e à l'adresse suivante : mailto:majordomo@fist.org 11..55.. CCoonnttaacctt Envoyez de préférence toutes vos questions à la liste de diffusion. Si vous avez besoin de me contacter personnellement, envoyez un mail à l'adresse suivante : mailto:gerard@linuxfromscratch.org 22.. CCoonnvveennttiioonnss uuttiilliissééeess ddaannss ccee ddooccuummeenntt 22..11.. AA pprrooppooss ddee $$LLFFSS Lisez ce qui suit attentivement : tout au long de ce document, vous rencontrerez fréquemment des références à une variable dont le nom est $LFS. Celle-ci doit être systématiquement remplacée par le point de montage de la partition sur laquelle vous créez votre système LFS. La façon de créer et de monter cette partition sera expliquée en détail au chapitre 4. Dans mon cas, j'utilise le répertoire /mnt/hda5 comme point de montage pour la partition LFS. Ainsi toutes les occurrences de $LFS de ce document sont à remplacer par /mnt/hda5. Donc si je lis la commande : cp inittab $LFS/etc, je taperai en réalité cp inittab /mnt/hda5/etc Vous devez effectuer cette substitution quel que soit l'endroit où vous rencontrez $LFS, que ce soit dans une commande, ou dans un fichier que vous devez créer ou éditer. Il existe une deuxième méthode qui consiste à définir la variable d'environnement $LFS. De cette manière, vous tapez les commandes comportant une référence à $LFS telles quelles et le shell procédera à la substitution lui-même. Pour définir $LFS, utilisez la commande : export LFS=/mnt/hda5 Dans ce cas, vous saisissez sans modification la commande cp inittab $LFS/etc rencontrée dans ce document et le shell exécutera en réalité cp inittab /mnt/hda5/etc . Si vous utilisez cette méthode, il est très important que la variable d'environnement $LFS soit toujours déclarée. Si ce n'est pas le cas, les occurrences de $LFS présentes dans les commandes que vous taperez seront ignorées et le reste sera exécuté. Ainsi la commande cp inittab $LFS/etc sera traduite par le shell en cp inittab /etc avec pour conséquence d'écraser le fichier inittab de votre système Linux. Un fichier comme inittab n'est pas très difficile à reconstruire, mais imaginez ce qui se passera si $LFS n'est pas défini au cours de l'installation de la bibliothèque C. Vous endommagerez gravement votre système et à moins que vous ne soyez un expert Linux, vous serez obligé de tout réinstaller. Je vous conseille donc d'utiliser la méthode de substitution manuelle. Ainsi au pire, si vous vous trompez en saisissant le nom du point de montage de votre partition LFS, le système renverra une erreur du type "_n_o _s_u_c_h _f_i_l_e _o_r _d_i_r_e_c_t_o_r_y" sans aucun dommage pour votre système. Ne dites pas que je ne vous ai pas prévenu ;-) 22..22.. CCoommmmeenntt ttéélléécchhaarrggeerr lleess aapppplliiccaattiioonnss Tout au long de ce document, je supposerai que vous avez enregistré tous les paquetages que vous avez téléchargé dans un sous-répertoire de $LFS/usr/src. J'utilise par convention le répertoire $LFS/usr/src/sources. "sources" contient les répertoires 0 à 9 et a à z. Ainsi le paquetage Sysvinit-2.78.tar.gz est sauvegardé dans $LFS/usr/sources/s/ , tandis que bash-3.02.tar.gz se trouve dans $LFS/usr/src/sources/b/ . Vous n'êtes pas obligé de suivre ce modèle, ce n'est qu'un exemple. Il est par contre préférable de ne pas conserver de paquetages dans $LFS/usr/src car ce répertoire servira à décompresser les archives au fur et à mesure que nous en aurons besoin. Le prochain chapitre contient la liste des paquetages que vous devez télécharger. A ce point du document, la partition destinée à recevoir le système LFS n'existe pas. Vous devez donc sauvegarder ces paquetages dans un endroit temporaire et vous rappelez de les copier de cet endroit vers $LFS/usr/src/ au terme du chapitre 4. 22..33.. CCoommmmeenntt iinnssttaalllleerr lleess aapppplliiccaattiioonnss Avant de pouvoir faire quelque chose des paquetages, vous devez les désarchiver. Généralement, il s'agit d'archives au format tar/gz (l'extension est soit .tar.gz soit .tgz) ou au format tar/bz (extension .tar.bz2). Le compresseur Bzip2 est un peu plus efficace que gzip mais n'est pas toujours installé par défaut. Ainsi si vous téléchargez des archives au format bz, vérifiez que Bzip2 est disponible sur votre système. Je n'expliquerai qu'une seule fois, dans ce paragraphe, comment désarchiver les paquetages, aussi lisez attentivement ce qui suit. · Commencez par _c_o_p_i_e_r les paquetages depuis l'emplacement où vous les avez enregistrés vers le répertoire $LFS/usr/src. · Si l'archive est au format tar/gz, désarchivez-la grâce à la commande : tar xvfz filename.tar.gz; rm filename.tar.gz ou tar xvfz filename.tgz; rm filename.tgz · S'il s'agit d'une archive tar/bz2, utilisez la commande : tar --use-compress-prog=bzip2 -xvf filename.tar.bz2; rm filename.tar.bz2 · Enfin si l'archive est au format tar (pas de compression), utilisez la commande : tar xvf filename.tar; rm filename.tar Remarquez que nous effaçons le paquetage juste après l'avoir désarchivé car nous n'en avons plus besoin. C'est pourquoi vous devez _c_o_p_i_e_r l'archive et non la déplacer. Si vous la déplacez, la désarchivez et l'effacez, vous devrez la télécharger à nouveau lorsque vous en aurez besoin. Lorsque le paquetage est désarchivé, un nouveau répertoire est créé dans le répertoire actif ($LFS/usr/src si vous suivez ce document à la lettre). Vous devez vous positionner dans ce répertoire avant de poursuivre l'installation. Finalement tout ce qui précède peut se résumer à "Désarchivez xxx". Ainsi lorsque vous lirez cette phrase, copiez l'archive dans $LFS/usr/src, désarchivez-la grâce à la commande tar et positionnez-vous dans le répertoire créé. Ensuite vous pouvez continuer à suivre les instructions. Après avoir installé un paquetage, vous pouvez en faire deux choses. Soit vous effacez le répertoire qui contient ses sources, soit vous le conservez. Quelle que soit votre décision, je ne m'en porterai pas plus mal. Toutefois si vous avez besoin de réutiliser un paquetage plus tard dans le document (tous les logiciels du chapitre 7.2 seront réinstallés dans le chapitre 7.3), vous devez d'abord effacer le répertoire et désarchiver à nouveau l'archive. Si vous ne le faites pas, vous pourriez avoir quelques problèmes inhérents aux paramètres utilisés lors de la précédente compilation. Ceux-ci s'appliquaient à votre système Linux normal mais pas au système LFS. Même un simple make clean ne suffit pas à nettoyer totalement les sources de l'arborescence. Le script configure génère également des fichiers répartis dans divers sous-répertoires et ces fichiers sont rarement effacés au cours de l'exécution de make clean. 33.. LLeess ppaaqquueettaaggeess qquuee vvoouuss ddeevveezz ttéélléécchhaarrggeerr Vous trouverez ci-dessous la liste des paquetages que vous devez absolument télécharger pour mener à bien la méthode exposée dans ce document et obtenir un système LFS opérationnel. J'ai également indiqué les serveurs sur lesquels ils sont disponibles, mais c'est à vous de vous assurer que vous téléchargez bien la dernière version des applications. Les versions indiquées dans la liste correspondent à celles utilisées dans ce document et ont donc été testées. Ainsi si vous rencontrez le moindre problème que vous ne pouvez résoudre avec les archives que vous avez récupérées, téléchargez la version indiquée dans ce document (dans le cas où vous avez téléchargé une version plus récente). 33..11.. AApppplliiccaattiioonnss iinnddiissppeennssaabblleess Sysvinit (2.78) : ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/ Bash (2.03) : ftp://ftp.gnu.org/gnu/bash/ Linux Kernel (2.2.14) : ftp://ftp.kernel.org/pub/linux/kernel/ Binutils (2.9.1) : ftp://ftp.gnu.org/gnu/binutils/ Bzip2 (0.9.5d) : http://sourceware.cygnus.com/bzip2/ Diff Utils (2.7) : ftp://ftp.gnu.org/gnu/diffutils/ File Utils (4.0) : ftp://ftp.gnu.org/gnu/fileutils/ GCC (2.95.2) : ftp://ftp.gnu.org/gnu/gcc/ Glibc (2.1.3) : ftp://ftp.gnu.org/gnu/glibc/ Glibc-crypt (2.1.2) : ftp://ftp.gwdg.de/pub/linux/glibc/ Glibc-linuxthreads (2.1.3) : ftp://ftp.gnu.org/gnu/glibc/ Grep (2.4) : ftp://ftp.gnu.org/gnu/grep/ Gzip (1.2.4) : ftp://ftp.gnu.org/gnu/gzip/ Make (3.78.1) : ftp://ftp.gnu.org/gnu/make/ Sed (3.02) : ftp://ftp.gnu.org/gnu/sed/ Shell Utils (2.0) : ftp://ftp.gnu.org/gnu/sh-utils/ Tar (1.13) : ftp://ftp.gnu.org/gnu/tar/ Text Utils (2.0) : ftp://ftp.gnu.org/gnu/textutils/ Util Linux (2.10f) : ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/ Bison (1.28) : ftp://ftp.gnu.org/gnu/bison/ Mawk (1.3.3) : ftp://ftp.whidbey.net/pub/brennan/ Find Utils (4.1) : ftp://ftp.gnu.org/gnu/findutils/ Ncurses (5.0) : ftp://ftp.gnu.org/gnu/ncurses/ Less (340) : ftp://ftp.gnu.org/gnu/less/ Perl (5.005_03) : ftp://ftp.gnu.org/gnu/perl/ M4 (1.4) : ftp://ftp.gnu.org/gnu/m4/ Texinfo (4.0) : ftp://ftp.gnu.org/gnu/texinfo/ Autoconf (2.13) : ftp://ftp.gnu.org/gnu/autoconf/ Automake (1.4) : ftp://ftp.gnu.org/gnu/automake/ Flex (2.5.4a) : ftp://ftp.gnu.org/gnu/flex/ E2fsprogs (1.18) : ftp://tsx-11.mit.edu/pub/linux/packages/ext2fs/ File (3.26) : http://www.linuxfromscratch.org/download/file-3.26-lfs.tar.gz Groff (1.15) : ftp://ftp.gnu.org/gnu/groff/ Ld.so (1.9.9) : ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ Libtool (1.3.4) : ftp://ftp.gnu.org/gnu/libtool/ Linux86 (0.14.3) : http://www.linuxfromscratch.org/download/linux86-0.14.3-lfs.tar.gz Lilo (21) : ftp://sunsite.unc.edu/pub/Linux/system/boot/lilo/ Shadow Password Suite (19990827) : ftp://piast.t19.ds.pwr.wroc.pl/pub/linux/shadow/ Man (1.5h1) : ftp://ftp.win.tue.nl/pub/linux-local/utils/man/ Modutils (2.3.9) : ftp://ftp.ocs.com.au/pub/modutils/ Termcap (1.3) : ftp://ftp.gnu.org/gnu/termcap/ Procinfo (17) : ftp://ftp.cistron.nl/pub/people/svm/ Procps (2.0.6) : ftp://people.redhat.com/johnsonm/procps/ Psmisc (19) : ftp://lrcftp.epfl.ch/pub/linux/local/psmisc/ Start-stop-daemon (0.4.1) : http://www.linuxfromscratch.org/download/ssd-0.4.1-lfs.tar.gz Sysklogd (1.3.31) : ftp://sunsite.unc.edu/pub/Linux/system/daemons/ Vim (5.6) : ftp://ftp.vim.org/pub/editors/vim/unix/ 33..22.. AApppplliiccaattiioonnss ffaaccuullttaattiivveess Toutes les applications listées ci-dessous, traitées à partir du chapitre 13, ne sont pas indispensables. C'est à vous de déterminer les paquetages dont vous avez besoin. Par exemple, si vous souhaitez pouvoir accéder à Internet par le biais du système LFS, vous devez installer les utilitaires concernant le courrier électronique, le web, etc. Netkit-base (0.17) : ftp://ftp.uk.linux.org/pub/linux/Networking/netkit-devel/ Net-tools (1.54) : http://www.tazenda.demon.co.uk/phil/net-tools/ Procmail (3.14) : ftp://ftp.procmail.org/pub/procmail/ Sendmail (8.9.3) : ftp://ftp.sendmail.org/pub/sendmail/ Mailx (8.1.1) : http://www.linuxfromscratch.org/download/mailx-8.1.1-fixed.tar.gz Mutt (1.0i) : ftp://ftp.mutt.org/pub/mutt/ Fetchmail (5.2.0) : http://www.tuxedo.org/~esr/fetchmail/ Netkit-telnet (0.17) : ftp://ftp.uk.linux.org/pub/linux/Networking/netkit-devel/ Proftpd (1.2.0pre9) : ftp://ftp.tos.net/pub/proftpd/ Netkit-ftp (0.17) : ftp://ftp.uk.linux.org/pub/linux/Networking/netkit-devel/ Apache (1.3.11) : http://www.apache.org/dist/ Zlib Library (1.1.3) : http://www.cdrom.com/pub/infozip/zlib/ Lynx (2.8.2) : http://www.slcc.edu/lynx/release/ PPP (2.3.11) : ftp://cs.anu.edu.au/pub/software/ppp/ Xfree86 (3.3.5) : ftp://ftp.xfree86.org/pub/XFree86/ libPropList (0.9.1) : ftp://ftp.windowmaker.org/pub/libs/ libXpm (4.7) : ftp://sunsite.unc.edu/pub/Linux/libs/X/ libpng (1.0.3) : http://www.cdrom.com/pub/png/ libtiff (3.4) : ftp://ftp.sgi.com/graphics/tiff/ libjpeg (6b) : http://www.ijg.org/ libungif (4.1.0) : ftp://prtr-13.ucsc.edu/pub/libungif/ WindowMaker (0.61.1) : ftp://ftp.windowmaker.org/pub/release/ 44.. PPrrééppaarreerr llee nnoouuvveeaauu ssyyssttèèmmee 44..11.. CCoommmmeenntt aalllloonnss--nnoouuss pprrooccééddeerr Nous allons construire le système LFS en utilisant une distribution Linux déjà en place, comme par exemple Debian, SuSE, Slackware, Mandrake, RedHat, etc. Vous n'avez pas besoin de disquette de démarrage particulière. Nous utiliserons tous les outils du système déjà en place (compilateur, éditeur de liens, éditeur de textes et quelques autres). Si vous ne disposez pas d'un système déjà en place, vous ne pourrez pas utiliser la méthode décrite dans ce document. Il est donc dans ce cas indispensable que vous en installiez un, peu importe la distribution, tant qu'elle n'est pas trop vieille. Je pense que toute distribution âgée d'au maximum un an devrait convenir. Par ailleurs, vous vous éviterez pas mal de soucis si cette distribution est basée sur glibc-2.0 ou mieux. Je n'ai pas pris en compte les systèmes basés sur Libc5 puisque je n'ai pas eu l'occasion d'en utiliser un. 44..22.. CCrrééeerr uunnee nnoouuvveellllee ppaarrttiittiioonn Pour construire notre nouveau système Linux, nous avons besoin d'une partition Linux vide. Prévoyez un minimum de 500 Mo, cela devrait suffire. Vous pouvez éventuellement utiliser une partition de 250 Mo, si vous souhaitez construire un système Linux simple (sans système X Window ou outils dédiés à la navigation sur Internet). Si vous disposez déjà d'une partition Linux Native vide, vous pouvez passer cette sous-section. Démarrez le programme fdisk (ou tout partitionneur de votre choix, du moment qu'il autorise la création de partitions Linux) en indiquant le disque dur sur lequel vous souhaitez créer la nouvelle partition Linux (par exemple fdisk /dev/hda si la nouvelle partition doit être créée sur le disque dur maître du premier contrôleur IDE). Créez une partition Linux Native, mettez à jour la table de partition et quittez fdisk. Si un message vous indique de redémarrer l'ordinateur afin d'être sûr que la table de partition est mise à jour, faites-le. Notez le nom de la nouvelle partition (par exemple hda5) car vous en aurez besoin plus tard. Cette partition sera appelée _p_a_r_t_i_t_i_o_n _L_F_S dans la suite du document. 44..33.. CCrrééeerr uunn ssyyssttèèmmee ddee ffiicchhiieerrss eexxtt22 ssuurr llaa nnoouuvveellllee ppaarrttiittiioonn Une fois que la partition est créée, nous devons y installer un système de fichiers ext2. Pour ce faire, utilisez la commande mke2fs. Indiquez le nom de la nouvelle partition comme unique option et le système de fichiers sera créé. Ainsi si la partition porte le nom hda5, utilisez la commande mke2fs /dev/hda5. 44..44.. MMoonntteerr llaa nnoouuvveellllee ppaarrttiittiioonn Une fois que le système de fichiers est créé, il est prêt à être utilisé. Tout ce qu'il vous reste à faire pour le rendre accessible est de le monter. En reprenant notre exemple précédent, si vous montez la partition sous /mnt/hda5, vous pouvez vous positionner dans ce répertoire et faire ce que vous voulez. Je supposerai par la suite que vous avez monté la partition LFS dans un sous-répertoire de /mnt. Vous avez pu constater que, par convention, je monte mes partitions dans des répertoires portant le nom de cette partition (hda5 monté sous /mnt/hda5). Libre à vous de faire comme bon vous semble, voire d'utiliser le répertoire /mnt. Voici en résumé la méthode pour monter la partition LFS : · Crééz le répertoire /mnt s'il n'existe pas encore · Crééz le répertoire /mnt/xxx où xxx est à remplacer par le nom de la partition LFS. · Montez la partition LFS en lançant : mount /dev/xxx /mnt/xxx où xxx est à remplacer par le nom de la partition LFS. Ce répertoire (/mnt/xxx) correspond à la variable $LFS expliquée plus haut. Je vous rappelle donc que si vous lisez "cp inittab $LFS/etc", en réalité vous devez taper "cp inittab /mnt/xxx/etc" où xxx est à remplacer par le nom de la partition LFS. 44..55.. CCrrééeerr lleess rrééppeerrttooiirree Créez l'arborescence de base, au standard FHS, du système LFS. Si vous souhaitez plus d'informations sur le standard FHS, consultez le site http://www.pathname.com/fhs/. Tapez les commandes suivantes : cd $LFS mkdir bin boot dev etc home lib mnt proc root sbin tmp usr var cd $LFS/usr mkdir bin include lib sbin share src ln -s share/man man ln -s share/doc doc ln -s . local ln -s ../etc etc ln -s ../var var cd $LFS/usr/share mkdir dict doc info locale man nls misc terminfo zoneinfo cd $LFS/usr/share/man mkdir man1 man2 man3 man4 man5 man6 man7 man8 cd $LFS/var mkdir lock log run spool tmp Maintenant que les répertoires sont créés, copiez les archives téléchargées au chapitre 3 dans un sous-répertoire de $LFS/usr/src (vous devez créer ce sous-répertoire vous-même). 44..66.. CCooppiieerr llee rrééppeerrttooiirree //ddeevv Nous pourrions utiliser la commande mknod pour créer les fichiers du répertoire $LFS/dev, mais cela prend du temps. C'est pourquoi je vous conseille de simplement recopier le répertoire /dev vers la partition $LFS. Pour ce faire, utilisez la commande suivante, tous les droits et liens symboliques originaux seront conservés. cp -av /dev $LFS chown root.root $LFS/dev/* 55.. RReennddrree llee ssyyssttèèmmee LLFFSS aammoorrççaabbllee 55..11.. IInnssttaalllleerr SSyyssvviinniitt Normalement, lorsque le noyau a terminé de se charger et d'initialiser divers composants systèmes, il tente de charger un programme appelé init qui terminera le processus de démarrage. Le paquetage utilisé sur la majorité sinon tous les systèmes Linux est Sysvinit et c'est justement lui que nous utilisons pour notre système LFS. · Désarchivez Sysvinit · Positionnez-vous dans le répertoire src · Editez le fichier Makefile · Quelque part dans ce fichier, mais avant la règle "all", ajoutez cette ligne : _R_O_O_T _= _$_L_F_S · Préfixez toutes les occurrences /dev des quatre dernières lignes par _$_(_R_O_O_T_) Après avoir fait cela, les quatre dernières lignes du fichier doivent ressembler à : @if [! -p $(ROOT)/dev/initctl ]; then \ echo "Creating $(ROOT)/dev/initctl"; \ rm -f $(ROOT)/dev/initctl; \ mknod -m 600 $(ROOT)/dev/initctl p; fi · Installez le paquetage en exécutant : make -e LDFLAGS=-static; make install 55..22.. CCoonnffiigguurreerr SSyyssvviinniitt Pour que Sysvinit fonctionne, vous devez créer un fichier de configuration approprié. Créez le fichier $LFS/etc/inittab contenant : # Begin /etc/inittab id:2:initdefault: ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now 1:2345:respawn:/sbin/sulogin # End /etc/inittab 55..33.. CCrrééeerr lleess ffiicchhiieerrss ppaasssswwdd eett ggrroouupp Comme vous pouvez le voir dans le fichier inittab, lorsque nous amorçons le système, init démarre le programme sulogin qui vous demandera le mot de passe root. Cela signifie que nous avons besoin de créer un fichier de mots de passe sur le système LFS. · Créez le fichier $LFS/etc/passwd contenant: _r_o_o_t_:_s_3_9_4_u_l_1_B_k_v_m_q_2_:_0_:_0_:_r_o_o_t_:_/_r_o_o_t_:_/_b_i_n_/_b_a_s_h · Créez le fichier $LFS/etc/group contenant: _r_o_o_t_:_:_0_: Le mot de passe encodé dans le fichier passwd est: _l_f_s_1_2_3 Lorsque le système vous demandera le mot de passe root, c'est celui-ci que vous devez entrer. 55..44.. IInnssttaalllleerr llee sshheellll BBaasshh Après que sulogin ait validé le mot de passe root, il tentera de lancer un interpréteur de commandes (plus simplement appelé _s_h_e_l_l), généralement Bash. Nous devons donc le compiler. Mais comme aucune bibliothèque n'est encore disponible sur le système, nous devons le lier statiquement, ainsi que nous avons procédé pour Sysvinit. · Désarchivez Bash · Installez Bash en lançant: ./configure --enable-static-link make; make -e prefix=$LFS/usr install mv $LFS/usr/bin/bash $LFS/bin cd $LFS/bin; ln -s bash sh 55..55.. AAjjoouutteerr uunnee eennttrrééee àà LLIILLOO Afin de pouvoir démarrer le système LFS, nous devons mettre à jour le fichier/etc/lilo.conf. Ajoutez-y les lignes suivantes : image= label=