How do I uninstall any Apple pkg Package file?
Despite opinions to the contrary, not all packages are installed cleanly in only one directory. Is there a way to reverse the install process of a pkg file, preferably with the original package (or from a repository of information about installed packages)?
Specifically I've installed the PowerPC MySQL 5.4.1 package on an intel MacBook, and would like to cleanly reverse that, recovering the 5.1 x86 install I can see is still there, but not working properly now.
Solution 1:
https://wincent.com/wiki/Uninstalling_packages_(.pkg_files)_on_Mac_OS_X describes how to uninstall .pkg using native pkgutil
.
Modified excerpt
$ pkgutil --pkgs # list all installed packages
$ pkgutil --files the-package-name.pkg # list installed files
After visually inspecting the list of files you can do something like:
$ 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
Needless to say, extreme care should always be taken when removing files with root privileges. Particularly, be aware that some packages may update shared system components, so uninstalling them can actually break your system by removing a necessary component.
For smaller packages it is probably safer to just manually remove the files after visually inspecting the package file listing.
Apparently, there was once an --unlink
option available in pkgutil
, but as of Lion it is not mentioned in the man page. Perhaps it was removed because it was deemed too dangerous.
Once you've uninstalled the files, you can remove the receipt with:
$ sudo pkgutil --forget the-package-name.pkg
Solution 2:
Built into the system there is no option to uninstall the files using an uninstaller so you can either make an uninstaller yourself or remove the files manually.
The best method to determine what files have been installed is to get a hold of the original .pkg
if possible. If this is not possible you can also use the receipts instead found at /Library/Receipts
. Your biggest issue is when you are dealing with a .mpkg
which contains multiple .pkg
files as you will then have to find all the seperate .pkg
files in that folder (thankfully not that difficult when sorted by date).
Once you have the .pkg
file (Receipt or the full install file) you can then use a utility to either create the uninstaller or find the files so you can remove them manually:
Uninstaller
Absolute Software InstallEase is a free program that can create uninstallers from existing .pkg files. Make the uninstaller .pkg
file (note: You'll need Apple's Developer Tools installed to actually make the .pkg
file)
Manually
Using a program such as Pacifist or a QuickLook plugin like Suspicious Package you can view what files are installed and at what location. Using that list you can then manually navigate to those folders and remove the files. I've used this method personally countless times before I discovered InstallEase, but this is still often faster if the install isn't spread out among many locations.