Glibc-2.3.3-lfs-5.1

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.

Installazione di Glibc

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
[Important]

Importante

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

Configurazione di Glibc

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.

Configurazione del Dynamic Loader

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

Contenuti di Glibc

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]

Brevi descrizioni

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.

mtrace...

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.

zdump scarica la time zone.

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.