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.
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 -xf ../glibc-libidn-2.3.6.tar.bz2
Dieser Patch behebt einige Compilerfehler für Pakete, die linux/types.h nach sys/kd.h einbinden:
patch -Np1 -i ../glibc-2.3.6-linux_types-1.patch
Fügen Sie einen Header hinzu, um syscall-Funktionen für die Funktion "inotify" in neueren Linux-Kerneln hinzuzufügen:
patch -Np1 -i ../glibc-2.3.6-inotify-1.patch
Unter Verwendung der locale vi_VN.TCVN verleibt 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
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.6/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 2>&1 | tee glibc-check-log grep Error glibc-check-log
Wahrscheinlich werden Sie einen erwarteten (ignorierten) Fehler im posix/annexc-Test bemerken. Desweiteren ist die Glibc-Testsuite ein wenig vom Host-System abhängig. Dies ist eine Liste der häufigsten Fehler:
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
Installieren Sie den inotify-Header zu den anderen System-Header-Dateien:
cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \ /usr/include/sys
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 untenstehenden 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.3.6/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.3.6/localedata/SUPPORTED gelisteten Locales zu installieren.
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:
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