web-dev-qa-db-fra.com

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

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 uninstall mais je le vois toujours:

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

Comment supprimez-vous cela maintenant?

133
YumYumYum

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.

Dans le futur, pour éviter ce genre de problèmes, essayez d'utiliser checkinstall au lieu de make install chaque fois que cela est possible (autant que je sache, à moins que vous ne souhaitiez conserver la version compilée et la 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 clean nettoie 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.

167
Javier Rivera

Je ne pense pas que ce soit 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 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/

28
Sabacon

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 permettant d’installer ou de désinstaller les 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é.

16
dv3500ea

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.

3
RolandiXor

Je connais quelques 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é à l'aide de 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

1
Bruce Adams

J'avais compilé php-5.6. à partir des sources sans le configurer avec openssl, je devais donc revenir en arrière et l'installer à partir de zéro.En utilisant make uninstall n'a pas fonctionne comme Makefile for php ne le supporte 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.

0
Abhinay

Nous devons négocier le fait que faire une désinstallation fonctionnerait pas, donc ci-dessous est plus une solution proactive.

Ceci implique l’utilisation du programme paco disponible dans le Centre de 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, lorsque j'ai compilé php à partir de la source, j'ai procédé comme suit:

paco -lp php5 "make install"

Le paramètre l permet à paco de fonctionner 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.

Voici l'exemple d'obtention de 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.

0
sjsam