Si je construis un paquet à partir des sources, comment puis-je désinstaller ou supprimer complètement?

137

J'ai utilisé le code source pour construire un paquet tel que ci-dessous:

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

Mais malheureusement, j’ai découvert qu’il s’agissait de la dernière version et qu’il comportait de nombreux bogues. Je dois donc le supprimer / le désinstaller. Mais comment puis-je le faire? J'ai essayé make clean; make uninstallmais je vois quand même qu'il existe:

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

Comment supprimez-vous cela maintenant?

YumYumYum
la source

Réponses:

177

Habituellement, vous pouvez simplement utiliser:

make uninstall

ou

sudo make uninstall

si l'application a été installée en tant que root.

Mais cela ne fonctionnera que si le développeur du paquet a pris soin de créer une bonne règle de désinstallation.

Vous pouvez également essayer de consulter les étapes nécessaires à l’installation du logiciel en exécutant:

make -n install

Et puis essayez d'inverser ces étapes manuellement.

A l'avenir, pour éviter ce genre de problèmes, essayez d'utiliser à la checkinstallplace de ( make installchaque fois que cela est possible, autant que je sache, à moins que vous ne souhaitiez conserver la version compilée et une version empaquetée en même temps). Il créera et installera un fichier deb que vous pourrez ensuite désinstaller à l'aide de votre gestionnaire de paquets préféré.

make cleannettoie généralement les répertoires du bâtiment, il ne désinstalle pas le paquet. Il est utilisé lorsque vous voulez être sûr que tout est compilé, pas seulement les fichiers modifiés.

Javier Rivera
la source
J'ai fait ça aussi. Mais il existe toujours, comme le montrent les exemples pkg-config et ls /usr/lib/myplugin/libXYZ.so
YumYumYum Le
36
+1 pour utiliser checkinstall- cela fait évaporer tout ce problème.
Oli
6
@Google: Si la désinstallation par make ne fonctionne pas, vous devez suivre ce que fait make installation et l'annuler manuellement.
Javier Rivera
4
Une autre chose à garder à l'esprit est que si a make installété exécuté en tant que root (par exemple, sudo make install), ce qui est généralement le cas, il est toujours nécessaire d'exécuter virtuel sudo make uninstallpour supprimer le logiciel.
Eliah Kagan
5
Si vous avez déjà couru make install, vous pouvez toujours utiliser checkinstall. Normalement checkinstall, tout ce qui a été make installcréé sera écrasé . Après cela, juste utiliser dpkg -r <package.deb>, et tout devrait être supprimé.
user502144
28

Je ne pense pas qu'il s'agisse d'un bug, ce serait une bonne idée de lire et d'apprendre à utiliser checkinstall lors de l'installation à partir du source.

vous pouvez installer checkinstall à partir des référentiels, une brève description du paquet;

CheckInstall garde la trace de tous les fichiers créés ou modifiés par votre script d’installation ("make install" "make install_modules", "setup", etc), construit un paquet binaire standard et l’installe sur votre système en vous donnant la possibilité de le désinstaller avec les utilitaires standard de gestion de paquets de votre distribution.

Ces liens ci-dessous peuvent être utiles pour mieux comprendre. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

Sabacon
la source
16

Ce n'est pas un bogue - la compilation à partir des sources est une méthode d'installation non prise en charge du logiciel qui contourne complètement le système de gestion des paquets (qui est utilisé par le Centre logiciel).

Il n’existe pas de méthode standard d’installation ou de désinstallation des logiciels compilés à partir des sources. Par conséquent, Ubuntu ne sait pas quoi faire. Le logiciel n'est même pas répertorié en tant que programme installé.

Vous devez suivre les instructions du distributeur pour l'installation et la suppression de ce logiciel personnalisé. Vous pouvez également contacter le développeur pour lui demander de créer un paquet Debian afin que le système de gestion de paquets puisse être utilisé.

dv3500ea
la source
3

Ce n'est pas un bug, c'est ce qui arrive quand les développeurs ont recours à la distribution via le source et non via les méthodes de packaging natives.

Vous pouvez obtenir que vos fichiers sources deviennent des paquets Debian en utilisant checkinstall ou dhbuild. Honnêtement, à mon avis, les nouveaux utilisateurs devraient éviter d'installer à partir de la source et les développeurs devraient éviter de distribuer uniquement par la source.

RolandiXor
la source
Je sais mais parfois c'est inévitable ... Dans ce cas, il ne s'agissait que d'un petit jeu qui n'était pas vraiment nécessaire, mais il a fallu un jour installer un outil de calcul utilisé dans mon université par MATLAB. pas un fichier deb pour Ubuntu ... Mais je vais certainement passer par les méthodes checkinstall et dhbuild ... merci
nik90
1

Je connais peu de paquets qui prennent en charge "make uninstall", mais beaucoup d’autres qui prennent en charge installent DESTDIR = xxx "pour les installations par étapes.

Vous pouvez l'utiliser pour créer un package que vous installez au lieu d'installer directement à partir de la source. Je n'ai pas eu de chance avec checkinstall mais fpm fonctionne très bien.

Cela peut également vous aider à supprimer un paquet précédemment installé avec make install . Il vous suffit de forcer l’installation de votre paquetage sur celui de make installé, puis de le désinstaller.

Par exemple, j'ai utilisé cela récemment pour traiter de protobuf-3.3.0. Sur 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      

Préférez miam à rpm si vous le pouvez.

Sur 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

Préférez apt à dpkg où vous le pouvez.

J'ai aussi posté cette réponse sur stackoverflow

Bruce Adams
la source
0

Nous devons négocier le fait que la désinstallation ne fonctionne pas toujours. La solution ci-dessous est donc davantage une solution proactive.

Cela implique l'utilisation du programme paco disponible dans le centre logiciel Ubuntu. Une fois que nous avons installé paco, nous pouvons l’utiliser en mode log lorsque nous "faisons installer" un programme. Paco agit comme un wrapper pour votre "make install" et crée un journal dans le répertoire / var / log / paco avec la liste des fichiers copiés dans différents répertoires. De plus, vous pouviez voir les fichiers dans le Paco Front end.

Par exemple, quand j'ai compilé php à partir des sources, j'ai fait ce qui suit:

paco -lp php5 "make install"

Le paramètre l permet d'exécuter paco en mode journal. Il a créé un fichier journal dans / var / log / paco nommé php5 (le nom que j'ai donné dans la commande). Il contenait tous les fichiers copiés dans divers emplacements standard lors de l’installation. Vous pouvez utiliser un éditeur de ligne de commande ou paco gui pour afficher les fichiers.

L'exemple ci-dessous
montre comment obtenir la liste de fichiers à l'aide de l'éditeur de ligne de commande sed (Remplacez php5 par votre nom de fichier).

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

Une fois que vous avez la liste des fichiers, vous savez comment les supprimer, n'est-ce pas? En effet, vous pouvez transmettre les résultats de la commande ci-dessus à rm en utilisant des backticks comme indiqué ci-dessous:

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

Travail accompli!

Remarque: en raison des limitations de LD_PRELOAD, paco ne peut pas suivre la trace des programmes suid. Voir la page de manuel.

sjsam
la source
0

J'avais compilé php-5.6.30 à partir des sources sans le configurer avec openssl, je devais donc revenir en arrière et l'installer à partir de zéro. Utiliser make uninstall ne fonctionnait pas car le fichier Makefile pour php ne le supportait pas.

Cependant, cette étape a fonctionné pour moi, - j'ai énuméré tous les fichiers liés à php et les ai supprimés manuellement, cela m'a pris environ 5 minutes sans transpirer. Vous pouvez également utiliser ces étapes pour désinstaller votre logiciel compilé.

Remplacez php par le logiciel que vous devez désinstaller

whereis php

La commande ci-dessus répertorie les répertoires dans lesquels les fichiers binaires sont installés, par exemple: / usr / local / bin / php, / usr / bin / php .. supprime chaque fichier / répertoire répertorié dans votre sortie.

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

Faites cela avec tous les fichiers listés dans la sortie ci-dessus et vous êtes prêt à installer la nouvelle version à partir de zéro.

Abhinay
la source