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.
Tempo approssimativo di costruzione: 12.3 SBU Spazio necessario sul disco: 784 MB
L'installazione di Glibc dipende da: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
Il sistema di costruzione di Glibc è molto bene auto-contenuto e si intallerà 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, ricordate di eliminare ogni variabile ambiente che si sovrapponga ai flag di ottimizzazione predefiniti.
La documentazione di Glibc raccomanda di costruire Glibc fuori dalla directory dei sorgenti, in una directory dedicata:
mkdir ../glibc-build cd ../glibc-build
Ora preparate Glibc per la compilazione:
../glibc-2.3.3-lfs-5.1/configure --prefix=/usr \ --disable-profile --enable-add-ons=linuxthreads \ --libexecdir=/usr/lib --with-headers=/usr/include \ --without-cvs
Il significato delle opzioni di configurazione:
--libexecdir=/usr/lib: questo cambia la locazione del programma pt_chown dalla predefinita /usr/libexec a /usr/lib. L'uso di libexec è considerato non conforme a FHS poiché il FHS non lo menziona nemmeno.
--with-headers=/usr/include: questo assicura che gli header del kernel in /usr/include siano usati per questa compilazione. Se non passate questo switch allora saranno usati gli header di /tools/include, il che ovviamente non è l'ideale (sebbene dovrebbero essere identici). Usare questo switch ha il vantaggio che sarete immediatamente informati nel caso aveste dimenticato di installare gli header del kernel in /usr/include.
Compilate il pacchetto:
make
La suite di test per Glibc in questa sezione è considerata critica. Il nostro consiglio è di non saltarla per nessuna ragione.
Verificate i risultati:
make check
Le note delle suite di test della sezione chiamata “Glibc-2.3.3-lfs-5.1” sono ancora decisamente valide qui. Assicuratevi di farvi riferimento nel caso aveste un qualsiasi dubbio.
Sebbene sia un messaggio innocuo, la fase di installazione di Glibc si lamenterà dell'assenza di /etc/ld.so.conf. Correggete questo piccolo avviso noioso con:
touch /etc/ld.so.conf
E installate il pacchetto:
make install
Le localizzazioni che permettono al sistema di rispondere in un linguaggio differente non venivano installate dal comando precedente. Fatelo con questo:
make localedata/install-locales
Un'alternativa a eseguire il comando precedente è di installare solo quelle localizzazioni che volete o di cui avete bisogno. Questo lo si può ottenere usando il comando localedef. Informazioni su questo possono essere trovate nel file INSTALL nei sorgenti Glibc. Tuttavia, certe localizzazioni sono essenziali perché i test di futuri pacchetti passino, in particolare, il test libstdc++ da GCC. Le seguenti istruzioni, invece di usare il target install-locales, installeranno il minimo set di localizzazioni necessario perché i test vengano eseguiti con successo:
mkdir -p /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
Infine, costruite le pagine man dei linuxthread:
make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man
E installate queste pagine:
make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man install
Dobbiamo creare il file /etc/nsswitch.conf, poiché, nonostante Glibc lo fornisca come predefinito quando questo file è mancante o corrotto, le impostazioni fornite da Glibc non funzionano bene con il networking. Inoltre, il nostro fuso orario deve venire selezionato.
Create un nuovo file /etc/nsswitch.conf eseguendo il seguente:
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 fuso orario vi trovate, avviate il seguente script:
tzselect
Una volta che avrete risposto a qualche domanda sulla vostra locazione, lo script darà il nome del vostro fuso orario, qualcosa tipo EST5EDT o Canada/Eastern. Quindi create il file /etc/localtime eseguendo:
cp --remove-destination /usr/share/zoneinfo/Canada/Eastern /etc/localtime
Il significato delle opzioni:
--remove-destination: questo è necessario 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 importa, ad esempio, se avviamo in modalità a singolo utente.
Ovviamente, invece di Canada/Eastern, scrivete il nome del fuso orario che lo script tzselect vi ha fornito.
Per default, il dynamic loader (/lib/ld-linux.so.2) cerca in /lib e /usr/lib le librerie dinamiche di cui i programmi hanno bisogno quando li avviate. Tuttavia, se ci sono librerie in altre directory oltre a /lib e /usr/lib, dovrete 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 path di ricerca del dynamic loader.
Create un nuovo file /etc/ld.so.conf eseguendo il seguente:
cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF
Programmi installati: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump e zic
Librerie installate: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so e libutil.[a,so]
catchsegv può essere usato per creare una traccia dello stack quando un programma termina con un segmentation fault.
gencat genera elenchi messaggi.
getconf visualizza i valori di configurazione del sistema per variabili specifiche del file system.
getent ottiene valori da un database amministrativo.
glibcbug crea un bug report e lo invia all'indirizzo email appropriato.
iconv esegue una conversione del set caratteri.
iconvconfig crea un file di configurazione a caricamento rapido del modulo iconv.
ldconfig configura i riferimenti runtime del linker dinamico.
ldd riporta quali librerie condivise sono richieste da ciascun dato programma o libreria condivisa.
lddlibc4 assiste ldd con file oggetto.
locale è un programma Perl che dice al compilatore di abilitare o disabilitare l'uso delle localizzazioni POSIX per operazioni incorporate.
localedef compila le specifiche di localizzazione.
nscd è un demone che fornisce una cache per le richieste più comuni del servizio dei nomi.
nscd_nischeck verifica se il modo sicuro è necessario o no per il NIS+ lookup.
pcprofiledump scarica le informazioni generate dal PC profiling.
pt_chown è un programma helper per grantpt per impostare il proprietario, gruppo e permessi di accesso di uno pseudo terminale slave.
rpcgen genera codice C per implementare il protocollo RPC.
rpcinfo fa una chiamata RPC a un server RPC.
sln è usato per fare link simbolici. Il programma è linkato staticamente, così è utile per fare link simbolici a librerie dinamiche se il sistema di collegamento dinamico per qualche ragione non funziona.
sprof legge e visualizza dati di profilo degli oggetti condivisi.
tzselect chiede all'utente dove abita e riporta la descrizione della corrispondente time zone.
xtrace traccia l'esecuzione di un programma stampando la funzione correntemente eseguita.
zic è il compilatore della time zone.
ld.so è il programma helper per le librerie condivise eseguibili.
libBrokenLocale è usato da programmi, come Mozilla, per risolvere localizzazioni "rotte".
libSegFault gestisce il segnale di segmentation fault. Prova a intercettare i segfault.
libanl è una libreria asincrona di ricerca nomi.
libbsd-compat fornisce la portabilità necessaria ad eseguire certi programmi BSD sotto Linux.
libc è la libreria C principale: una collezione di funzioni comunemente utilizzate.
libcrypt è la libreria crittografica.
libdl è la libreria di interfaccia per il collegamento dinamico.
libg è una libreria runtime per g++.
libieee è la libreria in virgola mobile di IEEE.
libm è la libreria matematica.
libmcheck contiene codice eseguito all'avvio.
libmemusage è usato da memusage per aiutare a raccogliere informazioni sull'uso della memoria da parte di un programma.
libnsl è la libreria dei servizi di rete.
libnss* sono le librerie Name Service Switch, contenenti funzioni per la risoluzione di nomi di host, nomi utente, nomi gruppo, alias, servizi, protocolli e simili.
libpcprofile libreria utilizzata per tracciare l'ammontare di tempo processore speso in quali linee di codice sorgente.
libpthread è la libreria dei thread POSIX.
libresolv contiene funzioni per creare, inviare e interpretare pacchetti del server dei nomi di dominio di Internet (DNS).
librpcsvc contiene funzioni che forniscono diversi servizi RPC.
librt contiene funzioni che forniscono la maggior parte delle interfacce specificate da POSIX.1b Realtime Extension (Estensioni in real time POSIX.1b).
libthread_db contiene funzioni utili per costruire debugger per programmi multi-thread.
libutil contiene codice per le funzioni "standard" usate in molte diverse utilità Unix.