11.07.2015 Views

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

3.1. I FILE DI CONFIGURAZIONE 107ci fa vedere le librerie necessarie all’uso di ls. L’opzione più usata è -v che permette di avereuna descrizione più dettagliata con le informazioni relative alle versioni, le altre opzioni al solitosono descritte nella pagina di manuale del comando.Si noti come le librerie siano file che terminano con l’estensione .so (che sta appunto pershared object) seguita da un numero che è detto major version. Questa è una delle caratteristichepiù utili in un sistema unix-like; le librerie cioè sono organizzate sempre con due numeri diversione, major e minor, ed una convenzione vuole che le interfacce pubbliche delle librerie nondebbano mai cambiare fintanto che non cambia la major version. 5 Con questo si ottengono duerisultati di grande rilevanza, il primo è che si può cambiare tranquillamente la minor versiondi una libreria senza che i programmi che la usano ne abbiano a risentire, 6 il secondo è che sesi ha bisogno di una versione vecchia delle librerie non c’è nessun problema, basta installareanche quella, e sarà tranquillamente usabile (attraverso la diversa major version) senza nessunconflitto. 7Dato che il link-loader deve essere in grado di determinare quali sono le librerie che contengonole funzioni richieste da un programma tutte le volte che questo viene eseguito, pereffettuare la ricerca in maniera efficiente viene utilizzato un apposito file di cache in cui sonostate indicizzate tutte le informazioni relative alle funzioni presenti ed alle librerie in cui essesono contenute. Questo file si chiama /etc/ld.so.cache, e viene generato (di norma tutte levolte che si installa una nuova libreria) con il comando ldconfig.Il comando ldconfig permette sia di ricostruire la cache che di ricreare i link alle ultimaversione dei file delle librerie; infatti queste vengono sempre cercate per numero di major version,ma la libreria installata sarà comunque contenuta in un file con una sua specifica minor version,perciò quello che si fa è creare un link simbolico alla versione effettiva, per cui ad esempio avremoche:piccardi@monk:/lib$ ls -l librt*-rw-r--r-- 1 root root 26104 Sep 21 14:56 librt-2.3.2.solrwxrwxrwx 1 root root 14 Sep 22 14:44 librt.so.1 -> librt-2.3.2.soun cui si può notare come una certa versione specifica di una libreria (la 2.3.2) venga rimappatacome prima major version.Se invocato con l’opzione -v il comando ldconfig stampa l’elenco di tutte le directory esaminatee delle librerie usate nella ricostruzione, mentre con -N e -X si può bloccare rispettivamentela ricostruzione della cache e dei link.In sez. 1.2.1 abbiamo visto come secondo il Filesystem Hyerarchy Standard le librerie possonoessere mantenute in diverse directory; ma di default il comando ldconfig esamina soltanto ledirectory /lib e /usr/lib, se ci sono altre librerie condivise in altre directory queste possonoessere specificate con un opportuno file di configurazione, /etc/ld.so.conf, che contiene la listadelle altre directory che contengono le librerie condivise, oltre alle canoniche /lib e /usr/lib.Pertanto se ad esempio si installa una nuova libreria dai sorgenti in /usr/local/lib, chedi norma non compare in /etc/ld.so.conf, sarà necessario aggiungerla in questo file e poieseguire il programma ldconfig per aggiornare i link alle librerie condivise disponibili e ricrearela cache, in modo che il linker dinamico possa utilizzarle. Un esempio di questo file, così comeviene installato su una Debian Sid, è il seguente:/usr/local/lib/usr/X11R6/lib5 al solito è una convenzione, anche se quasi universalmente rispettata; ogni tanto qualche programmatore anchenon più alle prime armi la viola, con il risultato che programmi che fino ad allora funzionavano perfettamente sitrovano a riportare errori o a terminare improvvisamente.6 a meno che al solito un programmatore non troppo furbo non abbia usato una qualche funzione interna chenon fa parte della interfaccia pubblica, nel qual caso può di nuovo succedere di tutto.7 questo è il motivo per cui il problema dei conflitti di versione delle librerie tristemente noto su Windows, dovequesta distinzione non esiste, come DLL hell, è sostanzialmente assente su <strong>GNU</strong>/<strong>Linux</strong>.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!