Supprimer un programme installé depuis les sources

Sans make uninstall disponible

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J'ai installé python 3.4.4 depuis le sources et maintenant j'aimerais bien pouvoir le désinstaller.

J'ai essayé la commande "sudo make uninstall" (dans le dossier avec les sources) mais cela ne fonctionne pas, Je tombe sur "make: *** No rule to make target 'uninstall'. Arrêt.". Cela signifie qu'il n'y a pas de cible dans ce programme pour faire la désinstallation (si j'ai bien compris).

Je suis vraiment obligé de chercher tous les fichiers du programme sur la machine et de les supprimer manuellement ? Il y a une autre méthode plus simple et plus sûre ?

Merci d'avance

Cordialement

+0 -0

Cette réponse a aidé l'auteur du sujet

Aïe. C'est pas bien parti. Normalement tu aurais pu regarder la règle install du Makefile pour voir quels fichiers ça a installé et les supprimer, mais là c'est Python qui n'est probablement pas le projet au Makefile le plus minimaliste … Par défaut quand on installe depuis les sources tout va dans /usr/local. Regarde donc dans les dossiers enfants de /usr/local pour chercher ce qui a trait à Python et passer ça à la trappe.

Pour Python en particulier j'aurais utilisé Anaconda: c'est une distribution Python pratique à utiliser avec un gestionnaire de paquets (conda) qui marche très bien. Pour ta version précise de Python, elle est pas dans Anaconda parce qu'ils ont sauté de 3.4.3 à 3.5.0rc4 par contre. J'utilise Anaconda pour éviter d'avoir à installer de paquets avec mon gestionnaire de paquets système en même temps que des paquets pip: c'est bien moins le bordel.

En général, quand j'installe un programme depuis les sources je vérifie l'existence de la règle uninstall mais de manière générale je préfère écrire un paquet vite fait (je suis sous Arch donc écrire un PKGBUILD ça va très vite). Sinon, l'alternative est d'utiliser stow et de donner le préfixe /usr/local/stow/nomdulogiciel au Makefile. Le rôle de stow est ensuite de créer des liens symboliques dans /usr/local pour que le logiciel soit bien dans le $PATH. Supprimer le paquet est alors trivial: il suffit de demander à stow de retirer ses liens et puis de supprimer le dossier /usr/local/stow/nomdulogiciel.

Pour plus d'informations sur stow, cet article devrait t'aider.

+0 -0

Cette réponse a aidé l'auteur du sujet

+1 pour le PKGBUILD qui va se souvenir de tous les fichiers installés sur le système et qui pourra donc les enlever automatiquement (ou autre méthode plus pénible de construction de paquets sur d'autres distributions :D).

Il faut coder pour pouvoir spécifier… ou l’inverse ! Blog perso

+0 -0
Auteur du sujet

Merci à tous pour votre aide !
Je débute un peu avec Linux, c'est pas très facile ^^
J'ai effectivement oublié de préciser que j'utilise Debian 8.2

Normalement tu aurais pu regarder la règle install du Makefile pour voir quels fichiers ça a installé et les supprimer

C'est à dire ? Regarder une des variables dans le fichier MakeFile (présent dans le dossier des sources) qui indique où les fichiers du programme seront installés ?

Par défaut quand on installe depuis les sources tout va dans /usr/local

D'accord j'ai fait un coup de sudo find /usr/local -name "python*" -ok rm -r {} \;, et ça fonctionne. Ça avait l'air d'être une méthode propre pour supprimer. Il ne fallait juste pas supprimer python2 (/usr/local/lib/python2.7 qui a été crée lors à l'installation de l'os)

En général, quand j'installe un programme depuis les sources je vérifie l'existence de la règle uninstall

Je vais faire ça à l'avenir, un sudo make uninstall avant d'installer

de manière générale je préfère écrire un paquet vite fait (je suis sous Arch donc écrire un PKGBUILD ça va très vite). Sinon, l'alternative est d'utiliser stow et de donner le préfixe /usr/local/stow/nomdulogiciel au Makefile

D'accord, je vais essayer ces méthodes prochainement et retourner vers vous si j'ai des questions. Pour la méthode du PKGBUILD, c'est disponible que sur Arch Linux ?

Édité par Paul64

+0 -0
Auteur du sujet

Du coup tu as supprimé ta version python2.7 avec cette commande, ou il y a un /local de trop ?

Non, -ok rm -r {} \; me demande une confirmation avant chaque suppression ^^.
J'ai correctement supprimé tout ce qui était en rapport avec python 3.

J'ai essayé la méthode avec stow mais je tombe sur erreur lorsque de tape la commande sudo stow python3.4.4 dans /usr/local/stow

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Possible precedence issue with control flow operator at /usr/share/perl5/Stow.pm line 1736.
WARNING! stowing python3.4.4 would cause conflicts:
  * existing target is neither a link nor a directory: bin/2to3-3.4
  * existing target is neither a link nor a directory: bin/idle3.4
  * existing target is neither a link nor a directory: bin/pydoc3.4
  * existing target is neither a link nor a directory: bin/pyvenv-3.4
  * existing target is neither a link nor a directory: lib/libpython3.4m.a
  * existing target is not owned by stow: bin/2to3
  * existing target is not owned by stow: bin/idle3
  * existing target is not owned by stow: bin/pydoc3
  * existing target is not owned by stow: bin/pyvenv
All operations aborted.

Il s'avère qu'il s'agit d'un problème qui a été résolu il n'y a pas longtemps : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759326 mais ça n'a toujours pas été résolu chez moi :(

Édité par Paul64

+0 -0

Oui j'ai eu ce bug aussi avec stow sur mon serveur. J'en ai eu marre et j'ai passé ma version de Debian en testing et là le bug était résolu je crois. Sinon tu peux essayer avec xstow qui lui n'a pas ce problème.

+0 -0
Auteur du sujet

J'ai utilisé sudo xstow python351 dans /usr/local/stow/. Le dossier python351 est celui où python a été installé, avec make install prefix=/usr/local/stow/python351

Édité par Paul64

+0 -0
Auteur du sujet

Merci pour ta réponse.
Dans le dossier /usr/local/stow/python351, j'ai supprimé les fichiers bin/pyvenv, bin/idle3, bin/pydoc3, bin/2to3, j'ai installé le package avec sudo stow python351 et python 3 s'est effectivement correctement installé ! :)
Par contre, je n'ai pas compris pourquoi il fallait supprimer ces fichiers ? Ils ont été crées lors du make install... non ?

Édité par Paul64

+0 -0

Nooooooon ! Surtout pas ! C'était pas dans les dossiers de stow mais dans ceux dy système qu'il fallait supprimer ces fichiers. Je disais de supprimer /bin/venv… J'étais pas clair, désolé. Tu es bon pour recommencer make l'o install puis désinstaller python avec stow -R python351 puis supprimer les fichiers du système qui provoquent des conflits puis réinstaller python avec stow.

Puisque tu es sur une Debian il vaut mieux créer un paquet avec checkinstall que bidouiller avec stow.

Édité par anonyme

+0 -0
Auteur du sujet

D'accord pour stow, merci.

J'ai regardé comment créer des .deb avec checkinstall et j'ai essayé de créer un paquet pour Python 3. J'ai fait un ./configure, sudo make et sudo checkinstall. Je suis tombé sur cette erreur :

1
2
Creating directory /usr/local/lib/python3.5/config-3.5m
ranlib: n'a pu créer le fichier temporaire pendant l'écriture de l'archive: Aucun autre fichier d'archive

J'ai réussi à la résoudre facilement en faisant un sudo mkdir -p /usr/local/lib/python3.5/config-3.5m
cependant je tombe toujours sur un autre type d'erreur :(

1
2
3
4
creating /usr/local/lib/python3.5/lib-dynload
copying build/lib.linux-i686-3.5/fcntl.cpython-35m-i386-linux-gnu.so -> /usr/local/lib/python3.5/lib-dynload
error: [Errno 2] No such file or directory
Makefile:1432: recipe for target 'sharedinstall' failed

Avez-vous une idée ? Merci d'avance

+0 -0

Je suis pas sous debian donc je peux pas t'aider avec checkinstall mais il ne faut pas compiler en root. make tout court donc, pas sudo make. sudo n'est nécessaire que pour sudo make install ou sudo checkinstall.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte