Informazioni per gli utenti su UNIX glibc

La libreria C appartiene ai componenti più importanti di un sistema UNIX poiché è corresponsabile per la corretta interazione tra applicazione e processo del server.

Di seguito sono elencate alcune note e informazioni di contesto che mirano a illustrare brevemente in che modo è possibile riconoscere

  • se il tool AntiVir Scanner installato è in sintonia con l'ambiente informatico e
  • dove reperire aggiornamenti qualora si presentino dei conflitti di sistema.

Contesto

Quasi tutti i componenti di un sistema UNIX (il sistema operativo stesso, i programmi di sistema e la stragrande maggioranza delle applicazioni) sono creati direttamente con il linguaggio di programmazione C oppure si basano su componenti programmati con C.

Le routine di base sulle quali poggiano le applicazioni si trovano solitamente nella cosiddetta libreria libc. Tra queste routine figurano l'elaborazione di file, l'uso della memoria di lavoro e della rete, la gestione dei processi e l'accesso a tutti i servizi offerti dal sistema operativo.

Naturalmente queste routine non vengono riproposte e fornite da ogni programma. Per questo motivo sono installate in una posizione centrale del sistema e sono sempre disponibili per tutti gli altri programmi. Da quando UNIX appoggia il concetto di "shared libraries", ovvero librerie condivise, (paragonabile alle DLL di altre piattaforme), è diventata consuetudine distribuire le relative applicazioni come cosiddette "dynamically linked binaries" (file binari collegati dinamicamente). Il sistema di base su cui si poggiano le applicazioni fornisce la libreria C collegata soltanto all'avvio del programma.

L'implementazione più frequente in Linux di questa libreria libc è la glibc, la cui homepage è consultabile al seguente indirizzo Internet glibc. Come tutti i progetti open source amati e ad ampia diffusione, questo codice è in una continua fase di sviluppo e rielaborazione. I bug vengono eliminati, le funzionalità estese e le integrazioni implementate. In questo vivace processo viene eseguito un costante allineamento agli standard generali che sono in continua evoluzione.

Tuttavia non si escludono temporanee disparità di copertura. A livello superficiale può sembrare che il quadro sia omogeneo e uniforme, tuttavia in settori più dettagliati alcune diversità possono far sì che le applicazioni utilizzate si trovino di fronte a condizioni mutate. La conseguenza di una semantica modificata può essere, ad esempio, l'assoggettamento improvviso di un'interfaccia, che prima interpretava i dati in un determinato modo, ad altri processi di elaborazione. Un possibile altro effetto: le interfacce, in seguito alla modifica dei loro parametri, mutano il loro aspetto e il loro modo di procedere, perché la loro funzionalità è stata ampliata.

Per questi motivi, la libreria (il suo attuale stato di sviluppo e quindi il suo comportamento) è sottoposta a uno stretto "regime" di versioni. Tuttavia non tutte le versioni in uso sono compatibili senza restrizioni e in tutte le direzioni.

Solitamente si mira a una compatibilità con versioni precedenti e future. Tale compatibilità si raggiunge però (nel migliore dei casi) solo per le versioni appena precedenti o successive. In altre parole: la compatibilità non è in grado di "fare grandi salti".

Cosa occorre fare ancora? Se i file sorgenti del sistema operativo e delle applicazioni sono disponibili, è possibile una traslazione di tutto il sistema, per ottenere così uno stato uniforme. Se le applicazioni vengono eseguite come "binaries", occorre selezionare la versione corretta al momento del download. Durante l'aggiornamento dei componenti di base occorre tener conto del fatto che potrebbero esserci delle interdipendenze tra i componenti secondari e quindi anche questi devono essere aggiornati. Se si sostituisce un componente di sistema fondamentale come libc oppure si passa a un'altra versione, può risultare necessario aggiornare non solo il sistema di base bensì l'intero software applicativo.


Rilevazione della versione della libreria e/o delle versioni supportate di AntiVir

Può sembrare strano, ma per motivi di compatibilità e interoperatività, un'applicazione funzionante non è in grado di determinare la versione della libreria libc installata e quindi di stabilire se può essenzialmente funzionare in questo ambiente. La libreria è progettata in modo tale da non prevedere la rilevazione della versione (se esistono singole implementazioni, che offrono questa caratteristica, la procedura non funziona su tutti gli altri sistemi e piattaforme). Si tratta al contempo di un tipico dilemma: in che modo è possibile avviare un'applicazione non operativa e quindi testarne l'operatività, in caso di conflitti delle versioni necessarie e disponibili?

Purtroppo come produttori di software non possiamo sottrarre l'utente dalla situazione descritta e quindi facilitargli il lavoro come invece vorremmo. La situazione sopra descritta richiede che l'amministratore di rete si occupi costantemente dello stato dei software installati... nessuno può eseguire questo compito in sua vece. Tuttavia desideriamo almeno offrire alcune linee guida per il riconoscimento e la risoluzione di problemi.


Risoluzione di problemi

Le seguenti indicazioni si riferiscono a Linux e alla libreria GNU-C. Naturalmente gli aspetti già discussi si applicano anche ad altre piattaforme, ma finora solo con Linux e la libreria GNU libc è obbligatorio selezionare una delle versioni offerte.

La libreria glibc è salvata sul disco rigido con un formato che consente di utilizzarla come un "normale programma". Ciò non risulta utile solo durante la fase di sviluppo, bensì consente anche successivamente, al momento della consegna, di fornire informazioni importanti.

Richiamando
/lib/libc.so.6 | head -1

viene visualizzato il numero di versione (le informazioni presenti sono più dettagliate, ma viene filtrata solo la riga con il numero di versione). Se questo comando ha come conseguenza la visualizzazione di un messaggio del tipo "permesso negato", oppure, per altre ragioni, il file non viene riconosciuto come "programma", si può tentare un avvio con il seguente comando:
/lib/ld-linux.so.2 /lib/libc.so.6 | head -1
Se il numero di versione comincia con 2.0 o 2.1 occorre utilizzare gli archivi contrassegnati con glibc20 del nostro software. Se il numero di versione comincia con 2.2 o 2.3 occorre utilizzare gli archivi contrassegnati con glibc22 del nostro software. Naturalmente la libreria libc può essere disponibile anche nella versione (interna) 1 con il nome libc.so.5. Questa implementazione non è attuale e contiene meno caratteristiche, ma per via del suo volume decisamente ridotto (manca l'internazionalizzazione) viene utilizzata volentieri in sistemi embedded o anche se è necessario risparmiare o se non si prevede un aggiornamento.

Oltre alla versione GNU della libreria libc vengono impiegate altre implementazioni, che perseguono obiettivi diversi come "snellezza" o "estrema portabilità". Tuttavia, poiché l'uso di questo software è il risultato di decisioni ponderate (e non "casuali" o dovute all'installazione di una distribuzione standard), partiamo dal presupposto che gli amministratori responsabili conoscano molto bene il loro sistema, che tengano in considerazione i punti qui discussi e sappiano perfettamente quale libreria glibc corrisponde meglio all'implementazione impiegata. Inoltre sanno quale archivio di software Avira deve essere utilizzato.

Nella remota ipotesi che il file con l'implementazione libc non sia presente nella directory lib, l'amministratore deve sapere dove trovare tale file. In caso di dubbio il loader nel sistema sa dove si trovano gli "shared objects" (oggetti condivisi). In caso di dubbio, è utile utilizzare il comando

ldd /bin/ls (oppure un altro programma collegato dinamicamente)

e cercare con libc le righe (ad es. Idlinux nel caso, sopradescritto, di una libreria non avviata come programma).


Riepilogo

I programmi esterni contengono "solo" la logica high level dell'applicazione, mentre per le funzioni low level si avvalgono dei componenti di sistema, come ad es. la libreria libc. Se questi due componenti non sono compatibili, il software non può funzionare correttamente (mentre la gamma di commenti spazia da "sembra andare" a "a volte funziona, ma spesso no", "in linea di massima non va, non fa proprio nulla" sino a "formatta il disco rigido, mi fa cadere i capelli e mi fa odiare dal gatto").

Il software applicativo non è in grado di eseguire in modo soddisfacente il test di compatibilità, pertanto la collaborazione dell'amministratore è fondamentale per garantire la compatibilità e la funzionalità del sistema. Poiché le versioni Linux del nostro software vengono offerte in diverse varianti per diversi ambiti, è necessario effettuare una scelta in linea con la libreria C rispettivamente installata.

Il percorso di file completo alla libreria C sul disco rigido e la versione dell'implementazione possono essere consultati con il seguente comando:

$ ldd /bin/ls /bin/bash /usr/bin/vi

/bin/ls:

librt.so.1 => /lib/librt.so.1 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40030000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40160000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

/bin/bash:

libdl.so.2 => /lib/libdl.so.2 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40022000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

/usr/bin/vi:

libncurses.so.5 => /lib/libncurses.so.5 (0x4001e000)
libgpm.so.1 => /usr/lib/libgpm.so.1 (0x40066000)
libdl.so.2 => /lib/libdl.so.2 (0x4006c000)
libperl.so.1 => /usr/lib/libperl.so.1 (0x4006f000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4016f000)
libutil.so.1 => /lib/libutil.so.1 (0x4019c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4019f000)
libm.so.6 => /lib/libm.so.6 (0x401f0000)
libc.so.6 => /lib/libc.so.6 (0x40213000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

$ /lib/libc.so.6 | head -1
GNU C Library stable release version 2.3.1, by Roland
McGrath et al.

Prodotti interessati

  • Avira AntiVir MailGate [Linux]
  • Avira AntiVir MailGate [Solaris]
  • Avira MailGate Suite [Linux]
  • Avira WebGate Suite [Linux]
  • Avira WebGate Suite [Solaris]
  • Avira AntiVir Professional [Linux]
  • Avira AntiVir Professional [Solaris]
  • Avira AntiVir Server [Linux]
  • Avira AntiVir Server [Solaris]
  • Creato : mercoledì 14 marzo 2007
  • Ultimo aggiornamento: lunedì 21 marzo 2011
  • Valuta articolo
Ti è stato utile?