Compilare un software da sorgenti su Linux

Una caratteristica importante delle distribuzioni GNU/Linux è certamente la disponibilità di software facilmente installabile tramite i repositories ufficiali mantenuti dagli sviluppatori o realizzati dagli utenti. In alcuni casi, però, non è possibile utilizzare pacchetti software compilati in precedenza, sia per la mancanza di questi ultimi nei vari reposotories, sia per la necessità di ottimizzare un’applicazione o implementarne alcune funzionalità altrimenti non utilizzabili.

Di tutti i software open source, per la definizione stessa di tale termine, vengono resi disponibili i sorgenti che, che una volta compilati, andranno a costituire l’intera applicazione. La compilazione, in genere, è un’operazione non particolarmente difficile, sopratutto se non si ha la necessità di andare a modificare numerosi parametri, e può durare più o meno tempo a seconda delle dimensioni dell’applicazione e delle operazioni da eseguire per ottenere i file binari.

Compilare da sorgenti in Linux

Alcune osservazioni preliminari:

PRO: i vantaggi derivanti dalla compilazione di un sorgente sono principalmente prestazionali, grazie alla compilazione il software viene “adattato” all’hardware presente sulla macchina, riducendo così l’uso di memoria sul disco, l’uso di ram (si parla generalmente di 25-30 megabytes di RAM) e il carico sulla CPU, oltre ad un notevole aumento della velocità di apertura/esecuzione/utilizzo dell’applicazione.

CONTRO: il rovescio della medaglia è uno soltanto: l’aggiornamento dell’applicazione è possibile solo ricompilando i sorgenti aggiornati.

i sorgenti sono distribuiti sotto forma di archivio compresso, solitamente in formato .tar, .tar.gz (o .tgz), .tar.bz2, .tbz2, o .tbz e .tar.Z. l’estensione si riferisce al tipo diverso di compressione, ma la sostanza e l’operazione di decompressione rimane generalmente la stessa per tutti i formati. Nei sistemi operativi GNU/Linux per lo svolgimento di tale operazioni ci si avvale dello GNU build system, costituito da una serie di programmi, conosciuti più comunemente con il termine autotools, per la semplificazione delle operazioni di compilazione. Alcuni di autotool sono il gcc (GNU C compiler), make, cmake.

PREPARARE L’AMBIENTE:

per compilare il sistema richiede un apposito programma detto compilatore, alcuni esempio di programmi più diffusi gcc e python che sono ormai istallati di default su tutte le distribuzioni ma non tutti i programmi sono scritti in C o in python, quindi probabilmente si avrà bisogno di diversi compilatori, dipende dal tipo di applicazione che si andrà a compilare.

I sistemi basati su Debian possono utilizzare pacchetto: build-essential, il quale una volta installato si porta dietro tutte le dipendenze necessarie per avere un idoneo ambiente di compilazione, quindi se si utilizza una delle suddette distribuzioni, il primo passo sarà installare questo pacchetto (sarebbe buona norma installare anche cmake):

sudo apt-get install build-essential && cmake

PROCURARSI I SORGENTI:

poniamo il caso ci sia la necessità di installare Firefox, bisognerà recarsi sul sito, cercare i sorgenti e scaricarli o con un browser in una cartella, alternativamente è possibile farlo da terminale utilizzando strumenti appositi, come ad esempio wget:

wget http://indirizzo del file da scaricare

SCOMPATTARE L’ARCHIVIO CONTENENTE I SORGENTI:

è sufficiente fare doppio click sul pacchetto per aprire il gestore degli archivi e successivamente scompattare dove si vuole i sorgenti, altrimenti c’è sempre il terminale:

tar xvfz nomedelfile.tar.gz
tar xvfj nomedelfile.tar.bz2

LEGGERE I FILES DELLE ISTRUZIONI:

è sempre caldamente consigliato leggere il file INSTALL o README, per due motivi: li saranno scritte tutte le eventuali dipendenze ed è possibile che il pacchetto non sia stato creato con gli Autotools quindi richieda altri comandi per la compilazione.

INSTALLARE LE DIPENDENZE:

per una compilazione “totale” sarebbe buona norma compilare anche le dipendenze (a volte è necessario, dove non si trovi la dipendenza precompilata) ma è ovvio che ciò porta via una gran quantità di tempo, quindi la cosa più semplice e veloce è installare le dipendenze con un gestore dei pacchetti che consenta la c.d. risoluzione automatica delle dipendenze, per esempio utilizzando apt-get:

sudo apt-get install nome dipendenza1 && nome dipendenza 2 (ecc…)

INIZIARE LA COMPILAZIONE:

anzitutto è necessario portarsi dentro la cartella dell’applicazione, quella che è stata in precedenza scompattata:

cd nome della cartella

Lanciare lo script configure: uno script presente nella quasi totalità degli archivi contenenti i sorgenti, che è essenziale per passare alla fase successiva, in questo script ha la funzione di controllare la dipendenze e le librerie necessitate dall’installando programma, quindi se per caso c’è una dipendenza non richiesta dall’applicazione che si vuole compilare ma da una sua dipendenza o se manca una libreria, lo script restituirà un errore del tipo:

configure: error: xml2-config not found. Please check your libxml2

in questo caso sarà quindi obbligatorio installare il pacchetto libxml2 e rilanciare lo script sempre col comando:

./configure

N.B. Spesso l’errore potrebbe riguardare un pacchetto o libreria che sembra già installata, in quel caso è necessario installare la versione del programma utilizzando il file sorgente in via di sviluppo che è denotata dal suffisso -dev (esempio gimp-dev o firefox-dev o libxml2-dev)

eseguire make:

se configure è uscito senza problemi, si può lanciare il make, se si dispone di un processore dual core o con più core o con l’hypertreading, è possibile dimezzare i tempi del make (che normalmente è un processo lungo) dando questo comando:

make -j2

(ovviamente si può sostituire 2 con 3 o 4, dipende dal numero di core a disposizione e che si vuole usare)

anche il make potrebbe dare errori, sempre riguardanti le dipendenze, magari qualcosa che il configure non può controllare (il caso delle dipendenze di dipendenze), quindi bisognerà controllare l’errore, cercando il nome del pacchetto in questione ed installarlo (come dicevo prima tipicamente di tratta di pacchetti -dev)

Eseguire make install:

questo è l’ultimo passo, è molto difficile che esca con degli errori ma è pur sempre possibile, e in questo caso conviene o inserire cercare nel web una soluzione utilizzando un motore di ricerca e/o o rivolgersi al forum di supporto.

Con questo comando è possibile installare tutti i file che sono stati generati dal make:

sudo make install
sudo make uninstall
(per disinstallare)

É pratica comune per chi usa Debian e derivate creare un pacchetto .deb autoinstallante piuttosto che procedere al make install (quindi è da fare subito dopo il make, saltando il passaggio del make install), in questo modo sarà possibile disinstallare il pacchetto direttamente da synaptic. Lo strumento a disposizione per tale distribuzione è checkinstall, che andrà ovviamente installato:

sudo apt-get install checkinstall

ed eseguito:

sudo checkinstall

si presenterà un menu dove è possibile cambiare alcuni parametri, normalmente non serve cambiare nulla, può accadere che checkinstall non funzioni, quindi conviene passare al make install.

Ecco ora quale esempio un procedura standard per compilare un’applicazione Kde versione 4

Le applicazioni per Kde hanno una procedura uguale ma comandi leggermente diversi:

I passaggi sono gli stessi della sezione primi passi (quindi scaricare il sorgente, leggere le istruzioni ecc…) poi cambiano.

per prima cosa bisogna creare una cartella che verrà chiamata build (ovviamente dentro alla cartella dove si trova il programma da compilare):

mkdir build && cd build

qui non è usato lo script configure ma cmake (quindi è necessario il pacchetto cmake):

cmake ../ -DCMAKE_INSTALL_PREFIX=’kde4-config-prefix’

successivamente:

make && sudo make install

(è possibile eseguirli anche separatamente, non utilizzando l’operatore &&)

Alcune applicazioni possono richiedere comandi aggiuntivi che sono descritti nei file di istruzioni.

DISINSTALLARE UN PROGRAMMA INSTALLATO CON I SORGENTI:

Per disinstallare il relativo programma, ci si dovrà portare nella cartella dove sono stati scompattati i sorgenti e poi dare:

make uninstall

Ossia invocare questa funzione dello stesso makefile generato con l’esecuzione dello script configure, funzione che solitamente è sempre prevista.

Ne consegue che per disinstallare un programma non si deve mai cancellare la cartella dove sono stati scompattati i suoi sorgenti di origine! Ove mai il makefile non preveda funzionalità di disinstallazione, bisognerà visionare il file .log (eventualmente) generato durante l’installazione e cancellare manualmente uno ad uno i relativi files, creati durante l’installazione, così come riportato nel file di .log stesso.

Seguiteci anche su Facebook, Google Plus, Tumblr, Twitter e Telegram, per restare sempre in contatto con noi e con le nostre guide.



Cerca

Seguici

Live da Facebook
Live da Twitter
Seguici su Telegram
Canale InsiDevCode Telegram