6.10.2. Installation der Glibc
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.)
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. Du kannst 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 Paket entpacken und in das neue Verzeichnis wechseln:
tar -xf pakete/glibc-2.14.1.tar.xz &&
cd glibc-2.14.1/
Damit ein kleiner Test den die Glibc während der Installation
durchführt nicht fehlschlägt justieren wir eine Testdatei und
erreichen so das die von uns installierte Glibc geprüft wird und
nicht die Version im Verzeichnis /tools:
DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p') &&
sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" \
scripts/test-installation.pl &&
unset DL
Es ist ein Bug in der Testdatei test-installation.pl den wir mit diesem
sed Befehl beseitigen
und es später keinen fehler gibt bei make install.
sed -i -e 's/"db1"/& \&\& $name ne "nss_test1"/' scripts/test-installation.pl
Das Shell-Skript ldd
enthält Bash-spezifische Syntax. Ändere 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 C-LFS beschrieben):
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
Mit diesem Patch beseitigen wir einige Fehler die zu einem Abbruch
des Build führen würden:
patch -Np1 -i ../patches/glibc-2.14.1-fixes-1.patch
Dieser Patch repariert Glibc das es mit GCC-4.6.2 gebaut werden
kann:
patch -Np1 -i ../patches/glibc-2.14.1-gcc_fix-1.patch
Mit diesem sed
beheben wir noch einen kleinen Fehler:
sed -i '195,213 s/PRIVATE_FUTEX/FUTEX_CLOCK_REALTIME/' \
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timed{rd,wr}lock.S
Die Dokumentation von Glibc empfiehlt, zum Kompilieren ein
gesondertes Verzeichnis zu verwenden:
mkdir -v ../glibc-build &&
cd ../glibc-build
Füge erneut die benötigten Compiler-Parameter zu den CFLAGS für die
x86 Architektur hinzu:
case `uname -m` in
i686) echo "CFLAGS += -march=i686 -mtune=native -O3 -pipe" > configparms ;;
esac
Auch hier gilt wieder, wenn der jetzt erzeugte Code nur auf dieser
Maschine laufen soll, ersetze bitte -march=i686 durch -march=native. Damit erzeugt der
Kompiler besser an den Prozessor angepassten Code. Dieser Code
nutzt alle Möglichkeiten der CPU. Dadurch ist er aber nur noch auf
Maschinen einsetzbar die den gleichen CPU-Typ haben. Code der auf
einem Core2Duo mit der Option native kompiliert wird, wird
nicht mehr auf einem Pentium 3 laufen. Der Parameter -pipe erhöht die
Kompiliergeschwindigkeit und -O3 erhöht die Geschwindigkeit
bei der Ausführung der kompilierten Programme.
Auch hier wieder, falls Du einen alten Prozessor mit i486 oder i586
hast, verwende bitte einen der zwei folgenden Befehle. Oder Du
verwendest den eben beschriebenen Parameter -march=native.
Für i486:
echo "CFLAGS += -march=i486 -mtune=native -O3 -pipe" > configparms
Für i586
echo "CFLAGS += -march=i586 -mtune=native -O3 -pipe" > configparms
Bereite das Paket zum kompilieren vor:
../glibc-2.14.1/configure --prefix=/usr \
--disable-profile --enable-add-ons \
--enable-kernel=2.6.25 --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.
Das Paket kompilieren:
make
Wichtig
In diesem Abschnitt wird das Testsystem von Glibc als absolut
kritisch betrachtet. Du solltest diesen Schritt auf keinen Fall
überspringen.
Bevor wir die Tests durchlaufen lassen, kopieren wir eine Datei aus
den Quellen in das Verzeichnis in dem wir die Glibc kompilieren.
Dadurch werden eine Menge Testfehler vermieden. Anschließend prüfen
wir die Ergebnisse:
cp -v ../glibc-2.14.1/iconvdata/gconv-modules iconvdata
make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log
Wahrscheinlich wirst Du einen erwarteten (ignorierten) Fehler im
Test posix/annexc bemerken.
Des Weiteren ist das Glibc-Testsystem 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 ein System mit
einer älteren Intel- oder AMD-CPU verwendet wird.
-
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. Behebe
diese störende Warnung mit:
touch /etc/ld.so.conf
Installiere das Paket:
make install
Die Sprachschemata, mit deren Hilfe Systemmeldungen in Deiner
Sprache ausgegeben werden können, wurden durch das obige Kommando
nicht mit installiert. Diese Sprachschemata werden nicht unbedingt
benötigt, jedoch würden einige Tests der noch folgenden Pakete ohne
sie ein paar Tests überspringen, das ist aber nicht weiter wichtig.
Mit dem Kommando localedef kannst Du auch einen individuellen Satz
an Sprachschemata installieren. Das erste unten stehende Kommando
kombiniert beispielsweise die Zeichensatz unabhängige Sprachschema
Definition /usr/share/i18n/locales/de_DE mit der
Zeichensatzdefinition /usr/share/i18n/charmaps/ISO-8859-1.gz und fügt
das Ergebnis an die Datei /usr/lib/locale/locale-archive an. Mit den
folgenden Kommandos erstellst Du einen minimalen Satz
Sprachschemata, die für die kommenden Tests gut sind:
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 de_DE -f UTF-8 de_DE.UTF-8 &&
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
Anmerkung
Es ist völlig ausreichend wenn Du Dir nur die deutschen
Sprachschema Definitionen installierst. Oder auch keine, da die
POSIX Sprachschema Definition automatisch installiert wurde und
nur diese ist wirklich notwendig.
Du kannst natürlich auch einfach alle Sprachschemata installieren:
make localedata/install-locales
Nun das Verzeichnis verlassen und dann entfernen:
cd .. &&
rm -rf glibc-*