Page suivantePage précédenteTable des matières

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/<host>/2.95.2/cpp cpp
cd $LFS/usr/lib; ln -s gcc-lib/<host>/2.95.2/cpp cpp
cd $LFS/usr/bin; ln -s gcc cc

Remplacez <host> 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 <swap device>

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.


Page suivantePage précédenteTable des matières