Wie kann ich ein Paket aus dem Quellcode deinstallieren oder vollständig entfernen?

137

Ich habe Quellcode verwendet, um ein Paket wie das folgende zu erstellen:

./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

Aber leider habe ich festgestellt, dass es sich um die neueste Version handelt und dass sie viele Fehler enthält. Daher muss sie entfernt / deinstalliert werden. Aber wie kann ich das machen? Ich habe es versucht, make clean; make uninstallaber ich sehe immer noch, dass es existiert:

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

Wie entfernst du das jetzt?

Yum Yum yum
quelle

Antworten:

177

Normalerweise können Sie einfach verwenden:

make uninstall

oder

sudo make uninstall

wenn die App als root installiert wurde.

Dies funktioniert jedoch nur, wenn der Entwickler des Pakets für eine gute Deinstallationsregel gesorgt hat.

Sie können auch versuchen, einen Überblick über die Schritte zum Installieren der Software zu erhalten, indem Sie Folgendes ausführen:

make -n install

Versuchen Sie dann, diese Schritte manuell umzukehren.

Um diese Art von Problemen in Zukunft zu vermeiden, sollten Sie versuchen, sie checkinstallanstelle von make installwann immer möglich zu verwenden (AFAIK immer, es sei denn, Sie möchten sowohl die kompilierte als auch die gepackte Version gleichzeitig behalten). Es wird eine Deb-Datei erstellt und installiert, die Sie dann mit Ihrem bevorzugten Paket-Manager deinstallieren können.

make cleanBereinigt normalerweise die Erstellungsverzeichnisse, deinstalliert das Paket nicht. Es wird verwendet, wenn Sie sicherstellen möchten, dass das Ganze kompiliert wird, nicht nur die geänderten Dateien.

Javier Rivera
quelle
Das habe ich auch gemacht. Aber es existiert immer noch, wie gezeigt, pkg-config und ls /usr/lib/myplugin/libXYZ.so
YumYumYum
36
+1 für die Verwendung checkinstall- es macht das ganze Problem verdunsten.
Oli
6
@Google: Wenn make uninstall nicht funktioniert, müssen Sie nachverfolgen, was make install ausgeführt hat, und es manuell rückgängig machen.
Javier Rivera
4
Eine andere Sache, die Sie beachten sollten, ist, dass, wenn Sie make installals root ausgeführt wurden (z. B. sudo make install), was normalerweise der Fall ist, es immer virtuell notwendig ist, ausgeführt sudo make uninstallzu werden, um die Software zu entfernen.
Eliah Kagan
5
Wenn Sie bereits ausgeführt haben make install, können Sie weiterhin verwenden checkinstall. Normalerweise checkinstallwird alles, was make installerstellt wurde, überschrieben . Danach einfach benutzen dpkg -r <package.deb>und alles sollte entfernt werden.
user502144
28

Ich denke nicht, dass dies ein Fehler ist. Es wäre eine gute Idee, sich mit checkinstall vertraut zu machen, wenn Sie von der Quelle installieren.

Sie können checkinstall über die Repositorys installieren, eine kurze Beschreibung des Pakets.

CheckInstall verfolgt alle Dateien, die von Ihrem Installationsskript erstellt oder geändert wurden ("make install", "make install_modules", "setup" usw.), erstellt ein Standard-Binärpaket und installiert es auf Ihrem System, sodass Sie es deinstallieren können Standard-Paketverwaltungsdienstprogramme Ihrer Distribution.

Diese Links unten können hilfreich sein, um ein besseres Verständnis zu erhalten. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

Sabacon
quelle
16

Dies ist kein Fehler - das Kompilieren aus dem Quellcode ist eine nicht unterstützte Methode zum Installieren von Software, die das Paketverwaltungssystem (das vom Software Center verwendet wird) vollständig umgeht.

Es gibt keinen Standard für die Installation oder Deinstallation von aus dem Quellcode kompilierter Software, sodass Ubuntu nicht weiß, was zu tun ist. Die Software wird nicht einmal als installiertes Programm aufgeführt.

Befolgen Sie die Anweisungen des Händlers zum Installieren und Entfernen dieser benutzerdefinierten Software. Sie können sich auch an den Entwickler wenden und ihn bitten, ein Debian-Paket zu erstellen, damit das Paketverwaltungssystem verwendet werden kann.

dv3500ea
quelle
3

Dies ist kein Fehler, sondern passiert, wenn Entwickler auf die Verteilung über den Quellcode und nicht über die systemeigenen Verpackungsmethoden zurückgreifen.

Sie können Ihre Quelldateien mit checkinstall oder dhbuild zu Debian-Paketen machen. Ehrlich gesagt, meiner Meinung nach sollten neue Benutzer die Installation von der Quelle vermeiden, und Entwickler sollten es vermeiden, nur nach Quelle zu verteilen.

RolandiXor
quelle
Ich weiß, aber manchmal ist es unvermeidlich ... In diesem Fall war es nur ein kleines Spiel, das nicht wirklich notwendig ist, aber irgendwann musste ich MATLAB, ein an meiner Universität verwendetes Computer-Tool, installieren und musste es seitdem von der Quelle installieren habe keine deb datei für ubuntu ... aber ich werde auf jeden fall die methoden checkinstall und dhbuild durchgehen ... danke
nik90 20.01.11
1

Ich kenne nur wenige Pakete, die "make uninstall" unterstützen, aber viele weitere, die make install DESTDIR = xxx "für gestaffelte Installationen unterstützen.

Sie können damit ein Paket erstellen, das Sie installieren, anstatt es direkt von der Quelle aus zu installieren. Ich hatte kein Glück mit checkinstall, aber fpm funktioniert sehr gut.

Dies kann Ihnen auch helfen, ein zuvor mit make install install installiertes Paket zu entfernen . Sie erzwingen einfach die Installation Ihres erstellten Pakets über das installierte make und deinstallieren es dann.

Zum Beispiel habe ich dies kürzlich verwendet, um mich mit protobuf-3.3.0 zu befassen. Auf 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 [email protected] \
 --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      

Bevorzugen Sie Yum gegenüber RPM, wenn Sie können.

Unter 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

Bevorzugen Sie dpkg, wo Sie können.

Ich habe diese Antwort auch auf stackoverflow gepostet

Bruce Adams
quelle
0

Wir müssen die Tatsache verhandeln , die Deinstallation machen würde nicht immer funktionieren, so unten eher eine proaktive Lösung ist.

Dies beinhaltet die Verwendung des paco-Programms, das im Ubuntu Software Center verfügbar ist. Sobald wir paco installiert haben, können wir den Log-Modus verwenden, wenn wir ein Programm "installieren". Paco fungiert als Wrapper für Ihre "make install" und erstellt ein Protokoll im Verzeichnis / var / log / paco mit der Liste der Dateien, die in verschiedene Verzeichnisse kopiert wurden. Außerdem konnte man die Dateien im Paco Frontend sehen.

Als ich zum Beispiel PHP aus dem Quellcode kompilierte, habe ich Folgendes getan:

paco -lp php5 "make install"

Der Parameter l veranlasst das paco, im Protokollmodus zu laufen. Dadurch wurde eine Protokolldatei mit dem Namen php5 in / var / log / paco erstellt (der Name, den ich im Befehl angegeben habe). Es enthielt alle Dateien, die während der Installation an verschiedene Standardspeicherorte kopiert wurden. Sie können einen Befehlszeileneditor oder eine Paco-GUI zum Anzeigen der Dateien verwenden.

Unten sehen Sie ein Beispiel für das
Abrufen der Dateiliste mit dem sed-Befehlszeileneditor (Ersetzen Sie php5 durch Ihren Dateinamen).

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

Sobald Sie die Liste der Dateien erhalten haben, wissen Sie, wie Sie sie löschen können, nicht wahr? In der Tat können Sie die Ergebnisse des obigen Befehls mithilfe der folgenden Backticks an rm übergeben:

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

Job erledigt!

Hinweis: Aufgrund der Einschränkungen von LD_PRELOAD kann paco den Trace von suid-Programmen nicht verfolgen. Siehe Manpage.

sjsam
quelle
0

Ich hatte php-5.6.30 aus dem Quellcode kompiliert, ohne es mit openssl zu konfigurieren, also musste ich es von Grund auf neu installieren. Die Verwendung von make uninstall funktionierte nicht , da das Makefile für php es nicht unterstützt.

Allerdings hat dieser Schritt bei mir geklappt, - ich habe alle Dateien, die mit PHP zu tun haben, aufgelistet und manuell entfernt, es hat ungefähr 5 Minuten gedauert, ohne dass ich ins Schwitzen gekommen bin. Sie können diese Schritte auf ähnliche Weise verwenden, um Ihre kompilierte Software zu deinstallieren.

Ersetzen Sie PHP durch die Software, die Sie deinstallieren müssen

whereis php

Der obige Befehl listet Verzeichnisse auf, in denen die Binärdateien installiert sind, z. B .: / usr / local / bin / php, / usr / bin / php. Entfernen Sie alle in Ihrer Ausgabe aufgeführten Dateien / Verzeichnisse.

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

Tun Sie dies mit allen in der obigen Ausgabe aufgelisteten Dateien und Sie können die neuere Version von Grund auf neu installieren.

Abhinay
quelle