OSX package management from the commandline, part 1
Get an overview, receipts and bomfiles
When a package is installed, a receipt (plist) and a bill of materials (bomfile) are also placed on your system.
The receipts and the bomfiles is binary files and you can use defaults and lsbom to read them.
# man defaults
# man lsbom
The receipts and bomfiles are usually located in: /var/db/receipts or ~/Library/Receipts/
# cd /var/db/receipts
# ls
You can read the receipts.plist files with the defaults command. This is metadata about the installed application.
# defaults read /var/db/receipts/uk.co.canimaansoftware.clamxav-engine-installer.plist
{
InstallDate = "2016-05-04 07:38:17 +0000";
InstallPrefixPath = "usr/local/clamXav";
InstallProcessName = installer;
PackageFileName = "engine.pkg";
PackageIdentifier = "uk.co.canimaansoftware.clamxav-engine-installer";
PackageVersion = "0.99.1";
PathSHA1Checksums = {
};
}
You can read the bomfiles with the lsbom command. This is fileinformation about the installed application.
# lsbom uk.co.canimaansoftware.clamxav-engine-installer.bom
. 40755 0/0
./0.99.1_update_1 100644 0/0 0 4294967295
...
./share/man/man8/clamav-milter.8 100644 0/0 962 3292246713
./share/man/man8/clamd.8 100644 0/0 6322 507118410
... or you can use the pkgutil to retrieve the information.
# pkgutil --pkgs
com.128bittech.FreeFonts
com.acdsystems.acdsee
...
wifiexplorer
net.sourceforge.Gutenprint-5.2.9
Get information about a specific package
# pkgutil --files uk.co.canimaansoftware.clamxav-engine-installer
0.99.1_update_1
0.99.1_update_2
...
share/man/man8/clamav-milter.8
share/man/man8/clamd.8
# pkgutil --pkg-info uk.co.canimaansoftware.clamxav-engine-installer
version: 0.99.1
volume: /
location: usr/local/clamXav
install-time: 1462347497
Get reverse information about an application
If you have an application that you want to get information about you can use pkgutil to get some info.
# pkgutil --file-info /Applications/Mail.app
volume: /
path: /Applications/Mail.app
pkgid: com.apple.pkg.Essentials
pkg-version: 10.9.0.1.1.1306847324
install-time: 1394632076
uid: 0
gid: 0
mode: 755
pkgid: com.apple.pkg.update.os.10.9.3.13D65.delta
pkg-version: 1.0.0.0.1.1306847324
install-time: 1400222538
uid: 0
gid: 0
mode: 755
pkgid: com.apple.pkg.update.os.10.9.4.13E28.delta
pkg-version: 1.0.0.0.1.1306847324
install-time: 1405059341
uid: 0
gid: 0
mode: 755
.... which will show you which pkgid that is responsible for the actual Software.app bundle.
Install and remove software
It is easy to install a package with the program installer.
# man installer
Removing a package is a bit harder though, and it involves reading the bomfile and removing all resources listed in the bomfile with rm.
Install a package
# installer -pkg /path/to/somename.pkg -target /
Remove a package
Get a list of all the files. The safest approach is to delete the files by hand.
# pkgutil --only-files --files uk.co.canimaansoftware.clamxav-engine-installer
0.99.1_update_1
0.99.1_update_2
...
share/man/man8/clamav-milter.8
share/man/man8/clamd.8
Get a list of all the directories. The safest approach is to delete the directories by hand.
# pkgutil --only-dirs --files uk.co.canimaansoftware.clamxav-engine-installer
3rd Party Licences
bin
...
share/man/man5
share/man/man8
Forget a packagereceipt
After we have removed the program, we also have to remove the receipt and bomfile.
# pkgutil --forget no.mbmedia.pkg.somename
Learn more
- Uninstall applications installed from packages: http://hints.macworld.com/article.php?story=20100107090139622
- MacEnterprise - Packages, Receipts, and Snow...: http://www.mactech.com/articles/mactech/Vol.25/25.12/2512MacEnterprise-PackagesReceiptsandSnow/index.html