Se creo un pacchetto dall'origine come posso disinstallare o rimuovere completamente?


137

Ho usato il codice sorgente per creare un pacchetto come di seguito:

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib --with-package-name="Myplugin" --with-package-origin="http://www.ubuntu.org/" --enable-gtk-doc --disable-static
make
make install

Ma sfortunatamente, ho scoperto che è l'ultima versione e ha molti bug, quindi devo rimuoverlo / disinstallarlo. Ma come posso farlo? Ho provato make clean; make uninstallma ancora vedo che esiste:

# pkg-config --list-all | grep Myplugin
myplugin-....
$ ls /usr/lib/myplugin/libXYZ.so
exist....

Come lo rimuovi ora?

Risposte:


177

Di solito puoi semplicemente usare:

make uninstall

o

sudo make uninstall

se l'app è stata installata come root.

Questo funzionerà solo se lo sviluppatore del pacchetto si è occupato di creare una buona regola di disinstallazione.

Puoi anche provare a dare un'occhiata ai passaggi utilizzati per installare il software eseguendo:

make -n install

E quindi prova a invertire manualmente questi passaggi.

In futuro, per evitare questo tipo di problemi, prova a utilizzare checkinstallinvece che make installquando possibile (AFAIK sempre a meno che tu non voglia mantenere contemporaneamente la versione compilata e una pacchetto). Creerà e installerà un file deb che potrai quindi disinstallare usando il tuo gestore pacchetti preferito.

make cleandi solito pulisce le directory degli edifici, non disinstalla il pacchetto. Viene utilizzato quando si desidera essere sicuri che l'intera cosa sia compilata, non solo i file modificati.


L'ho fatto anch'io. Ma esiste ancora, come mostrato pkg-config e ls /usr/lib/myplugin/libXYZ.so
YumYumYum

36
+1 per l'utilizzo checkinstall: fa evaporare l'intero problema.
Oli

6
@Google: se make uninstall non funziona, dovrai tenere traccia di ciò che ha fatto install e annullarlo manualmente.
Javier Rivera,

4
Un'altra cosa da tenere a mente è che se è make installstato eseguito come root (ad esempio, sudo make install), che in genere è il caso, è sempre virtuale eseguire sudo make uninstallper rimuovere il software.
Eliah Kagan,

5
Se hai già eseguito make install, puoi ancora utilizzare checkinstall. Normalmente checkinstallsovrascriverà tutto ciò che ha make installcreato. Dopodiché basta usare dpkg -r <package.deb>e tutto dovrebbe essere rimosso.
user502144

28

Non credo che si tratti di un bug, sarebbe una buona idea leggere e imparare a usare checkinstall durante l'installazione dal sorgente.

è possibile installare checkinstall dai repository, una breve descrizione del pacchetto;

CheckInstall tiene traccia di tutti i file creati o modificati dallo script di installazione ("make install" "make install_modules", "setup", ecc.), Crea un pacchetto binario standard e lo installa nel sistema dandoti la possibilità di disinstallarlo con le utility di gestione dei pacchetti standard della tua distribuzione.

Questi link di seguito potrebbero essere utili per una migliore comprensione. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/


16

Non si tratta di un bug: la compilazione dal sorgente è un metodo non supportato di installazione del software che bypassa completamente il sistema di gestione dei pacchetti (utilizzato dal Software Center).

Non esiste un modo standard per installare o disinstallare il software compilato dal sorgente, quindi Ubuntu non può sapere cosa fare. Il software non è nemmeno elencato come programma installato.

È necessario seguire le istruzioni del distributore per l'installazione e la rimozione di tale software personalizzato. Potresti anche contattare lo sviluppatore per chiedere loro di creare un pacchetto Debian in modo da poter usare il sistema di gestione dei pacchetti.


3

Non è un bug, è ciò che accade quando gli sviluppatori ricorrono alla distribuzione via sorgente e non tramite i metodi di packaging nativi.

Puoi ottenere che i tuoi file sorgente diventino pacchetti debian usando checkinstall o dhbuild. Onestamente, secondo me - i nuovi utenti dovrebbero evitare l'installazione dalla fonte e gli sviluppatori dovrebbero evitare di distribuire solo dalla fonte.


Lo so ma a volte è inevitabile ... In questo caso era solo un piccolo gioco che non è davvero necessario ma qualche tempo fa dovevo installare MATLAB uno strumento di calcolo utilizzato nella mia università e dovevo installarlo dalla fonte poiché non ho un file deb per Ubuntu ... Ma passerò sicuramente attraverso i metodi checkinstall e dhbuild ... grazie
nik90

1

Conosco pochi pacchetti che supportano "make uninstall", ma molti altri che supportano make install DESTDIR = xxx "per installazioni graduali.

Puoi usarlo per creare un pacchetto che installi invece di installarlo direttamente dal sorgente. Non ho avuto fortuna con checkinstall ma fpm funziona molto bene.

Questo può anche aiutarti a rimuovere un pacchetto precedentemente installato usando make install . Devi semplicemente forzare l'installazione del pacchetto creato su quello installato e quindi disinstallarlo.

Ad esempio, l'ho usato di recente per gestire protobuf-3.3.0. Su RHEL7:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m you@youraddress.com \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

Preferisci yum a rpm se puoi.

Su Debian9:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

Preferisci apt a dpkg dove puoi.

Ho anche pubblicato questa risposta su StackOverflow


0

Abbiamo bisogno di negoziare il fatto che fanno di disinstallazione potrebbe non sempre funziona, così in basso è più di una soluzione proattiva.

Ciò comporta l'uso del programma paco che è disponibile in Ubuntu Software Center. Una volta installato paco, possiamo usarlo in modalità log quando "facciamo installare" un programma. Paco si comporta come un wrapper per "make install" e crea un registro nella directory / var / log / paco con l'elenco dei file copiati in varie directory. Inoltre, è possibile visualizzare i file nel front-end di Paco.

Ad esempio, quando ho compilato php dal sorgente ho fatto quanto segue:

paco -lp php5 "make install"

Il parametro l fa funzionare paco in modalità log. Questo ha creato un file di log in / var / log / paco chiamato php5 (il nome che ho dato nel comando). Conteneva tutti i file che venivano copiati in varie posizioni standard durante l'installazione. È possibile utilizzare un editor della riga di comando o paco gui per visualizzare i file.

Di seguito è riportato l'esempio di ottenere l'elenco dei file utilizzando l'editor della riga di comando sed
(Sostituisci php5 con il tuo nome file).

cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'

Una volta ottenuto l'elenco dei file, sai come eliminarli, vero? In effetti, potresti passare i risultati del comando precedente a rm usando i backtick come mostrato di seguito:

sudo rm `cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'`

Lavoro fatto!

Nota: a causa delle limitazioni di LD_PRELOAD, paco non può seguire la traccia dei programmi suid. Vedi la pagina man.


0

Ho compilato php-5.6.30 dal sorgente senza configurarlo con openssl, quindi ho dovuto tornare indietro e installarlo da zero. L'uso di make uninstall non ha funzionato poiché Makefile per php non lo supporta.

Tuttavia, questo passaggio ha funzionato per me, - ho elencato tutti i file relativi a PHP e li ho rimossi manualmente, mi ci sono voluti circa 5 minuti senza sudare. Allo stesso modo è possibile utilizzare questi passaggi per disinstallare il software compilato.

Sostituisci php con il software che devi disinstallare

whereis php

Il comando sopra elenca le directory in cui sono installati i file binari es: / usr / local / bin / php, / usr / bin / php .. rimuove ogni file / directory elencato nell'output.

sudo rm -f /usr/local/bin/php

Fallo con tutti i file elencati nell'output sopra e sei pronto per installare da zero la versione più recente.

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.