Comment désinstaller un fichier de package Apple pkg?


51

Malgré des opinions contraires , tous les packages ne sont pas installés proprement dans un seul répertoire. Existe-t-il un moyen d’inverser le processus d’installation d’un fichier pkg, de préférence avec le paquet original (ou à partir d’un référentiel contenant des informations sur les paquets installés)?

Plus précisément, j'ai installé le paquet PowerPC MySQL 5.4.1 sur un MacBook intel et je voudrais inverser la situation, en récupérant l'installation 5.1 x86 que je peux voir toujours présente, mais ne fonctionnant pas correctement maintenant.

Réponses:


83

https://wincent.com/wiki/Uninstalling_packages_(.pkg_files)_on_Mac_OS_X explique comment désinstaller .pkg à l'aide de l'application native pkgutil.

Extrait modifié

$ pkgutil --pkgs # list all installed packages
$ pkgutil --files the-package-name.pkg # list installed files

Après avoir visuellement inspecté la liste des fichiers, vous pouvez effectuer les opérations suivantes:

$ pkgutil --pkg-info the-package-name.pkg # check the location
$ cd / # assuming the package is rooted at /...
$ pkgutil --only-files --files the-package-name.pkg | tr '\n' '\0' | xargs -n 1 -0 sudo rm -f
$ pkgutil --only-dirs --files the-package-name.pkg | tail -r | tr '\n' '\0' | xargs -n 1 -0 sudo rmdir

Inutile de dire que des précautions extrêmes doivent toujours être prises lors de la suppression de fichiers dotés de privilèges root. Sachez en particulier que certains packages peuvent mettre à jour des composants système partagés. Par conséquent, leur désinstallation peut endommager votre système en supprimant un composant nécessaire.

Pour les petits paquets, il est probablement plus sûr de simplement supprimer manuellement les fichiers après avoir inspecté visuellement la liste de fichiers du paquet.

Apparemment, il y avait une fois une --unlinkoption disponible dans pkgutil, mais en tant que Lion, cela n’est pas mentionné dans la page de manuel. Peut-être a-t-il été supprimé parce que jugé trop dangereux.

Une fois les fichiers désinstallés, vous pouvez supprimer le reçu avec:

$ sudo pkgutil --forget the-package-name.pkg

1
Je recommanderais d'utiliser rmdirau lieu de rm -r; on pourrait aussi utiliser tacou tail -rinverser la liste des noms de répertoires pour qu'ils soient supprimés dans le bon ordre
Sam Mason

18
NE LANCEZ PAS LA PARTIE sudo rm -ir. La liste comprend les répertoires parents! Donc, si le paquetage a installé quelque chose dans / usr / ... vous supprimerez ALL / usr /
FiloSottile

2
J'ai changé la commande pour supprimer des répertoires à utiliser rmdir(ce qui ne supprime pas les répertoires non-vides) et les utilise tail -rpour les lister dans un meilleur ordre.
Brablc

1
Ironiquement, lors de l’utilisation de pgkutil, j’ai trouvé un uninstaller.pl caché que je pouvais utiliser. Parfait!
cmroanirgo

Une chose que les pkgs ne semblent pas suivre, ce sont les liens symboliques créés par les pkgs. Il est possible que le nettoyage du paquet à partir des instructions ci-dessus (ou de l'une des méthodes décrites ici) laisse des liens symboliques rompus.
James McMahon

19

Le système ne contient aucune option permettant de désinstaller les fichiers à l'aide d'un programme de désinstallation. Vous pouvez donc créer vous-même un programme de désinstallation ou supprimer les fichiers manuellement.

La meilleure méthode pour déterminer quels fichiers ont été installés est de récupérer l'original .pkgsi possible. Si ce n'est pas possible, vous pouvez également utiliser les reçus trouvés à l'adresse /Library/Receipts. Votre plus gros problème est lorsque vous traitez avec un fichier .mpkgcontenant plusieurs .pkgfichiers, car vous devrez alors trouver tous les .pkgfichiers séparés dans ce dossier (heureusement, ce n'est pas si difficile quand ils sont triés par date).

Une fois que vous avez le .pkgfichier (Receipt ou le fichier d'installation complet), vous pouvez utiliser un utilitaire pour créer le programme de désinstallation ou trouver les fichiers afin de pouvoir les supprimer manuellement:

Uninstaller

Absolute Software InstallEase est un programme gratuit permettant de créer des désinstalleurs à partir de fichiers .pkg existants. Créez le .pkgfichier de désinstallation (note: vous aurez besoin des outils de développement Apple pour installer le .pkgfichier).

Manuellement

En utilisant un programme tel que Pacifist ou un plugin QuickLook tel que Suspicious Package, vous pouvez voir quels fichiers sont installés et à quel emplacement. En utilisant cette liste, vous pouvez ensuite naviguer manuellement vers ces dossiers et supprimer les fichiers. J'ai personnellement utilisé cette méthode d'innombrables fois avant de découvrir InstallEase, mais cela reste souvent plus rapide si l'installation n'est pas répartie sur de nombreux sites.


Merci, alors que les paquets mysql 5.1 normaux ont laissé un reçu, pas les paquets mysql bêta 5.4. C'est légèrement étrange.
dlamblin

4
Wow, si je le savais, je ne l'aurais jamais installé .pkgpour commencer. yu non Programmes et fonctionnalités OS X?
NobleUplift


1

Vous pouvez essayer les suggestions de ce site: http://www.entropy.ch/software/macosx/mysql/remove-old-mysql.html . En outre, il existe un article à ce sujet sur le site de support d'Adobe; voici le lien: http://support.adobe.com/devsup/devsup.nsf/docs/52355.htm .

De plus, les applications qui ont généralement un fichier pkg dans dmg ont aussi généralement un autre pkg utilisé pour la désinstallation. Je ne sais pas si cela est vrai ici, mais je tenais à vous faire savoir de conserver le fichier dmg d'origine.


1

J'ai fait un shell shell

Tu peux l'essayer

https://github.com/iamrToday/pkg-remove

Il montre une démo .gif, vous pouvez voir le code source, juste envelopper la ligne de commande de brablc . Vous pouvez l'exécuter pour rechercher des informations, vous pouvez également supprimer apk. C'est interactif.


Qu'est ce que ça fait?
Pierre.Vriens

Je montre une démo .gif, vous pouvez voir le code source, juste envelopper la ligne de commande de brablc . vous pouvez l'exécuter pour rechercher des informations, vous pouvez également supprimer apk. c'est interactif. :)
Lin aujourd'hui
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.