web-dev-qa-db-fra.com

Quel est le contraire de 'make install', c’est-à-dire comment désinstaller une bibliothèque sous Linux?

En courant

./configure --prefix=/mingw 

sur un système MinGW/MSYS pour une bibliothèque que j'avais précédemment exécutée

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

Je suis tombé sur ce message:

AVERTISSEMENT: une version du SDK du plug-in Vamp est déjà installée. Attendez-vous à des soucis et à des chagrins si vous installez une nouvelle version sans d'abord supprimer l'ancienne. (Continue)

Cela m'inquiétait. Quel est le contraire de 'make install', c’est-à-dire comment désinstaller une bibliothèque sous Linux? Est-ce que 'nettoyer' faire le travail, ou y a-t-il d'autres étapes impliquées?

367
psas

make clean supprime tous les fichiers intermédiaires ou de sortie de votre arbre source/build. Cependant, cela n'affecte que l'arborescence source/build; il ne touche pas le reste du système de fichiers et ne supprime donc pas les logiciels précédemment installés.

Si vous avez de la chance, exécuter make uninstall fonctionnera. C'est aux auteurs de la bibliothèque de le fournir, cependant; certains auteurs fournissent une cible uninstall, d'autres non.

Si vous n'êtes pas chanceux, vous devrez le désinstaller manuellement. Exécuter make -n install peut être utile car il montrera les étapes que le logiciel prendrait pour s’installer mais ne fera rien. Vous pouvez ensuite inverser manuellement ces étapes.

480
Josh Kelley

Si Sudo make uninstall n'est pas disponible:

Dans un système basé sur Debian, au lieu de (ou après *) faire make install, vous pouvez exécuter Sudo checkinstall pour créer un fichier .deb à installer automatiquement. Vous pouvez ensuite le supprimer à l'aide du gestionnaire de packages système (par exemple, apt/synaptic/aptitude/dpkg). Checkinstall prend également en charge la création d’autres types de packages, par exemple. RPM.

Voir aussi http://community.linuxmint.com/tutorial/view/162 et tilisation basique de checkinstall et paquet debian checkinstall .


*: Si vous lisez ceci après avoir installé avec make install, vous pouvez toujours suivre les instructions ci-dessus et faire un dpkg -r $PACKAGE_NAME_YOU_CHOSEN après.

335
Nisse

Si vous avez un fichier manifest qui répertorie tous les fichiers qui ont été installés avec make install, vous pouvez exécuter cette commande à partir d’une autre réponse:

cat install_manifest.txt | xargs echo rm | sh

Si vous avez Sudo make install, vous devrez ajouter un Sudo à votre désinstallation:

cat install_manifest.txt | xargs echo Sudo rm | sh
58
three

Cela pourrait résoudre votre problème en fonction de l'efficacité du makefile/configure script/autofoo magic du programme en question:

make uninstall

Le problème est que vous devez l'exécuter sur l'arborescence source de la version que vous avez installée et avec exactement la même configuration que celle que vous avez utilisée pour l'installation.

24
Joachim Sauer

Comment désinstaller après "make install"

Méthode n ° 1 (désinstaller)

Étape 1: Vous devez seulement suivre cette étape si vous avez supprimé/modifié le répertoire de construction de quelque manière que ce soit: Téléchargez et installez/make à l’aide de la même procédure (exacte). vous avez fait avant.

Étape 2: essayez de faire une désinstallation.

cd $SOURCE_DIR 
Sudo make uninstall

Si cela réussit, vous avez terminé. Si vous êtes paranoïaque, vous pouvez également suivre les étapes de "Méthode n ° 3" pour vous assurer que make uninstall ne manque aucun fichier.

Méthode n ° 2 (checkinstall - uniquement pour les systèmes basés sur Debian)

Vue d'ensemble du processus

Dans les systèmes basés sur Debian (par exemple Ubuntu), vous pouvez très facilement créer un paquetage .deb en utilisant un outil nommé checkinstall. Vous installez ensuite le paquet .deb (votre système Debian sera alors informé que toutes les parties de votre paquet ont bien été installées) et vous le désinstallez enfin pour permettre à votre gestionnaire de paquets de nettoyer correctement votre système.

Pas à pas

Sudo apt -y install checkinstall
cd $SOURCE_DIR 
Sudo checkinstall

À ce stade, checkinstall demandera un nom de package. Entrez quelque chose d'un peu descriptif et notez-le car vous allez l'utiliser dans une minute. Il vous demandera également quelques données supplémentaires que vous pouvez ignorer. S'il se plaint de la version non acceptable, entrez simplement quelque chose de raisonnable comme 1.0. Une fois terminé, vous pouvez installer et enfin désinstaller:

Sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
Sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED

Méthode n ° 3 (install_manifest.txt)

Si un fichier install_manifest.txt existe dans votre répertoire source, il doit contenir les noms de fichier de chaque fichier créé par l’installation.

Commencez donc par vérifier la liste des fichiers et leur heure de modification:

cd $SOURCE_DIR 
Sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

Vous devriez obtenir zéro erreur et les temps de modification des fichiers listés devraient être après ou après l'heure d'installation. Si tout va bien, vous pouvez les supprimer en une fois:

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
Sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

L’utilisateur Merlyn Morgan-Graham a cependant un avis sérieux concernant cette méthode que vous devriez garder à l’esprit (copié ici textuellement): "Méfiez-vous des fichiers qui auraient aussi été installés par d’autres paquetages. Simplement la suppression de ces fichiers [...] pourrait endommager les autres packages. ". C'est la raison pour laquelle nous avons créé le répertoire deleted-by-uninstall et y avons déplacé des fichiers au lieu de les supprimer.


99% de ce poste existaient dans d'autres réponses. Je viens de rassembler tout ce qui est utile dans un (espérons-le) facile à suivre, et j'ai essayé d'accorder une attention particulière aux détails importants (comme citer des arguments xarg et conserver des sauvegardes des fichiers supprimés).

14
ndemou

make clean nettoie généralement que les fichiers construits dans le répertoire contenant le code source lui-même, et touche rarement les logiciels installés.

Les makefiles ne contiennent généralement pas de cible pour la désinstallation - vous devez généralement le faire vous-même en supprimant les fichiers du répertoire dans lequel ils ont été installés. Par exemple, si vous avez créé un programme et que vous l'avez installé (à l'aide de make install) dans /usr/local, vous souhaiterez parcourir /usr/local/bin, /usr/local/libexec, /usr/local/share/man , etc., et supprimez les fichiers indésirables. Parfois, un Makefile inclut une cible uninstall, mais pas toujours.

Bien sûr, généralement sur un système Linux, vous installez un logiciel à l'aide de gestionnaire de paquets, capable de désinstaller le logiciel "automatiquement".

10
mipadi

L'utilitaire "stow" a été conçu pour résoudre ce problème: http://www.gnu.org/software/stow/

7
jjw

Malheureusement, il n’existe pas de norme, c’est l’un des dangers de l’installation à partir de la source. Certains Makefiles incluent une "désinstallation", donc

make uninstall

à partir du répertoire source peut fonctionner. Sinon, il peut être nécessaire d'annuler manuellement ce que le make install a fait.

make clean nettoie généralement le répertoire source - en supprimant les fichiers générés/compilés, etc., probablement pas ce que vous recherchez.

5
Brenton Alker

Make peut vous dire ce qu'il sait et ce qu'il va faire. Supposons que vous ayez une cible "install" qui exécute des commandes telles que:

cp <filelist> <destdir>/

Dans vos règles génériques, ajoutez:

uninstall :; MAKEFLAGS= ${MAKE} -j1 -spinf $(Word 1,${MAKEFILE_LIST}) install \
              | awk '/^cp /{dest=$NF; for (i=NF; --i>0;) {print dest"/"$i}}' \
              | xargs rm -f

Une astuce similaire peut faire un make clean générique.

0
Mischa

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é à 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é répondre ceci ici

0
Bruce Adams