Glibc enthält die C-Bibliothek. Sie stellt Systemaufrufe und grundlegende Funktionen zur Verfügung (z. B. das Zuweisen von Speicher, Durchsuchen von Ordnern, Öffnen und Schließen sowie Schreiben von Dateien, Zeichenkettenverarbeitung, Mustererkennung, Arithmetik etc.)
Dieses Paket funktioniert unter Umständen nicht fehlerfrei, wenn die voreingestellten Optionen für Compiler-Optimierungen übergangen werden. (Dazu gehören auch -march und -mcpu.) Daher sollten die entsprechenden Umgebungsvariablen (wie z. B. CFLAGS und CXXFLAGS) für den Kompiliervorgang zurückgesetzt oder entsprechend abgeändert werden.
Das Installationssystem der Glibc ist sehr unabhängig und lässt sich perfekt installieren, selbst wenn die specs-Datei unseres Compilers und der Linker immer noch auf /tools verweisen. Sie können die specs-Datei und den Linker nicht vor der Installation von Glibc modifizieren, weil die Autoconf-Tests von Glibc dann falsche Resultate ergeben würden.
Das Tar-Archiv von Linxthreads enthält unter anderem auch die Man-Pages für die von Glibc installierte Threading-Bibliothek. Entpacken Sie das Tar-Archiv innerhalb des GLibc Quellordners:
tar -xjvf /sources/glibc-linuxthreads-2.3.4.tar.bz2
Glibc enthält zwei Testsuites die fehlschlagen, wenn der laufende Kernel 2.6.11.x ist. Das Problem sind hier die Tests selbst, nicht die libc oder der Kernel. Wenn Sie die Testsuite durchlaufen lassen möchten, wenden Sie diesen Patch an:
patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch
Die Dokumentation von Glibc empfiehlt, zum Kompilieren einen gesonderten Ordner zu verwenden:
mkdir ../glibc-build cd ../glibc-build
Bereiten Sie Glibc zum Kompilieren vor:
../glibc-2.3.4/configure --prefix=/usr \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
Die Bedeutung der neuen Parameter zu configure:
Dadurch wird das Programm pt_chown in /usr/lib/glibc anstelle von /usr/libexec installiert.
Kompilieren Sie das Paket:
make
In diesem Abschnitt wird die Testsuite von Glibc als absolut kritisch betrachtet. Sie sollten diesen Schritt unter keinen Umständen überspringen.
Testen Sie das Ergebnis:
make check
Die Testsuite von Glibc ist sehr stark von einigen Funktionen Ihres Host-Systems abhängig, insbesondere dem Kernel. Grundsätzlich wird erwartet, dass die Testsuite fehlerfrei durchläuft. Nichtsdestotrotz können Fehler unter bestimmten Umständen manchmal nicht vermieden werden. Hier ist eine Liste der uns allgemein bekannten Probleme:
Der math-Test schlägt manchmal fehl, wenn Sie ein System mit einer älteren Intel- oder AMD-CPU verwenden. Bestimmte Optimierungseinstellungen haben hier ebenfalls einen gewissen Einfluss.
Der gettext-Test schlägt manchmal aufgrund von Host-bedingten Problemen fehl. Die genauen Ursachen sind bislang nicht ganz geklärt.
Falls Sie die LFS-Partition mit der Option noatime eingehängt haben, wird der atime-Test fehlschlagen. Wie schon unter Abschnitt 2.4, „Einhängen (mounten) der neuen Partition“ erwähnt wurde, sollten Sie den Parameter noatime beim Bau von LFS nicht verwenden.
Auf alter oder langsamer Hardware können einige Tests aufgrund von Zeitüberschreitungen fehlschlagen.
Auch wenn es nur eine harmlose Meldung ist, die Installationsroutine von Glibc wird sich über die fehlende Datei /etc/ld.so.conf beschweren. Beheben Sie diese störende Warnung mit:
touch /etc/ld.so.conf
Installieren Sie das Paket:
make install
Die Locales wurden durch das obige Kommando nicht mitinstalliert. Holen Sie das nun nach:
make localedata/install-locales
Alternativ können Sie auch nur die von Ihnen benötigten oder gewünschten Locales installieren. Das geht mit dem Kommando localedef. Detailliertere Informationen dazu finden Sie in der Datei INSTALL aus den Quellen von Glibc. Es gibt jedoch einige Locales die für die Tests von weiteren Paketen vorausgesetzt werden: z. B. die libstdc++-Tests von GCC. Die folgenden Anweisungen installieren einen minimalen Satz von notwendigen Locales, um die nachfolgenden Tests erfolgreich durchführen zu können:
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
Einige der von make localedata/install-locales installierten Locales werden von bestimmten Anwendungen im LFS- bzw. BLFS-Buch nicht richtig unterstützt. Viele Programmierer machen falsche Annahmen zu Locales. Daraus entstehen Probleme, die die Locales zerstören. Aus diesem Grund sollten Sie LFS nicht mit Multibyte-Locales (inkl. UTF-8) oder Rechts-nach-Links-Schrift verwenden. Um diese komplexen Locales zu unterstützen sind viele unoffizielle und instabile Patches nötig. Das betrifft auch die Locales ja_JP und fa_IR—sie wurden nur installiert, damit GCC und Gettext keine Probleme in den Testsuites haben. Das Programm watch aus dem Paket Procps funktioniert z. B. nicht richtig in diesen Locales. Verschiedene Versuche, diese Restriktionen zu umgehen, sind in den Tipps zur internationalisierung nachzulesen.
Erzeugen Sie nun die Man-pages von linuxthreads, sie sind eine großartige Referenz zur Threading-Programmierschnittstelle (auch auf NPTL anwendbar):
make -C ../glibc-2.3.4/linuxthreads/man
Installieren Sie diese:
make -C ../glibc-2.3.4/linuxthreads/man install
Sie müssen die Datei /etc/nsswitch.conf erstellen. Glibc gibt zwar Standardwerte vor wenn die Datei fehlt oder beschädigt ist, aber diese funktionieren nicht besonders gut mit Netzwerken. Außerdem müssen Sie die Zeitzone korrekt einstellen.
Erstellen Sie nun die Datei /etc/nsswitch.conf:
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
Mit diesem Skript finden Sie heraus, in welcher Zeitzone Sie sich befinden:
tzselect
Nachdem Sie ein paar Fragen zu Ihrem Standort beantwortet haben, wird das Skript den Namen Ihrer Zeitzone ausgeben. Die Ausgabe könnte z. B. EST5EDT oder Canada/Eastern lauten. Erstellen Sie dann die Datei /etc/localtime, indem Sie folgendes ausführen:
cp --remove-destination /usr/share/zoneinfo/[xxx] \ /etc/localtime
Anstelle von [xxx] müssen Sie natürlich den Namen der Zeitzone einsetzen, der Ihnen von tzselect ausgegeben wurde (z. B Canada/Eastern).
Die Bedeutung der Option zu cp:
Dadurch wird das Entfernen des bereits vorhandenen symbolischen Links erzwungen. Sie ersetzen den Link durch eine Kopie der echten Datei, weil wir den Fall abdecken wollen, das /usr auf einer separaten Partition liegen könnte. Das würde z. B. dann problematisch werden, wenn der Single-User-Modus gebootet wird.
Per Voreinstellung sucht der dynamische Lader (/lib/ld-linux.so.2) in /lib und /usr/lib nach den dynamischen Bibliotheken, die zur Laufzeit von ausführbaren Programmen benötigt werden. Wenn die benötigten Bibliotheken allerdings außerhalb von /lib und /usr/lib liegen, müssen Sie diese Ordner in /etc/ld.so.conf eintragen, damit der dynamische Lader sie finden kann. Zwei Ordner sind dafür bekannt, weitere Bibliotheken zu enthalten: /usr/local/lib und /opt/lib. Diese Ordner fügen Sie gleich mit in den Suchpfad ein.
Erstellen Sie die neue Datei /etc/ld.so.conf mit dem folgenden Kommando:
cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF