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.
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
:
Anmerkung
Falls der folgende Befehl einen Syntaxfehler wirft gehe zurück in
Kapitel 5 und baue die Bash neu. Die Wahrscheinlichkeit ist sehr
hoch das Du dort einen Fehler gemacht hast.
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 damit es später keinen Fehler beim Kommando make install gibt.
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
6.10.4. 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, musst Du dieses Verzeichnis in /etc/ld.so.conf
eintragen, damit der dynamische
Lader sie finden kann. Zwei Verzeichnisse sind dafür bekannt,
weitere Bibliotheken zu enthalten: /usr/local/lib
und /opt/lib
. Diese Verzeichnisse fügst Du gleich mit
in den Suchpfad ein.
Erstelle 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
Man kann auch ein Verzeichnis erzeugen, in dem man für jedes
Programm, welches die dynamischen Bibliotheken nicht in die
Standard Verzeichnisse installiert, eine Konfigurationsdatei
anlegt:
cat >> /etc/ld.so.conf << "EOF"
# Add an include directory
include /etc/ld.so.conf.d/*.conf
# End /etc/ld.so.conf
EOF
mkdir -v /etc/ld.so.conf.d