6.9. Glibc-2.5.1

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

Geschätzte Kompilierzeit: 19,5 SBU inklusive Testsuite
Ungefähr benötigter Festplattenplatz: 556 MB inklusive Testsuite

6.9.1. Installation von Glibc

[Anmerkung]

Anmerkung

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.

Das Installationssystem der Glibc ist sehr eigenständig 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 glibc-libidn fügt der Glibc Unterstützung für länderspezifische Domänennamen hinzu (IDN). Viele Programme, die IDN unterstützen, benötigen allerdings die vollständige Bibliothek libidn (siehe http://www.linuxfromscratch.org/blfs/view/svn/general/libidn.html), und nicht diese Erweiterung. Entpacken Sie das Tar-Archiv innerhalb des Glibc-Quellordners:

tar -xvf ../glibc-libidn-2.5.1.tar.gz
mv glibc-libidn-2.5.1 libidn

Unter Verwendung der locale vi_VN.TCVN verbleibt die bash beim Start in einer Endlosschleife. Ob dies ein Fehler der bash oder von Glibc ist, ist derzeit nicht bekannt. Verhindern Sie das Problem, indem Sie diese locale von der Installation ausschließen:

sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED

Während make install läuft, wird ein Skript namens test-installation.pl ausgeführt, welches die neu installierte Glibc überprüft. Unsere Toolchain zeigt jedoch noch auf den Ordner /tools, woraufhin die falsche Glibc getestet werden würde. Sie können das Skript zwingen, die richtige Glibc zu testen. Verwenden Sie dazu dieses Kommando:

sed -i \
's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \
        scripts/test-installation.pl

Das Shell-Skript ldd enthält Bash-spezifische Syntax. Ändern Sie daher bitte den Befehlsinterpreter zu /bin/bash für den Fall, dass ein anderes Kommando für /bin/sh installiert wird (wie z. B. im Kapitel shells von BLFS beschrieben):

sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in

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.5.1/configure --prefix=/usr \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc

Die Bedeutung der neuen Parameter zu configure:

--libexecdir=/usr/lib/glibc

Dadurch wird das Programm pt_chown in /usr/lib/glibc anstelle von /usr/libexec installiert.

Kompilieren Sie das Paket:

make
[Wichtig]

Wichtig

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 2>&1 | tee glibc-check-log
grep Error glibc-check-log

Wahrscheinlich werden Sie einen erwarteten (ignorierten) Fehler im posix/annexc-Test bemerken. Des Weiteren ist die Glibc-Testsuite ein wenig vom Host-System abhängig. Dies ist eine Liste der häufigsten Fehler:

  • Der nptl/tst-cancel1-Test wird fehlschlagen, wenn die 4.1-Serie von GCC zum Einsatz kommt.

  • Die Tests nptl/tst-clock2 und tst-attr3 schlagen manchmal fehl. Der Grund dafür ist nicht völlig klar; die Ursache könnte mit hoher Systemlast zusammenhängen.

  • Der math-Test schlägt manchmal fehl, wenn Sie ein System mit einer älteren Intel- oder AMD-CPU verwenden.

  • 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 oder unter hoher Systemlast 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, mit deren Hilfe Systemmeldungen in Ihrer Sprache ausgegeben werden können, wurden durch das obige Kommando nicht mitinstalliert. Diese Locales werden nicht unbedingt benötigt, jedoch würden einige Testsuites der noch folgenden Pakete ohne sie ein paar wichtige Tests überspringen.

Mit dem Kommando localedef können Sie auch einen individuellen Satz an Locales installieren. Das erste untenstehende Kommando kombiniert beispielsweise die Zeichensatz-unabhängige Localedefinition /usr/share/i18n/locales/de_DE mit der Zeichensatzdefinition /usr/share/i18n/charmaps/ISO-8859-1.gz und fügt das Ergebnis an /usr/lib/locale/locale-archive an. Mit den folgenden Kommandos erstellen Sie einen minimalen Satz Locales, die für die kommenden Testsuites benötigt werden:

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 en_US -f UTF-8 en_US.UTF-8
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 fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP

Installieren Sie zudem auch noch die Locale für Ihr Land, Ihre Sprache und Ihren Zeichensatz.

Alternativ können Sie auch alle Locales auf einmal installieren, die in glibc-2.5.1/localedata/SUPPORTED aufgelistet werden (die Liste enthält die obigen Locales und noch viele weitere). Dieses Kommando benötigt allerdings ein wenig Zeit:

make localedata/install-locales

Im unwahrscheinlichen Fall, dass Sie noch weitere Locales benötigen, verwenden Sie das Kommando localedef, um die nicht in glibc-2.5.1/localedata/SUPPORTED gelisteten Locales zu installieren.

6.9.2. Einrichten von Glibc

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. Europe/Berlin lauten.

Erstellen Sie dann mit dem folgenden Kommando die Datei /etc/localtime:

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. Europe/Berlin).

Die Bedeutung der Option zu cp:

--remove-destination

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, dass /usr auf einer separaten Partition liegen könnte. Das würde z. B. dann problematisch werden, wenn der Single-User-Modus gebootet wird.

6.9.3. Einrichten des dynamischen Laders

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

6.9.4. Inhalt von Glibc

Installierte Programme: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, 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}, libcidn.so, libcrypt.{a,so}, libdl.{a,so}, libg.a, libieee.a, libm.{a,so}, libmcheck.a, libmemusage.so, libnsl.{a,so}, 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}

Kurze Beschreibungen

catchsegv

Kann zum Erzeugen eines Stacktrace benutzt werden (falls ein Programm mit einem Speicherzugriffsfehler abstürzt).

gencat

Erzeugt Nachrichtenkataloge.

getconf

Zeigt System-Konfigurationswerte für dateisystemspezifische Variablen an.

getent

Liest Einträge aus einer administrativen Datenbank.

iconv

Führt Zeichensatzkonvertierungen durch.

iconvconfig

Erzeugt schnellladende iconv Konfigurationsdateien.

ldconfig

Richtet die Laufzeitbindungen des dynamischen Linkers ein.

ldd

Gibt aus, welche gemeinsamen Bibliotheken von einem Programm oder einer Bibliothek benötigt werden.

lddlibc4

Unterstützt ldd bei der Arbeit mit Objektdateien.

locale

Zeigt verschiedene Informationen über die aktuelle Locale an.

localedef

Erzeugt Locale-Spezifikationen.

mtrace

Liest und interpretiert eine Speicher-Rückverfolgungsdatei und gibt eine normal lesbare Zusammenfassung aus.

nscd

Der „name service cache daemon“; er stellt einen Zwischenspeicher für die meisten namensbasierten Anfragen zur Verfügung.

pcprofiledump

Gibt Informationen aus, die durch PC-Profiling erzeugt wurden.

pt_chown

Ist ein Hilfsprogramm zu grantpt. Es setzt Besitzer, Gruppe und Zugriffsberechtigungen von Slave-Pseudo-Terminals.

rpcgen

Erzeugt C-Code zum Implementieren des RPC-Protokolls.

rpcinfo

Generiert eine RPC-Anfrage an einen RPC-Server.

sln

Dies ist die statisch gelinkte Variante von ln.

sprof

Liest Profiling-Daten zu Shared-Objects und zeigt sie an.

tzselect

Stellt dem Anwender einige Fragen zu seinem Standort und erzeugt aus den Antworten eine passende Zeitzonenbeschreibung.

xtrace

Verfolgt den Durchlauf eines Programmes, indem es die jeweils ausgeführte Funktion ausgibt.

zdump

Gibt Zeitzonen aus.

zic

Ist ein Compiler für Zeitzonen.

ld.so

Ist ein Hilfsprogramm für ausführbare gemeinsame Bibliotheken.

libBrokenLocale

Wird intern von der GLibc verwendet, um kaputte Programme (z. B. einige Motif-Programme) zum Laufen zu bekommen. Schauen Sie sich dazu die Kommentare in glibc-2.5.1/locale/broken_cur_max.c an.

libSegFault

Kümmert sich um die Verarbeitung von Speicherzugriffsfehlern; wird von catchsegv eingesetzt.

libanl

Eine Bibliothek zum asynchronen Nachschlagen von Namen.

libbsd-compat

Mit Hilfe dieser Bibliothek können einige BSD-Programme (Berkeley Software Distribution) unter Linux ausgeführt werden.

libc

Dies ist die C-Bibliothek.

libcidn

Wird intern von der Glibc zur Unterstützung von internationlisierten Domänennamen mit der Funktion getaddrinfo() verwendet.

libcrypt

Dies ist die Kryptographie-Bibliothek.

libdl

Eine Schnittstellenbibliothek zum dynamischen Linker.

libg

Eine Dummy-Bibliothek ohne jegliche Funktionen. Dies war früher eine Laufzeitbibliothek für g++.

libieee

Das Einbinden (verlinken) dieses Moduls erzwingt die Regeln der IEEE (Institute of Electrical and Electronic Engineers) zur Fehlerbehandlung mathematischer Funktionen. Standard sind die POSIX.1-Regeln zur Fehlerbehandlung.

libm

Die mathematische Bibliothek.

libmcheck

Das Einbinden (verlinken) dieses Moduls schaltet Prüfungen der Speicherzuordnungen ein.

libmemusage

Wird von memusage verwendet und hilft beim Sammeln von Informationen über die Speichernutzung eines Programms.

libnsl

Dies ist die Bibliothek für Netzwerkdienste.

libnss

Die Name Service Switch-Bibliotheken. Sie enthalten Funktionen zum Auflösen von Hostnamen, Benutzernamen, Gruppennamen, Aliasen, Diensten, Protokollen und so weiter.

libpcprofile

Enthält Profiling-Funktionen, die zum Verfolgen der CPU-Benutzung einzelner Quelltextzeilen verwendet werden können.

libpthread

Die POSIX-Threads-Bibliothek.

libresolv

Enthält Funktionen zum Erzeugen, Senden und Auswerten von Paketen an Internet Domain Name Server (DNS).

librpcsvc

Enthält Funktionen, die verschiedene RPC-Dienste zur Verfügung stellen.

librt

Diese Bibliothek enthält Funktionen mit Schnittstellen für die meisten POSIX.1b Echtzeiterweiterungen.

libthread_db

Enthält Funktionen, die zum Erzeugen von Debuggern für Multi-Thread-Programme nützlich sind.

libutil

Enthält Code für „Standard“-Funktionen, die in vielen verschiedenen Unix-Werkzeugen genutzt werden.