2009-09-17 18 views
309

Durante l'esecuzioneQual è l'opposto di "make install", cioè come si disinstalla una libreria in Linux?

./configure --prefix=/mingw 

su un sistema di MinGW/MSYS per una libreria che ho avuto in precedenza eseguito

'./configure --prefix=/mingw && make && make install' 

mi sono imbattuto in questo messaggio:

ATTENZIONE: Una versione del Vamp il plug-in SDK è già installato. Aspettati preoccupazioni e dolori se installi una nuova versione senza rimuovere prima quella vecchia. (Continua)

Questo mi ha fatto preoccupare. Qual è l'opposto di "make install", cioè come viene disinstallata una libreria in Linux? Will 'make clean' fa il lavoro, o ci sono altri passaggi?

+3

Se questo ha sia en un grosso problema. Perché le persone non hanno scritto alcuno script per eseguire automaticamente il backtrack di "make install"? Questo mi ha causato un grande mal di testa anche quando 'make uninstall' non c'è. Presto condividerà uno script per 'make uninstall'. –

+0

http://serverfault.com/questions/422237/what-is-uninstall-procedure-for-software-installed-via-make-install-on-centos –

+1

Vedere http://askubuntu.com/questions/87111/ se-i-build-a-pacchetto-da-sorgente-come-posso-io-disinstallare-o-rimuovere-completamente per risposte simili, la soluzione principale al momento sembra essere "sudo make uninstall" se i file di configurazione dell'installazione sono ancora disponibile ma senza altre soluzioni ovvie se non, a parte la disinstallazione con l'utility di gestione dei pacchetti di sistema se installata con l'utility "checkinstall". – Edward

risposta

21

A seconda di quanto bene il makefile/configure script/autofoo magia del programma in questione è la seguente potrebbe risolvere il problema:

make uninstall 

Il problema è che si dovrebbe eseguire questo sull'albero di origine del versione che hai installato e con esattamente la stessa configurazione che hai usato per l'installazione.

10

make clean generalmente pulisce solo i file creati nella directory contenente il codice sorgente stesso e raramente tocca qualsiasi software installato.

I makefile in genere non contengono un obiettivo per la disinstallazione - in genere è necessario farlo da soli rimuovendo i file dalla directory in cui sono stati installati. Ad esempio, se hai creato un programma e lo hai installato (utilizzando make install) in /usr/local, ti consigliamo di esaminare /usr/local/bin, /usr/local/libexec, /usr/local/share/man e così via e rimuovere i file indesiderati. A volte un Makefile include un target uninstall, ma non sempre.

Ovviamente, in genere su un sistema Linux si installa il software utilizzando un gestore di pacchetti , che è in grado di disinstallare il software "automaticamente".

5

Purtroppo non esiste uno standard, questo è uno dei pericoli dell'installazione dal sorgente. Alcuni Makefile includeranno una "disinstallazione", quindi

make uninstall 

dalla directory di origine potrebbe funzionare. Altrimenti, potrebbe essere una questione di annullare manualmente qualsiasi cosa fosse il make install.

make clean di solito pulisce solo la directory di origine - rimuovendo file generati/compilati e simili, probabilmente non è quello che stai cercando.

417

make clean rimuove qualsiasi file intermedio o di output dall'albero di origine/generazione. Tuttavia, riguarda solo l'albero di origine/generazione; non tocca il resto del filesystem e quindi non rimuoverà il software precedentemente installato.

Se sei fortunato, il funzionamento di make uninstall funzionerà. Dipende tuttavia dagli autori della biblioteca; alcuni autori forniscono un target uninstall, altri no.

Se non sei fortunato, dovrai disinstallarlo manualmente. L'esecuzione di make -n install può essere utile, poiché mostrerà i passaggi che il software impiegherebbe per installarsi ma in realtà non farà nulla. È quindi possibile invertire manualmente tali passaggi.

+97

+1 per l'opzione' -n' –

+5

+1; Fai attenzione ai file che potrebbero essere stati installati anche da altri pacchetti. La semplice eliminazione di questi file (un'interpretazione di "invertire manualmente questi passaggi") potrebbe interrompere gli altri pacchetti. Questo è (uno dei tanti motivi) per cui sono stati inventati i gestori di pacchetti. –

+3

questo è possibile solo se si mantiene la stessa directory compilata e compilata correttamente? quindi non molto utile dato che molte persone lo cancellerebbero dopo l'installazione. Vuole disinstallare le cose, indipendentemente dal fatto che abbia conservato la cartella di compilazione, e indipendentemente dal fatto che il pacchetto sia stato configurato correttamente per un'opzione di disinstallazione make. Chiarimento: ciò che vuole fare è abilitare un tipo di gestione per i pacchetti che funzionano per le cose che ha compilato personalmente. – Nisse

259

Se sudo make uninstall non è disponibile:

In un sistema basato Debian, invece di fare make install è possibile eseguire sudo checkinstall creare un file .deb che viene installato automaticamente. È quindi possibile rimuoverlo utilizzando il gestore di pacchetti di sistema (ad esempio apt/synaptic/aptitude/dpkg). Checkinstall supporta anche la creazione di altri tipi di pacchetto, ad es. RPM.

Vedere anche http://community.linuxmint.com/tutorial/view/162 e some basic checkinstall usage e debian checkinstall package.

+35

Questa risposta è la prova che le risposte migliori spesso non ricevono molti voti positivi. Grazie! Volevo sapere come farlo per molto tempo. Ho sempre esitato a fare un "make install" perché so che sarà quasi certamente un problema da rimuovere. – doug65536

+0

anche il libro LFS ha alcune informazioni sui sistemi di gestione dei pacchetti, poiché è necessario configurarlo da soli. Le informazioni dovrebbero essere utili per far funzionare meglio questo tipo di cose (più pulito, più generale).Esistono script che semplicemente ascoltano ciò che viene installato e quindi creano uno script che al momento del lancio cancella tutti quei file o qualcosa del genere. – Nisse

+11

Questo ha funzionato magnificamente per me, anche se avevo già eseguito 'make install' prima di usare' checkinstall'. – LukeGT

49

Se si dispone di un file manifest che elenca tutti i file che sono stati installati con make install è possibile eseguire questo comando che ho da un'altra risposta:

cat install_manifest.txt | xargs echo rm | sh 

Se avete sudo make install è necessario aggiungere un sudo alla disinstallazione:

cat install_manifest.txt | xargs echo sudo rm | sh 
+4

Sono sorpreso di vedere questo non ha avuto alcun upvotes. Questo ha funzionato per rimuovere i file dal sistema quando non funzionavano altre opzioni. Nel mio caso, checkinstall non è stato in grado di creare un deb perché la versione del programma non iniziava con un numero e, quindi, non creava. Questo ha funzionato bene. – DWils

+2

@DWils Penso che non abbia ricevuto più upvotes perché è piuttosto pericoloso. Inoltre, 'xargs echo rm | sh'? Abbastanza ovvio che chiunque abbia suggerito questo non è particolarmente esperto o ben informato nell'uso della shell. – fstd

+2

(per riferimento, barf su qualsiasi carattere nei nomi di file che sono interpretati dalla shell (e quindi hai rogue 'rm viene eseguito!), Inoltre farà tutti i tipi di espansione della shell. Immagina solo cosa succede se il 'install_manifest .txt' contiene un asterisco ... 'rm *' verrà reindirizzato in una shell.) Downvoted, per questo motivo. – fstd