Glibc-2.3.3-lfs-5.1

Glibc ist 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.). Die C-Bibliothek wird von allen dynamisch gelinkten Programmen verwendet.

Approximate build time:  12.3 SBU
Required disk space:     784 MB

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

Installieren von Glibc

Das Installationssystem der Glibc ist sehr eigenständig und installiert perfekt, selbst wenn die Specs-Datei unseres Compilers und der Linker immer noch auf /tools verweisen. Wir können die Specs-Datei und den Linker nicht vor der Installation von Glibc modifizieren, weil die Glibc Autoconf-Tests dann falsche Resultate ergeben würden.

Bevor Sie mit dem Kompilieren von Glibc beginnen, denken Sie daran, alle Umgebungsvariablen zurückzusetzen, die die Standard-Optimierungen überschreiben würden.

Die Glibc-Dokumentation empfiehlt, nicht im Quellordner sondern in einem gesonderten Ordner zu kompilieren:

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

Bereiten Sie nun Glibc zum Kompilieren vor:

../glibc-2.3.3-lfs-5.1/configure --prefix=/usr \
    --disable-profile --enable-add-ons=linuxthreads \
    --libexecdir=/usr/lib --with-headers=/usr/include \
    --without-cvs

Die Bedeutung der neuen configure-Optionen:

  • --libexecdir=/usr/lib: Das wird das Programm pt_chown in /usr/lib anstelle von /usr/libexec installieren. Die Verwendung von libexec wird als nicht-FHS-konform betrachtet, weil FHS diesen Ordner noch nicht einmal erwähnt.

  • --with-headers=/usr/include: Das stellt sicher, dass die Kernel-Header in /usr/include zum Kompilieren benutzt werden. Wenn Sie diese Option nicht angeben, werden die Header aus /tools/include benutzt, was nicht ideal wäre (auch wenn Sie eigentlich identisch sein sollten). Diese Option hat auch den Vorteil, dass Sie sofort merken, wenn Sie vergessen haben sollten, die Kernel-Header in /usr/include zu installieren.

Kompilieren Sie das Paket:

make
[Wichtig]

Wichtig

Die Testsuite von Glibc in diesem Abschnitt wird als absolut kritisch betrachtet. Sie sollten diesen Schritt unter keinen Umständen überspringen.

Testen Sie das Ergebnis:

make check

Die Anmerkungen zur Testsuite aus „Glibc-2.3.3-lfs-5.1“ gelten natürlich auch hier. Schlagen Sie dort nach, falls Sie irgendwelche Zweifel haben.

Auch wenn es nur eine harmlose Nachricht 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

Und installieren Sie das Paket:

make install

Die Locales wurden durch das obige Kommando nicht installiert. Holen Sie das nach:

make localedata/install-locales

Als Alternative zu dem vorigen Kommando können Sie auch nur die von Ihnen benötigten oder gewünschten Locales installieren. Das erreichen Sie mit dem Kommando localedef. Informationen dazu finden Sie in der Datei INSTALL in den Quellen zu Glibc. 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 oben verwendeten Targets install-locales installieren einen minimalen Satz von Locales, die notwendig sind, 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

Schlussendlich erzeugen wir die Linxthreads-Manpages:

make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man

Und installieren diese:

make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man install

Konfigurieren von Glibc

Wir müssen die Datei /etc/nsswitch.conf erstellen, denn obwohl Glibc bei einer fehlenden oder kaputten Datei Standardwerte vorgibt, funktionieren diese Standardwerte nicht gut in Netzwerken. Außerdem müssen wir die Zeitzone korrekt einstellen.

Erstellen Sie die neue Datei /etc/nsswitch.conf, indem Sie das folgende Kommando ausführen:

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

Um herauszufinden, in welcher Zeitzone Sie sind, führen Sie dieses Skript aus:

tzselect

Nachdem Sie ein paar Fragen zu Ihrem Standort beantwortet haben, wird das Skript den Namen Ihrer Zeitzone ausgeben, ähnlich wie EST5EDT oder Canada/Eastern. Erstellen Sie dann die Datei /etc/localtime, indem Sie folgendes ausführen:

cp --remove-destination /usr/share/zoneinfo/Canada/Eastern /etc/localtime

Die Bedeutung der Option:

  • --remove-destination: Dadurch wird das Entfernen des bereits existierenden symbolischen Links erzwungen. Der Grund, warum wir kopieren anstatt einen symbolischen Link zu benutzen, ist der, dass wir den Fall abdecken wollen, dass /usr auf einer separaten Partition liegt. Das könnte z. B. problematisch werden, wenn in den Single-User-Modus gebootet wird.

Anstelle von Canada/Eastern müssen Sie natürlich den Namen der Zeitzone einsetzen, den Ihnen tzselect ausgeben hat.

Konfigurieren des dynamischen Laders

Per Voreinstellung sucht der dynamische Lader (/lib/ld-linux.so.2) in /lib und /usr/lib nach dynamischen Bibliotheken, die von ausführbaren Programmen zur Laufzeit benötigt werden. Wenn allerdings Bibliotheken ausserhalb von /lib und /usr/lib liegen, müssen Sie diese Verzeichnisse in /etc/ld.so.conf eintragen, damit der dynamische Lader diese finden kann. Zwei Ordner, die dafür bekannt sind weitere Bibliotheken zu enthalten, sind /usr/local/lib und /opt/lib, also fügen wir diese Ordner 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

Inhalt von Glibc

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]

Kurze Beschreibung

catchsegv kann zum Erzeugen eines Stacktrace benutzt werden (wenn 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.

glibcbug erzeugt einen Fehlerbericht und verschickt ihn per E-Mail an die Bug-E-Mailadresse.

iconv führt Zeichensatzkonvertierungen durch.

iconvconfig erzeugt schnellladende iconv-Modul Konfigurationsdateien.

ldconfig konfiguriert die Laufzeitbindungen des dynamischen Linkers.

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

lddlibc4 unterstützt ldd bei Objektdateien.

locale ist ein Perl-Programm, das im Compiler die Verwendung von POSIX-Locales für eingebaute Operationen ein- bzw. ausschaltet.

localedef erzeugt Locale-Spezifikationen.

mtrace...

nscd ist der "name service cache daemon"; dieser stellt einen Zwischenspeicher für die meisten namensbasierten Anfragen zur Verfügung.

nscd_nischeck prüft, ob der sichere Modus für NIS+-Anfragen benötigt wird.

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-Kode zum Implementieren des RPC-Protokolls.

rpcinfo generiert eine RPC-Anfrage an einen RPC-Server.

sln wird zum Erzeugen von symbolischen Verknüpfungen benutzt. Das Programm ist statisch verlinkt, daher kann es zum Erzeugen symbolischer Verknüpfungen auf dynamische Bibliotheken verwendet werden, selbst wenn das System zum dynamischen Linken aus irgendwelchen Gründen nicht funktioniert.

sprof liest Profiling-Daten zu Shared-Objects und zeigt sie an.

tzselect stellt dem Anwender einige Fragen zu seinem Standort und erzeugt 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 von Programmen wie z. B. Mozilla verwendet, um Probleme mit defekten Locales aufzulösen.

libSegFault behandelt Signale zu Speicherzugriffsfehlern.

libanl ist eine Bibliothek zum asynchronen Nachschlagen von Namen.

libbsd-compat ermöglicht einigen BSD-Programmen unter Linux zu laufen.

libc ist die C-Bibliothek -- eine Sammlung von häufig genutzten Funktionen.

libcrypt ist die Kryptographie-Bibliothek.

libdl ist eine Schnittstellenbibliothek zum dynamischen Linker.

libg ist eine Laufzeitbibliothek für g++.

libieee ist die IEEE-Fließkommabibliothek.

libm ist eine Mathematik-Bibliothek.

libmcheck enthält Kode, der beim Booten ausgeführt wird.

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

libnsl ist die Bibliothek für Netzwerkdienste.

libnss* sind 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 ist 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 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 Kode für "Standard"-Funktionen, die in vielen verschiedenen Unix-Werkzeugen genutzt werden.