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: 12.3 SBU
Ungefähr benötigter Festplattenplatz: 784 MB
Glibc ist abhängig von: Bash, Binutils, Coreutils,
Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed und Texinfo
6.11.1. Installieren von Glibc
Dieses Paket funktioniert nicht gut, wenn nicht die Standard
Optimierungseinstellungen (inklusive der Optionen -march und -mcpu) benutzt werden. Deshalb sollten
eventuell gesetzte Umgebungsvariablen, die die Standardoptimierung
überschreiben - zum Beispiel CFLAGS und
CXXFLAGS - für den Kompiliervorgang
zurückgesetzt oder entsprechend abgeändert werden.
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. Sie 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.
Die Glibc-Dokumentation empfiehlt, nicht im Quellordner sondern in
einem gesonderten Ordner zu kompilieren:
mkdir ../glibc-build
cd ../glibc-build
Bereiten Sie Glibc zum Kompilieren vor:
../glibc-2.3.4-20040701/configure --prefix=/usr \
--disable-profile --enable-add-ons=nptl --with-tls \
--with-__thread --enable-kernel=2.6.0 --without-cvs \
--libexecdir=/usr/lib/glibc \
--with-headers=/tools/glibc-kernheaders
Die Bedeutung der neuen configure-Option:
-
--libexecdir=/usr/lib/glibc
-
Das wird das Programm pt_chown in /usr/lib/glibc anstelle von /usr/libexec installieren.
Kompilieren Sie das Paket:
make
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 Glibc Testsuite ist sehr stark von einigen Funktionen Ihres
Host-Systems abhängig, insbesondere dem Kernel. Grundsätzlich wird
erwartet, dass die Glibc-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 besitzen. Bestimmte Optimierungseinstellungen
haben hier ebenfalls einen gewissen Einfluss.
-
Der gettext-Test
schlägt manchmal aufgrund von Host-System bedingten Problemen
fehl. Die genauen Ursachen sind noch nicht ganz geklärt.
-
Der atime-Test schlägt
fehl, wenn die LFS-Partition mit der Option noatime eingehängt wurde.
-
Der shm-Test kann
fehlschlagen, wenn auf dem Host-System das Dateisystem
devfs verwendet wird, aber
aufgrund fehlender Kernelunterstützung kein tmpfs Dateisystem unter /dev/shm gemountet ist.
-
Auf alter oder langsamer Hardware können einige Tests
aufgrund von Zeitüberschreitungen fehlschlagen.
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
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
Einige von make
localedata/install-locales installierte Locales werden
von bestimmten Anwendungen im LFS- bzw. BLFS-Buch nicht richtig
unterstützt. Aufgrund der zahlreichen Probleme, die auftreten, wenn
Programmierer Annahmen machen, die die Locales zerstören, sollte
LFS nicht mit Locales benutzt werden, die Multi-Byte Zeichen
(inklusive UTF-8) oder von-rechts-nach-links-schrift verwenden.
Viele unoffizielle und instabile Patches werden benötigt, um diese
Probleme in den Griff zu bekommen. Die LFS-Entwickler haben sich
entschieden, solch komplexe Locales nicht zu unterstützen. 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 die linuxthreads Man-pages, sie sind eine großartige
Referenz zur Threading-Programmierschnittstelle (auch auf NPTL
anwendbar):
make -C ../glibc-2.3.4-20040701/linuxthreads/man
Installieren Sie diese:
make -C ../glibc-2.3.4-20040701/linuxthreads/man install
6.11.2. Einrichten von Glibc
Sie müssen die Datei /etc/nsswitch.conf
erstellen, denn obwohl Glibc bei einer fehlenden oder kaputten
Datei Standardwerte vorgibt, funktionieren diese Standardwerte
nicht gut mit Netzwerken. Ausserdem müssen Sie 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/[xxx] \
/etc/localtime
Anstelle von [xxx] müssen Sie
natürlich den Namen der Zeitzone einsetzen, den Ihnen
tzselect ausgeben hat (z. B
Canada/Eastern).
Die Bedeutung der Option zu cp:
-
--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.
6.11.3. Einrichten 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 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. Fügen Sie 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
Installierte Programme: catchsegv, gencat, getconf,
getent, 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],
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 Beschreibungen
-
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
-
iconv
-
Führt Zeichensatzkonvertierungen durch
-
iconvconfig
-
Erzeugt schnellladende iconv-Modul 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
-
Ein Perl-Programm, das im Compiler die Verwendung von
POSIX-Locales für eingebaute Operationen ein- bzw.
ausschaltet
-
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
-
nscd_nischeck
-
Prüft, ob für NIS+-Anfragen der sichere Modus 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
-
Das statisch gelinkte Programm ln
-
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 zu beheben
-
libSegFault
-
Handhabt Speicherzugriffsfehler
-
libanl
-
Eine Bibliothek zum asynchronen Nachschlagen von Namen
-
libbsd-compat
-
Ermöglicht einigen BSD-Programmen unter Linux zu laufen
-
libc
-
Die C-Bibliothek
-
libcrypt
-
Die Kryptographie-Bibliothek
-
libdl
-
Eine Schnittstellenbibliothek zum dynamischen Linker
-
libg
-
Eine Laufzeitbibliothek zu g++
-
libieee
-
Die Fließkomma-Bibliothek des Institute of Electrical and
Electronic Engineers (IEEE)
-
libm
-
Die mathematische 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
-
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
-
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