Installieren von Glibc-2.3.2

Geschätzte Kompilierzeit:              11.8 SBU
Ungefähr benötigter Festplattenplatz:  800 MB

Inhalt von Glibc

Glibc ist die C Bibliothek, sie stellt Systemaufrufe und grundlegende Funktionen wie open, malloc, printf usw. zur Verfügung. Die C Bibliothek wird von allen dynamisch gelinkten Programmen verwendet.

Installierte Programme: 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 und zic

Installierte Bibliotheken: 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 und libutil.[a,so]

Glibc Installationsabhängigkeiten

Glibc ist abhängig von: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.

Glibc Installation

Bevor sie mit der Installation von Glibc beginnen, müssen sie mit cd in das glibc-2.3.2 Verzeichnis wechseln und dort Glibc-linuxthreads entpacken. Entpacken sie Glibc-linuxthreads nicht dort wo sie sonst die Archive entpacken würden, sondern in das Glibc Verzeichnis hinein.

Anmerkung: In diesem Kapitel werden wir die Test-suite für Glibc durchlaufen lassen. Wir sollten allerdings erwähnen, das die Test-suite in diesem Kapitel nicht als kritisch eingestuft wird und nicht so wichtig ist wie in Kapitel 6.

Dieses Paket funktioniert nicht gut wenn nicht die Standard Optimierungseinstellungen (inklusive der -march und -mcpu Optionen) benutzt werden. Deshalb sollten event. gesetzte Umgebungsvariablen die die Standard Optimierung überschreiben - zum Beispiel CFLAGS und CXXFLAGS - für den Kompiliervorgang von Glibc zurückgesetzt oder entsprechend abgeändert werden.

Grundsätzlich kann man sagen, wenn sie von dem in diesem Buch beschriebenen Weg zum kompilieren von Glibc abweichen, riskieren sie die Stabilität ihres gesamten LFS Systems.

Auch wenn es nur eine harmlose Meldung ist, die Installationsphase von Glibc wird sich über das fehlen von /tools/etc/ld.so.conf beschweren. Verhindern sie diese störende Meldung:

mkdir /tools/etc
touch /tools/etc/ld.so.conf

Zusätzlich hat die Glibc ein Problem, wenn sie mit GCC 3.3.1 kompiliert wird. Wenden sie den folgenden Patch an um das Problem zu beheben:

patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch

Die Glibc Dokumentation empfiehlt, nicht im Quellenverzeichnis sondern in einem dafür dedizierten Verzeichnis zu kompilieren:

mkdir ../glibc-build
cd ../glibc-build

Als nächstes bereiten sie Glibc zum kompilieren vor:

../glibc-2.3.2/configure --prefix=/tools \
    --disable-profile --enable-add-ons \
    --with-headers=/tools/include \
    --with-binutils=/tools/bin \
    --without-gd

Die Bedeutung der configure Optionen:

Während dieser Phase bemerken sie möglicherweise die folgende Warnung:

configure: WARNING:
*** These auxiliary programs are missing or incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Das fehlende oder inkompatible Programm msgfmt ist normalerweise harmlos, aber manchmal kann es zu Fehlern beim durchlaufen der Test-suite führen.

Kompilieren sie das Paket:

make

Starten sie die Test-suite:

make check

Die Glibc Test-suite ist sehr stark von einigen Funktionen ihres Host-Systems abhängig, vor allem dem Kernel. Zusätzlich können in diesem Kapitel einige Tests von der Umgebung ihres Host-Systems beeinflusst werden. Diese werden natürlich kein Problem mehr sein, wenn wir später die Glibc Test-suite in der chroot Umgebung in Kapitel 6 ausführen. Grundsätzlich erwarten wir, das die Glibc Test-suite fehlerfrei durchläuft. Nichtsdestotrotz können Fehler unter bestimmten Umständen manchmal nicht vermieden werden. Hier ist eine Liste der uns allgemein bekannten Probleme:

Machen sie sich keine allzugrossen Gedanken wenn ein paar Glibc-Tests in diesem Kapitel fehlschlagen. Die Glibc aus Kapitel 6 ist diejenige die wir endgültig verwenden werden, erst dort ist es wirklich wichtig das die Tests erfolgreich durchlaufen. Aber denken sie daran, selbst in Kapitel 6 können immer noch Fehler auftreten -- beim math Test zum Beispiel. Wenn ein Fehler auftritt, notieren sie ihn, dann fahren sie mit make check fort. Die Test-suite sollte dann dort fortfahren wo sie aufgehört hat. Sie können dieses stoppen und starten umgehen indem sie make -k check aufrufen. Aber wenn sie das tun, stellen sie sicher das sie die Ausgaben mitloggen damit sie später die Logdatei nach den aufgetretenen Fehlern durchsuchen können.

Nun installieren sie das Paket:

make install

Verschiedene Länder und Kulturen haben auch unterschiedliche Konventionen zum kommunizieren. Diese Konventionen reichen von einfachen, wie zum Beispiel dem Format für Datum und Uhrzeit, bis hin zu sehr komplexen Konventionen, wie zum Beispiel der gesprochenen Sprache. Die "internationalisierung" von GNU Programmen funktioniert mithilfe der sogenannten locales. Wir installieren nun die Glibc locales:

make localedata/install-locales

Als Alternative zu dem vorigen Kommando können sie auch nur die locales installieren die sie brauchen oder wollen. Das erreichen sie mit dem localedef Kommando. Informationen dazu finden sie in der Datei INSTALL in den Quellen zu glibc-2.3.2. Jedoch gibt es einige locales die essentiell für die Tests von weiteren Paketen sind, im einzelnen die libstdc++ Tests von GCC. Die folgenden Anweisungen anstelle des install-locales target oben installieren einen minimalen Satz an locales die notwendig sind um die nachfolgenden Tests erfolgreich abschliessen zu können:

mkdir -p /tools/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 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