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.
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.
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-20040701/configure --prefix=/usr \ --disable-profile --enable-add-ons=nptl --with-tls \ --with-__thread --enable-kernel=2.6.0 --without-cvs \ --libexecdir=/usr/lib/glibc \ --with-headers=/tools/glibc-kernheaders
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
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.
Le test atime échoue parfois lorsque la
partition LFS est montée avec l'option
noatime
.
Le test shm peut échouer quand le système
hôte utilise le système de fichiers devfs
mais n'a pas monté le système de fichiers
tmpfs
sur /dev/shm
. Ceci survient à cause d'un manque de
support de tmpfs
dans le
noyau.
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 connait) 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
Some locales installed by the make localedata/install-locales command above are not properly supported by some applications that are in the LFS and BLFS books. Because of the various problems that arise due to application programmers making assumptions that break in such locales, LFS should not be used in locales that utilize multibyte character sets (including UTF-8) or right-to-left writing order. Numerous unofficial and unstable patches are required to fix these problems, and it has been decided by the LFS developers not to support such complex locales. This applies to the ja_JP and fa_IR locales as well—they have been installed only for GCC and Gettext tests to pass, and the watch program (part of the Procps package) does not work properly in them. Various attempts to circumvent these restrictions are documented in internationalization-related hints.
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-20040701/linuxthreads/man
Installez ces pages :
make -C ../glibc-2.3.4-20040701/linuxthreads/man install
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
avec le 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.
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
Peut être utilisé pour créer une trace de la pile lorsqu'un programme s'arrête avec une erreur de segmentation
Génère des catalogues de messages
Affiche les valeurs de configuration du système pour les variables spécifiques du système de fichiers
Récupère les entrées à partir d'une base de données administrative
Réalise une conversion de l'ensemble des caractères
Crée un fichier de configuration pour le module iconv fastloading
Configure les liens du chargeur dynamique
Indique les bibliothèques partagées requises pour chaque programme ou bibliothèque partagée
Assiste ldd avec des fichiers objets
Indique au compilateur d'activer ou de désactiver l'utilisation des locales POSIX pour les opérations internes
Compile les spécifications des locales
Lit et interprète un fichier de trace mémoire et affiche un résumé dans un format lisible par un humain
Un démon pour les services de noms fournissant un cache pour les requêtes les plus communes
Vérifie si le mode sécurisé est nécessaire pour les recherches NIS+
Affiche des informations générées par un profilage du PC
un programme d'aide pour que grantpt initialise les droits des propriétaires, groupes et autres d'un pseudo-terminal esclave
Génère du code C pour implémenter le protocole RPC (Remote Procecure Call)
Fait un appel RPC à un serveur RPC
Un programme ln lié statiquement
Lit et affiche les données de profilage des objets partagés
Demande à l'utilisateur l'emplacement géographique du système et donne la description du fuseau horaire correspondante
Trace l'exécution d'un programme en affichant la fonction en cours d'exécution
Afficheur de fuseau horaire
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 contruire des débogueurs de programmes multi-threads
libutil
Contient du code pour les fonctions « standard » utilisées par de nombreux outils Unix