Il pacchetto Glibc contiene la libreria C principale. Questa libreria fornisce tutte le routine di base per allocare memoria, cercare directory, aprire e chiudere file, leggerli e scriverli, manipolazione stringhe, individuazione pattern, aritmetica, e così via.
Alcuni pacchetti al di fuori di LFS suggeriscono di installare GNU libiconv per poter tradurre i dati da una codific ad un'altra. La home page del progetto (http://www.gnu.org/software/libiconv/) dice “Questa libreria fornisce un'implementazione di iconv() da usare in sistemi che non ne hanno una, o la cui implementazione non può fare conversioni da/a Unicode.” Glibc fornisce un'implementazione di iconv() e può convertire da/a Unicode, pertanto libiconv non è necessaria su un sistema LFS.
Questo pacchetto è noto per avere problemi quando vengono cambiati i suoi flag di ottimizzazione di default (incluse le opzioni -march e -mcpu). Pertanto, se dovessero essere state definite variabili di ambiente che disabilitano le nostre ottimizzazioni di default, come i flag CFLAGS e CXXFLAGS, si raccomanda di eliminarle quando si costruisce GCC.
Il sistema di costruzione di Glibc è molto bene auto-contenuto e si installerà perfettamente, nonostante i nostri specs file del compilatore e del linker puntino ancora a /tools. Non possiamo aggiustare specs e linker prima dell'installazione di Glibc, poiché i test autoconf di Glibc darebbero falsi risultati e questo vanificherebbe il nostro scopo di arrivare a una realizzazione pulita.
Prima di iniziare a costruire Glibc, ricordarsi di eliminare ogni variabile ambiente che si sovrapponga ai flag di ottimizzazione di default.
Il tarball di linuxthreads contiene le pagine man per le librerie di threading installate da Glibc. Estrarre il tarball dalla directory dei sorgenti di Glibc:
tar -xjvf ../glibc-linuxthreads-2.3.4.tar.bz2
In alcune rare circostanze, Glibc può subire un segfault quando non esiste una directory di ricerca standard. La seguente patch risolve questo problema:
patch -Np1 -i ../glibc-2.3.4-rtld_search_dirs-1.patch
Glibc ha due test che falliscono quando il kernel funzionante è il 2.6.11.x. Il problema si è scoperto essere determinato dagli stessi test, non dalla libc nè dal kernel. Se si vuole eseguire la testsuite applicare questa patch:
patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch
Applicare la seguente patch per correggere un bug in Glibc che puè impedire ad alcuni programmi (incluso OpenOffice.org) di funzionare:
patch -Np1 -i ../glibc-2.3.4-tls_assert-1.patch
La documentazione di Glibc raccomanda di costruire Glibc fuori dalla directory dei sorgenti, in una directory dedicata:
mkdir -v ../glibc-build cd ../glibc-build
Ora preparare Glibc per la compilazione:
../glibc-2.3.4/configure --prefix=/usr \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
Significato delle nuove opzioni di configurazione:
questa cambia la locazione del programma pt_chown dal suo default, /usr/libexec, a /usr/lib/glibc.
Compilare il pacchetto:
make
La suite di test per Glibc in questa sezione è considerata critica. Il nostro consiglio è di non saltarla per nessuna ragione.
Testare i risultati:
make -k check >glibc-check-log 2>&1 grep Error glibc-check-log
La suite di test di Glibc è altamente dipendente da certe funzioni del sistema host, in particolare il kernel. In generale, ci si aspetta sempre che la suite di test di Glibc passi. Tuttavia in certe circostanze alcuni fallimenti sono inevitabili. Qui c'è una lista dei problemi più comuni di cui siamo a conoscenza:
I test math a volte falliscono su sistemi ove la CPU non è una Intel originale relativamente nuova o un'AMD autentica. È anche noto che qui un fattore possono essere certe impostazioni di ottimizzazione.
Il test gettext a volte fallisce per cause dovute al sistema in uso. Le ragioni esatte non sono ancora chiare.
Se si ha montato la partizione LFS con l'opzione noatime il test atime fallirà. Come menzionato in Sezione 2.4, “Montaggio della nuova partizione” non usare l'opzione noatime durante la costruzione di LFS.
Su hardware vecchi o lenti certi test potrebbero fallire a causa del superamento dei tempi di time out dei test.
Sebbene sia un messaggio innocuo, lo stage di installazione di Glibc al termine si lamenterà per l'assenza di /etc/ld.so.conf. Correggere questo piccolo avviso fastidioso con:
touch /etc/ld.so.conf
E installare il pacchetto:
make install
Le localizzazioni che permettono al sistema di rispondere in un altro linguaggio non sono state installate dal precedente comando. Farlo con questo:
make localedata/install-locales
Per risparmiare tempo, un'alternativa all'esecuzione del comando precedente (che genera ed installa ogni localizzazione elencata nel file glibc-2.3.4/localedata/SUPPORTED) è l'installazione solo delle localizzazioni che si vogliono o sono necessarie. Questo lo si può ottenere usando il comando localedef. Informazioni su questo comando si trovano nel file INSTALL nei sorgenti di Glibc. Tuttavia, c'è un certo numero di localizzazioni che sono essenziali perché i test di futuri pacchetti passino, in particolare, i test libstdc++ da GCC. Le seguenti istruzioni, invece del target install-locales, usato in precedenza, installerà il minimo insieme di localizzazioni necessario perché i test funzionino con successo:
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 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
In effetti, certe localizzazioni installate dal precedente comando make localedata/install-locales non sono pienamente supportate da alcune applicazioni che sono nei libri LFS e BLFS. A causa dei vari problemi che sorgono dovuti ai programmatori che fanno assunzioni che bloccano queste localizzazioni, LFS non deve essere utilizzata in localizzazioni che usano set di caratteri multibyte (incluso UTF-8) o scritture da destra a sinistra. Sono necessarie numerose patch instabili e non ufficiali per correggere questi problemi, ed è stato deciso dagli sviluppatori di LFS di non supportare tali localizzazioni complesse in questo momento. Questo è valido anche per le localizzazioni ja_JP e fa_IR: esse sono state installate solo per far passare i test GCC e Gettext, e ad esempio il programma watch (parte del pacchetto Procps) compilato secondo questo libro non funziona correttamente con esse. Molti tentativi di aggirare queste restrizioni sono documentati nei suggerimenti relativi all'internazionalizzazione.
Infine, costruire le pagina man dei linuxthreads, che sono un grande riferimento sulle API (applicabili anche a NPTL):
make -C ../glibc-2.3.4/linuxthreads/man
E installare queste pagine:
make -C ../glibc-2.3.4/linuxthreads/man install
Si deve creare il file /etc/nsswitch.conf, poiché, nonostante Glibc lo fornisca di default quando questo file è mancante o corrotto, i default di Glibc non funzionano bene in un ambiente di rete. Inoltre bisogna configurare la time zone.
Creare un nuovo file /etc/nsswitch.conf eseguendo il seguente comando:
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
Per sapere in quale time zone ci si trova, eseguire il seguente script:
tzselect
Una volta che si è risposto a qualche domanda sulla ropria locazione, lo script darà il nome della time zone, (ad es. EST5EDT o Canada/Eastern). Quindi creare il file /etc/localtime eseguendo:
cp -v --remove-destination /usr/share/zoneinfo/[xxx] \ /etc/localtime
Sostituire [xxx] con il nome della time zone che tzselect ha fornito (es., Canada/Eastern).
Significato delle opzioni di cp:
questa è necessaria per forzare la rimozione di link simbolici già esistenti. La ragione per cui noi copiamo invece di fare link simbolici è di coprire la situazione in cui /usr è su una partizione separata. Questo è importante, ad esempio, se si avvia il sistema in modalità singolo utente.
Per default il dynamic loader (/lib/ld-linux.so.2) cerca in /lib e /usr/lib le librerie dinamiche richieste dai programmi quando vengono eseguiti. Tuttavia, se ci fossero librerie in directory diverse da /lib e /usr/lib, occorre aggiungerle al file /etc/ld.so.conf perché il dynamic loader le trovi. Due directory che di solito contengono librerie aggiuntive sono /usr/local/lib e /opt/lib, perciò aggiungiamo queste directory al percorso di ricerca del dynamic loader.
Creare un nuovo file /etc/ld.so.conf eseguendo quanto segue:
cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF