458 votes

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

En cours d'exécution

./configure --prefix=/mingw

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

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

Je suis tombé sur ce message :

AVERTISSEMENT : Une version du SDK du plugin Vamp est déjà installée. Attendez-vous à des soucis et des peines si vous installez une nouvelle version sans supprimer l'ancienne au préalable. (Suite)

Cela m'a inquiété. Quel est l'opposé de 'make install', c'est-à-dire comment une bibliothèque est-elle désinstallée sous Linux ? Est-ce que 'make clean' fera l'affaire, ou y a-t-il d'autres étapes à suivre ?

0 votes

1 votes

Voir askubuntu.com/questions/87111/ pour des réponses similaires, la principale solution semble être actuellement sudo make uninstall si les fichiers de configuration de l'installation sont toujours disponibles, mais pas d'autres solutions évidentes sinon, à part la désinstallation avec l'utilitaire de gestion des paquets du système s'il a été installé avec l'utilitaire "checkinstall".

11 votes

Après avoir exécuté make install Je n'ai jamais eu besoin make uninstall pour les enlever. J'ai toujours utilisé xargs rm < install_manifest.txt

563voto

Josh Kelley Points 24438

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

Si vous avez de la chance, courir make uninstall fonctionnera. Cependant, c'est aux auteurs de la bibliothèque de fournir ces informations ; certains auteurs fournissent une liste de contrôle. uninstall cible, d'autres non.

Si vous n'avez pas de chance, vous devrez l'installer manuellement. Exécution de make -n install peut être utile, car il indique les étapes que le logiciel doit suivre pour s'installer, mais ne fait rien. Vous pouvez alors inverser manuellement ces étapes.

14 votes

+1 ; Faites attention aux fichiers qui pourraient également avoir été installés par d'autres paquets. La simple suppression de ces fichiers (une interprétation de "inverser manuellement ces étapes") pourrait casser les autres paquets. C'est (une des nombreuses raisons) pour laquelle les gestionnaires de paquets ont été inventés.

4 votes

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

0 votes

J'ai du faire "sudo make uninstall"

411voto

Nisse Points 739

Si sudo make uninstall n'est pas disponible :

Dans un système basé sur Debian, au lieu de faire make install, vous pouvez exécuter sudo checkinstall (ou .rpm etc. équivalent) pour faire un .deb qui est également installé automatiquement. Vous pouvez ensuite le supprimer en utilisant synaptic .

voir http://community.linuxmint.com/tutorial/view/162

61 votes

Cette réponse est la preuve que les meilleures réponses n'obtiennent souvent pas beaucoup de votes positifs. Merci ! Cela fait longtemps que je voulais savoir comment faire. J'hésite toujours à faire un "make install" parce que je sais qu'il sera certainement très difficile à enlever.

1 votes

Le livre LFS contient également des informations sur les systèmes de gestion des paquets, mais vous devez les configurer vous-même. Les informations qu'il contient devraient être utiles pour que ce genre de choses fonctionne mieux (plus propre, plus général). Il y a des scripts qui écoutent simplement ce qui est installé et créent ensuite un scripts qui, lorsqu'il est lancé, supprime tous ces fichiers, ou quelque chose comme ça.

15 votes

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

75voto

three Points 3674

Si vous avez un manifest qui répertorie tous les fichiers qui ont été installés avec make install vous pouvez exécuter cette commande que je tiens 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

4 votes

Je suis surpris de voir qu'il n'y a pas eu de votes positifs. Cela a fonctionné pour supprimer les fichiers du système lorsqu'aucune autre option ne fonctionnait. Dans mon cas, checkinstall n'a pas pu créer un deb parce que la version du programme ne commençait pas par un numéro, et ne pouvait donc pas être construite. Cela a bien fonctionné.

4 votes

@DWils Je pense qu'il n'a pas reçu plus de upvotes car il est assez dangereux. En outre, xargs echo rm | sh ? Il est évident que la personne qui a suggéré cela n'a pas beaucoup d'expérience ou de connaissances dans l'utilisation du shell.

4 votes

(pour référence, il vomira sur tous les caractères dans les noms de fichiers qui sont interprétés par l'interpréteur de commandes (et alors vous avez des 'rm' rebelles qui sont exécutés !), en plus il fera toutes sortes d'expansion de l'interpréteur de commandes. Imaginez ce qui se passe si l'option install_manifest.txt contient un astérisque... rm * sera envoyé dans un shell). Downvoted, pour cette raison.

35voto

Joachim Sauer Points 133411

Selon la qualité du makefile/configure script/autofoo magique du programme en question, ce qui suit pourrait résoudre votre problème :

make uninstall

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

11voto

mipadi Points 135410

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 le fichier make install ) en /usr/local vous devriez regarder /usr/local/bin , /usr/local/libexec , /usr/local/share/man etc., et supprimez les fichiers non désirés. Parfois, un Makefile inclut un uninstall cible, mais pas toujours.

Bien sûr, typiquement, sur un système Linux, vous installez un logiciel en utilisant un fichier gestionnaire de paquets qui est capable de désinstaller les logiciels "automatiquement".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X