This blog has been archived.
Visit my home page at zhimingwang.org.

OS X package receipts

I just learned something new. Whenever you install a pkg on OS X, OS X stores a receipt of what was installed in /var/db/receipts (I'm running OS X 10.9.5 at the time of writing), called a bom — bill of materials (I’d rather call it a manifest, whatever). This feature was introduced in NeXTSTEP. From man 5 bom:

The Mac OS X Installer uses a file system "bill of materials" to determine which files to install, remove, or upgrade. A bill of materials, bom, contains all the files within a directory, along with some information about each file. File information includes: the file's UNIX permissions, its owner and group, its size, its time of last modification, and so on. Also included are a checksum of each file and information about hard links.

man 5 bom is actually badly maintained, as it says "The bill of materials for installed packages are found within the package receipts located in /Library/Receipts," whereas those have been migrated to /var/db/receipts a long time ago.

.bom files are binary, but you can access the contents via lsbom. For instance, to list the files installed,

lsbom -f /var/db/receipts/org.macports.MacPorts.bom

Note that the paths printed are always relative to /. See man 1 lsbom for detailed option listing.

(Beware when you try to clean up unwanted packages using the lsbom listing. Packages might overwrite files, so make sure you review the listing first and know what you are doing. "Knowing what you are doing" is the prerequisite for using sudo anyway.)