Gestione delle librerie di sistema

Il comune di una città allo scopo di evitare di far acquistare ai cittadini un numero enorme di libri può mettere a loro disposizione un certo numero di testi in una biblioteca pubblica e concederli in prestito a chi ne faccia richiesta. Allo stesso modo Linux, per evitare che numerosi programmi con le stesse funzioni abbiano le stesse sezioni di codice replicate in memoria centrale, utilizza delle librerie23 (libraries) di funzioni caricate una volta per tutte dal kernel; tutti i programmi che vogliono usarle ne richiedono semplicemente l'uso.

In effetti la traduzione di library è biblioteca, ma qualche ignorante l'ha tradotto libreria ed ormai così è entrato nell'uso comune.

Bisogna però che il meccanismo di caricamento delle librerie condivise del sistema operativo le localizzi. La gestione delle librerie condivise è comandata dal file /etc/ld.so.conf che è un semplice file di testo contenente l'indirizzamento completo delle librerie.

Se si rileva che Linux non riesce a trovare una libreria, provare a cercarla con il comando:

$ cat /etc/ld.so.conf|xargs -i find {} -name <nomelibreria>\*
ricordandosi eventualmente di cercarla anche in /usr/lib:

$ find /usr/lib -name <nomelibreria>\*
Se questi comandi vi sembrano troppo astrusi e vi mettono a disagio è possibile fare la ricerca in ambiente grafico cliccando col mouse sull'icona di ``Trova'' e simili. A questo punto ci sono tre possibilità:
  1. la libreria non c'è e allora bisogna installarla
  2. la libreria esiste e allora si dovrà aggiungere una riga in /etc/ld.so.conf con l'indirizzamento completo della libreria e poi far girare il programma ldconfig24
  3. la libreria esiste ma Linux non riesce a caricarla; in questo caso (improbabile) la libreria è danneggiata e va sostituita

In realtà ci sarebbe anche la possibilità che la libreria esiste ma non ha esattamente il nome richiesto25; è sconsigliabile creare un collegamento simbolico col nome richiesto perché si rischia di provocare malfunzionamenti dovuti a differenze nelle versioni delle librerie.

Può essere utile anche conoscere il comando per elencare le librerie da cui dipende un determinato programma:

# ldd <nomeprogramma>
Esempio:

# ldd /usr/sbin/sshd
che visualizza:

libwrap.so.0 => /lib/libwrap.so.0 (0x4002c000)

libpam.so.0 => /lib/libpam.so.0 (0x40035000)

libdl.so.2 => /lib/libdl.so.2 (0x4003d000)

libresolv.so.2 => /lib/libresolv.so.2 (0x40041000)

libcrypto.so.0.9.7=>/usr/lib/i686/cmov/libcrypto.so.0.9.7

libutil.so.1 => /lib/libutil.so.1 (0x40152000)

libz.so.1 => /usr/lib/libz.so.1 (0x40155000)

libnsl.so.1 => /lib/libnsl.so.1 (0x40167000)

libcrypt.so.1 => /lib/libcrypt.so.1 (0x4017c000)

libpthread.so.0 => /lib/libpthread.so.0 (0x401aa000)

libc.so.6 => /lib/libc.so.6 (0x401fb000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

elencando le librerie usate dal demone del protocollo SSH.

Mauro Darida 2006-07-25