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 su disco richiesto: 784 MB
L'installazione di Glibc dipende da: Bash, Binutils,
Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed,
Texinfo
6.11.1. Installazione di Glibc
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.
La documentazione di Glibc raccomanda di costruire Glibc fuori
dalla directory dei sorgenti, in una directory dedicata:
mkdir ../glibc-build
cd ../glibc-build
Ora preparare Glibc per la compilazione:
../glibc-2.3.4-20040701/configure --prefix=/usr \
--disable-profile --enable-add-ons=nptl --with-tls \
--with-__thread --enable-kernel=2.6.0 --without-cvs \
--libexecdir=/usr/lib/glibc \
--with-headers=/tools/glibc-kernheaders
Significato delle nuove opzioni di configurazione:
-
--libexecdir=/usr/lib/glibc
-
questa cambia la locazione del programma pt_chown dal suo default, /usr/libexec, a /usr/lib/glibc.
Compilare il pacchetto:
make
Importante
La suite di test per Glibc in questa sezione è considerata
critica. Il nostro
consiglio è di non saltarla per nessuna ragione.
Testare i risultati:
make check
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 una AMD autentica. E' anche noto che
qui un fattore possono essere certi settaggi di
ottimizzazione.
-
Il test gettext a
volte fallisce per cause dovute al sistema in uso. Le ragioni
esatte non sono ancora chiare.
-
Il test atime talvolta
fallisce quando la partizione LFS è montata con l'opzione
noatime.
-
Il test shm potrebbe
fallire quando sul sistema in uso è in funzione il file
system devfs ma non è montato il file system tmpfs su /dev/shm
a causa della mancanza del supporto per tmpfs da parte del
kernel.
-
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 Glibc locale di cui è a
conoscenza) è l'installazione solo di quelle 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 set necessario di localizzazioni perché i test
funzionino 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
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 di non supportare queste
localizzazioni complesse. 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-20040701/linuxthreads/man
E installare queste pagine:
make -C ../glibc-2.3.4-20040701/linuxthreads/man install
6.11.2. Configurazione di Glibc
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 con il networking. Inoltre, la
occorre definire 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, avviare 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 --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:
-
--remove-destination
-
questa è 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 è importante, ad esempio, se si avvia il
sistema in modalità singolo utente.
6.11.4. Contenuti di Glibc
Programmi installati: catchsegv, gencat, getconf, getent,
iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef,
mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen,
rpcinfo, sln, sprof, tzselect, xtrace, zdump, and zic
Librerie installate: ld.so, libBrokenLocale.[a,so],
libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so],
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 di messaggi.
-
getconf
-
Visualizza i valori di configurazione del sistema per
variabili specifiche del file system.
-
getent
-
Acquisisce valori da un database amministrativo.
-
iconv
-
Esegue una conversione del set di 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 i file
oggetto.
-
locale
-
Dice al compilatore di abilitare o disabilitare l'uso delle
localizzazioni POSIX per operazioni incorporate.
-
localedef
-
Compila le specifiche di localizzazione.
-
mtrace
-
Legge e interpreta un file di traccia memoria e emette un
sommario in formato leggibile
-
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 definire il proprietario,
gruppo e permessi di accesso di un pseudo terminale slave.
-
rpcgen
-
Genera codice C per implementare il protocollo Remote
Procedure Call (RPC).
-
rpcinfo
-
Fa una chiamata RPC a un server RPC.
-
sln
-
Un programma ln linkato
staticamente
-
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.
-
libanl
-
Una libreria asincrona di ricerca nomi.
-
libbsd-compat
-
Fornisce la portabilità necessaria ad eseguire certi
programmi Berkey Software Distribution (BSD) sotto Linux.
-
libc
-
La libreria C principale.
-
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 dell'Institute of Electrical
and Electronic Engineers (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.
-
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.