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.

1. Introduction

1.1 De quoi s'agit-il ?

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 .

1.2 Mises à jour

La dernière version anglaise de ce document est disponible à tout moment à l'adresse :

http://www.linuxfromscratch.org

1.3 Historique de ce document

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.

2.2 - 3 avril 2000

1.4 Listes de diffusion

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.

Inscription

Pour vous inscrire à une liste, envoyez un email, dont le corps contient soit subscribe lfs-discuss, soit subscribe lfs-announce, à 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.

Résilier une inscription

Pour résilier votre inscription à une liste, envoyez un email, dont le corps contient soit unsubscribe lfs-discuss soit unsubscribe lfs-announce à l'adresse suivante : mailto:majordomo@fist.org

1.5 Contact

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

2. Conventions utilisées dans ce document

2.1 A propos de $LFS

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 "no such file or directory" sans aucun dommage pour votre système. Ne dites pas que je ne vous ai pas prévenu ;-)

2.2 Comment télécharger les applications

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.

2.3 Comment installer les applications

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.

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 copier 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.

3. Les paquetages que vous devez télécharger

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).

3.1 Applications indispensables

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/

3.2 Applications facultatives

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/

4. Préparer le nouveau système

4.1 Comment allons-nous procéder

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.

4.2 Créer une nouvelle partition

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 partition LFS dans la suite du document.

4.3 Créer un système de fichiers ext2 sur la nouvelle partition

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.

4.4 Monter la nouvelle partition

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 :

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.

4.5 Créer les répertoire

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).

4.6 Copier le répertoire /dev

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/* 
 

5. Rendre le système LFS amorçable

5.1 Installer Sysvinit

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.

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 
 

make -e LDFLAGS=-static; make install  
 

5.2 Configurer Sysvinit

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 
 

5.3 Créer les fichiers passwd et group

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.

Le mot de passe encodé dans le fichier passwd est: lfs123

Lorsque le système vous demandera le mot de passe root, c'est celui-ci que vous devez entrer.

5.4 Installer le shell Bash

Après que sulogin ait validé le mot de passe root, il tentera de lancer un interpréteur de commandes (plus simplement appelé shell), 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.

./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 
 

5.5 Ajouter une entrée à LILO

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=

Remplacez par le nom du fichier contenant l'image du noyau utilisé par votre système. Vous pouvez remplacer

Maintenant lancez lilo afin de mettre à jour l'amorceur du système.

5.6 Tester le système

Après avoir effectué les opérations précédentes, vous pouvez vérifier s'il est possible de se connecter au système LFS en redémarrant la machine. N'oubliez pas à l'affichage de LILO de taper le label que vous avez choisi plus haut. Si tout se déroule correctement, sulogin vous demandera le mot de passe root. Saisissez-le. Vous devriez alors vous retrouver sous le shell. Remarquez que vous ne pourrez pas arrêter le système par l'intermédiaire de la commande shutdown. Bien que ce programme soit présent, il vous renverra comme erreur "You don't exist. Go away" si vous essayez de l'exécuter. Cela signifie que le système est incapable de localiser le fichier des mots de passe (/etc/passwd). Sulogin, bien que statiquement lié, dépend quand même de la bibliothèque NSS (Name Server Switch) qui fait partie de la bibliothèque C que nous installerons ultérieurement. La bibliothèque NSS est utilisée dans ce cas pour indiquer à sulogin où se trouve le fichier de mots de passe.

Pour le moment, vous pouvez redémarrer le système en utilisant reboot -f . Cette commande outrepassera le redémarrage du système normalement opéré par shutdown et redémarrera instantanément. Comme le système de fichiers est monté en lecture seule, cette opération n'endommagera rien. Par contre vous pourriez être informé au prochain démarrage que le système de fichiers n'a pas été correctement démonté et qu'il faut lancer e2fsck pour vérifier s'il n'y a pas de problème.

6. Installer un noyau

6.1 Remarque au sujet de ftp.kernel.org

A la section 2, j'ai indiqué que vous pouviez télécharger un noyau depuis ftp://ftp.kernel.org/ . Toutefois ce site est souvent chargé et ses administrateurs vous encouragent à utiliser un miroir près de chez vous. Dans ce cas, l'adresse est du type ftp://ftp..kernel.org/ (par exemple ftp.fr.kernel.org).

6.2 Configurer le noyau

cd /usr/include  
ln -s ../src/linux/include/linux linux 
ln -s ../src/linux/include/asm- asm 
 

Regardez dans le répertoire /usr/src/linux/include quels sont les sous-répertoires asm-* présents. Choisissez celui qui correspond à votre plateforme. Par exemple s'il s'agit d'un PC Intel, vous lancerez la commande ln -s ../src/linux/include/asm-i386 asm

cd $LFS/usr/include  
ln -s ../src/linux/include/linux linux 
ln -s ../src/linux/include/asm asm 
 

6.3 Mettre à jour LILO

6.4 Tester le système

Redémarrez votre système sous LFS. Vérifiez que le nouveau noyau n'effectue aucune opération anormale (comme un crash).

7. Installer les applications de base

Dans ce chapitre, nous installerons toutes les applications qui constituent un système Linux de base. Au terme de ce chapitre vous disposerez d'un système Linux pleinement opérationnel. Les chapitres suivants traitent de sujets facultatifs comme par exemple la configuration du réseau, des serveurs et clients Internet (telnet, ftp, http, email) et du système X Window. Vous êtes libre d'ignorer autant de chapitres qu'il vous plaira. Ainsi si vous ne souhaitez pas vous connecter à Internet, vous n'aurez que peut d'intérêt à consulter le chapitre dédié.

Il y a un certain nombre de paquetages que vous devez impérativement installer avant de pouvoir mettre en place les applications de base. En effet un script typique aura besoin de programmes comme rm, grep, sed, mv, cat, cp, diff. Vous devez également pouvoir décompresser des archives, compiler et éditer les liens des applications. Tous les outils correspondants doivent être installés avant toute chose. Ils seront de plus liés statiquement. En effet votre système Linux utilise peut-être une version de bibliothèque C différente de celle qui sera utilisée par le système LFS. Or les applications que vous allez installer dans cette section seraient théoriquement liées avec la bibliothèque C de votre système normal. Ceci pourrait engendrer des conflits de bibliothèque si vous exécutez ces applications sous le système LFS. C'est pourquoi nous devons les lier statiquement dans un premier temps. Puis au cours de la mise en place du système LFS nous lierons à nouveau ces applications avec la bibliothèque C utilisée par le système LFS.

7.1 A propos des symboles de débogage

Par défaut, chaque programme et bibliothèque est compilé avec les symboles de débogage. Cela signifie que vous pouvez exécuter ce programme ou cette bibliothèque par l'intermédiaire d'un débogueur et que ce dernier produira une sortie de l'exécution plus compréhensible. Toutefois ces symboles de débogage augmentent la taille du fichier produit de manière significative. Par convention, tous les logiciels installés dans ce document incluront ces symboles (puisque je ne sais pas si la majorité des lecteurs fait ou non du débogage). Libre à vous de supprimer par la suite les symboles de débogage en utilisant le programme strip de la manière suivante : strip --strip-debug nomdufichier (le fichier doit être au format elf ou a.out). Vous pouvez utiliser des jokers si vous souhaitez traiter plusieurs fichiers d'un coup (exemple : strip --strip-debug $LFS/usr/bin/*).

Si vous vous demandez l'influence des symboles de débogage sur la taille des fichiers, voici quelques statistiques :

Ces tailles sont données à titre indicatif et dépendent grandement du compilateur et de la version de bibliothèque C utilisés, mais au final les résultats avec ou sans symboles de débogage seront comparables. Pour ma part, au terme de ce chapitre et après avoir supprimé les symboles de débogage des fichiers exécutables et bibliothèques, j'ai récupéré environ 102 Mo d'espace disque. Différence remarquable. Mais elle sera encore plus grande en réalisant cette opération au terme du document.

7.2 Préparer le système LFS pour installer les applications de base

Installer Binutils

./configure  
make -e LDFLAGS=-all-static 
make -e prefix=$LFS/usr install 
 

Installer Bzip2

make -e LDFLAGS=-static  
make -e PREFIX=$LFS/usr install 
cd $LFS/usr/bin 
mv bunzip2 bzip2 $LFS/bin 
 

Installer Diffutils

./configure  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
 

Ce paquetage peut causer des erreurs relatives à l'édition statique des liens sur certaines plateformes. Si c'est votre cas, vous pouvez télécharger une version corrigée du paquetage à l'adresse : http://www.linuxfromscratch.org/download/diffutils-2.7-fixed.tar.gz

Installer Fileutils

./configure --disable-nls  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
cd $LFS/usr/bin 
mv chgrp chmod chown cp dd df ln ls mkdir mknod mv rm rmdir sync $LFS/bin 
 

Installer GCC sur le système normal si nécessaire

Afin de compiler Glibc-2.1.3, le compilateur gcc-2.95.2 doit être installé sur le système Linux normal. Remarquez que n'importe quelle version supérieure ou égale à 2.8 fera l'affaire. Néanmoins de nombreux systèmes basés sur glibc-2.0 disposent de gcc-2.7.2.3. Celui-ci n'est pas apte à compiler et ne doit pas être utilisé pour compiler glibc-2.1. L'installation de la version 2.95.2 de gcc sur le système normal n'écrasera pas la version déjà en place. Avant de procéder à cette installation, assurez-vous que vous en avez réellement besoin. Vérifiez le numéro de version de votre compilateur au moyen de la commande gcc --version. S'il est supérieur ou égal à 2.8, tout va bien, vous n'avez pas besoin de faire la moindre mise à jour. Cela dit, si vous rencontrez des problèmes lors de la compilation de glibc, n'hésitez pas à installer gcc-2.95.2

mkdir $LFS/usr/src/gcc-build; cd $LFS/usr/src/gcc-build  
../gcc-2.95.2/configure --prefix=/usr/gcc2952  \    
--with-local-prefix=/usr/gcc2952 --with-gxx-include-dir=/usr/gcc2952/include/g++  \    
--enable-shared --enable-languages=c,c++ 
make bootstrap; make install 
 

Installer GCC sur le système LFS

mkdir $LFS/usr/src/gcc-build;cd $LFS/usr/src/gcc-build  
../gcc-2.95.2/configure --enable-languages=c --disable-nls 
make -e LDFLAGS=-static bootstrap 
make -e prefix=$LFS/usr local_prefix=$LFS/usr install 
 

Création des liens symboliques nécessaires

Il est nécessaire de créer quelques liens symboliques afin que chaque application puisse trouver le compilateur et le préprocesseur. Ainsi certains programmes lancent le programme cc, d'autres gcc, certains programmes supposent que cpp est dans /lib (c'est-à-dire /usr/lib sur notre système LFS) et d'autres, dans /usr/bin.

cd $LFS/lib; ln -s ../usr/lib/gcc-lib//2.95.2/cpp cpp  
cd $LFS/usr/lib; ln -s gcc-lib//2.95.2/cpp cpp 
cd $LFS/usr/bin; ln -s gcc cc 
 

Remplacez par le répertoire où réside gcc-2.95.2 (i686-unknown-linux dans mon cas). Généralement, vous trouverez deux répertoires différents.

Installer Glibc

Remarque concernant le paquetage glibc-crypt:

-*-*-*-*-*-  
Glibc-crypt n'est pas inclus dans la distribution principale
 de la bibliothèque GNU C du fait de restrictions gouvernementales, principalement
 en France, Russie et Etats-Unis, concernant la diffusion et l'utilisation de
 logiciels de cryptage. Consultez la note "Legal Problems" du manuel pour plus
 d'informations.  
En particulier, les Etats-Unis interdisent l'exportation de ce logiciel
 sans licence, même par Internet. Ainsi ne le téléchargez pas sur le site FTP
 principal de la FSF (ftp.gnu.org) si vous résidez à l'extérieur des Etats-Unis.
 Ce logiciel a été complètement développé à l'extérieur des Etats-Unis.-*-*-*-*-*- 
 

"Ce logiciel" fait référence au paquetage glibc-crypt disponible sur ftp://ftp.gwdg.de/pub/linux/glibc. Cette loi n'affecte que les personnes ne résidant pas aux Etats-Unis. Il n'est pas interdit d'importer des logiciels basés sur DES, donc si vous résidez aux Etats-Unis, vous êtes libre de l'importer depuis ce site allemand.

# Begin configparms  
slibdir=/lib 
sysconfdir=/etc 
# End configparms 
 

mkdir $LFS/usr/src/glibc-build;cd $LFS/usr/src/glibc-build  
../glibc-2.1.3/configure --enable-add-ons 
make; make install_root=$LFS install 
 

mkdir $LFS/usr/src/glibc-build; cd $LFS/usr/src/glibc-build  
CC=/usr/gcc2952/bin/gcc ../glibc-2.1.3/configure --enable-add-ons 
make; make install_root=$LFS install 
 

Copier les anciens fichiers de la bibliothèque NSS

Si votre système Linux normal est basé sur glibc-2.0.x, vous devez copier les fichiers de la bibliothèque NSS sur le système LFS. Quelques programmes liés statiquement ont besoin de cette bibliothèque, notamment ceux recherchant les noms, identifiants et groupes des utilisateurs. Vous pouvez vérifier quelle est la version de bibliothèque C utilise grâce à la commande : ls -l libc.so.*

Votre système est basé sur glibc-2.0 si l'affichage produit ressemble à : /lib/libc.so.6 -> libc-2.0.7.so

Votre système est basé sur glibc-2.1 si l'affichage produit ressemble à : /lib/libc.so.6 -> libc-2.1.2.so

Si vous avez un fichier libc-2.0.x.so (où x est le numéro de micro version comme par exemple 7), copiez les fichiers de la bibliothèque NSS grâce à la commande : cp -av /lib/*nss* $LFS/lib

Installer grep

./configure --disable-nls  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
 

Ce paquetage peut causer des erreurs relatives à l'édition statique des liens sur certaines plateformes. Si c'est votre cas, vous pouvez télécharger une version corrigée du paquetage à l'adresse : http://www.linuxfromscratch.org/download/grep-2.4-fixed.tar.gz

Installer gzip

./configure  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
cd $LFS/usr/bin 
mv gunzip gzip $LFS/bin 
 

Ce paquetage peut causer des erreurs de compilation sur certaines plateformes. Si c'est votre cas, vous pouvez télécharger une version corrigée du paquetage à l'adresse : http://www.linuxfromscratch.org/download/gzip-1.2.4-fixed.tar.gz

Installer Make

./configure  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
 

Installer Sed

./configure  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
mv $LFS/usr/bin/sed $LFS/bin 
 

Ce paquetage peut causer des erreurs relatives à l'édition statique des liens sur certaines plateformes. Si c'est votre cas, vous pouvez télécharger une version corrigée du paquetage à l'adresse : http://www.linuxfromscratch.org/download/sed-3.02-fixed.tar.gz

Installer Sh-utils

./configure --disable-nls  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
cd $LFS/usr/bin 
mv date echo false pwd stty su true uname hostname $LFS/bin 
 

Installer Tar

./configure --disable-nls  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
mv $LFS/usr/bin/tar $LFS/bin 
 

Installer Textutils

./configure --disable-nls  
make -e LDFLAGS=-static 
make -e prefix=$LFS/usr install 
mv $LFS/usr/bin/cat $LFS/bin 
 

Installer Util-linux

./configure  
cd lib;make 
cd ../mount;make -e LDFLAGS=-static 
cp mount umount $LFS/bin 
cp swapon $LFS/sbin 
 

7.3 Installer les applications de base

L'installation de toutes les applications est franchement répétitive et vous pensez peut-être qu'il serait plus simple de donner un mode d'emploi générique et d'ajouter quelques explications concernant les paquetages qui ne suivraient pas ce mode d'emploi. Bien que je sois d'accord avec vous sur ce point, j'ai délibérément choisi d'écrire le mode d'emploi pour chaque paquetage. Cela permet d'éviter toute confusion ou erreur.

Avant d'aller plus loin dans l'installation, vous devez démarrer le système LFS. Pour ce faire, vous devez déterminer quelle partition est utilisée comme swap par votre système. Vous trouverez cette information dans le fichier /etc/fstab. La ligne concernée ressemble à : /dev/hda6 none swap sw 0 0 . Le quatrième champ de la ligne doit contenir 'sw'. Cela indique qu'il s'agit de la partition de swap. Vous devez alors noter quelque part la désignation de cette partition (comme par exemple /dev/hda6 dans notre cas). Lorsque vous avez déterminé quelle partition est celle de swap, vous pouvez redémarrer la machine.

Remonter la partition et activer le swap

Avant d'être en mesure d'installer des applications supplémentaires depuis le système LFS, vous devez remonter la partition en mode lecture/écriture. Il est également nécessaire d'activer la partition de swap de manière à éviter tout risque de saturation de mémoire au cours de compilations importantes (par exemple la compilation de gcc):

mount -o remount,rw / /  
/sbin/swapon  
 

Installer GCC

mkdir $LFS/usr/src/gcc-build;cd $LFS/usr/src/gcc-build  
../gcc-2.95.2/configure --with-gxx-include-dir=/usr/include/g++  \    
--enable-shared --enable-languages=c,c++ 
make bootstrap; make install 
 

Installer Bison

./configure --datadir=/usr/share/bison  
make; make install 
 

Installer Mawk

./configure  
make; make install 
cd /usr/bin; ln -s mawk awk 
 

Installer Findutils

./configure  
make; make install 
 
 

Ce paquetage peut causer des erreurs de compilation sur certaines plateformes. Si c'est votre cas, vous pouvez télécharger une version corrigée du paquetage à l'adresse : http://www.linuxfromscratch.org/download/findutils-4.1-fixed.tar.gz

Installer Termcap

./configure  
make; make install 
 

Installer Ncurses

./configure --with-shared  
make; make install 
 

Installer Less

./configure  
make; make install 
mv /usr/bin/less /bin 
 

Installer Perl

./configure.gnu
make; make install 
 

Remarquez que nous sautons l'étape 'make test', car pour le moment le système n'est pas en mesure de lancer le test de Perl. Nous faisons donc confiance à la compilation.

Installer M4

./configure  
make; make install 
 

Installer Texinfo

./configure  
make; make install 
 

Installer Autoconf

./configure  
make; make install 
 

Installer Automake

./configure  
make install 
 

Installer Bash

./configure  
make; make install 
mv /usr/bin/bash /bin 
 

Installer Flex

./configure  
make; make install 
 

Installer Binutils

./configure  
make; make install 
 

Installer Bzip2

make; make install  
cd /usr/bin; mv bunzip2 bzip2 /bin 
 

Installer Diffutils

./configure  
make; make install 
 

Installer E2fsprogs

./configure  
make; make install 
mv /usr/sbin/mklost+found /sbin 
 

Installer File

./configure  
make; make install 
 

Installer Fileutils

./configure  
make; make install 
cd /usr/bin 
mv chgrp chmod chown cp dd df ln ls mkdir mknod mv rm rmdir sync /bin 
 

Installer Grep

./configure  
make; make install 
 

Installer Groff

./configure  
make; make install 
 

Installer Gzip

./configure  
make; make install 
cd /usr/bin; mv z* gunzip gzip /bin 
 

Installer Ld.so

cd util; make ldd ldconfig  
cp ldd /bin; cp ldconfig /sbin 
rm /usr/bin/ldd 
 

Installer Libtool

./configure  
make; make install 
 

Installer Linux86

cd as  
make; make install 
cd ../ld 
make ld86; make install 
 

Installer Lilo

make; make install  
 

Installer Make

./configure  
make; make install 
 

Installer Sh-Utils

./configure  
make; make install 
cd /usr/bin 
mv date echo false pwd stty su true uname hostname /bin 
 

Installer Shadow Password Suite

./configure   
make; make install 
cd etc 
cp limits login.access login.defs.linux shells suauth /etc 
mv /etc/login.defs.linux /etc/login.defs 
cd /usr/sbin 
mv chpasswd dpasswd groupadd groupdel groupmod logoutd mkpasswd  \    
newusers useradd userdel usermod grpck pwck vipw grpconv grpunconv  \    
pwconv pwunconv /sbin 
 

Installer Man

./configure -default  
make all; make install 
 

Installer Modutils

./configure  
make; make install 
 

Installer Procinfo

make; make install  
 

Installer Procps

gcc -O3 -Wall -Wno-unused -c watch.c  
make; make -e XSCPT="" install 
mv /usr/bin/kill /bin 
 

Installer Psmisc

make; make install  
 

Installer Sed

./configure  
make; make install 
mv /usr/bin/sed /bin 
 

Installer le démon start-stop

make start-stop-daemon  
cp start-stop-daemon /sbin 
cp start-stop-daemon.8 /usr/share/man/man8 
 

Installer Sysklogd

make; make install  
 

Installer Sysvinit

cd src  
make; make install 
 

Install Tar

./configure  
make; make install 
mv /usr/bin/tar /bin 
 

Installer Textutils

./configure  
make; make install 
mv /usr/bin/cat /bin 
 

Installer Vim

./configure  
make; make install 
 

Installer Util-linux

HAVE_PASSWD=yes  
HAVE_SLN=yes 
HAVE_TSORT=yes 
 

groupadd -g 5 tty  
./configure 
make; make install 
 

7.4 Suppression des anciens fichiers de la bibliothèque NSS

Si vous avez copié les fichiers de la bibliothèque NSS de votre système Linux normal vers le système LFS (car votre système normal utilise glibc-2.0), il est temps de les supprimer en tapant:

rm /lib/libnss*.so.1 /lib/libnss*2.0*  
 

7.5 Configurer les applications

Maintenant que toutes les applications sont installées, vous devez en configurer certaines afin qu'elles fonctionnent correctement.

Configurer Glib

Vous devez créer le fichier /etc/nsswitch.conf. Bien que glibc fournisse des valeurs par défaut si ce fichier est absent ou corrompu, celles-ci sont incompatibles avec le fonctionnement réseau du système que nous aborderons plus tard. Par ailleurs, vous devez également régler le fuseau horaire. Voici donc comment procéder :

# Begin /etc/nsswitch.conf  
passwd: files 
group: files 
shadow: files 
  
hosts: files dns 
networks: files 
  
protocols: db files 
services: db files 
ethers: db files 
rpc: db files 
  
netgroup: db files 
# End /etc/nsswitch.conf 
 

La sortie de tzselect ressemble à "EST5EDT" ou "Canada/Eastern". Le lien symbolique que vous devez créer avec cette information sera dans ce cas : ln -s /usr/share/zoneinfo/EST5EDT /etc/localtime ou ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime

Configurer LILO

Il n'est pas nécessaire de créer le fichier de configuration de lilo de toute pièce. Utilisez plutôt le fichier de votre système Linux normal. Ce fichier est différent pour chaque machine et je ne peux donc pas vous donner de modèle. Comme il n'y a aucune raison de modifier la configuration LILO actuelle de votre système, contentez-vous de copier le fichier original sans le modifier.

cp /mnt/original/etc/lilo.conf /etc  
cp /mnt/original/boot/* /boot 
 

Si votre système Linux normal ne sauvegarde pas les images des noyaux dans le répertoire /mnt/original/boot, cherchez alors dans le fichier lilo.conf l'emplacement adéquat et copiez les images dans le répertoire où lilo s'attend à les trouver. Ainsi si lilo indique que le noyau se trouve dans /boot/kernel, vous devez copier le noyau contenu dans /mnt/original/boot/kernel vers /boot/kernel. Vous pouvez également copier le noyau dans /boot et modifier le fichier lilo.conf pour tenir compte de ce changement. Ces deux méthodes sont valables, à vous de choisir.

Configurer Sysklogd

# Begin /etc/syslog.conf  
  
auth,authpriv.* -/var/log/auth.log 
*.*;auth,authpriv.none -/var/log/sys.log 
daemon.* -/var/log/daemon.log 
kern.* -/var/log/kern.log 
mail.* -/var/log/mail.log 
user.* -/var/log/user.log 
*.emerg * 
  
# End /etc/syslog.conf 
 

Configurer Shadow Password Suite

Ce paquetage contient notamment les utilitaires nécessaires pour modifier les mots de passe des utilisateurs et ajouter ou supprimer de nouveaux groupes et utilisateurs. Je n'expliquerai pas ce que 'password shadowing' signifie. Vous trouverez toutes les informations utiles dans les fichiers de documentation et HOWTO. Il y a cependant une chose que vous devez garder à l'esprit : si vous décidez d'utiliser le support 'shadow', tous les programmes qui ont besoin de vérifier les mots de passe (xdm, les démons ftp, pop3d, etc) doivent être compatible avec ce support.

Même si vous pensez que vous n'avez pas besoin d'utiliser les 'shadowed passwords' (NDT: littéralement mots de passe masqués) (après avoir lu la documentation à ce sujet), vous devez néanmoins conserver l'archive correspondante car les outils qu'elle contient fonctionnent également sans 'shadow password'. Notez que vous pouvez choisir à tout moment d'activer ou de désactiver les mots de passe 'shadow'.

Consultez la section 5 du fichier Shadow-Password-HOWTO. Vous y apprendrez comment tester si le système 'shadow' fonctionne et si ce n'est pas le cas, comment le désactiver. S'il ne fonctionne pas et que vous n'avez effectué aucune modification, vous vous retrouverez avec un système totalement inutilisable lorsque vous vous voudrez vous connecter. Vous pouvez facilement remédier à ce problème en passant comme paramètre init=/sbin/sulogin au noyau. Il sera alors nécessaire de décompresser l'archive util-linux, d'aller dans le répertoire login-utils, de compiler le programme login et de le copier à la place de /bin/login. La situation n'est jamais vraiment désespérée, du moins pas sous Linux. Cela dit, vous pouvez vous épargner bien des désagréments en vous documentant et en effectuant les tests nécessaires. ;-)

Configurer Sysvinit

Après avoir modifié comme suit le fichier /etc/inittab, vous aurez la possibilité de vous connecter au système par l'intermédiaire de agetty ou login. Sulogin ne sera plus utilisé pour les connexions normales.

# Begin /etc/inittab  
  
id:2:initdefault: 
  
si::sysinit:/etc/init.d/rcS 
  
su:S:wait:/sbin/sulogin 
  
l0:0:wait:/etc/init.d/rc 0 
l1:1:wait:/etc/init.d/rc 1 
l2:2:wait:/etc/init.d/rc 2 
l3:3:wait:/etc/init.d/rc 3 
l4:4:wait:/etc/init.d/rc 4 
l5:5:wait:/etc/init.d/rc 5 
l6:6:wait:/etc/init.d/rc 6 
  
ft:6:respawn:/sbin/sulogin 
  
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now 
  
1:2345:respawn:/sbin/agetty /dev/tty1 9600 
2:2345:respawn:/sbin/agetty /dev/tty2 9600 
3:2345:respawn:/sbin/agetty /dev/tty3 9600 
4:2345:respawn:/sbin/agetty /dev/tty4 9600 
5:2345:respawn:/sbin/agetty /dev/tty5 9600 
6:2345:respawn:/sbin/agetty /dev/tty6 9600 
  
# End /etc/inittab 
 

Créer le fichier /var/run/utmp

Les programmes comme login, shutdown ont besoin d'écrire dans le fichier /var/run/utmp. Celui-ci contient des informations concernant les personnes actuellement connectées au système et la date du dernier arrêt du système.

8. Créez les scripts de démarrage du système

Ces scripts sont lancés au démarrage du système et sont responsables de diverses tâches comme, par exemple, monter le système de fichiers en lecture/écriture, activer le swap, régler quelques paramètres systèmes et lancer divers démons dont le système a besoin.

8.1 Préparer les répertoires et les fichiers principaux

Dans cette section vous avez besoin du paquetage Sysvinit.

   cd /etc  
   mkdir rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d init.d rcS.d 
 

   #!/bin/sh  
   # Begin /etc/init.d/rcS 
    
   runlevel=S 
   prevlevel=N 
   umask 022 
   export runlevel prevlevel 
  
   trap ":" INT QUIT TSTP 
    
   for i in /etc/rcS.d/S??* 
   do 
      [ ! -f  "$i" ] && continue; 
      $i start        
   done 
  
   # End /etc/init.d/rcS 
 

8.2 Créer le script de redémarrage reboot

   #!/bin/sh  
   # Begin /etc/init.d/reboot 
   
   echo -n "System reboot in progress..." 
    
   /sbin/reboot -d -f -i 
  
   # End /etc/init.d/reboot 
 

8.3 Créer le script d'arrêt halt

   #!/bin/sh  
   # Begin /etc/init.d/halt 
  
   /sbin/halt -d -f -i -p 
  
   # End /etc/init.d/halt 
 

8.4 Créer le script mountfs

#!/bin/sh  
# Begin /etc/init.d/mountfs 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
echo -n "Remounting root file system in read-write mode..." 
/bin/mount -n -o remount,rw / 
check_status 
  
> /etc/mtab 
/bin/mount -f -o remount,rw / 
  
echo -n "Mounting proc file system..." 
/bin/mount proc 
check_status 
  
# End /etc/init.d/mountfs 
 

8.5 Créer le script umountfs

#!/bin/sh  
# Begin /etc/init.d/umountfs 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
   
echo "Deactivating swap..." 
/bin/swapoff -av 
check_status 
  
echo -n "Unmounting file systems..." 
/bin/umount -a -r  
check_status 
  
# End /etc/init.d/umountfs 
 

8.6 Créer le script sendsignals

#!/bin/sh  
# Begin /etc/init.d/sendsignals 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
echo -n "Sending all processes the TERM signal..." 
/sbin/killall5 -15 
check_status 
  
echo -n "Sending all processes the KILL signal..." 
/sbin/killall5 -9 
check_status 
 

8.7 Créer le script de démarrage checkroot

#!/bin/sh  
# Begin /etc/init.d/checkroot 
  
echo "Activating swap..." 
/sbin/swapon -av 
  
if [ -f /fastboot ] 
then 
  echo "Fast boot, no file system check" 
else 
  /bin/mount -n -o remount,ro / 
  if [ $? = 0 ] 
  then 
    if [ -f /forcecheck ] 
    then 
      force="-f" 
    else 
      force="" 
    fi 
  
    echo "Checking root file system..." 
    /sbin/fsck $force -a / 
      
    if [ $? -gt 1 ] 
    then 
      echo 
      echo "fsck failed. Please repair your file system manually by" 
      echo "running fsck without the -a option" 
       
      echo "Please note that the file system is currently mounted in" 
      echo "read-only mode." 
      echo 
      echo "I will start sulogin now. CTRL+D will reboot your system." 
      /sbin/sulogin 
      /reboot -f 
    fi 
  else 
    echo "Cannot check root file system because it is not mounted in" 
    echo "read-only mode." 
  fi 
fi 
  
# End /etc/init.d/checkroot 
 

8.8 Créer le script de démarrage sysklogd

#!/bin/sh  
# Begin /etc/init.d/sysklogd 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
case "$1" in 
  start) 
    echo -n "Starting system log daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/syslogd -- -m 0 
    check_status 
  
    echo -n "Starting kernel log daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/klogd 
    check_status 
    ;; 
  
  stop) 
    echo -n "Stopping kernel log daemon..." 
    start-stop-daemon -K -q -o -p  /var/run/klogd.pid 
    check_status 
  
    echo -n "Stopping system log daemon..." 
    start-stop-daemon -K -q -o -p /var/run/syslogd.pid 
    check_status 
    ;; 
  
  reload) 
    echo -n "Reloading system load daemon configuration file..." 
    start-stop-daemon -K -q -o -s 1 -p /var/run/syslogd.pid 
    check_status 
    ;; 
  
  restart) 
    echo -n "Stopping kernel log daemon..." 
    start-stop-daemon -K -q -o -p /var/run/klogd.pid 
    check_status 
  
    echo -n "Stopping system log daemon..." 
    start-stop-daemon -K -q -o -p /var/run/syslogd.pid 
    check_status 
  
    sleep 1 
  
    echo -n "Starting system log daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/syslogd -- -m 0 
    check_status 
  
    echo -n "Starting kernel log daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/klogd 
    check_status 
    ;; 
  
  *) 
    echo "Usage: $0 {start|stop|reload|restart}" 
    exit 1 
    ;; 
esac 
  
# End /etc/init.d/sysklogd 
 

8.9 Créer les liens symboliques et fixer les permissions

chmod 755 rcS reboot halt mountfs umountfs sendsignals checkroot sysklogd  
cd ../rc0.d 
ln -s ../init.d/sysklogd K90sysklogd 
ln -s ../init.d/sendsignals S80sendsignals 
ln -s ../init.d/umountfs S90umountfs 
ln -s ../init.d/halt S99halt 
cd ../rc6.d 
ln -s ../init.d/sysklogd K90sysklogd 
ln -s ../init.d/sendsignals S80sendsignals 
ln -s ../init.d/umountfs S90umountfs 
ln -s ../init.d/reboot S99reboot 
cd ../rcS.d 
ln -s ../init.d/checkroot S05checkroot 
ln -s ../init.d/mountfs S10mountfs 
cd /etc/rc2.d 
ln -s ../init.d/sysklogd S03sysklogd 
 

8.10 Créer le fichier /etc/fstab

   /dev/ / ext2 defaults 0 1  
   /dev/ none swap sw 0 0 
   proc /proc proc defaults 0 0 
 

9. Configurer la base du réseau

9.1 Installer Netkit-base

./configure  
make; make install 
cd etc.sample; cp services protocols /etc 
mv /usr/bin/ping /bin 
 

9.2 Installer Net-tools

make; make install  
mv /usr/bin/netstat /bin 
cd /usr/sbin; mv ifconfig route /sbin 
 

Créer le script de démarrage /etc/init.d/localnet

#!/bin/sh  
# Begin /etc/init.d/localnet 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
echo -n "Setting up loopback device..." 
/sbin/ifconfig lo 127.0.0.1 
check_status 
  
echo -n "Setting up hostname..." 
/bin/hostname --file /etc/hostname 
check_status 
  
# End /etc/init.d/localnet 
 

Paramétrer les permissions et les liens symboliques

Créer le fichier /etc/hostname

Créez un nouveau fichier /etc/hostname contenant le nom d'hôte de la machine. Il ne s'agit pas du FQDN (nom de domaine pleinement qualifié). Il ne s'agit que du nom que vous souhaitez donner à votre machine sur un réseau (yoda - gandalf - neo - etc).

Créez le fichier /etc/hosts

Si vous souhaitez configurer une carte réseau, vous devez choisir une adresse IP, un nom de domaine pleinement qualifié et les alias que vous mettrez dans le fichier /etc/hosts. Petit exemple :

 myhost.mydomain.org aliases  
 
 

Assurez-vous que l'adresse IP appartient à un réseau privé. Les plages d'adresses valides à utiliser sont:

Class Networks  
A     10.0.0.0 
B     172.16.0.0 through 172.31.0.0 
C     192.168.0.0 through 192.168.255.0 
 

192.168.1.1 est une adresse valide. me.linuxfromscratch.org est un nom de domaine pleinement qualifié valide.

Si vous ne souhaitez pas utiliser de carte réseau, vous aurez simplement besoin d'un FQDN. Des programmes comme Sendmail en ont besoin pour travailler correctement. D'ailleurs Sendmail ne démarrera même pas s'il ne dispose pas d'un FQDN.

Voici le fichier /etc/hosts dont vous avez besoin si vous ne configurez pas de carte réseau:

# Begin /etc/hosts (no network card version)  
127.0.0.1 me.lfs.org  localhost 
# End /etc/hosts (no network card version) 
 

Voici le fichier /etc/hosts dont vous avez besoin si vous configurez une carte réseau:

# Begin /etc/hosts (version sans carte réseau)  
127.0.0.1 localhost 
192.168.1.1 me.lfs.org  
# End /etc/hosts (version sans carte réseau) 
 

Evidemment, vous n'êtes pas obligé de choisir 192.168.1.1 et me.lfs.org. Choisissez ce que bon vous semblera.

Créer le fichier /etc/init.d/ethnet

Cette sous-section est utile uniquement si vous configurez une carte réseau. Si ce n'est pas le cas, continuez votre lecture au-delà.

Créez un nouveau fichier /etc/init.d/ethnet contenant ce qui suit:

#!/bin/sh  
# Begin /etc/init.d/ethnet 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
/sbin/ifconfig eth0  
check_status 
  
# End /etc/init.d/ethnet 
 

Paramétrer les permissions et liens symboliques pour /etc/init.d/ethnet

Tester la configuration du réseau

ping   
ping  
ping localhost 
ping 127.0.0.1 
ping 192.168.1.1 (uniquement si vous avez configuré votre carte réseau) 
 

Les cinq commandes ping qui précédent doivent fonctionner sans problème. Si ce n'est pas le cas, la base du réseau n'est pas correctement configurée.

9.3 Tester le système

Maintenant que tous les logiciels sont installés, que les scripts de démarrage existent et que le réseau local est opérationnel, il est temps de redémarrer l'ordinateur afin de tester si ces nouveaux scripts fonctionnent correctement. Dans un premier temps, lorsque vous créez ces scripts, il est préférable de les exécuter manuellement depuis le répertoire /etc/init.d afin de corriger les erreurs les plus évidentes (erreurs de saisie notamment). Lorsque ces scripts seront opérationnels, il faudra s'assurer qu'ils se comportent également correctement au démarrage et à l'arrêt du système. Il n'existe qu'une seule façon de vérifier cela. Redémarrez votre système LFS grâce à la commande shutdown -r now. Au terme de ce redémarrage, vous arriverez à une invite normale, comparable à ce que vous avez sous votre système Linux normal (sauf si vous utilisez un gestionnaire d'affichage comme XDM, KDM etc).

A ce niveau, votre système LFS basique est opérationnel. Tout ce qui suit est optionnel, vous pouvez donc ignorer les chapitres que vous souhaitez. Mais gardez à l'esprit que si vous passez certaines sections comme l'installation de bibliothèques, certains programmes ne fonctionneront pas. Ainsi Lynx a besoin de la bibliothèque zlib. De plus zlib n'est pas uniquement utilisée par Lynx. A vous donc de vérifier ces problèmes de dépendance.

10. Installer les démons réseau

10.1 Configurer SMTP

Créer les groupes et utilisateurs

Créez les groupes dont Sendmail a besoin en tapant:

groupadd -g 1 bin  
groupadd -g 2 kmem 
groupadd -g 3 mail 
useradd -u 1 -g bin -d /bin -s /bin/sh bin 
 

Créer les répertoires

Le courrier électronique sortant est stocké dans le répertoire /var/spool/mqueue . Le courrier entrant est transmis à Procmail par Sendmail, puis stocké dans le répertoire /var/mail. Créez ces répertoires et fixez les permissions :

mkdir /var/spool/mqueue
mkdir /var/mail 
cd /var/spool; ln -s ../mail mail 
chmod 700 /var/spool/mqueue 
chmod 775 /var/mail 
chgrp mail /var/mail 
chmod 1777 /tmp 
 

Installer Sendmail

cd src  
./Build; ./Build install 
 
 

Configuring Sendmail

Configurer Sendmail est plus facile à dire qu'à faire. Il y a un tas de choses à prendre en compte lorsque l'on configure cette application et je ne peux pas toutes les évoquer. C'est pourquoi pour le moment vous allez créer une configuration basique et standard. Si vous souhaitez peaufiner cette configuration, libre à vous, mais ce n'est pas le bon document pour apprendre comment faire. Vous pouvez éventuellement utiliser le fichier /etc/sendmail.cf (ou /etc/mail/sendmail.cf) existant.

OSTYPE(LFS)  
FEATURE(nouucp) 
define(`LOCAL_MAILER_PATH', /usr/bin/procmail) 
MAILER(local) 
MAILER(smtp) 
 

Installer Procmail

make; make install; make install-suid  
 
 

Créer le script de démarrage /etc/init.d/sendmail

#!/bin/sh  
# Begin /etc/init.d/sendmail 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
case "$1" in 
  start) 
    echo -n "Starting Sendmail..." 
    start-stop-daemon -S -q -o -x /usr/sbin/sendmail -- -bd 
    check_status 
    ;; 
  
  stop) 
    echo -n "Stopping Sendmail..." 
    start-stop-daemon -K -q -o -p /var/run/sendmail.pid 
    check_status 
    ;; 
  
  reload) 
    echo -n "Reloading Sendmail configuration file..." 
    start-stop-daemon -K -q -s 1 -p /var/run/sendmail.pid 
    check_status 
    ;; 
  
  restart) 
    echo -n "Stopping Sendmail..." 
    start-stop-daemon -K -q -o -p /var/run/sendmail.pid 
    check_status 
  
    sleep 1 
  
    echo -n "Starting Sendmail..." 
    start-stop-daemon -S -q -o -x /usr/sbin/sendmail -- -bd 
    check_status 
    ;; 
  
  *) 
    echo "Usage: $0 {start|stop|reload|restart}" 
    exit 1 
    ;; 
  
esac 
  
# End /etc/init.d/sendmail 
 

Paramétrer les permissions et liens symboliques

cd /etc/init.d/rc2.d; ln -s ../init.d/sendmail S20sendmail  
cd ../rc0.d; ln -s ../init.d/sendmail K20sendmail 
cd ../rc6.d; ln -s ../init.d/sendmail K20sendmail 
 

10.2 Configurer FTP

Créer les groupes et utilisateurs

groupadd -g 65534 nogroup  
groupadd -g 4 ftp 
 

useradd -u 65534 -g nogroup -d /home nobody  
useradd -u 4 -g ftp -s /bin/sh -m ftp 
 

Installer Proftpd

./configure  
make; make install 
 

Créer le script de démarrage /etc/init.d/proftpd

#!/bin/sh  
# Begin /etc/init.d/proftpd 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
case "$1" in 
  start) 
    echo -n "Starting Pro FTP daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/proftpd 
    check_status 
    ;; 
  
  stop) 
    echo -n "Stopping Pro FTP daemon..." 
    start-stop-daemon -K -q -o -x /usr/sbin/proftpd 
    check_status 
    ;; 
  
  restart) 
    echo -n "Stopping Pro FTP daemon..." 
    start-stop-daemon -K -q -o -x /usr/sbin/proftpd 
    check_status 
  
    sleep 1 
  
    echo -n "Starting Pro FTP daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/proftpd 
    check_status 
    ;; 
  
  *) 
    echo "Usage: $0 {start|stop|restart}" 
    ;; 
  
esac 
  
# End /etc/init.d/proftpd 
 

Paramétrer les permissions et les liens symboliques

cd /etc/rc2.d; ln -s ../init.d/proftpd S40proftpd  
cd ../rc0.d; ln -s ../init.d/proftpd K40proftpd 
cd ../rc6.d; ln -s ../init.d/proftpd K40proftpd 
 

10.3 Configurer HTTP

Installer Apache

./configure  
make; make install 
 

Configurer Apache

Il n'y a pas grande configuration à faire. La seule chose nécessaire est d'ajouter le chemin d'accès /usr/apache/man au fichier /usr/share/misc/man.conf

Créer le script de démarrage /etc/init.d/apache

#!/bin/sh  
# Begin /etc/init.d/apache 
  
case "$1" in 
  start) 
    echo -n "Starting Apache HTTP daemon..." 
    /usr/apache/bin/apachectl start 
    ;; 
  
  stop) 
    echo -n "Stopping Apache HTTP daemon..." 
    /usr/apache/bin/apachectl stop 
    ;; 
  
  restart) 
    echo -n "Restarting Apache HTTP daemon..." 
    /usr/apache/bin/apachectl restart 
    ;; 
  
  force-restart) 
    echo -n "Stopping Apache HTTP daemon..." 
    /usr/apache/bin/apachectl stop 
  
    sleep 1 
  
    echo -n "Starting Apache HTTP daemon..." 
    /usr/apache/bin/apachectl start 
    ;; 
  
  *) 
    echo "Usage: $0 {start|stop|restart|force-restart}" 
    ;; 
  
esac 
  
# End /etc/init.d/apache 
 

Paramétrer les permissions et liens symboliques

cd /etc/rc2.d; ln -s ../init.d/apache S50apache  
cd ../rc0.d; ln -s ../init.d/apache K50apache 
cd ../rc6.d; ln -s ../init.d/apache K50apache 
 

10.4 Configurer Telnet

Installer le démon et le client telnet

./configure  
make; make install 
 

Créer le fichier de configuration /etc/inetd.conf

# Begin /etc/inetd.conf  
  
telnet stream tcp nowait root /usr/sbin/in.telnetd 
  
# End /etc/inetd.conf 
 

Créer le script de démarrage /etc/init.d/inetd

#!/bin/sh  
# Begin /etc/init.d/inetd 
  
check_status() 
{ 
  if [ $? = 0 ] 
  then 
    echo "OK" 
  else 
    echo "FAILED" 
  fi 
} 
  
case "$1" in 
  start) 
    echo -n "Starting Internet Server daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/inetd 
    check_status 
    ;; 
  
  stop) 
    echo -n "Stopping Internet Server daemon..." 
    start-stop-daemon -K -q -o -p /var/run/inetd.pid 
    check_status 
    ;; 
  
  reload) 
    echo -n "Reloading Internet Server configuration file..." 
    start-stop-daemon -K -q -s 1 -p /var/run/inetd.pid 
    check_status 
    ;; 
  
  restart) 
    echo -n "Stopping Internet Server daemon..." 
    start-stop-daemon -K -q -o -p /var/run/inetd.pid 
    check_status 
  
    sleep 1 
  
    echo -n "Starting Internet Server daemon..." 
    start-stop-daemon -S -q -o -x /usr/sbin/inetd 
    check_status 
    ;; 
  
  *) 
    echo "Usage: $0 {start|stop|reload|restart}" 
    ;; 
  
esac 
  
# End /etc/init.d/inetd 
 

Paramétrer les permissions et liens symboliques

cd /etc/rc2.d; ln -s ../init.d/inetd S30inetd  
cd ../rc0.d; ln -s ../init.d/inetd K30inetd 
cd ../rc6.d; ln -s ../init.d/inetd K30 inetd 
 

10.5 Configurer PPP

Configurer le noyau

Avant de pouvoir vous connecter à Internet, vous devez configurer le support PPP dans le noyau. Pour ce faire, soit vous compilez le noyau avec support PPP intégré, soit vous compilez le support PPP en module qui sera chargé lorsque nécessaire. Quelle que soit la méthode que vous préférez, vous devez recompiler le noyau maintenant s'il ne supporte pas le protocole PPP.

Créer le groupe

Installer PPP

./configure  
make; make install 
 

Créer le fichier /etc/resolv.conf

# Begin /etc/resolv.conf  
  
nameserver  
nameserver  
  
# End /etc/resolv.conf 
 

Créer le fichier /etc/ppp/peers/provider

# Begin /etc/ppp/peers/provider  
  
noauth 
connect "/usr/sbin/chat -v -f /etc/chatscripts/provider" 
/dev/ttyS1 
115200 
defaultroute 
noipdefault 
  
# End /etc/ppp/peers/provider 
 

Créer le fichier /etc/chatscripts/provider

# Begin /etc/chatscripts/provider  
  
ABORT BUSY 
ABORT "NO CARRIER" 
ABORT VOICE 
ABORT "NO DIALTONE" 
ABORT "NO ANSWER" 
"" ATZ 
OK ATDT  
TIMEOUT 35 
CONNECT '' 
TIMEOUT 10 
ogin:  \  q 
TIMEOUT 10 
assword:  \  q 
  
# End /etc/chatscripts/provider 
 

Remarque concernant l'authentification des mots de passe

Comme vous pouvez le voir dans les scripts ci-dessus (ce sont les scripts que j'utilise lorsque je ne travaille pas sous X), je me connecte chez mon FAI (Fournisseur d'Accès Internet) en utilisant ces scripts de communication plutôt qu'en utilisant l'authentification pap ou chap. Bien que mon FAI supporte pap, j'ai choisi de procéder de façon légèrement différente, avec les avantages et inconvénients que cette méthode comporte. Dans mon cas, les avantages sont plus nombreux que les inconvénients. En fait, en utilisant cette méthode, j'ai plus de contrôle sur la procédure de connexion et je peux voir ce qui se passe et quand ça se passe.

Par exemple, la plupart du temps, lorsque je me connecte, j'ouvre une fenêtre dans laquelle j'exécute

tail -f /var/log/syslog de manière à pouvoir voir quand (avec mon FAI ce serait plutôt 'si') les informations comme l'identifiant et le mot de passe sont envoyés.

11. Installer les clients réseau

11.1 Installer les clients Email

Installer Mailx

make; make install  
 

Installer Mutt

Mon client mail favori est Mutt, c'est donc celui-là que je vous conseille d'installer. Il ne s'agit pas d'une obligation, si vous avez un client mail préféré, installez-le. Après tout, c'est votre système, pas le mien. Notez que, si votre client est sous X Window, vous devrez attendre le chapitre concernant l'installation du système X Window pour pouvoir l'installer.

./configure  
make; make install 
 
 

Installer Fetchmail

./configure  
make; make install 
 
 

Tester le système email

Il est grand temps de tester notre système de courrier électronique.

Si toutes ces étapes se sont terminées correctement, vous êtes parvenu à configurer un système mail local. Cela ne signifie pas qu'il est opérationnel pour Internet. Vous pouvez supprimer l'utilisateur de test en lançant userdel -r testuser

11.2 Installer le client FTP

Installer Netkit-ftp

./configure  
make; make install 
 

Tester le système FTP

11.3 Installer le client HTTP

Installer Zlib

Zlib est une bibliothèque de compression utilisée par des programmes comme zip et unzip de PKware. Lynx utilise cette bibliothèque pour compresser certains fichiers.

./configure --shared  
make; make install 
 

Installer Lynx

./configure --libdir=/etc --with-zlib  
make; make install 
make install-help; make install-doc 
 

Tester le système HTTP

11.4 Installer le client Telnet

Le client Telnet a déjà été installé lorsque nous avons mis en place le démon correspondant, au chapitre précédent.

Tester le système Telnet

11.5 Installer les clients PPP

Créer le script de connexion

#!/bin/sh  
# Begin /usr/bin/pon 
  
/usr/sbin/pppd call provider 
  
# End /usr/bin/pon 
 

Créer le script de déconnexion

#!/bin/sh  
# Begin /usr/bin/poff 
  
set -- `cat /var/run/ppp*.pid` 
  
case $# in 
  0) 
    kill -15 `ps axw|grep "pppd call [[allnum:]]+"|grep -v grep|awk '{print $1}'` 
    exit 0 
    ;; 
  1) 
    kill -15 $1 
    exit 0 
    ;; 
esac 
  
# End /usr/bin/poff 
 

Tester le système PPP

12. Installer le système X Window

12.1 Installer X

make World  
make install; make install.man 
 

Au cours de la compilation, vous verrez quelques erreurs indiquant que le script "makedepend" est incapable de trouver les fichiers stddef.h, stdarg.h et float.h. Manifestement ce script n'est pas aussi efficace que le compilateur car la compilation se déroule sans problème. Créer des liens symboliques ne résoudra pas le problème, au contraire cela en créera d'autres.

Vous pouvez donc superbement ignorer ces erreurs, ainsi que celles du type "pointer targets in passing arg x of somefunction differ in signedness". D'ailleurs vous pouvez réécrire ces fichiers si vous le souhaitez, pour ma part, je m'abstiendrai.

12.2 Créer /etc/ld.so.conf

Créez un nouveau fichier /etc/ld.so.conf contenant ce qui suit :

# Begin /etc/ld.so.conf  
  
/lib 
/usr/lib 
/usr/X11R6/lib 
  
# End /etc/ld.so.conf 
 

12.3 Créer le lien symbolique /usr/include/X11

12.4 Créer le lien symbolique /usr/X11

Souvent, les applications copient des fichiers vers /usr/X11, sans avoir à se soucier de la version X utilisée. Ce lien symbolique n'a pas été créé à l'installation du système X Window, vous devez donc le faire.

12.5 Ajouter /usr/X11/bin à la variable d'environnement $PATH

Il y a différentes méthodes pour ajouter le chemin /usr/X11/bin à la variable d'environnement $PATH . Voici une façon de procéder :

Vous devez vous déconnecter et vous reconnecter au système afin que cette modification soit prise en compte.

Une autre méthode consiste à mettre à jour la variable $PATH en tapant : export PATH=$PATH:/usr/X11/bin manuellement

12.6 Configurer X

Si le fichier XF86Config créé par xf86config n'est pas apte à faire démarrer le serveur, il est alors préférable de copier le fichier XF86Config existant sur votre système Linux normal dans /etc. Dans certains cas, vous serez même obligé de modifier manuellement ce fichier de configuration lorsque xf86config sera incapable de gérer certains aspects de la configuration. Quoi qu'il en soit, modifier manuellement ce fichier est très long et le résultat obtenu n'est pas toujours celui attendu.

12.7 Tester X

Maintenant que X est configuré proprement, il est temps de faire un premier test.

Le serveur X démarrera et affichera trois terminaux xterm à l'écran. Si c'est effectivement le cas, votre système X fonctionne correctement.

12.8 Installer Window Maker

J'ai choisi d'installer Window Maker car j'utilise ce gestionnaire de fenêtres depuis un certain temps et j'en suis très satisfait. Comme d'habitude, vous êtes libre d'installer votre gestionnaire de fenêtres favori, voire d'en installer plusieurs en fonction de votre humeur. Il suffira de spécifier dans le fichier $HOME/.xinitrc (ou $HOME/.xsession si vous utilisez xdm) lequel lancer.

12.9 Préparer le système pour l'installation de Window Maker

Installer libPropList

./configure  
make; make install 
 

Installer libXpm

xmkmf; make Makefiles; make includes; make depend  
cd lib; make; make install 
cd ..; make; make install 
 

Cette installation légèrement différente est due à un bug dans un des fichiers Makefile. Il dépend des fichiers du répertoire lib qui ne sont pas encore installés mais ne les cherche pas dans le répertoire lib. Nous devons donc installer ces fichiers avant de compiler le paquetage.

Installer libpng

make -f scripts/makefile.lnx; make -f scripts/makefile.lnx install  
 

Installer libtiff

./configure  
make; make install 
 

Installer libjpeg

./configure --enable-shared --enable-static  
make; make install 
 

Installer libungif

./configure  
make; make install 
 

Installer WindowMaker

./configure  
make; make install 
 

12.10 Mettre à jour le cache du chargeur dynamique

12.11 Configurer Window Maker

Tout utilisateur souhaitant utiliser WindowMaker doit d'abord lancer le script wmaker.inst. Ce dernier copiera les fichiers nécessaires dans le répertoire de l'utilisateur et modifiera le fichier $HOME/.xinitrc (ou le créera s'il n'existe pas).

12.12 Tester Window Maker

13. Ressources

Une liste de livres, HOWTOs et autres documents dont vous pourriez avoir besoin. Cette liste est loin d'être exhaustive mais contient le nécessaire pour démarrer. Nous espérons être en mesure de la compléter au fur et à mesure que nous trouverons de nouveaux documents utiles.

13.1 Livres

13.2 HOWTOs

13.3 Autre

14. La Fin

Vous venez d'atteindre la fin du document Linux From Scratch HOWTO. J'espère que cette expérience vous a permis de compléter vos connaissances concernant le système Linux. Si vous souhaitez voir figurer ici certaines informations (corrections de bogues, applications supplémentaires oubliées que vous considérez comme importantes), faites-le nous savoir. Ensemble, grâce à votre aide et à vos suggestions, nous améliorerons ce document.

15. Copyright & information de licence

Copyright (C) 1999 Gerard Beekmans. Ce document ne peut être distribué que conformément aux termes et conditions exposés dans la licence LDP, disponible à l'adresse http://www.linuxdoc.org/COPYRIGHT.html.

Il n'est toutefois pas nécessaire d'afficher cette notice, comme décrit dans la licence LDP, si seule une petite partie de ce document est utilisée à des fins d'illustration ou de citation. Toutefois je vous demande de faire figurer, avec la citation, la mention: "Extrait de LFS-HOWTO à http://huizen.dds.nl/~glb/"