10.8. Glibc-2.7
64-Bit
Le paquet Glibc contient la bibliothèque C principale. Cette
bibliothèque fournit toutes les routines de base pour allouer de la
mémoire, rechercher dans des répertoires, ouvrir et fermer des
fichiers, les lire et les écrire, gérer les chaînes, faire de la
recherche de motifs, faire de l'arithmétique etc.
10.8.1. Installation de Glibc
Le système de construction de la Glibc est autosuffisant et
s'installe parfaitement, même si notre fichier specs pour le
compilateur et l'éditeur de liens pointent toujours vers
/tools
. Les specs et l'éditeur de
liens ne peuvent pas être ajustés avant l'installation de la Glibc
parce que les tests d'autoconf de Glibc donneraient alors des
résultats faussés, défaussant ainsi notre but d'achever une
construction propre.
Le correctif suivant corrige un problème qui peut causer des
erreurs de segmentation à l'exécution de localdef :
Les correctifs suivants incorporent toutes les mises à jour issues
de la branche 2.7 des développeurs de Glibc :
patch -Np1 -i ../glibc-2.7-branch_update-1A.patch
patch -Np1 -i ../glibc-2.7-localedef_segfault-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
Tell Glibc to install its 64-bit libraries into /lib64
:
echo "slibdir=/lib64" >> configparms
Préparez la compilation de Glibc :
CC="gcc ${BUILD64}" CXX="g++ ${BUILD64}" \
CFLAGS="-mtune=generic -g -O2" \
../glibc-2.7/configure --prefix=/usr \
--disable-profile --enable-add-ons --enable-kernel=2.6.0 \
--libexecdir=/usr/lib64/glibc --libdir=/usr/lib64
The meaning of the new configure option:
-
--libexecdir=/usr/lib64/glibc
-
This changes the location of the pt_chown program from its
default of /usr/libexec
to
/usr/lib64/glibc
.
Compilez le paquet :
make
Important
La suite de tests de Glibc est considérée comme critique. Ne la
sautez sous aucun prétexte.
Testez les résultats :
make -k check >glibc-check-log 2>&1 ; grep Error glibc-check-log
La suite de tests Glibc est très dépendante de certaines fonctions
du système hôte, en particulier du noyau. Normalement, le test
posix/annexc échoue et vous devriez voir Error 1 (ignored)
dans la sortie. Excepté cela, la
suite de tests de Glibc devrait toujours passer. Néanmoins, dans
certaines circonstances, certains échecs sont inévitables. Si un
test échoue à cause d'un programme manquant (ou d'un lien
symbolique manquant), ou du fait d'une erreur de segmentation, vous
verrez un code d'erreur supérieur à 127 et les détails seront dans
le journal. De manière plus générale, les tests échoueront avec
Error 2
- pour eux le contenu du
fichier .out
, comme posix/annexc.out
peut vous donner des
informations. Voici une liste des problèmes les plus
fréquents :
-
Les tests math
échouent quelque fois. Certaines optimisations sont connues
pour être une cause de cela.
-
Si vous avez monté la partition CLFS avec l'option noatime
, le test atime échouera. Comme mentionné
dans Section 2.4,
“Monter la nouvelle partition”, n'utilisez
pas l'option noatime
lors de la construction de CLFS.
-
Lors d'une exécution sur un matériel ancien et lent, quelques
tests peuvent échouer à cause de délais dépassés.
Installez le paquet :
make install
10.8.2.
Internationalisation
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.
make localedata/install-locales
Pour gagner du temps, une alternative au lancement de la commande
précédente (qui génère et installe toutes les locales listées dans
le fichier glibc-2.7/localedata/SUPPORTED est de n'installer que
les locales nécessaires et exigées. Vous pouvez faire cela avec la
commande localedef.
Des informations sur cette commande se trouvent dans le fichier
INSTALL
des sources de Glibc.
Néanmoins, il y a un nombre de locales essentielles pour que les
tests des paquets à venir passent, en particulier les tests
libstdc++ de GCC. Les
instructions suivantes au lieu de la cible install-locales
utilisée ci-dessus,
installeront l'ensemeble minimal des locales nécessaires pour que
les tests s'exécutent avec succès :
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 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 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 it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP
Certaines locales installées par la commande make localedata/install-locales
ci-dessus ne sont pas supportées correctement par certaines
applications qui sont dans les livres CLFS et BLFS. À la vue des
divers problèmes survenus du fait de certains présupposés des
programmeurs de certaines applications, lesquelles se cassent dans
de telles locales, vous ne devriez pas utiliser CLFS dans des
locales utilisant des encodages multioctets (y compris UTF-8) ou le
sens d'écriture de droite à gauche. De nombreux correctifs non
officiels et instables sont nécessaires pour corriger ces problèmes
et les développeurs de CLFS ont décidé de ne pas supporter des
locales complexes pour l'instant. Ceci s'applique aux locales ja_JP
et fa_IR — elles n'ont été installées que pour que les tests
de GCC et de Gettext passent et le programme watch (qui fait partie du paquet
Procps) ne fonctionne pas correctement avec elles. Diverses
solutions pour contourner ces restrictions sont documentées dans
les astuces liées à l'internationalisation.
10.8.3. Configurer Glibc
Le fichier /etc/nsswitch.conf
doit
être créé car, 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 exécutant 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
Pour déterminer dans quel fuseau horaire vous vous situez, exécutez
le script suivant :
tzselect
Après avoir répondu à quelques questions sur votre localisation, le
script affichera le nom du fuseau horaire (quelque chose comme
EST5EDT ou Canada/Eastern). 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 Canada/Eastern).
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
d'anticiper la situation où /usr
est une partition séparée. Ceci
pourrait être important en démarrant en mode utilisateur
unique.
10.8.4. Configurer le chargeur
dynamique
Par défaut, be chargeur dynamique (/lib/ld-linux.so.2
pour les exécutables 3 bit et
/lib64/ld-linux-x86-64.so.2
pour les
exécutables 64 bit) cherche dans /lib
, /lib64
,
/usr/lib
et /usr/lib64
les bibliothèques dynamiques exigées
par les programmes lorsqu'ils sont exécutés. Cependant, s'il y a
des bibliothèques dans d'autres répertoires que ceux-là, ils
doivent être ajoutés au fichier /etc/ld.so.conf
afin que le chargeur dynamique
les trouve. Certains répertoires qui sont couramment connus pour
contenir des bibliothèques supplémentaires sont /usr/local/lib
, /usr/local/lib64
, /opt/lib
et /opt/lib64
, donc ajoutez ces répertoires au
chemin de recherche du chargeur dynamique.
Create a new file /etc/ld.so.conf
by
running the following:
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/usr/local/lib64
/opt/lib
/opt/lib64
# End /etc/ld.so.conf
EOF
10.8.5. Contenu de
Glibc
Programmes installés:
catchsegv, gencat, getconf, getent,
iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef,
mtrace, nscd, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln,
sprof, tzselect, xtrace, zdump et zic
Bibliothèques installées:
ld.so, libBrokenLocale.[a,so],
libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so],
libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so],
libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so,
libnss_dns.so, libnss_files.so, libnss_hesiod.so,
libnss_nis.so, libnss_nisplus.so, libpcprofile.so,
libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so],
libthread_db.so et libutil.[a,so]
Descriptions courtes
catchsegv
|
Peut être utilisé pour créer une trace de la pile
lorsqu'un programme s'arrête avec une erreur de
segmentation
|
gencat
|
Génère des catalogues de messages
|
getconf
|
Affiche les valeurs de la configuration syitème pour les
variables spécifiques à un système de fichiers
|
getent
|
Récupère les entrées à partir d'une base de données
d'administration
|
iconv
|
Réalise une conversion de l'ensemble des caractères
|
iconvconfig
|
Crée des fichiers de configuration pour le module
iconv
|
ldconfig
|
Configure les liens du chargeur dynamique
|
ldd
|
Indique les bibliothèques partagées requises pour chaque
programme ou bibliothèque partagée
|
lddlibc4
|
Assiste ldd
avec des fichiers objets
|
locale
|
Dit au compilateur d'activer ou de désactiver
l'utilisation des locales POSIX pour les opérations
construites en dur
|
localedef
|
Compile les spécifications de locale
|
mtrace
|
Lit et interprète un fichier de trace mémoire et affiche
un résumé dans un format lisible par un humain
|
nscd
|
Un démon pour les services de noms fournissant un cache
pour les requêtes les plus communes
|
pcprofiledump
|
Affiche des informations générées par un profilage du PC
|
pt_chown
|
Un programme d'aide pour que grantpt initialise les
droits des propriétaires, groupes et autres d'un
pseudo-terminal esclave
|
rpcgen
|
Génère du code C pour implémenter le protocole RPC
(Remote Procedure Call)
|
rpcinfo
|
Fait un appel RPC à un serveur RPC
|
sln
|
Un programme lié statiquement qui crée des liens
symboliques
|
sprof
|
Lit et affiche les données de profilage des objets
partagés
|
tzselect
|
Demande à l'utilisateur l'emplacement géographique du
système et donne la description du fuseau horaire
correspondante
|
xtrace
|
Trace l'exécution d'un programme en affichant la fonction
en cours d'exécution
|
zdump
|
Afficheur de fuseau horaire
|
zic
|
Compilateur de fuseau horaire
|
ld.so
|
Le programme d'aide des bibliothèques partagées
exécutables
|
libBrokenLocale
|
Utilisée par des programmes comme Mozilla pour résoudre
des locales cassées
|
libSegFault
|
Le gestionnaire de signaux d'erreurs de segmentation
|
libanl
|
Une bibliothèque asynchrone de recherche de noms
|
libbsd-compat
|
Fournit la portabilité nécessaire pour faire fonctionner
certains programmes BSD (Berkeley Software Distribution)
sous Linux
|
libc
|
La principale bibliothèque C
|
libcrypt
|
La bibliothèque de chiffrement
|
libdl
|
La bibliothèque de l'interface du chargeur dynamique
|
libg
|
Une bibliothèque d'exécution en cours pour g++
|
libieee
|
La bibliothèque de points flottants de Institute of
Electrical and Electronic Engineers (IEEE).
|
libm
|
La bibliothèque mathématique
|
libmcheck
|
Contient du code exécuté au démarrage
|
libmemusage
|
Utilisé par memusage (compris dans
Glibc mais pas compilé dans un système CLFS de base car
il a des dépendances supplémentaires) pour aider à la
récupération d'informations sur l'utilisation de la
mémoire par un programme
|
libnsl
|
La bibliothèque de services réseau
|
libnss
|
Les bibliothèques “Name Service
Switch”, contenant des fonctions de
résolution de noms d'hôtes, de noms d'utilisateurs, de
noms de groupes, d'alias, de services, de protocoles et
ainsi de suite
|
libpcprofile
|
Contient des fonctions de profilage utilisées pour tracer
le temps CPU dépensé sur les lignes de code source
|
libpthread
|
La bibliothèque threads POSIX
|
libresolv
|
Contient des fonctions de création, d'envoi et
d'interprétation de paquets pour les serveurs de noms de
domaine Internet
|
librpcsvc
|
Contient des fonctions apportant différents services RPC
|
librt
|
Contient des fonctions fournissant la plupart des
interfaces spécifiées par l'extension temps réel de
POSIX.1b
|
libthread_db
|
Contient des fonctions utiles pour construire des
débogueurs de programmes multi-threads
|
libutil
|
Contient du code pour les fonctions “standards” utilisées par de nombreux
outils Unix
|