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, leggere e scrivere file, manipolare stringhe, individuare pattern, aritmetica, e così via.
Alcuni pacchetti al di fuori di LFS suggeriscono di installare GNU libiconv per poter tradurre i dati da una codifica 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.
Il sistema di costruzione di Glibc è auto-contenuto e si installerà perfettamente, nonostante gli specs file del compilatore e il linker puntino ancora a /tools. Specs e linker non si possono correggere prima dell'installazione di Glibc, poiché i test autoconf di Glibc darebbero falsi risultati e questo vanificherebbe lo scopo di ottenere una realizzazione pulita.
Il tarball di glibc-libidn aggiunge a Glibc il supporto per i nomi di dominio internazionalizzati names (internationalized domain names, IDN). Molti programmi che supportano IDN richiedono l'intera libreria libidn, non questa aggiunta (si veda http://www.linuxfromscratch.org/blfs/view/svn/general/libidn.html). Estrarre il tarball dalla directory dei sorgenti di Glibc:
tar -xf ../glibc-libidn-2.3.6.tar.bz2
Applicare la patch seguente per risolvere degli errori di costruzione nei pacchetti che includono linux/types.h dopo sys/kd.h:
patch -Np1 -i ../glibc-2.3.6-linux_types-1.patch
Aggiungere un header per definire le funzioni syscall per la caratteristica inotify disponibile nei kernel Linux più recenti:
patch -Np1 -i ../glibc-2.3.6-inotify-1.patch
Nella localizzazione vi_VN.TCVN, in fase di avvio bash entra in un loop infinito. Non si sa se ciò è dovuto a un bug di bash o a un problema di Glibc. Disabilitare l'installazione di questa localizzazione per evitare il problema:
sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED
Quando si esegue make install, uno script chiamato test-installation.pl esegue un piccolo test di integrità sulla nostra Glibc appena installata. Tuttavia, poiché la nostra toolchain punta ancora alla directory /tools, il test di integrità potrebbe essere effettuato sulla Glibc sbagliata. Possiamo forzare lo script perché controlli la Glibc che abbiamo appena installato con il seguente comando:
sed -i \ 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \ scripts/test-installation.pl
La documentazione di Glibc raccomanda di costruire Glibc fuori dalla directory dei sorgenti, in una directory dedicata:
mkdir -v ../glibc-build cd ../glibc-build
Preparare Glibc per la compilazione:
../glibc-2.3.6/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
In questa sezione la suite di test per Glibc è considerata critica. Non saltarla per nessuna ragione.
Testare i risultati:
make -k check 2>&1 | tee glibc-check-log grep Error glibc-check-log
Probabilmente si verificherà un fallimento previsto (trascurato) nel test posix/annexc. Inoltre la suite di test di Glibc dipende molto dal sistema host. Questo è un elenco dei problemi più comuni:
I test nptl/tst-clock2 e tst-attr3 a volte falliscono. La ragione non è completamente conosciuta, ma ci sono indicazioni che un carico pesante del sistema può causare questi fallimenti.
I test math a volte falliscono su sistemi ove la CPU non è una Intel originale relativamente nuova o un processore AMD autentico.
Se si ha la partizione LFS montata 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 più vecchi e lenti o su sistemi in fase di caricamento certi test potrebbero fallire a causa del superamento dei tempi di time out dei test.
Sebbene sia un messaggio innocuo, la fase di installazione di Glibc si lamenterà per l'assenza di /etc/ld.so.conf. Prevenire questo avviso con:
touch /etc/ld.so.conf
Installare il pacchetto:
make install
Installare l'header inotify nella locazione degli header di sistema:
cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \ /usr/include/sys
Le localizzazioni che permettono al sistema di rispondere in un altro linguaggio non sono state installate dal precedente comando. Nessuna delle localizzazioni è necessaria, ma se ne mancassero alcune, le suite di test dei pacchetti futuri salterebbero passaggi importanti del test.
Le singole localizzazioni possono essere installate usando il programma localedef. Ad es. il primo comando localedef che segue unisce la definizione del set di caratteri independenti della localizzazione /usr/share/i18n/locales/de_DE con la definizione della mappa di caratteri /usr/share/i18n/charmaps/ISO-8859-1.gz e accoda il risultato al file /usr/lib/locale/locale-archive. Le istruzioni seguenti installeranno il set minimo di localizzazioni necessarie per la copertura ottimale di test:
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
Inoltre installare la localizzazione per la propria nazione, lingua e set di caratteri.
In alternativa, installare in una volta sola tutte le localizzazioni elencate nel file glibc-2.3.6/localedata/SUPPORTED (che include tutte le localizzazioni elencate sopra e molte altre) con il comando seguente, che impiegherà molto tempo:
make localedata/install-locales
Usare quindi il comando localedef per creare e installare le localizzazioni non elencate nel file glibc-2.3.6/localedata/SUPPORTED nel caso improbabile in cui fossero necessarie.
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 fascia del fuso orario.
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
Un modo per sapere in quale fuso orario ci si trovi, è eseguire il seguente script:
tzselect
Dopo aver risposto a qualche domanda sulla locazione, lo script darà il nome della fascia del fuso orario (ad es. America/Edmonton). C'è anche qualche altra possibile fascia elencata in /usr/share/zoneinfo come Canada/Eastern o EST5EDT che non è identificata dallo script ma che si può usare.
Creare poi il file /etc/localtime eseguendo:
cp -v --remove-destination /usr/share/zoneinfo/<xxx> \ /etc/localtime
Sostituire <xxx> con il nome della fascia oraria scelta (es., Canada/Eastern).
Significato delle opzioni di cp:
Questa è necessaria per forzare la rimozione di link simbolici già esistenti. La ragione per cui si copia il file invece di usare un link simbolico è di coprire la situazione in cui /usr sia su una partizione separata. Questo potrebbe essere importante quando si avvia il sistema in modalità singolo utente.
Per default il dynamic loader (/lib/ld-linux.so.2) cerca in /lib e in /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ò aggiungere 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