Glibc-2.3.3-lfs-5.1

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 :                784 Mo

L'installation de Glibc dépend de Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.

Installation de Glibc

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. Nous ne pouvons pas ajuster specs et éditeur de liens 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.

Avant de commencer à construire Glibc, rappelez-vous de ré-initialiser toutes les variables d'environnements qui surchargent les options d'optimisation par défaut.

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

Maintenant, préparez la compilation de Glibc :

../glibc-2.3.3-lfs-5.1/configure --prefix=/usr \
    --disable-profile --enable-add-ons=linuxthreads \
    --libexecdir=/usr/lib --with-headers=/usr/include \
    --without-cvs

Voici la signification des options de configure :

  • --libexecdir=/usr/lib : ceci modifie l'emplacement du programme pt_chown, dont la valeur par défaut est /usr/libexec, par /usr/lib. L'utilisation de libexec n'est pas considérée compatible avec le FHS parce que FHS ne le mentionne même pas.

  • --with-headers=/usr/include : ceci nous assure que les en-têtes du noyau situés dans /usr/include sont utilisés pour cette construction. Si vous ne passez pas cette option, alors les en-têtes provenant de /tools/include sont utilisés ce qui n'est pas idéal (bien qu'ils soient identiques). Utiliser cette option a l'avantage que vous serez immédiatement informé si vous avez oublié d'installer les en-têtes du noyau dans /usr/include.

Compilez le paquet :

make
[Important]

Important

La suite de tests de Glibc dans cette section est considérée comme critique. Notre conseil est de ne pas la laisser passer quelque soient les circonstances.

Testez les résultats :

make check

Les notes sur la suite de tests, disponibles sur la section intitulée « Glibc-2.3.3-lfs-5.1 », sont toujours appropriées ici. Assurez-vous de vous y référer si vous avez un doute.

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 petit message bien ennuyant avec :

touch /etc/ld.so.conf

Et, 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. Faites-le avec ceci :

make localedata/install-locales

Une alternative à la commande précédente est d'installer uniquement les locales que vous souhaitez. Ceci se fait en utilisant la commande localedef. Des informations là-dessus 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

Enfin, construisez les pages man de linuxthreads :

make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man

Et installez ces pages :

make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man install

Configurer Glibc

Nous allons créer le fichier /etc/nsswitch.conf 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 avec le réseau. De plus, notre 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 trouver dans quel fuseau horaire vous vous trouvez, lancez le script suivant :

tzselect

Lorsque vous aurez répondu à quelques questions sur votre emplacement, le script affichera le nom de votre 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/Canada/Eastern /etc/localtime

Voici la signification de l'option :

  • --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.

Bien sur, au lieu de Canada/Eastern, placez le nom de votre fuseau horaire, celui que le script tzselect vous a donné.

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, vous avez besoin de les ajouter 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 nous ajoutons 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, glibcbug, 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], libc_nonshared.a, 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]

Courtes descriptions

catchsegv est 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.

glibcbug crée un rapport de bogue et l'envoie à l'adresse électronique bug.

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 les fichiers objets.

locale est un programme Perl indiquant au compilateur d'activer ou de désactiver l'utilisation des locales POSIX pour les opérations internes.

localedef compile les spécifications de locale.

mtrace...

nscd est 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 est un programme d'aide de grantpt pour initialiser 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.

rpcinfo fait un appel RPC à un serveur RPC.

sln est utilisé pour créer des liens symboliques. Le programme est lié statiquement, donc il est utile pour créer des liens symboliques vers des bibliothèques dynamiques si le système de liens dynamiques n'est pas fonctionnel.

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 est un afficheur de zone horaire.

zic est le compilateur du fuseau horaire.

ld.so est le programme d'aide des bibliothèques partagées exécutables.

libBrokenLocale est utilisé par des programmes comme Mozilla pour résoudre les locales cassées.

libSegFault est un gestionnaire de signaux d'erreurs de segmentation. Il essaie de capturer ce type d'erreurs.

libanl est une bibliothèque asynchrone de recherche de noms.

libbsd-compat fournit la portabilité nécessaire pour faire fonctionner certains programmes BSD sous Linux.

libc est la principale bibliothèque C -- une collection des fonctions utilisées habituellement.

libcrypt est la bibliothèque de cryptographie.

libdl est la bibliothèque d'interface du chargeur dynamique.

libg est la bibliothèque d'exécution de g++.

libieee est la bibliothèque des nombres flottants IEEE.

libm est la bibliothèque mathématique.

libmcheck contient du code à lancer au démarrage.

libmemusage est utilisé par memusage pour collecter des informations sur l'utilisation mémoire d'un programme.

libnsl est la bibliothèque de services réseau.

libnss* sont 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 est 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 contruire des débogueurs de programmes multi-threads.

libutil contient du code pour les fonctions "standards" utilisées par de nombreux outils Unix.