Simon! So come ti senti; Ho lottato anche con questa parte dell'apprendimento di Linux. Sulla base delle mie esperienze personali, ho scritto un tutorial su alcuni degli elementi che risolvi (principalmente come riferimento per me stesso): http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Penso che apprezzerai la mia nota su quanto siano semplici da costruire / installare le applicazioni Python. :)
Spero che questo aiuti! E buona compilazione.
Tim Jones
Creazione / installazione di un'applicazione dalla sorgente in Ubuntu Linux
Mentre i repository Ubuntu sono pieni di fantastiche applicazioni, una volta o l'altra ti imbatterai in quello strumento "indispensabile" che non è nei repository (o non ha un pacchetto Debian) o hai bisogno di un versione più recente rispetto ai repository. cosa fai? Bene, devi creare l'applicazione dal sorgente! Non preoccuparti, non è così complicato come sembra. Ecco alcuni suggerimenti, basati sulla mia esperienza di passare dall'essere un dilettante di rango! (Mentre sto usando Ubuntu per questo esempio, i concetti generali dovrebbero essere applicabili alla maggior parte di qualsiasi distribuzione Unix / Linux, come Fedora, e persino alla piattaforma Cygwin su Windows.)
Il processo di base per creare (compilare) la maggior parte delle applicazioni dall'origine segue questa sequenza: configura -> compila -> installa. I tipici comandi Unix / Linux per fare queste cose sono: config
-> make
-> make install
. In alcuni casi, troverai persino pagine Web che mostrano che tutte queste possono essere combinate in un singolo comando:
$ config && make && make install
Naturalmente, questo comando presuppone che non ci siano problemi in nessuno di questi passaggi. È qui che entra in gioco il divertimento!
Iniziare
Se non hai mai compilato un'applicazione dal sorgente sul tuo sistema in precedenza, probabilmente dovrai configurarla con alcuni strumenti di sviluppo generali, come la gcc
suite di compilatori, alcuni file di intestazione comuni (pensa a questo come codice che è già stato scritto da qualcun altro utilizzato dal programma che si sta installando) e lo strumento di creazione. Fortunatamente, in Ubuntu, c'è un metapacchetto chiamato build-essential
che installerà questo. Per installarlo (o semplicemente assicurarti di averlo già!), Esegui questo comando nel terminale:
$ sudo apt-get install build-essential
Ora che hai la configurazione di base, scarica i file sorgente dell'applicazione e salvali in una directory per la quale hai i permessi di lettura / scrittura, come la tua directory "home". In genere, questi saranno in un file di archivio con estensione di .tar.gz
o .tar.bz2
. La .tar
significa semplicemente che si tratta di un "archivio a nastro", che è un raggruppamento di file che conserva la struttura di directory relativa. È l' .gz
acronimo di gzip (GNU zip), che è un popolare formato di compressione Unix / Linux. Allo stesso modo, .bz2
sta per bzip2, che è un formato di compressione più recente che fornisce una compressione più elevata (dimensione del file compresso più piccola) rispetto a gzip.
Dopo aver scaricato il file sorgente, apri una finestra del terminale (Terminale di sistema dal menu Ubuntu) e passa alla directory in cui hai salvato il file. (In ~/download
questo esempio userò . Qui, '~' è un collegamento alla directory "home".) Utilizzare il comando tar per estrarre i file dal file di archivio scaricato:
Se il tuo file è un archivio gzip (ad esempio, termina con .tar.gz
), usa il comando:
$ tar -zxvf filename.tar.gz
Se il tuo file è un archivio bzip2 (ad esempio, termina con .tar.bz2
), usa il comando:
$ tar -jxvf filename.tar.gz
Suggerimento: se non si desidera ricordare tutte le opzioni della riga di comando per l'estrazione degli archivi, si consiglia di ottenere una (o entrambe) queste utilità: dtrx (il mio preferito!) O deco (più popolare). Con una di queste utility, basta inserire il nome dell'utility (dtrx o deco) e il nome del file, e fa tutto il resto. Entrambi "sanno" come gestire la maggior parte dei formati di archivio che è probabile che si verifichino e hanno un'ottima gestione degli errori.
Quando si genera dalla fonte, ci sono due tipi comuni di errori che è probabile che si verifichino:
- Si verificano errori di configurazione quando si esegue lo script di configurazione (in genere denominato config o configure) per creare un makefile specifico per la propria installazione.
- Gli errori del compilatore si verificano quando si esegue il comando make (dopo che il makefile è stato generato) e il compilatore non è in grado di trovare il codice necessario.
Esamineremo ciascuno di questi e discuteremo come risolverli.
Errori di configurazione e configurazione
Dopo aver estratto il file di archivio del codice sorgente, nel terminale, è necessario passare alla directory che contiene i file estratti. In genere, questo nome di directory sarà uguale al nome del file (senza l' estensione .tar.gz
o .tar.bz2
). Tuttavia, a volte il nome della directory è solo il nome dell'applicazione, senza alcuna informazione sulla versione.
Nella directory di origine cercare un README
file e / o un INSTALL
file (o qualcosa con nomi simili). Questi file in genere contengono informazioni utili su come compilare / compilare l'applicazione e installarla, comprese le informazioni sulle dipendenze. "Dipendenze" sono solo un nome di fantasia per altri componenti o librerie che sono necessari per compilare correttamente.
Dopo aver letto il file README
e / o INSTALL
(e, si spera, abbia consultato la documentazione online pertinente per l'applicazione), cercare un file eseguibile (con il permesso "x" impostato sul file) chiamato config
o configure
. A volte il file potrebbe avere un'estensione, come .sh
(ad esempio, config.sh
). Questo di solito è uno script di shell che esegue alcune altre utilità per confermare che si dispone di un ambiente "sano" per la compilazione. In altre parole, verificherà che sia installato tutto ciò di cui hai bisogno.
Suggerimento: se si tratta di un'applicazione basata su Python, anziché un file di configurazione, è necessario trovare un file denominato setup.py
. Le applicazioni Python sono in genere molto semplici da installare. Per installare questa applicazione, come root (ad esempio, metti sudo davanti al seguente comando sotto Ubuntu), esegui questo comando:
$ python setup.py install
Dovrebbe essere tutto ciò che devi fare. Puoi saltare il resto di questo tutorial e procedere direttamente all'utilizzo e alla fruizione della tua applicazione.
Esegui lo script di configurazione nel terminale. In genere, puoi (e dovresti!) Eseguire lo script di configurazione con il tuo account utente normale.
$ ./config
Lo script mostrerà alcuni messaggi per darti un'idea di ciò che sta facendo. Spesso, lo script ti darà un'indicazione se ha avuto esito positivo o negativo e, in caso contrario, alcune informazioni sulla causa dell'errore. Se non ricevi alcun messaggio di errore, di solito puoi presumere che tutto sia andato bene.
Se non trovi uno script che assomigli a uno script di configurazione, significa in genere che l'applicazione è molto semplice ed è indipendente dalla piattaforma. Ciò significa che puoi semplicemente saltare al passaggio di compilazione / compilazione di seguito, poiché il prodotto fornito Makefile
dovrebbe funzionare su qualsiasi sistema.
Un esempio
In questo tutorial, userò il lettore RSS basato su testo chiamato Newsbeuter come esempio per i tipi di errori che potresti riscontrare durante la creazione della tua applicazione. Per Newsbeuter, il nome dello script di configurazione è config.sh
. Sul mio sistema, quando eseguo config.sh
, si verificano i seguenti errori:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Dopo aver fatto qualche ricerca, ho scoperto che, in effetti, l' sqlite3
applicazione è stata installata. Tuttavia, dal momento che sto provando a costruire dal sorgente, questo è un suggerimento che ciò che config.sh
realmente sta cercando sono le librerie di sviluppo (intestazioni) per sqlite3
. In Ubuntu, la maggior parte dei pacchetti ha un pacchetto di controparte di sviluppo associato che termina in -dev
. (Altre piattaforme, come Fedora, usano spesso un suffisso -devel
per i pacchetti di sviluppo.)
Per trovare il pacchetto appropriato per il sqlite3
pacchetto di sviluppo, possiamo usare l' apt-cache
utilità in Ubuntu (e, analogamente, l' yum
utilità in Fedora):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Questo comando restituisce un elenco piuttosto ampio di risultati, quindi dobbiamo fare un po 'di lavoro investigativo per determinare quale sia il pacchetto appropriato. In questo caso, il pacchetto appropriato risulta essere libsqlite3-dev
. Si noti che a volte il pacchetto che stiamo cercando avrà il lib
prefisso, anziché solo lo stesso nome del pacchetto più -dev
. Questo perché a volte stiamo solo cercando una libreria condivisa che possa essere utilizzata da molte applicazioni diverse. Per installare libsqlite3-dev
, esegui il tipico comando apt-get install nel terminale:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Ora, dobbiamo eseguire di config.sh
nuovo per assicurarci di aver risolto questo problema di dipendenza e che non abbiamo più problemi di dipendenza. (Anche se non lo mostrerò qui, nel caso di Newsbeuter, ho anche dovuto installare il libcurl4-openssl-dev
pacchetto.) Inoltre, se si installa un pacchetto di sviluppo (come libsqlite3-dev
) e il pacchetto dell'applicazione associato (ad es. sqlite3
) Non lo è già installato, la maggior parte dei sistemi installerà automaticamente il pacchetto dell'applicazione associato contemporaneamente.
Quando la configurazione viene eseguita correttamente, il risultato sarà che creerà uno o più file make. Questi file sono generalmente denominati Makefile
(ricorda che il caso del nome file è importante in Unix / Linux!). Se il pacchetto build include sottodirectory, come src
, ecc., Ognuna di queste sottodirectory conterrà anche una Makefile
.
Errori di costruzione e compilazione
Ora siamo pronti per compilare effettivamente l'applicazione. Questo è spesso chiamato costruzione e il nome è preso in prestito dal processo del mondo reale di costruire qualcosa. I vari "pezzi" dell'applicazione, che sono in genere più file di codice sorgente, sono combinati insieme per formare l'applicazione complessiva. L'utility make gestisce il processo di compilazione e chiama altre applicazioni, come il compilatore e il linker, per svolgere effettivamente il lavoro. Nella maggior parte dei casi, si esegue semplicemente make (con il proprio account utente normale) dalla directory in cui è stata eseguita la configurazione. (In alcuni casi, come la compilazione di applicazioni scritte con la libreria Qt, sarà invece necessario eseguire un'altra applicazione "wrapper" come qmake. Ancora una volta, controllare sempre README
e / o i INSTALL
documenti per i dettagli.)
Come con lo script di configurazione sopra, quando si esegue make (o un'utilità simile) nel terminale, verranno visualizzati alcuni messaggi su ciò che è in esecuzione e eventuali avvisi ed errori. In genere puoi ignorare gli avvisi, in quanto sono principalmente per gli sviluppatori dell'applicazione e stanno dicendo loro che ci sono alcune pratiche standard che vengono violate. Di solito, questi avvisi non influiscono sulla funzione dell'applicazione. D'altra parte, gli errori del compilatore devono essere gestiti. Con Newsbeuter, quando ho eseguito make, le cose sono andate bene per un po ', ma poi ho avuto un errore:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Il processo di creazione si interromperà non appena si verifica il primo errore. Gestire gli errori del compilatore a volte può essere un affare complicato. Devi guardare gli errori per alcuni indizi sul problema. In genere, il problema è che mancano alcuni file di intestazione, che di solito hanno l'estensione di .h
o .hpp
. Nel caso dell'errore sopra riportato, è (o dovrebbe essere!) Chiaro che il problema è che stfl.h
non è possibile trovare il file di intestazione. Come mostra questo esempio, si desidera esaminare le prime righe del messaggio di errore e procedere fino in fondo per trovare la causa sottostante del problema.
Dopo aver esaminato la documentazione di Newsbeuter (cosa che avrei dovuto fare prima di iniziare, ma questa parte del tutorial non sarebbe stata molto significativa!), Ho scoperto che richiede una libreria di terze parti chiamata STFL. Quindi cosa facciamo in questo caso? Bene, essenzialmente ripetiamo questo stesso identico processo per quella libreria richiesta: ottenere la libreria ed eseguire il processo configure-build-install per esso e, quindi, riprendere a costruire l'applicazione desiderata. Ad esempio, nel caso di STFL, ho dovuto installare il libncursesw5-dev
pacchetto per farlo compilare correttamente. (Di solito, non è necessario ripetere il passaggio di configurazione sulla nostra applicazione originale dopo aver installato un'altra applicazione richiesta, ma non fa neanche male.)
Dopo aver installato correttamente il toolkit STFL, il processo di creazione di Newsbeuter è stato eseguito correttamente. Il processo di creazione in genere riprende da dove si interrompe (nel punto dell'errore). Pertanto, tutti i file già compilati correttamente non verranno ricompilati. Se si desidera ricompilare tutto, è possibile eseguire make clean all per rimuovere eventuali oggetti compilati e quindi eseguire nuovamente make.
Installazione
Al termine del processo di compilazione, si è pronti per installare l'applicazione. Nella maggior parte dei casi, per installare l'applicazione nelle aree comuni del file system (ad es., /usr/bin
O /usr/share/bin
, ecc.), È necessario eseguire l'installazione come root. L'installazione è davvero il passaggio più semplice dell'intero processo. Per installare, nel terminale eseguire:
$ make install
Controlla l'output di questo processo per eventuali errori. Se tutto ha avuto successo, dovresti essere in grado di eseguire il nome del comando nel terminale e verrà avviato. (Aggiungi e alla fine della riga di comando, se si tratta di un'applicazione GUI, o non sarai in grado di utilizzare la sessione del terminale fino a quando l'applicazione non termina l'esecuzione.)
Quando si crea un'applicazione dall'origine, in genere non viene aggiunta un'icona o un collegamento ai menu della GUI in Ubuntu. Dovrai aggiungerlo manualmente.
E questo è fondamentalmente il processo, sebbene potenzialmente iterativo, per la costruzione e l'installazione di un'applicazione dal sorgente in Ubuntu. Dopo averlo fatto solo poche volte, diventerà una seconda natura per te!