Capitolo successivo Capitolo precedente Indice

10. Installazione di programmi distribuiti in forma sorgente o compilata

La maggior parte dei programmi per Unix il cui utilizzo viene concesso gratuitamente, viene distribuita in forma sorgente. Ciò significa che per poter essere utilizzati, questi programmi devono essere compilati. Fortunatamente, nella maggior parte dei sistemi Unix è disponibile il compilatore ANSI C GNU che permette di uniformare questo procedimento di compilazione.

Alcuni programmi vengono distribuiti in forma già compilata (e senza sorgenti) soprattutto quando si tratta di prodotti commerciali. Anche in questi casi si possono incontrare problemi nell'installazione.

In generale, i problemi che derivano dall'installazione di questi applicativi nasce dalla assenza di sostegno da parte del sistema di gestione dei pacchetti della propria distribuzione Linux.

10.1 Struttura tipica di un pacchetto sorgente

Un programma distribuito in forma sorgente, si trova di solito impacchettato in archivi .tar.gz (o .tgz). Prima di poter procedere con la sua compilazione, deve essere espanso. Solitamente si fa questo in una directory di lavoro. Nell'esempio che segue, si fa riferimento a un ipotetico pacchetto denominato eta-beta.tar.gz.

$ cd ~/tmp

$ tar -zxv -f eta-beta.tar.gz

Di solito si ottiene una struttura ad albero più o meno articolata in sottodirectory e nella directory principale di questa struttura, si trovano:

Seguendo l'esempio visto poco prima, dovrebbe essere stata creata la directory eta-beta.

$ cd eta-beta

$ ls

Documentazione necessaria alla compilazione

I file di testo che si trovano nella directory principale del pacchetto contenente il programma sorgente, servono per presentare brevemente il programma e per riassumere le istruzioni necessarie alla sua compilazione. Di solito, queste ultime sono contenute nel file INSTALL. In ogni caso, tutti questi file vanno letti, in particolare quello che spiega il procedimento per la compilazione e installazione.

Il modo più semplice per leggere un file è l'utilizzo del programma less, o in sua mancanza di more.

$ less README

$ less INSTALL

./configure

La composizione classica di un pacchetto distribuito in forma sorgente, prevede la presenza di uno script il cui scopo è quello di costruire un file Makefile adatto all'ambiente in cui si vuole compilare il programma. Ciò è necessario perché i vari sistemi Unix sono diversi tra loro per tanti piccoli dettagli.

Questo script è spesso in grado di accettare argomenti. Ciò può permettere, per esempio, di definire una directory di destinazione del programma, diversa da quella predefinita.

Quando questo script di preparazione manca, occorre modificare manualmente il file Makefile in modo che sia predisposto correttamente per la compilazione nel proprio sistema.

<!>   Per evitare ambiguità, questo script viene sempre avviato indicando un percorso preciso, e cioè ./configure.

Makefile

Il file Makefile è quello che viene letto dal programma make e serve per coordinare le varie fasi della compilazione ed eventualmente anche per l'installazione del programma compilato.

Questo file viene spesso generato da uno script, di solito si tratta di ./configure, ma se manca deve essere controllato e, se necessario, modificato, prima della compilazione.

<!>   Spesso è bene controllare il contenuto del file Makefile anche quando questo è stato generato automaticamente.

10.2 Fasi tipiche di una compilazione e installazione

I pacchetti più comuni si compilano e si installano con tre semplici operazioni.

$ ./configure

Genera automaticamente il file Makefile.

$ make

Esegue la compilazione generando i file eseguibili.

# make install

Installa gli eseguibili e gli altri file necessari nella loro destinazione prevista per il funzionamento: l'ultima fase deve essere eseguita come utente root.

10.3 Problemi

Le note di questo capitolo valgono solo in linea di massima: è sempre assolutamente indispensabile leggere le istruzioni che si trovano nei file di testo distribuiti insieme ai sorgenti dei programmi.

I problemi maggiori si hanno quando non è stato predisposto uno script ./configure o simile e si è costretti a modificare il file Makefile.

In altri casi, il file Makefile potrebbe non prevedere la fase di installazione (make install), per cui il programma compilato potrebbe dover essere installato copiando pezzo per pezzo nella destinazione giusta.

Spesso l'installazione non rispetta la struttura standard del proprio filesystem. Ciò nel senso che magari vengono piazzati file che devono poter essere modificati, all'interno di una zona che si voleva riservare in sola lettura.

Quando si utilizza una distribuzione Linux ben organizzata, si trova una gestione dei pacchetti installati che permette l'eliminazione e l'aggiornamento di questi senza rischiare di lasciare file inutilizzati in giro. Quando si installa un programma distribuito in forma originale, viene a mancare questo supporto della gestione dei pacchetti. Quest'ultimo problema viene parzialmente risolto nel capitolo `Traccia delle installazioni'.

10.4 Installazione di programmi già compilati

L'installazione di programmi già compilati per Linux, anche se potrebbe sembrare più semplice rispetto a un procedimento che richiede la compilazione, potrebbe creare qualche problema a chi non conosce perfettamente l'interdipendenza che c'è tra le varie parti del sistema operativo.

I problemi e le soluzioni che si descrivono nelle sezioni seguenti, riguardano a volte anche i programmi distribuiti in forma sorgente. Infatti, alcune volte, i programmi distribuiti in questo modo non sono stati preparati per una installazione soddisfacente, di conseguenza bisogna provvedere da soli a collocare i file nelle posizioni corrette e a sistemare tutto quello che serve.

Scelta della piattaforma

Quando si cerca del software per il proprio sistema che può essere ottenuto solo in forma già compilata, occorre fare attenzione alla piattaforma. Infatti, non basta che si tratti di programmi compilati per Linux, occorre che si tratti di eseguibili adatti al tipo di computer su cui Linux è in funzione.

Normalmente, per identificare l'architettura PC si utilizza la sigla i386 nel nome dei file dei pacchetti.

Eseguibili e variabili di ambiente

Un programma distribuito in forma binaria, deve essere normalmente estratto dall'archivio compresso che lo contiene. A volte è disponibile uno script o un programma di installazione, altre volte è necessario copiare manualmente i file nelle varie destinazioni finali.

Quando si può scegliere, è preferibile collocare tutto quanto a partire da una unica directory discendente da /usr/local.

A volte, perché il programma possa funzionare è necessario predisporre o modificare il contenuto di alcune variabili di ambiente. Il caso più comune è costituito da PATH che deve (o dovrebbe) contenere anche il percorso necessario ad avviare il nuovo programma. Spesso, i file di documentazione che accompagnano il software, indicano chiaramente tutte le variabili che devono essere presenti durante il loro funzionamento.

La dichiarazione di queste variabili può essere collocata direttamente in uno dei file di configurazione della shell utilizzata (per esempio /etc/profile, oppure ~/.bash_profile o altri ancora a seconda di come è organizzato il proprio sistema).

Librerie dinamiche

Alcuni programmi utilizzano delle librerie non standard, e spesso queste vengono collocate al di fuori delle normali directory predisposte per contenerle. per fare in modo che queste librerie risultino disponibili, occorre che il file /etc/ld.so.cache contenga riferimenti anche a queste nuove librerie.

Il file /etc/ld.so.cache viene creato a partire da /etc/ld.so.conf che contiene semplicemente un elenco di directory destinate a contenere librerie. Il programma ldconfig serve proprio a ricreare il file /etc/ld.so.cache leggendo /etc/ld.so.conf e di solito viene avviato a ogni accensione, attraverso la procedura di inizializzazione.

Dovrebbe essere ormai chiaro il modo giusto di operare: se il programma che si installa contiene delle librerie, e queste vengono copiate in directory insolite, occorre indicare questa o queste directory nel file /etc/ld.so.conf e quindi basta avviare il programma ldconfig.

10.5 Patch

Quando si ha a che fare con programmi il cui aggiornamento è frequente, come avviene nel caso del kernel, si possono anche trovare aggiornamenti in forma di patch, cioè di file che contengono solo le variazioni da una versione all'altra.

Queste patch si ``applicano'' ai file di una versione per ottenerne un'altra.

Se la versione da aggiornare è stata espansa a partire dalla ipotetica directory ~/tmp/, per applicarvi una patch ci si dovrà posizionare sulla stessa directory e poi eseguire il comando seguente.

patch < <file-delle-variazioni>

Può darsi che la posizione in cui ci si deve trovare sia diversa o che i sorgenti da aggiornare debbano trovarsi in una precisa posizione. Per capirlo, dovrebbe bastare l'osservazione diretta del contenuto del file delle variazioni (o file patch).

L'applicazione delle variazioni, può fallire. Se non si vuole perdere il rapporto degli errori, questi possono essere ridiretti in un file specifico.

patch < <file-delle-variazioni> 2> <file-degli-errori>

Se gli aggiornamenti sono più d'uno, occorre applicare le patch in sequenza.

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice