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.)
Einige Pakete außerhalb von LFS empfehlen, die GNU-Software libiconv zu installieren, um Daten von einer Kodierung in eine andere umzuwandeln. Auf der Webseite des Projektes unter http://www.gnu.org/software/libiconv/ wird gesagt: „This library provides an iconv() implementation, for use on systems which don't have one, or whose implementation cannot convert from/to Unicode. “ Glibc enthält eine iconv()-Funktion und kann auch von/nach Unicode konvertieren, deshalb wird libiconv auf einem LFS-System nicht benötigt.
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 ../glibc-linuxthreads-2.3.4.tar.bz2
In bestimmten seltenen Fällen kann die Glibc abstürzen, wenn keine Standardsuchpfade existieren. Der folgende Patch behebt das Problem:
patch -Np1 -i ../glibc-2.3.4-rtld_search_dirs-1.patch
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
Wenden Sie den folgenden Patch an. Er behebt einen Fehler in der Glibc, der einige Programme am korrekten Start hindert (darunter z. B. OpenOffice.org):
patch -Np1 -i ../glibc-2.3.4-tls_assert-1.patch
Die Dokumentation von Glibc empfiehlt, zum Kompilieren einen gesonderten Ordner zu verwenden:
mkdir -v ../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 -k check >glibc-check-log 2>&1 grep Error glibc-check-log
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
To save time, an alternative to running the previous command (which generates and installs every locale listed in the glibc-2.3.4/localedata/SUPPORTED file) is to install only those locales that are wanted and needed. This can be achieved by using the localedef command. Information on this command is located in the INSTALL file in the Glibc source. However, there are a number of locales that are essential in order for the tests of future packages to pass, in particular, the libstdc++ tests from GCC. The following instructions, instead of the install-locales target used above, will install the minimum set of locales necessary for the tests to run successfully:
mkdir -pv /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 at this time. 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.
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 -v --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