Installazione da sorgente. Come risolvere le dipendenze senza distruggere il gestore pacchetti


19

Compilare e installare software è un problema e un problema che non posso superare. Voglio solo andare giù attraverso la mia comprensione di questo processo con qualcuno più esperto per chiarire la mia mente per passare al livello successivo.

Molti software scientifici di cui ho bisogno non sono distribuiti come pacchetti. Capisco "./configure" imposta le variabili di compilazione e controllando le dipendenze "make" fa la compilation "sudo make install" mette tutte le librerie e i bin al loro posto. Tuttavia non funziona mai. Raramente esco dal palco a) "./configure" senza entrare nell'inferno delle dipendenze, e se lo faccio, b) "sudo make install" probabilmente annulla la mia casella.

a) L'inferno delle dipendenze è molto frustrante. A volte ho la biblioteca, ma non mi piace. O la libreria non vuole installare. O "configura" non lo trova. O la mia distribuzione l'ha collocata in un posto dove non dovrebbe essere. Oppure ci sono due versioni nel mio sistema. Il problema è che non riesco a capire come diagnosticare e quindi a risolvere questi problemi. Quali sono alcuni buoni riferimenti da imparare per qualcuno che non ha bisogno di diventare un programmatore?

b) La mia comprensione è che "make install" sostituirà alcune librerie e cambierà le impostazioni senza che il mio gestore di pacchetti ne sia consapevole. Pertanto, alcuni programmi non verranno eseguiti, altri non potranno essere aggiornati. Quindi, se non uso "make install" e mantengo il binario compilato nella mia directory utente con un collegamento simbolico aggiunto al PERCORSO, sarò in chiaro?

La mia scatola è monoutente, ha tonnellate di HD gratis quindi non mi interessa davvero avere più (dozzine) di copie di librerie se ciò risolverà i miei problemi. Lo spazio è economico.


3
Non dici quale distribuzione stai usando, sarebbe un'informazione interessante. Se si esegue un derivato Debian è possibile utilizzare apt-get build-dep <package>per installare automaticamente le dipendenze necessarie.
Marco

Uso CentOS 6 (per avere ciò che usa il superguru nel nostro laboratorio), ma usavo Ubuntu.
Lenz,

Benvenuti nella vita di un packager di distribuzione. Fare tutto questo monitoraggio delle dipendenze non è particolarmente difficile, ma è fatica.
Gilles 'SO- smetti di essere malvagio' il

Vedi Gestori di pacchetti non root e forse altre domande taggate non utente root che riguardano l'installazione del software e la gestione dei pacchetti.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


16

La maggior parte dei pacchetti avrà un <package>-dev(per Debian basato) o <package>-devel(per Red Hat basato) che saranno le librerie necessarie per il collegamento per la costruzione.

Quindi, per esempio se la fonte dice che richiede libxml, nei sistemi basati su Debian troverai libxml2e libxml2-dev(usali apt-cache search <dependancy>per trovarli).

Ti servirà libxml2-devper costruirlo ed libxml2eseguirlo.

Il ./configurepassaggio di solito supporta flag come --with-libxml=/usr/lib/puntarlo verso le librerie corrette ( ./configure --helpdovrebbe elencare tutte le opzioni). Di solito supporta anche la modifica del percorso di installazione con --prefix=$HOME/sw. L'utilizzo di un prefisso al di fuori di ciò che controlla il gestore pacchetti è il modo migliore per evitare conflitti con il software installato del gestore pacchetti.

Su Debian e derivate usando un --prefixdi /usr/local/o /opt/local/dovrebbe essere al sicuro.

Se una libreria (o versione) di cui hai bisogno non è disponibile dal gestore dei pacchetti, basta scaricare il sorgente e compilarlo usando opzioni simili. Soprattutto, utilizzare una parte --prefixesterna del gestore pacchetti e quando si compila il software che si desidera veramente utilizzare --with-<library>=/<path/to/installed/library>.


5

C'è lo strumento auto-aptche può essere utilizzato per questo.

Da man auto-apt :

auto-apt è un programma che controlla l'accesso ai file dei programmi in esecuzione in ambienti auto-apt. Se un programma accederà a un file di pacchetto non installato, auto-apt installerà il pacchetto contenente il file, usando apt-get.

È usato come segue:

auto-apt run ./configure

Un altro modo è usare apt-get build-dep <package>su distribuzioni basate su Debian.


apt-get build-dep <package>ha funzionato per me. È stato frustrante correre ./configureancora e ancora imparare un altro pacchetto richiesto!
Heatfan John

2

Per le distribuzioni basate su RPM, potresti provare a creare pacchetti adeguati (non è così difficile ...).

I vantaggi di un pacchetto adeguato sono che il gestore pacchetti tiene traccia del software e puoi facilmente replicare la tua configurazione altrove / sulla macchina successiva. Con un pacchetto sorgente corretto il port forwarding (nuova versione upstream, patch bugfix, librerie sottostanti viene aggiornato) è più facile che doverlo scoprire da zero la prossima volta.

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.