-
Notifications
You must be signed in to change notification settings - Fork 1.1k
OS X packages
The 'osxpkg' type uses Apple's command-line 'pkgbuild' tool to build OS X 'flat' Installer packages. Stéphane Sudre has a great documentation page on what he's been able to document on the flat package format.
ERB templates are used to supply a PackageInfo template to pkgbuild using the --info
option. This option is undocumented, but seems there for convenience. It's not the only way to customize a built PackageInfo file.
- running OS X
- must have 'pkgbuild' in the user's PATH (on vanilla 10.7/10.8 systems, this is already the case – on 10.6, Xcode/Developer Tools version 4.2 must be installed, and you'd most likely need to have
/Developer/usr/bin
added to your PATH)
- input/output
- pre/post-install scripts (no
--remove
support as OS X installer has no real uninstall functionality) - platform-specific package features:
- post-install actions (
--osxpkg-postinstall-action
: logout, restart, shutdown) - ownership option (
--osxpkg-ownership
: passed to pkgbuild's--ownership
option) - payload-free (
--[no-]osxpkg-payload-free
: scripts only, no files) - dont-obsolete (
--osxpkg-dont-obsolete
: files to ensure are persistent across future upgrades)
- post-install actions (
OS X packages don't carry the same architecture/dependencies/maintainer metadata that other *NIX packaging systems do, so much of this information is discarded if converting from rpm/deb/solaris.
OS X packages also tend to use a reverse-domain naming convention similar to Java, and this is known as an identifier
. This is the only identifier for a package, there is no name
.
For example, Apache on OS X uses the identifier org.apache.httpd
. For this reason, the --osxpkg-identifier-prefix
option should always be used to follow system conventions:
fpm -s dir -t osxpkg --osxpkg-identifier-prefix org.apache --name httpd --version 2.4.3 /opt/apache-staging
When an OS X package is used as input, the name derived will be the last dot-component of the identifier, httpd
in this case.
- signing options
- support user-supplied PackageInfo template files for advanced customization
- build on other platforms?
- archive formats (.pkg using xar, Payload using gzipped cpio) shouldn't be a problem, but BOM must be generated
- StackOverflow thread, lsbom sample code - mkbom would need to be written