Installare da sorgenti significa in sostanza installare direttamente dal codice scritto dal programmatore.
I sorgenti sono normalmente compattati (o “compressi”) in archivi denominati “tarball” ed hanno più comunemente estensione .tar.gz , .tar, “tar.bz2″, ma possono anche essere .rar , .zip o anche altra estensione.
In Ubuntu premendo con il pulsante destro sulle icone di questi archivi, potete scompattare i file con un’apposita opzione (”Estrai qui”, più facile di così? E’ la maniera piu rapida di estrarre un archivio).
Altrimenti gli archivi possono essere “scompattati” (o “decompressi”) usando la “riga di comando” (detta anche “shell” o “terminale”, o “bash”) mediante il comando “tar”.
Giocoforza, in linux, se si vuole fare qualcosa di un minimo serio, è necessario cominciarsi ad abituare che bisogna imparare a svolgere le comuni operazioni, non soltanto da GNOME o KDE(cioè attraverso le più comuni interfacce grafiche, che permettono di effettuare molte operazioni usando solo il mouse, come in Windows), ma anche da Shell.
La Shell può essere avviata dal menù di GNOME facendo “Applicazioni –> Accessori –> Terminale”, oppure con la combinazione di tasti CTRL+ALT+F1 (fate CTRL+ALT+F7 per ritornare al Desktop).
Vi consiglio di NON cancellare i sorgenti del software che installate: createvi una apposita cartella chiamata “sorgenti” nella vostra /home/nome_utente/ e metteteli tutti lì dentro. I sorgenti infatti potrebbero tornarvi utili nel caso vogliate disinstallare quell’applicazione (vedi la sezione “Disinstallare pacchetti su Ubuntu”).
Se dovete scompattare un archivio .rar ed avete difficoltà, potrebbe essere perchè dovete installare l’apposito pacchetto “rar” da Synaptic. Controllate da Synaptic se l’avete installato, altrimenti installatelo.
Installazione da sorgenti
Quando del pacchetto che vi interessa non avete il .deb ma avete i “sorgenti”, vi è una tipica procedura in linux per installarli, che è composta da tre comandi, da eseguire uno dopo l’altro:
./configure
make
sudo make install
Vediamoli i tre passaggi nel dettaglio
./configure
Con ./configure viene lanciato un script che si occupa di controllare se il sistema risponde ai requisiti richiesti come librerie e programmi (per esempio dei compilatori).
Si occupa anche di creare il Makefile, un file contenente delle variabili settate da ./configure (come la directory dove verrà installato il programma e il percorso delle librerie necessarie alla compilazione).
E’ in questa fase che avvengono i maggiori problemi di installazione da sorgente. Infatti una libreria mancante causa quasi sempre un’errore e quindi l’interruzione del ./configure.
Anzichè scrivere semplicemente ./configure, potete anche scrivere:
./configure –prefix=/usr/local/
–prefix farà in modo che ./configure crei un makefile tale che il programma verrà installato dentro la cartella da noi indicata, in questo caso /usr/local/.
Make
Make è il programma che si occupa di analizzare il file Makefile creato da ./configure e di compilare il programma.
Ma cosa ha di diverso il comando make dal comando gcc?
Make è concepito per compilare interi programmi, e ogni buon grosso programmone che si rispetti, è costituito da tanti, anche tantissimi file, magari di centinaia di mega, e compilare tutta questa roba può richiedere molto tempo.
Make fa questo lavoro per voi: spulcia le relazioni dei file che compongono il programmone nel “makefile” creato da ./configure e compila per voi tutta quella gran mole, generando dei file “.o” (”oggetto”), da ogni file sorgente e da questi, alla fine, ricava il da voi tanto desiderato file eseguibile.
Se anzichè “installare” state “reinstallando” sopra una precedente installazione del programmone, magari perchè volete semplicemente aggiornarlo, può capitare che “make” vi pianti in asso con un errore che non riuscite a capire..
Questo perchè make si ricontrolla ogni file sorgente e capisce, se dall’epoca ultima vostra compilazione, il file è cambiato oppure no e solo i file modificati saranno ricompilati, facendovi risparmiare moltissimo tempo. Ma allora perchè questo errore? Capita MOLTO di rado, tipo quando vi ricompilate il kernel o cercate di riaggiornare qualcosa con il metodo “svn”.
E’ complicato da spiegare il perchè questo errore si verifichi in queste situazioni, ma vi basterà sapere che la situazione si risolve facilmente: prima di eseguire il comando “make”, scrivete:
make clean
Con questo comando vengono eliminati i precedenti file “.o” e potete fare una reinstallazione bella pulita del programmone.
sudo make install
Make install si occupa di andare ad installare (tramite il comando make) il programma sul nostro sistema.
Procedura di installazione alternativa
Quella appena descritta è la procedura “classica” per installare un file a partire dai sorgenti.
In generale un programma in Linux, installato a partire da pacchetto o da sorgenti, sostanzialmente si sparpaglia fra le diverse cartelle di sistema di Linux.
I file di configurazione di questo programma, ad esempio, finiranno nella cartella “/etc/“, che per convenzione è fatta apposta per contenere i file di configurazione del software che viene installato.
I file che non saranno soggetti ad ulteriori modifiche (quindi il programma vero e proprio) finiscono in genere in una qualche sottocartella di “/usr/share/” o “/usr/local/“, mentre i file che subiscono modifica vanno in genere sotto “/var/“.
Il file per lanciare il programma, ovvero “l’eseguibile”, va in genere in “/bin/“, le librerie vanno in genere sotto “/usr/lib/” o (piu raramente), sotto “/usr/libexec/“.
Come potete vedere il programma si sparpaglia, ma in modo “razionale”. Segue una logica che è regolata da uno standard chiamato “Filesystem Hierarchy Standard (FHS)”.
Tuttavia a volte può capitare di avere qualche problema nel disinstallare il software, o perchè il programmatore del software non ha pensato a un sistema per la disinstallazione, o perchè comunque sia non riusciamo a rintracciare tutti i file installati.
Proprio per questo motivo è consigliata in Ubuntu una procedura di installazione da sorgenti che è diversa dalla solita triade di comandi “./configure && make && make install”, e questa procedura è:
sudo auto-apt run ./configure
sudo make
sudo checkinstall
Vediamoli nel dettaglio.
auto-apt run
auto-apt run serve ad eseguire un comando ma sotto il controllo di auto-apt.
Auto-apt serve a fare in modo che se il programma che state installando manca di qualche file (in gergo si dice “ha problemi di dipendenze”), lui prova a cercare nel database dei pacchetti se esista un pacchetto che abbia il file che gli serve e ci chiederà se può installarlo. Il database può essere aggiornato con ” auto-apt update “.
Attenzione però di non fare troppo affidamento alle capacità di ricerca di auto-apt per la risoluzione delle dipendenze in quanto in realtà piuttosto spesso lui fallisce nella sua ricerca e dobbiamo essere noi stessi a cercare il pacchetto che serve mediante Synaptic (cioè dobbiamo essere noi stessi, manualmente, a “risolvere le dipendenze”). Nonostante non sia infallibile vale sempre la pena di provare ad installare con auto-apt perchè male che vada può solo farci risparmiare del tempo.
auto-apt potrebbe non essere installato. In tal caso aprite Synaptic ed installatelo.
checkinstall
checkinstall tiene traccia di tutti i file installati da make install o equivalenti, crea pacchetti Slackware, rpm o deb con tutti i file, e li aggiunge nel database dei pacchetti installati, permettendo di essere facilmente rimossi con il gestore dei pacchetti della distribuzione.
Dopo avere digitato “sudo auto-apt run ./configure” vedrete che il sistema opererà un controllo sui file che possiede. Se li possiede tutti, alla fine verrà generato il makefile che verrà usato dal successivo comando che digiterete, “sudo make” (in realtà make potrebbe essere eseguito anche senza “sudo”, a meno che i nostri sorgenti non si trovino in una directory protetta da scrittura. Io lo uso lo stesso).
Se i file non sono tutti presenti non avrete il makefile per continuare l’installazione. In tal caso riguardatevi tutta la lista di operazioni eseguite su shell dopo il comando “sudo auto-apt run ./configure” e cercate cosa è che non trova. A questo punto scaricate voi stessi la roba mancante servendovi di Synaptic. Tutto questo può sembrare noioso ma è il prezzo che si deve pagare, spesso, nell’installazione da sorgenti.
A volte può essere difficile capire quale sia esattamente il file che manca.. Ad esempio l’esecuzione del nostro comando ” auto-apt run ./configure ” potrebbe terminare con un errore del tipo “SDL could not be found”. In questo caso lui vi sta dicendo in realtà che ciò che non sta trovando sono le “librerie di sviluppo SDL”.
Voi cercherete in Synaptic questo fantomatico pacchetto “SDL” che lui non trova e non lo troverete nemmeno voi, perchè in realtà quello che cerca è un pacchetto di nome “libsdl1.2-dev“.
Si perchè in generale normalmente i file che mancano a ./configure in una installazione sono pacchetti di tipo “librerie per sviluppatore”, che sono pacchetti che normalmente cominciano con la parola “lib” e finiscono con la parola “dev“.
Quindi non appena vi si presenta un problema di dipendenze, partite sempre dal presupposto che molto probabilmente (spesso ma non sempre) il pacchetto che voi state cercando in realtà comincia con “lib” e termina con “dev”.
Utilizzando la procedura consigliata (cioè quella, che fa uso di auto-apt run, make, checkinstall), i sorgenti vengono trasformati in pacchetto in futuro facilmente eliminabile da Synaptic oppure da Shell digitando:
sudo dpkg -r nomepacchetto