web-dev-qa-db-fra.com

Comment désinstaller un programme sous Linux?

J'ai essayé de désinstaller PCL 1.7.2 que j'avais installé manuellement (sans Sudo apt-get), mais lorsque j'ai essayé de les supprimer à l'aide du apt-get removecommande , le terminal m'a montré ces fichiers. ne peut pas être désinstallé car ils n'ont pas été installés en premier lieu.

  1. Comment puis-je vérifier si les fichiers ont été installés correctement si j'ai installé des fichiers avec cmake

  2. Comment désinstaller un fichier que j'ai manuellement installé à l'aide de cmake?

  3. En quoi les fichiers installés à l'aide de apt-get vs cmake sont-ils différents?

Note - question similaire mais en utilisant apt-get remove: Comment pouvez-vous supprimer complètement un paquet?

3
PallavBakshi

Résumé/TL; DR

Exécutez make uninstall (ou Sudo make uninstall, si vous deviez exécuter Sudo make install) à partir du répertoire de construction où vous avez exécuté make et make install. Dans les versions configurées avec CMake, le répertoire de construction n'est généralement pas le répertoire source de niveau supérieur. Mais à part cela, désinstaller un programme ou une bibliothèque dont la compilation a été configurée avec CMake n'est pas différent de la désinstallation d'autres programmes ou bibliothèques que vous avez créés à partir du code source.

Certains logiciels prennent en charge make install mais pas make uninstall. Dans ce cas, vous devrez peut-être vérifier quelles étapes sont suivies lorsque make install est exécuté ou consulter la documentation du logiciel pour voir s'il spécifie les fichiers qu'il place où. Toutefois, PCL ne semble pas prendre en charge la désinstallation via make uninstall .

Installation et désinstallation avec cmake et make

CMake est un système permettant de configurer une construction. Une fois configurée, la construction doit généralement être effectuée à l'aide d'un système de construction. Sur les systèmes d'exploitation de type Unix tels que Ubuntu, les versions configurées avec CMake utilisent presque toujours le système Make build.

La plupart des logiciels qui utilisent CMake nécessitent la création d'un répertoire de construction distinct, généralement appelé build, et l'exécution de la commande cmake à partir de ce répertoire. Le répertoire de construction est rempli avec les fichiers nécessaires à la construction. Ensuite, vous exécutez make dans ce répertoire. Vous devez créer le répertoire build là où les instructions du logiciel que vous construisez vous conseillent de le mettre. Il s’agit généralement d’un sous-répertoire du répertoire de niveau supérieur de l’arborescence source (répertoire de plus haut niveau créé lorsque vous avez décompressé l’archive source ou appelé un système de contrôle de version tel que git ou bzr pour télécharger le code).

Lorsque vous exécutez make, il trouve et lit un fichier Make, généralement appelé Makefile, qui contient une liste de cibles, des instructions pour la construction des cibles et la manière dont les cibles dépendent les unes des autres. Généralement, la cible par défaut, que vous n'avez pas à spécifier, construit le logiciel, et la cible install, que vous devez spécifier, l'installe.

Beaucoup de makefiles contiennent des cibles supplémentaires. Les plus courants sont:

  • Une cible check ou test qui teste le logiciel créé. make check ou make test peut être exécuté avant make install et il est généralement conseillé de le faire.
  • Une cible uninstall qui désinstalle le logiciel en supprimant les fichiers créés en exécutant make install. (Parfois, make uninstall a également un autre comportement, annuler des actions de make install autres que la copie de fichiers, mais il s’agit généralement de supprimer des fichiers.) Tous les logiciels n’ont pas une cible uninstall, mais la plupart du temps.
  • Une cible clean pour supprimer des fichiers du répertoire source ou du répertoire de construction créés lors de la construction. Presque tous les makefiles ont cela.

Il existe quelques autres cibles relativement communes telles que distclean et realclean qui sont moins pertinentes pour CMake. Cependant, il est utile de savoir que si vous configurez une construction en exécutant un script configure (./configure) plutôt que CMake, la configuration peut généralement être effacée en exécutant make distclean.

Un développeur utilisant CMake doit écrire du code pour générer une cible uninstall - CMake ne le fait pas automatiquement . Cependant, comme beaucoup de développeurs, les développeurs de PCL ont fait cela et make uninstall devraient fonctionner. Voir la section suivante ("Exemple pas à pas") pour plus de détails.

Pour désinstaller les logiciels dont le fichier make prend en charge une cible uninstall:

  • Le répertoire à partir duquel vous avez exécuté make install (ou Sudo make install) est le répertoire dans lequel vous devez retourner pour exécuter make uninstall (ou Sudo make uninstall). Pour les logiciels qui n'utilisent pas CMake, il s'agit généralement du répertoire de niveau supérieur de l'arborescence source. Mais pour les logiciels que utilise utilise CMake, ce n'est généralement pas le cas - il s'agit généralement d'un répertoire de construction distinct.
  • Lors de l'installation manuelle du logiciel à partir de la source, il est préférable de conserver le code source et tous les fichiers créés lors de la construction afin de pouvoir désinstaller facilement le logiciel. Par conséquent, une fois que vous avez exécuté make install, il est préférable de ne pas exécuter make clean (ni de supprimer manuellement les fichiers).
  • Cependant, si vous avez exécuté make clean ou supprimé le code source du logiciel ou le répertoire de construction, , il est généralement toujours possible de désinstaller correctement . Suivez simplement les mêmes étapes de construction, avec exactement la même version du logiciel, configurées et construites avec les mêmes options (ou aucune si vous ne l’avez pas personnalisée), pour atteindre le point où vous pouvez exécuter make uninstall (ou Sudo make uninstall). Pour certains logiciels, vous devrez peut-être même exécuter à nouveau make install, ce qui écrasera généralement les fichiers de la version précédente. Exécutez ensuite make uninstall (ou Sudo make uninstall) comme d’habitude.

Lorsqu'il n'y a pas de cible uninstall et que vous devez désinstaller le logiciel, vous devrez examiner les fichiers qu'il crée. Vous pouvez exécuter make -n install pour vous montrer les actions effectuées par make install. Vous n'avez pas à exécuter make -n install avec Sudo (en supposant que make initial ne nécessite pas Sudo). Lorsque make se voit attribuer l'indicateur -n, il exécute un essai, qui ne devrait normalement rien changer et qui ne devrait donc rien faire nécessitant des privilèges élevés.

Un exemple pas à pas: PCL 1.7.2

Il est utile de donner un exemple, et je pourrais aussi bien utiliser le logiciel que vous essayez réellement de désinstaller comme exemple. PCL 1.7.2 semble utiliser cmake pour générer une cible uninstall dans son fichier make , et devrait donc prendre en charge make uninstall.

En plus d'examiner le uninstall_target.cmake.in, j'ai vérifié que le Makefile généré contient une cible uninstall sur un système de test Ubuntu 16.04 64 bits. Cependant, je n'ai pas fini de construire PCL, je peux donc l'installer puis tester Sudo make uninstall. (Ma machine de test est très lente et PCL est grande.) Je prévois de mettre à jour cette information avec des informations supplémentaires lorsque je pourrai le faire, quelque temps après la fin de la construction.

Lorsque vous avez installé PCL 1.7.2, vous avez probablement fait quelque chose comme ceci:

cd /usr/local/src
wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.7.2.tar.gz
tar xf pcl-1.7.2.tar.gz
cd pcl-pcl-1.7.2
mkdir build
cd build
cmake ..
make -j2
Sudo make -j2 install

Ceci est basé (vaguement) sur les instructions officielles , mais bien sûr, ce n'est peut-être pas exactement ce que vous avez fait. En particulier, j'ai téléchargé et décompressé pcl-1.7.2.tar.gz dans /usr/local/src. Si vous le mettez quelque part ailleurs, vous devrez remplacer /usr/local/src par où que vous l'ayez mis.

Si vous modifiez /usr/local/src si nécessaire, vous devriez pouvoir désinstaller le logiciel en exécutant:

cd /usr/local/src/pcl-pcl-1.7.2/build
Sudo make uninstall

Même si vous avez exécuté make -j2 install pour autoriser plusieurs opérations simultanément, vous ne devriez pas avoir besoin de passer l'indicateur -j2 lorsque vous exécutez make uninstall.

1
Eliah Kagan

En regardant les instructions d'installation, il utilise cmake et make. Pour désinstaller, vous devriez être capable de:

Dans terminal...

  • cd folder_of_original_source_code # dossier où vous avez créé le cmake
  • Sudo make uninstall # à désinstaller
2
heynnema

Lorsque vous avez installé PCL, vous avez en réalité effectué deux étapes:

  • Vous avez compilé le logiciel, que n'importe quel utilisateur peut utiliser dans son propre répertoire personnel
  • Vous avez installé le logiciel dans tout le système, ce que seul root peut faire.

L'installation elle-même (le Sudo make -j 2 install recommande dans votre cas) est un script écrit par les auteurs de PCL. rien ne dit ce que ce script a fait à votre système en dehors de la lecture du code source du script. Il n’ya pas de standardisation ici, le script peut faire tout ce qu’il veut sur votre machine, notamment en effaçant des fichiers importants ou en modifiant la configuration de manière inattendue par le logiciel Ubuntu standard.

Comme rien ne dit ce que le script d'installation a fait à votre système, il est impossible qu'un autre programme (tel que APT) puisse annuler les modifications après qu'elles aient été effectuées. Votre meilleur pari dans un tel cas est soit de sauvegarder la sortie du script d'installation (pour le lire plus tard et annuler les modifications à la main), soit pour restaurer une sauvegarde du système.

Un package deb est différent. L’auteur du paquet a effectué la compilation sur sa propre machine, a examiné les fichiers produits et a tout mis en ordre, comme il se doit sur un système Ubuntu approprié. Il ou elle les a ensuite placés dans un fichier Zip, qui est le paquet deb. L’auteur dispose également de scripts écrits d’installation et de désinstallation, au cas où le logiciel aurait besoin d’autres modifications au moment de son installation. L'auteur a également écrit toutes les métadonnées nécessaires, notamment les autres packages (tels que les bibliothèques partagées) dont dépend celui-ci pour s'exécuter.

Lorsque APT installe un package, il enregistre les fichiers extraits et les supprime par la suite.

Maintenant, pour répondre à vos questions:

Q1. Sauf si vous avez enregistré la sortie du script d’installation PCL (en supposant que cette sortie contienne un détail complet et véridique de tout ce qui était en cours de réalisation), ou si vous comparez le contenu de votre disque dur avec une sauvegarde effectuée avant l’installation de PCL, il n’existe manière de savoir si les fichiers ont été installés correctement. Le mieux que vous puissiez faire est d’exécuter le logiciel et de voir s’il fonctionne correctement.

Q2. Il est possible que les créateurs de PCL aient écrit un script de désinstallation. Peut-être que l'exécution de Sudo make uninstall sera utile. Vous devrez consulter la documentation de PCL pour cela. Sinon, vous devez supprimer les fichiers individuellement, à la main.

Q3. Les fichiers installés eux-mêmes ne sont pas différents. Ce qui est différent, c'est le programme utilisé pour les copier dans les répertoires système. apt-get garde la trace de ce qui a été installé à partir de fichiers deb et peut le supprimer. cmake le fait à sa manière, inconnue de APT.

1
Adrien Beau

Bref aperçu d'apt-get

apt-get installe des programmes spécialement emballés. La configuration d'apt contenait des informations détaillées sur l'emplacement où tous les composants du paquet seront installés. Il stocke également des informations sur le système exactement quels fichiers et ont été ajoutés au système. Les informations incluent les étapes de suppression des fichiers.

Lorsque vous décidez d'utiliser apt-get pour supprimer les fichiers, il utilisera ces informations pour supprimer en toute sécurité les fichiers ajoutés à l'ordinateur.

CMake

Cmake est un utilitaire permettant de compiler et d'installer des programmes. Une personne, vous-même compris, peut créer une application aussi simple que "Hello World" et utiliser Cmake pour compiler et placer le programme où vous le souhaitez.

L'utilitaire apt-get ne sera pas informé de tous les programmes que vous décidez de placer n'importe où sur votre ordinateur. Si l'auteur souhaitait que le programme soit installé via apt-get, il le configurerait pour celui-ci et fournirait un package .deb à l'installateur.

Suppression de programmes non installés à l'aide de apt-get

Pour supprimer les programmes installés manuellement, vous devez suivre les dispositions de l'auteur pour la suppression. La commande cmake ainsi que la commande make contiennent des fichiers de configuration qui vous permettent de spécifier des éléments tels que build, install, install with special conditions et uninstall. Ces fonctionnalités sont à la hauteur du développeur du programme.

De nombreux programmes sont accompagnés d'étapes (un fichier readme.txt) pour l'installation et la désinstallation. Vous devrez regarder le contenu du paquet pour voir ce que l'auteur a fourni. Si aucune procédure de désinstallation n'a été fournie, vous devrez la supprimer manuellement en recherchant les fichiers réels qui ont été ajoutés à votre ordinateur par le programme.

Vérifiez si le développeur a fourni une cible uninstall avec:

$ cmake uninstall

Recherche des fichiers du programme:

Recherchez un fichier install_manifest.txt qui peut être créé après l’installation. Cela devrait vous montrer où sont les fichiers.

Une autre façon de trouver les fichiers à partir du programme consiste à étudier le fichier CMakeList.txt. Recherchez les répertoires qui font référence à sortie. Cela spécifiera généralement où les fichiers binaires et les bibliothèques seront placés.

Vous pouvez également savoir quels fichiers ont été ajoutés à votre système avec find. Spécifiez une fenêtre lors de l'installation et vous obtiendrez une liste de fichiers. Il existe quelques variantes de cette commande.

Vous pouvez utiliser ces étapes pour rechercher les fichiers créés dans une fenêtre entre 18 janvier à minuit et 19 janvier à minuit. Au lieu d'utiliser des zéros, vous pouvez spécifier une heure et une minute spécifiques.

Créez un fichier d'horodatage pour le début de la période:

 $ touch -t 201701180000 starttime

Créez un fichier d'horodatage pour la fin de la période:

 $ touch -t 201701190000 starttime

C'est dans le format de: AAAAMMJJHHMM

Puis lancez:

$ find ~/ -mount -newer starttime ! -newer endtime > find.out

Examinez maintenant le fichier texte find.out et vous verrez tous les fichiers créés dans cette fenêtre. Vous pouvez automatiquement éliminer de nombreux fichiers comme ceux de votre répertoire personnel. Cela vous laissera regarder principalement les fichiers binaires.

1
L. D. James