6.9.1. Installation de Glibc
Remarque
Certains paquets non compris dans LFS suggèrent d'installer GNU
libiconv pour traduire les données d'un codage en un autre. La
page d'accueil du projet (http://www.gnu.org/software/libiconv/)
précise « Cette bibliothèque fournit une
implémentation de iconv()
à
utiliser sur les systèmes qui n'en disposent pas ou dont
l'implémentation ne convertit pas l'Unicode. » Glibc
fournit une implémentation d'iconv()
et peut convertir de l'Unicode, du coup
libiconv n'est pas requis sur un système LFS.
Le szstème de construction de Glibc est auto-extractible et il
s'installera parfaitement, même si le fichier specs du compilateur
et l'éditeur de liens pointent vers /tools
. Les specs et l'éditeur de liens ne
peuvent pas être ajustés avant l'installation de Glibc, car les
tests autoconf de Glibc donneraient de faux résultats, ce qui irait
à l'encontre du but de faire une construction propre.
Corrigez un bogue qui fait échouer la construction dans
l'environnement LFS :
sed -i 's#<rpc/types.h>#"rpc/types.h"#' sunrpc/rpc_clntout.c
Lors de l'exécution de make
install, un script appelé test-installation.pl
opère un petit test de
propreté sur notre Glibc récemment installé. Cependant, il contient
un bogue qui le fait échouer, donc empêchez-le de se lancer en
exécutant la commande suivante :
sed -i '/test-installation.pl/d' Makefile
Le script shell ldd
contient la syntaxe spécifique à Bash. Changez son programme
interpréteur par défaut en /bin/bash si /bin/sh n'est pas installé comme
décrit dans le chapitre Shells
du livre BLFS :
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
Maintenant, corrigez un problème qui fait planter certaines
applications lorsqu'elles ont un problème nameservers :
patch -Np1 -i ../glibc-2.16.0-res_query_fix-1.patch
La documentation de Glibc recommande de construire Glibc en dehors
du répertoire des sources dans un répertoire de construction
dédié :
mkdir -v ../glibc-build
cd ../glibc-build
Préparez la compilation de Glibc :
../glibc-2.16.0/configure \
--prefix=/usr \
--disable-profile \
--enable-add-ons \
--enable-kernel=2.6.25 \
--libexecdir=/usr/lib/glibc
Voici la signification des options de configure :
-
--libexecdir=/usr/lib/glibc
-
Ceci modifie l'emplacement du programme pt_chown, par défaut
/usr/libexec
, par /usr/lib/glibc
.
Compilez le paquet :
make
Important
Dans cette section, la suite de tests de Glibc est considérée
comme critique. Ne la sautez sous aucun prétexte.
En général, quelques tests ne réussissent pas mais vous pouvez le
plus souvent ignorer les échecs listés ci-dessous. Maintenant,
testez les résultats de la construction :
make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log
Vous verrez probablement un échec attendu (ignoré) lors des tests
de posix/annexc and et de
conform/run-conformtest. En
outre, la suite de tests de Glibc est quelque peu dépendante du
système hôte. Voici une liste des problèmes les plus
fréquents :
-
Les tests nptl/tst-attr3, tst/tst-cputimer1, et rt/tst-cpuclock2 sont connus pour
échouer. On n'a pas encore totalement compris la raison, mais
des indications laissent penser que des problèmes mineurs de
temps peuvent être à l'origine de ces échecs.
-
Le test math échoue parfois lorsqu'il s'exécute sur des
systèmes ou le processeur n'est pas complètement de type
Intel ou avec un processeur authentique AMD.
-
Lors d'une exécution sur un matériel ancien et lent, quelques
tests peuvent échouer à cause de délais de test dépassés. La
modification de la commande make check pour paramétrer un
TIMEOUTFACTOR a été signalée comme aidant à éliminer ces
erreurs (par exemple TIMEOUTFACTOR=16 make -k
check).
-
D'autres tests qui sont connus pour échouer sur certaines
architectures sont posix/bug-regex32, misc/tst-writev,
elf/check-textrel, nptl/tst-getpid2, et stdio-common/bug22.
Bien que ce ne soit qu'un simple message, l'étape d'installation de
Glibc se plaindra de l'absence de /etc/ld.so.conf
. Supprimez ce message
d'avertissement avec :
touch /etc/ld.so.conf
Installez le paquet :
make install
Installez les en-têtes liées à NIS et à RPC qui ne sont pas
installées par défaut ; elles sont requises pour reconstruire
glibc et pour plusieurs paquets de BLFS :
cp -v ../glibc-2.16.0/sunrpc/rpc/*.h /usr/include/rpc
cp -v ../glibc-2.16.0/sunrpc/rpcsvc/*.h /usr/include/rpcsvc
cp -v ../glibc-2.16.0/nis/rpcsvc/*.h /usr/include/rpcsvc
Les locales qui permettent à votre système de répondre en une
langue différente n'ont pas été installées avec la commande
ci-dessus. Aucune n'est indispensable, mais si certaines sont
absentes, les suites de test des futurs paquets peuvent sauter des
situations de test importantes.
Vous pouvez installer les locales individuelles en utilisant le
programme localedef
Par exemple, la première commande localedef ci-dessous combine la
définition de la locale du codage indépendant /usr/share/i18n/locales/cs_CZ
avec la définition
de la page de codes /usr/share/i18n/charmaps/UTF-8.gz
et envoie le
résultat vers le fichier /usr/lib/locale/locale-archive
. Les instructions
suivantes installeront les paramètres minimums des locales
nécessaires pour le déroulement optimal des tests :
mkdir -pv /usr/lib/locale
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030
En outre, installez la locale de votre pays, de votre langue et de
votre codage.
Vous pouvez alternativement installer les locales listées dans le
fichier glibc-2.16.0/localedata/SUPPORTED
(il inclut
toutes les locales citées ci-dessus et d'autres) en une fois avec
la commande suivante qui prend beaucoup de temps :
make localedata/install-locales
Puis utilisez la commande localedef pour créer et installer
les locales non listées dans le fichier glibc-2.16.0/localedata/SUPPORTED
dans le cas peu
probable où vous en auriez besoin.
6.9.2. Configurer Glibc
Le fichier /etc/nsswitch.conf
doit
être créé parce que, bien que Glibc en fournisse un par défaut
lorsque ce fichier est manquant ou corrompu, les valeurs par défaut
de Glibc ne fonctionnent pas bien dans un environnement en réseau.
De plus, le fuseau horaire a besoin d'être configuré.
Créez un nouveau fichier /etc/nsswitch.conf
en lançant ce qui suit :
cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF
Installez timezone data (les données de fuseau horaire) :
tar -xf ../tzdata2012e.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica \
asia australasia backward pacificnew solar87 solar88 solar89 \
systemv; do
zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz}
zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
done
cp -v zone.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p Europe/Paris
unset ZONEINFO
Voici la signification de la commande zic :
-
zic -L /dev/null
...
-
Ceci crée des fuseaux horaires posix, sans sauts de secondes.
Par convention, on met cela dans zoneinfo
et dans zoneinfo/posix
. Il faut mettre les fuseaux
horaires POSIX dans zoneinfo
,
sinon diverses suites de tests renverront des erreurs. Sur un
système embarqué, où il y a peu de place et vous ne souhaitez
pas mettre à jour les fuseaux horaires, vous pouvez
économiser 1.9Mio en n'utilisant pas le répertoire
posix
, mais certaines
applications ou suites de tests pourraient donner de bons
résultats
-
zic -L
leapseconds ...
-
Ceci crée de bons fuseaux horaires incluant les décalages de
secondes. Sur un système embarqué, où il y a peu de place et
vous ne souhaitez pas mettre à jour les fuseaux horaires, ou
si vous vous moquez de la bonne heure, vous pouvez économiser
1.9Mio en ne mettant pas de répertoire right
.
-
zic ... -p
...
-
Ceci crée le fichier posixrules
. Nous utilisons New York car
POSIX exige des règles temporelles d'enregistrement à jour
quotidiennement pour respecter les règles américaines.
Une façon de déterminer dans quel fuseau horaire où vous situez
consiste à lancer le script suivant :
tzselect
Après avoir répondu à quelques questions sur votre emplacement, le
script affichera le nom du fuseau horaire (quelque chose comme
Europe/Paris). Il y a aussi
d'autres fuseaux horaires listés dans /usr/share/zoneinfo
comme America/Montreal ou EST5EDT qui ne sont pas identifiés par
le script mais qui peuvent être utilisés.
Puis créez le fichier /etc/localtime
en lançant :
cp -v --remove-destination /usr/share/zoneinfo/<xxx>
\
/etc/localtime
Remplacez <xxx>
par
le nom du fuseau horaire sélectionné (par exemple
America/Montreal).
Voici la signification de l'option de cp :
-
--remove-destination
-
Ceci est nécessaire pour forcer la suppression du lien
symbolique déjà existant. La raison pour laquelle nous
copions plutôt que de simplement créer un lien symbolique est
de se couvrir de la situation où /usr
serait une partition séparée. Ceci
pourrait arriver, par exemple, en démarrant en mode
utilisateur unique.
6.9.3. Configurer le chargeur
dynamique
Par défaut, le chargeur dynamique (/lib/ld-linux.so.2
) cherche dans /lib
et /usr/lib
les bibliothèques partagées nécessaires aux programmes lors de leur
exécution. Néanmoins, s'il existe des bibliothèques dans d'autres
répertoires que /lib
et /usr/lib
, leur emplacement doit être ajouté dans
le fichier /etc/ld.so.conf
pour que
le chargeur dynamique les trouve. /usr/local/lib
et /opt/lib
sont deux répertoires connus pour
contenir des bibliothèques supplémentaires, donc ajoutez ces deux
répertoires au chemin de recherche du chargeur dynamique.
Créez un nouveau fichier /etc/ld.so.conf
en lançant ce qui suit :
cat > /etc/ld.so.conf << "EOF"
# Début de /etc/ld.so.conf
/usr/local/lib
/opt/lib
EOF
Si vous le désirez, le chargeur dynamique peut également chercher
un répertoire et inclure le contenu de fichiers qui s'y trouvent.
Les fichiers de ce répertoire include sont en général constitués
d'une ligne spécifiant le chemin vers la bibliothèque désirée. Pour
ajouter cette possibilité, lancez les commandes suivantes :
cat >> /etc/ld.so.conf << "EOF"
# Ajout d'un répertoire include
include /etc/ld.so.conf.d/*.conf
EOF
mkdir /etc/ld.so.conf.d