Shared Libraries – Librerie condivise

In Linux e’ molto comune installare un software per poi una serie di dipendenze che devono essere installate insieme a quel software, sono cioe’ librerie che vari programmi possono condividere per eseguire delle operazioni. Poniamo ad esempio il fatto che ls utilizzi una funzione di output che non sia scritta all’interno di ls, ma faccia riferimento ad un codice presente in una libreria,questa libreria si mette a disposizione di tutti i software, come ls ( o anche altri software) che la “richiamano” per avere delle funzioni aggiuntive necessarie alla corretta esecuzione del programma.

Gli eseguibili che fanno uso di librerie esterne ad essi vengono chiamati Dinamic Link Executables. Esistono tuttavia degli eseguibili che possiedono tutte le librerie necessarie per funzionare correttamente. Questi sono chiamati Statically Linked Executables.

Un esempio e’ ” ln ” ( software per stabilire collegamenti), presente in diverse versioni di pochi kb e in due versioni: Una versione linkata dinamicamente, e una versione compilata staticamente con tutte le librerie necessarie al corretto funzionamento

Es:

Sudo # ls -l /bin/ln /sbin/ln

rwxr-xr-r 1 root …../bin/ln
rwxr-xr-r 1 root …../sbin/ln

La dimensione dinamica di /bin e di 58 Kb, mentre la versione statica /sbin e’ di 758 kb.
Come fare a vedere quali eseguibili fanno utilizzo e di quali librerie ?

Esiste un comando in Linux chiamato ldd, a cui passiamo sempre i due eseguibili

sudo # ldd /bin/ln /sbin/ln

Viene riportato che:

/bin/ln:
linux-vdso.so.1=> (0x0007f71fed3f000)
libc.so.6= /lib64/libc.so.6 => (0x0007f71fed3f009)

/sbin/sn
non e’ un eseguibile dinamico

Ma come fanno gli eseguibili a trovare le librerie di cui hanno bisogno ?
Di default la cartella /lib/lib64 e /userlib sono incluse nella ricerca, abbiamo anche un file chiamato ld.so.conf in cui e’ possibile specificare ( riga per riga) altri percorsi alternativi dove cercare altre librerie.. E possibile quindi che installando altro software ci vengano aggiunte le voci o dei file di configurazione, chiamati .conf all’interno di questa cartella all’interno di ld.so.conf dove vengono messi a disposizione altri file di configurazione dove vengono elencati percorsi per cercare altri oggetti. E quindi la possibilita’ di ricercare all’interno di tale cartella altre librerie.
La sintassi potrebbe risultare questa:

opt/kda3/lib
include ld.so.conf d/*.conf

Comunque se andiamo a modificare manualmente questo file di configurazione oppure aggiungiamo un file di configrazione dove aggiungiamo altri percorsi, con molta probabilitaì andremo a eseguier il comando:

ldconfig

Per aggiornare la cahe dei percorsi.

Digitando

sudo # ldconfig -p
[email protected]:~$ ldconfig -p
906 librerie trovate nella cache “/etc/ld.so.cache”
libzzipwrap-0.so.13 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzzipwrap-0.so.13
libzzipmmapped-0.so.13 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzzipmmapped-0.so.13
libzzipfseeko-0.so.13 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzzipfseeko-0.so.13
libzzip-0.so.13 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzzip-0.so.13
libzvbi.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzvbi.so.0
libzvbi-chains.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzvbi-

E cosi facendo ci stampa a video per ogni libreria il suo psrcorso effettivo, sul file system.

Per installare GRUB, ad esempio una volta che si aggiunge un disco, una partizione, oppure viene cambiata o spostata, bisogna digitare:

sudo# grub2-mkconfig

Verranno stampati a video tutte le voci di installazione.
Per informare GRUB degli effettivi cambiamenti:

sudo# grub2-mkconfig-o/boot/grub2/grub.cfg

In questo modo verranno rigenerate tutte le voci, in base ai kernel che trova, in base alle partizioni eventualmente cambiate e si rigenera il file di configurazione.

Se ad esempio voglio cambiare il time out prima che faccia il boot in automatico:

sudo# vi /etc/default/grub
GRUB_TIMEOUT=20 (ANZICHE’ 10 N)
GRUB_DISTRIBUTOR=…..
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=”console”
GRUB_CMDLINE_LINUX=”vconsole.keymap=it2……”
GRUB_DISABLE_RECOVERY= ” true”

wq

sudo# vi /etc/default/grub