Glibc-2.3.4

Le paquet Glibc contient la bibliothèque C principale. Cette bibliothèque fournit toutes les routines basiques pour allouer de la mémoire, rechercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes, faire correspondre des modèles, faire de l'arithmétique et ainsi de suite.

Temps de construction approximatif: 12,3 SBU
Espace disque requis: 476 Mo
L'installation dépend de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed et Texinfo

Installation de Glibc

Ce paquet est connu pour avoir des soucis quand les options d'optimisation par défaut (en incluant les options -march et -mcpu) sont modifiées. Donc, si des variables d'environnement qui surchargent les optimisations par défaut, telles que CFLAGS et CXXFLAGS, ont été définies, supprimez cette initialisation pour la construction de GCC.

Le système de construction de la Glibc est très bien fait et s'installera 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.

L'archive tar linuxthreads contient les pages man pour les bibliothèques de threading installées par Glibc. Déballez l'archive tar à l'intérieur du répertoire source Glibc :

tar -xjvf /sources/glibc-linuxthreads-2.3.4.tar.bz2

Glibc contient deux tests qui échoueront si le noyau en cours d'exécution est un 2.6.11.x. Le problème se situe sur les tests eux-même, pas avec la libc ou le noyau. Ce correctif corrige le problème :

patch -Np1 -i ../glibc-2.3.4-fix_test-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 ../glibc-build
cd ../glibc-build

Préparez la compilation de Glibc :

../glibc-2.3.4/configure --prefix=/usr \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc

Voici la signification des options de configure :

--libexecdir=/usr/lib/glibc

Ceci modifie l'emplacement du programme pt_chown, dont la valeur par défaut est /usr/libexec, par /usr/lib/glibc.

Compilez le paquet :

make
[Important]

Important

Dans cette section, la suite de tests de Glibc est considérée comme critique. Ne pas la laissez passer quelque soient les circonstances.

Testez les résultats :

make check

La suite de tests Glibc est grandement dépendante de certaines fonctions de l'hôte système, en particulier le noyau. En général, la suite de tests Glibc devrait toujours réussir. Néanmoins, dans certaines circonstances, quelques échecs sont inévitables. Voici une liste des problèmes les plus fréquents :

  • Les tes math échouent quelque fois lors de leur exécution sur des systèmes où le processeur n'est pas un Intel ou un AMD authentique. Certains paramétrages d'optimisation sont aussi un facteur connu pour ce type de problèmes.

  • Les tests gettext échouent quelque fois à cause de problèmes sur le système hôte, les raisons exactes n'étant pas encore claires.

  • Si vous avez monté la partition LFS avec l'option noatime, le test atime échouera. Comme mentionné dans la section intitulée « Monter la nouvelle partition », n'utilisez pas l'option noatime lors de la construction de LFS.

  • Lors d'une exécution sur un matériel ancien et lent, quelques tests peuvent échouer à cause de délais excédés.

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

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. Installez-les avec ceci :

make localedata/install-locales

Pour gagner du temps, une alternative à la commande précédente (qui génère et installe toutes les locales qu'il connaît) est d'installer uniquement les locales que vous souhaitez et dont vous avez besoin. Ceci se fait en utilisant la commande localedef. Des informations sur cette commande sont disponibles dans le fichier INSTALL des sources de Glibc. Néanmoins, il existe un certain nombre de locales essentielles pour réussir les tests des paquets futurs, en particulier les tests de libstdc++. Les instructions suivantes, contrairement à la cible install-locales ci-dessus, installeront l'ensemble minimal des locales nécessaires pour que les tests se passent dans de bonnes conditions :

mkdir -p /usr/lib/locale
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 comprises dans les livres LFS et BLFS. À cause des différents problèmes survenus parce que les développeurs des applications ont fait dex choix qui ont cassé ces locales, LFS ne devrait pas être utilisé avec des locales qui utilisent des ensembles de caractères à plusieurs octets (ceci incluant UTF-8) ou l'ordre d'écriture de droite à gauche. De nombreux correctifs officieux et instables sont requis pour corriger ces problèmes et il a été décidé par les développeurs de LFS que ces locales complexes ne seraient pas supportées. Ceci s'applique aussi aux locales ja_JP et fa_IR—elles ont été installés seulement pour que les tests de GCC et Gettext réussissent bien que le programme watch (un composant du paquetage Procps) ne fonctionne pas correctement avec elles. Différents essais pour contourner ces restrictions sont documentés dans les astuces relatives à l'internationalisation.

Construisez les pages man de linuxthreads qui sont une grande référence à l'API des threads (applicable aussi à NPTL) :

make -C
../glibc-2.3.4/linuxthreads/man

Installez ces pages :

make -C ../glibc-2.3.4/linuxthreads/man
install

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"
# Début /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# Fin /etc/nsswitch.conf
EOF

Pour déterminer dans quel fuseau horaire vous vous situez, lancez le script suivant :

tzselect

Lorsque avoir répondu à quelques questions sur votre emplacement, le script affichera le nom du fuseau horaire (quelque chose comme EST5EDT ou Canada/Eastern). Ensuite, créez le fichier /etc/localtime en lançant :

cp --remove-destination
/usr/share/zoneinfo/[xxx] \
    /etc/localtime

Remplacez [xxx] avec le nom du fuseau horaire que tzselect a fourni (c'est-à-dire 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 de se couvrir de la situation où /usr serait une partition séparée. Ceci pourrait arriver, par exemple, en démarrant en mode simple utilisateur.

Configurer le chargeur dynamique

Par défaut, le chargeur dynamique (/lib/ld-linux.so.2) cherche les bibliothèques partagées, nécessaires aux programmes lors de leur exécution, dans /lib et /usr/lib. 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 /etc/ld.so.conf

/usr/local/lib
/opt/lib

# Fin /etc/ld.so.conf
EOF

Contenu de Glibc

Programmes installés: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, 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 configuration du système pour les variables spécifiques du système de fichiers

getent

Récupère les entrées à partir d'une base de données administrative

iconv

Réalise une conversion de l'ensemble des caractères

iconvconfig

Crée un fichier de configuration pour le module iconv fastloading

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

Indique au compilateur d'activer ou de désactiver l'utilisation des locales POSIX pour les opérations internes

localedef

Compile les spécifications des locales

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

nscd_nischeck

Vérifie si le mode sécurisé est nécessaire pour les recherches NIS+

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 Procecure Call)

rpcinfo

Fait un appel RPC à un serveur RPC

sln

Un programme ln lié statiquement

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é par des programmes comme Mozilla pour résoudre les locales cassées

libSegFault

Un 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 sous Linux

libc

La principale bibliothèque C

libcrypt

La bibliothèque de cryptographie

libdl

La bibliothèque de l'interface du chargeur dynamique

libg

Une bibliothèque d'exécution pour g++

libieee

La bibliothèque des nombres flottants IEEE (Institute of Electrical and Electronic Engineers)

libm

La bibliothèque mathématique

libmcheck

Contient du code à lancer au démarrage

libmemusage

Utilisé par memusage pour collecter des informations sur l'utilisation mémoire d'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 « standard » utilisées par de nombreux outils Unix