Come compilare e installare programmi dal sorgente


39

Questo è un problema che limita davvero il mio godimento di Linux. Se l'applicazione non è su un repository o se non ha uno script di installazione, allora faccio davvero fatica dove e come installare un'applicazione dalla fonte.

Rispetto a Windows, è facile. Ti viene richiesto (praticamente) di utilizzare un'applicazione di installazione che fa tutto il lavoro in una procedura guidata. Con Linux ... non così tanto.

Quindi, hai suggerimenti o istruzioni su questo o ci sono siti Web che spiegano esplicitamente come, perché e dove installare i programmi Linux dal sorgente?


7
"Rispetto a Windows, è facile. Ti è (praticamente) richiesto di utilizzare un'applicazione di installazione che fa tutto il lavoro in una procedura guidata. Con Linux ... non così tanto." C'è il punto debole della domanda. Con Windows, raramente ottieni il codice sorgente, quindi sei in balia di chiunque abbia creato il pacchetto. Se ci pensate, non è molto diverso dal dire "non c'era un pacchetto Linux, quindi devo compilare dal sorgente", cioè. non c'era modo di iniziare. Costruire dalla fonte è di solito l'ultima risorsa in * nix-land, ma raramente un'opzione in Windows-ville.
Avery Payne,

2
Detto questo ... +1 bump per aver posto una domanda comune a cui dovrebbe essere data una risposta per tutti i nuovi arrivati ​​ai sistemi * nix. :) Costruire dalla fonte a volte significa la differenza tra la correzione di un brutto bug e la sofferenza fino alla prossima versione del software. Non è poi così male, e come molti hanno sottolineato, una volta che sai cosa cercare e come farlo, abbastanza indolore.
Avery Payne,

Risposte:


22

Normalmente, il progetto avrà un sito Web con le istruzioni su come costruirlo e installarlo. Google per primo.

Per la maggior parte farai:

  1. Scarica un tarball (file tar.gz o tar.bz2), che è una versione di una versione specifica del codice sorgente
  2. Estrai il tarball con un comando come tar zxvf myapp.tar.gzper un tarball con zip o tar jxvf myapp.tar.bz2per un tarball con zip
  3. cd nella directory creata sopra
  4. correre ./configure && make && sudo make install

O:

  1. Usa git o svn o altro per estrarre il codice sorgente più recente dal loro repository di fonti ufficiale
  2. cd nella directory creata sopra
  3. correre ./autogen.sh && make && sudo make install

Sia configure che autogen.sh accettano un argomento --prefix per specificare dove è installato il software. Consiglio di provare Dove devo mettere il software che compilo da solo? per consigli sul posto migliore dove installare software personalizzato.


Perché autogen.sh viene utilizzato quando si ottiene l'ultimo, ma configure / make viene utilizzato per una versione ufficiale?
Louis Salin,

1
In genere le persone che desiderano il software "bleeding edge" estrarranno il rilascio dal software di controllo della versione (come git, sovversione o CVS). Questo è "spigolo vivo" perché probabilmente non è stato testato, a differenza di un tarball rilasciato, che è (probabilmente) stato riconosciuto come funzionante (almeno per lo più). Ha senso?
Matt Simmons,

2
@Matt, certo ha senso, ma penso che il commento sia stato più diretto sul fatto che Sandy ora lo faceva apparire come se ci fosse un autogen.sh in ogni trunk git'd / svn'd.
Reiche,

1
E un pollo in ogni pentola ... o qualcosa del genere. Cavolo, ogni tanto mi imbatto in software senza uno script di configurazione. Se ci fosse un modo semplice e unificato di farlo, non avremmo bisogno di pacchetti ;-)
Matt Simmons,

Matt ha assolutamente ragione, è per questo che ho detto "per la maggior parte", e per prima cosa ho raccomandato di consultare il sito web del progetto. I consigli di autogen.sh/configure valgono praticamente per tutti i moduli GNOME e anche per molti altri progetti. Alcuni progetti non usano automake e avranno solo Makefile e tu eseguirai make && sudo make install. Alcuni progetti Python avranno solo un setup.py, che chiamerai per installare (poiché non esiste una vera configurazione di compilazione). Esistono anche molti altri sistemi di compilazione / installazione. Speriamo che i file README o INSTALL spieghino esattamente cosa fare.
Sandy,

3

Voglio solo aggiungere che ci sono gestori di pacchetti che compilano pacchetti dall'origine e gestiscono tutte le dipendenze di pacchetti, flag, ecc.

Nei sistemi BSD è ports: usare la collezione di porte

In Debian, anche il apt-getgestore pacchetti può installare dal sorgente: APT HOWTO: lavorare con i pacchetti sorgente (lo stesso vale per Ubuntu, Linux-mint e tutto il resto basato su Debian)

La distribuzione Gentoo utilizza il portagegestore dei pacchetti, che compila l'intero sistema solo dalla fonte: Introduzione a Portage .

Slackware può compilare pacchetti ma non so se ci sia un gestore di pacchetti per questo dentro .. =)

Ad ogni modo puoi sempre compilare i pacchetti manualmente come Sandy menzionato sopra =) Inoltre deve essere possibile usare apt-geto portagegestori di pacchetti in qualsiasi altra distribuzione ...


1
Dire "il gestore pacchetti apt-get può installare dal sorgente" non è corretto. La sezione citata descrive come si può creare un pacchetto Debian da fonti Debian . Fonti a monte non arbitrarie.
Faheem Mitha,

2

Penso che sia meglio leggere la documentazione fornita con quel programma o applicazione specifici che si desidera installare. Di solito ci sono file Leggimi / README all'interno dei tarball (l'archivio dei sorgenti dell'applicazione che è possibile scaricare di solito) o forse anche INSTALLARE i file per leggere e conoscere qual è il modo preferito di installare detta applicazione. In breve: RTFM;)


Sono venuto qui perché README ha dato tutti i requisiti per compilare sotto Linux, ma ha solo le istruzioni di installazione di Windows. La risposta accettata ha funzionato per me e probabilmente funziona per la maggior parte del tempo. Penso che sia un consiglio quasi migliore provare la rotta ./configure e andare al README se non funziona (cioè manca una dipendenza e non è possibile leggere l'output del compilatore).
Stephen C,

1

Un riepilogo per usare la collezione di porte in FreeBSD:

Trova porto

Le porte sono organizzate per categoria, quindi se non sai in quale categoria si trova la porta devi prima trovarla:

cd /usr/ports
make search name=myport

A volte ci sono troppe voci in quel modo. Personalmente preferisco:

find /usr/ports -name myport* -print -depth 2

Utilizzare *durante la ricerca poiché spesso sono disponibili più versioni di una porta. L'argomento approfondito assicura che i risultati di ritorno non siano inutilmente ingombra di corrispondenze che difficilmente vorrai.

Configurazione

Spesso, ti consigliamo di fare un po 'di configurazione; software come Apache e Postgres praticamente lo richiedono. Esistono tre scelte principali: riga di comando, ambiente e creazione dei file di configurazione. Per iniziare con la riga di comando:

make showconfig

questo elencherà le opzioni di configurazione predefinite. Se ti piacciono le impostazioni predefinite, sei pronto per compilare e installare. Altrimenti,

make config

verrà visualizzata una finestra di dialogo in cui è possibile selezionare le opzioni desiderate. (Non confonderti con questo e make configureciò configura la tua porta con le opzioni scelte!) Questo è spesso sufficiente ma per alcuni software, come Apache, c'è spesso una configurazione complessa che una semplice finestra di dialogo non può gestire. Per questo, dovresti anche guardare i Makefile che a volte ti daranno alcuni obiettivi aggiuntivi per make che ti daranno maggiori informazioni. Per continuare l'esempio di Apache

make show-modules
make show-options
make show-categories

ti darà informazioni su come impostare i moduli scelti, le opzioni di thread e simili. Se i valori predefiniti della tua porta sono per lo più corretti e vuoi solo cambiare alcune cose, puoi anche solo passare coppie chiave = valore come le variabili di ambiente:

make MYVBL1=MYVAL1 ... install clean

Inoltre, è possibile impostare le opzioni di commutazione tramite l' -Dopzione:

make -D MYVAR -D MYOTHERVAR ... install clean

Per una configurazione complessa, tuttavia, la riga di comando non funzionerà bene e tu sei meglio nessuno dei primi due metodi sarà efficace. In questo caso è possibile creare un file di configurazione e passarlo a makecon la variabile __MAKE_CONF. FreeBSD ha un file di configurazione predefinito: /etc/make.confche di solito contiene informazioni su porte precedentemente installate e altre impostazioni di sistema. Per iniziare, crea un file con le opzioni delle tue porte, chiamalo ~/myport.mke quindi combina quel file con /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

puoi quindi ricontrollare la tua configurazione:

make showconfig __MAKE_CONF=~/make.port.conf

e se tutto sembra a posto:

make install clean __MAKE_CONF=~/make.myport.conf

ATTENZIONE! Se è necessario modificare le impostazioni di configurazione dopo make configureo un'installazione in tutto o in parte, è necessario prima cancellare la configurazione :

make rmconfig

In caso contrario, si verificheranno interazioni impreviste tra il sottosistema delle porte, i makevalori predefiniti della porta e la configurazione desiderata.

È un po 'troppo per un riepilogo, ma la complessità della configurazione riguarda principalmente l'app, non la porta. Bash, ad esempio, non ha davvero alcuna opzione.

Installazione

Questa è la parte facile:

make install clean

o puoi

make build
make install
make clean

che è solo più digitando.

È praticamente tutto. Ovviamente c'è molto altro che puoi fare come elencare ricorsivamente dipendenze e opzioni di configurazione, aggiornare con patch e così via. Qui ti farò riferimento alla sezione Porte del Manuale , alla pagina man del sottosistema port (buone informazioni su obiettivi di make aggiuntivi) e alla makepagina man.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.