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.
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.
./configure make -e LDFLAGS=-all-static make -e prefix=$LFS/usr install
make -e LDFLAGS=-static make -e PREFIX=$LFS/usr install cd $LFS/usr/bin mv bunzip2 bzip2 $LFS/bin
./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
./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
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
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
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.
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.
configparms
contenant:
# 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
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
./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
./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
./configure make -e LDFLAGS=-static make -e prefix=$LFS/usr install
./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
./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
./configure --disable-nls make -e LDFLAGS=-static make -e prefix=$LFS/usr install mv $LFS/usr/bin/tar $LFS/bin
./configure --disable-nls make -e LDFLAGS=-static make -e prefix=$LFS/usr install mv $LFS/usr/bin/cat $LFS/bin
./configure cd lib;make cd ../mount;make -e LDFLAGS=-static cp mount umount $LFS/bin cp swapon $LFS/sbin
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.
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>
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
./configure --datadir=/usr/share/bison make; make install
./configure make; make install cd /usr/bin; ln -s mawk awk
./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
./configure make; make install
./configure --with-shared make; make install
./configure make; make install mv /usr/bin/less /bin
./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.
./configure make; make install
./configure make; make install
./configure make; make install
./configure make install
./configure make; make install mv /usr/bin/bash /bin
./configure make; make install
./configure make; make install
make; make install cd /usr/bin; mv bunzip2 bzip2 /bin
./configure make; make install
./configure make; make install mv /usr/sbin/mklost+found /sbin
./configure make; make install
./configure make; make install cd /usr/bin mv chgrp chmod chown cp dd df ln ls mkdir mknod mv rm rmdir sync /bin
./configure make; make install
./configure make; make install
./configure make; make install cd /usr/bin; mv z* gunzip gzip /bin
cd util; make ldd ldconfig cp ldd /bin; cp ldconfig /sbin rm /usr/bin/ldd
./configure make; make install
cd as make; make install cd ../ld make ld86; make install
make; make install
./configure make; make install
./configure make; make install cd /usr/bin mv date echo false pwd stty su true uname hostname /bin
./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
./configure -default make all; make install
./configure make; make install
make; make install
gcc -O3 -Wall -Wno-unused -c watch.c make; make -e XSCPT="" install mv /usr/bin/kill /bin
make; make install
./configure make; make install mv /usr/bin/sed /bin
make start-stop-daemon cp start-stop-daemon /sbin cp start-stop-daemon.8 /usr/share/man/man8
make; make install
cd src make; make install
./configure make; make install mv /usr/bin/tar /bin
./configure make; make install mv /usr/bin/cat /bin
./configure make; make install
MCONFIG
, cherchez et modifiez les variables suivantes
comme indiqué ci-dessous:
HAVE_PASSWD=yes HAVE_SLN=yes HAVE_TSORT=yes
groupadd -g 5 tty ./configure make; make install
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*
Maintenant que toutes les applications sont installées, vous devez en configurer certaines afin qu'elles fonctionnent correctement.
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 :
/etc/nsswitch.config
contenant:
# 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
ln -s /usr/share/zoneinfo/<emplacement
donné par tzselect> /etc/localtime
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
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.
/mnt/original
mount
/dev/xxx /mnt/original
(remplacez /dev/xxx
par le nom de la partition Linux
normale).
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.
/var/log
grâce à : mkdir /var/log
/etc/syslog.conf
contenant :
# 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
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. ;-)
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.
/etc/inittab
et modifiez-le comme suit:
# 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
/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.
/var/run/utmp
en utilisant : touch /var/run/utmp
chmod 644 /var/run/utmp