6.9. Glibc-2.3.6

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.

Tempo di costruzione approssimativo: 13.5 SBU inclusa la suite di test
Spazio necessario su disco: 510 MB inclusa la suite di test

6.9.1. Installazione di Glibc

[Nota]

Nota

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

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

Importante

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.

6.9.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 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:

--remove-destination

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.

6.9.3. Configurazione del Dynamic Loader

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

6.9.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 e zic
Librerie installate: ld.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, libbsd-compat.a, libc.{a,so}, libcidn.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 i 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

Stampa diverse informazioni sulla localizzazione corrente

localedef

Compila le specifiche di localizzazione

mtrace

Legge e interpreta un file di traccia memoria e visualizza 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 proprietario, gruppo e permessi di accesso di uno 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 la locazione del sistema e riporta la descrizione della corrispondente fascia del fuso orario

xtrace

Traccia l'esecuzione di un programma stampando la funzione correntemente eseguita

zdump

Scarica la fascia del fuso orario

zic

Il compilatore della fascia del fuso orario

ld.so

Il programma helper per le librerie condivise eseguibili

libBrokenLocale

Usato internamente da Glibc come uno strumento grossolano per conoscere i programmi interrotti in esecuzione (ad es. alcune applicazioni Motif). Per maggiorni informazioni si veda il commento in glibc-2.3.6/locale/broken_cur_max.c

libSegFault

Il gestore del segnale di segmentation fault usato da catchsegv

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

libcidn

Usata internamente da Glibc per gestire i nomi di dominio internazionalizzati nella funzione getaddrinfo()

libcrypt

La libreria crittografica

libdl

La libreria di interfaccia per il collegamento dinamico

libg

Libreria fittizia che non contiene funzioni. Precedentemente era una libreria runtime per g++

libieee

Il link a questo modulo obbliga le funzioni math a seguire le regole di gestione dell'errore definite dell'Institute of Electrical and Electronic Engineers (IEEE). Il default è la gestione dell'errore POSIX.1

libm

La libreria matematica

libmcheck

Il link a questa libreria abilita il controllo dell'allocazione di memoria

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 di gruppo, alias, servizi, protocolli, ecc.

libpcprofile

Contiene funzioni di profiling utilizzate per tracciare l'ammontare di tempo CPU speso in linee specifiche di codice sorgente

libpthread

La libreria dei thread POSIX

libresolv

Contiene funzioni per creare, inviare e interpretare pacchetti dei 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

libthread_db

Contiene funzioni utili per costruire debugger per programmi multi-thread

libutil

Contiene codice per le funzioni «standard» usate in molte utility Unix