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?
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.
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.
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
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.
É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.
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
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).
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".
L'utilitaire "stow" a été conçu pour résoudre ce problème: http://www.gnu.org/software/stow/
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.
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.
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