2009-09-17 8 views
309

Lors de l'exécutionQuel est le contraire de 'make install', c'est-à-dire comment désinstaller une bibliothèque sous Linux?

./configure --prefix=/mingw 

sur un système MinGW/MSYS pour une bibliothèque que j'avais déjà exécuté

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

Je suis tombé sur ce message:

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

Cela m'avait inquiété. Quel est le contraire de 'make install', c'est-à-dire comment une bibliothèque est-elle désinstallée sous Linux? Est-ce que «rendre propre» fera le travail, ou y a-t-il d'autres étapes?

+3

Si cela a être en un si gros problème. Pourquoi les gens n'ont-ils pas écrit de script pour revenir automatiquement sur 'make install'? Cela a causé un très gros mal de tête pour moi aussi quand 'make uninstalled' n'est pas là. Bientôt partagera un script pour 'make uninstall'. –

+0

http://serverfault.com/questions/422237/what-is-uninstall-procedure-for-software-installed-via-make-install-on-centos –

+1

Voir http://askubuntu.com/questions/87111/ if-i-build-a-package-from-source-comment-je-désinstaller-ou-supprimer-complètement pour des réponses similaires, la solution principale semble être 'sudo make uninstall' si les fichiers de configuration de l'installation sont encore disponible mais aucune autre solution évidente si ce n'est pas, à part la désinstallation avec l'utilitaire de gestion de paquets du système si installé avec l'utilitaire "checkinstall". – Edward

Répondre

21

Selon la façon dont le script makefile/configure/magic autofoo du programme en question est la suivante pourrait résoudre votre problème:

make uninstall 

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

10

make clean ne 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 construit un programme et l'avez installé (en utilisant make install) dans /usr/local, vous voudrez regarder à travers /usr/local/bin, /usr/local/libexec, /usr/local/share/man, etc., et supprimer 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 en utilisant un gestionnaire de paquets , qui est capable de désinstaller le logiciel "automagiquement".

5

Il n'y a pas de norme malheureusement, c'est l'un des périls de l'installation de la source. Certains Makefiles incluront une "désinstallation", donc

make uninstall 

du répertoire source peut fonctionner. Sinon, il peut être question de défaire manuellement ce que le make install a fait. En général, il suffit de nettoyer le répertoire source - en supprimant les fichiers générés/compilés et autres, probablement pas ce que vous cherchez.

417

make clean supprime tous les fichiers intermédiaires ou de sortie de votre arborescence source/build. Cependant, cela n'affecte que l'arbre 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 êtes chanceux, le fonctionnement make uninstall fonctionnera. C'est aux auteurs de la bibliothèque de fournir cela, 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.

+97

+1 pour l'option' -n' –

+5

+1; Méfiez-vous des fichiers qui pourraient également avoir été installés par d'autres paquets. La simple suppression de ces fichiers (une interprétation de «l'inversion manuelle de ces étapes») pourrait casser les autres paquets. C'est (une des nombreuses raisons) pourquoi les gestionnaires de paquets ont été inventés. –

+3

cela n'est possible que si vous gardez le même répertoire de construction configuré et compilé correctement? donc pas très utile puisque la plupart des gens le supprimeraient après l'installation. Il veut désinstaller les choses sans tenir compte du fait qu'il garde le dossier de construction, et peu importe si le paquet a été correctement configuré pour une option de désinstallation make. Clarification: ce qu'il veut faire, c'est permettre une sorte de gestion des paquets qui fonctionne pour les choses qu'il a compilées lui-même. – Nisse

259

Si sudo make uninstall est indisponible:

Dans un système basé sur Debian, au lieu de faire make install vous pouvez exécuter sudo checkinstall pour créer un fichier .deb qui obtient automatiquement installé. 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 package, par ex. RPM.

Voir aussi http://community.linuxmint.com/tutorial/view/162 et some basic checkinstall usage et debian checkinstall package.

+35

Cette réponse est la preuve que les meilleures réponses n'obtiennent souvent pas beaucoup de votes. Merci! Je voulais savoir comment faire cela depuis longtemps. J'hésite toujours à faire un "make install" car je sais que ce sera presque certainement une douleur à enlever. – doug65536

+0

également le livre LFS a quelques informations sur les systèmes de gestion de paquets, Puisque vous devez le configurer vous-même. L'information devrait être utile pour que ce genre de chose fonctionne mieux (plus propre, plus général).Il y a des scripts qui écoutent simplement ce qui est installé puis crée un script qui, lorsqu'il est lancé, supprime tous ces fichiers, ou quelque chose comme ça. – Nisse

+11

Cela a fonctionné à merveille pour moi, même si j'avais déjà lancé 'make install' avant d'utiliser' checkinstall' à la place. – LukeGT

49

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 que j'ai d'une autre réponse:

cat install_manifest.txt | xargs echo rm | sh 

Si vous avez sudo make install vous devrez ajouter à votre sudo désinstaller:

cat install_manifest.txt | xargs echo sudo rm | sh 
+4

Je suis surpris de voir que cela n'a pas eu de sursauts. Cela a fonctionné pour enlever les dossiers du système quand aucune autre option n'a fonctionné. Dans mon cas, checkinstall ne pouvait pas créer un deb car la version du programme ne commençait pas par un nombre, et par conséquent ne se construisait pas. Cela a bien fonctionné. – DWils

+2

@DWils Je pense qu'il n'a pas reçu plus de upvotes car c'est assez dangereux. De plus, 'xargs echo rm | sh'? Tout à fait évident que celui qui a suggéré cela n'est pas particulièrement expérimenté ou compétent dans l'utilisation de la coquille. – fstd

+2

(pour référence, il tapera sur tous les caractères dans les noms de fichiers qui sont interprétés par le shell (et ensuite vous avez un 'rm' en cours d'exécution!), En plus il fera toutes sortes d'expansion shell. .txt' contient un astérisque ... 'rm *' sera placé dans un shell.) Downvoted, pour cette raison. – fstd

Questions connexes