D 2015-04-17T13:10:25.220 L cross\spackage\smaker N text/x-markdown P 0c02b625c8033acddcb34740a06f96d4021887d3 U mario W 5615 fpm greatly simplifies distribution package generation.
xpm is a feature-oriented branch of fpm. xpm It creates or converts between * Debian `deb` * RedHat `rpm` * Node `npm` * OSX `pkg` * Ruby `gem` * Solaris packages, plain `zip` or `tar` archives, and a few more.. See the [→ Howto](wiki/Howto) on common `fpm` usage examples. ### xpm target/source plugins This variant (precautiosly renamed for parallel installation) adds a few more source/target modules: * [*-t* **exe**](wiki/exe) assembles Windows SFX "installers" * [*-s* **src**](wiki/src) consumes per-file relative `pack:` specifiers from meta comment fields for source-based apps * [*-t* **phar**](wiki/phar) bundles PHP scripts into `.phar`/zip/tars with meta fields * [*-t* **ipk**](wiki/ipk) creates a static Listaller (.IPK) or Limba archive (which is a cross-distro packaging format) * [*-s* **composer**](wiki/source_composer) fetches PHP bundles per composer, allows to pack them as phars or system packages (or matroska phar in deb/rpm) A few more are currently pondered.. ### new features This fpm branch already provides a few extensions: * [**Multi-target**](wiki/multi-target) creation in one swoop. xpm -t deb,rpm,exe Avoids having to call fpm multiple times for creating distinct system packages. Usually package-specific flags `--deb-…` and `--rpm-…` can be mixed in one invocation - when they're non-overlapping. * Simple post-processing with [**update filters**](wiki/update+filters): xpm -u man,appdata Update filters are run between input file collection and target package building. They're intended for quick tasks or semi-build functionality. Existing filters: * [man](wiki/update+filters#man) - compresses man pages * [appdata](wiki/update+filters#appdata) - creates pkg.appdata.xml for distro managers * [desktop](wiki/update+filters#desktop) - add stub fpm:pkg.desktop file * [composer](wiki/update+filters#update_composer) - update/generate `composer.json` for phar target * [fixperms](wiki/update+filters#fixperms) - limit file permissions (umask 755 / 644) * [strip](wiki/update+filters#strip) - strip debugging symbols from binaries * [deps](wiki/update+filters#deps) - resolve cross-distro library names per whohas/distromatch * [unprefix](wiki/update+filters#unprefix) - workaround for converting system packages back to local paths * [lcase](wiki/update+filters#lcase) - lowercase filenames prior packaging * [packfile](wiki/update+filters#packfile) - runs any `Packfile` within the /tmp/staging dir on assembled files * Debian [package signing](wiki/package+signing) with `--deb-sign KEYNAME` integrated. * Additional --attr option to add custom control header fields (practically an alias for --deb-field, but also works for phar packages, based on `attrs{}`, so src plugin implicitly populates extra fields). ### possible extensions It's planned or at least considered to add: * [*-t* **inst**](wiki/inst) → a GUI/Python-based BSD/Linux cross-distro installer (reusing zip, deb, alien, pkcon, xdg-tools) * [*-t* **msi**](wiki/msi) - for proper Windows packages * depending on further research, one of the AppImage-formats (utilizing their actual tools) might make sense See [Research](wiki/Research) on existing and inactive cross-distro packagers, schemes and initiatives. ### build and installation Meanwhile xpm installs as `xpm`, to keep any mainline `fpm` accessible. It's installed per rubygems easily. Either download a [prebuilt gem ($stats_latest_version) from `apt.io`](http://apt.include-once.org/xpm-$stats_latest_version.gem) or assemble it yourself: 1. Download the [xpm.tgz](tarball/xpm.tgz?uuid=trunk) tarball, extract somewhere 2. `gem build ./xpm.gemspec` 3. `gem install ./xpm-$stas_latest_version.gem` Take note that this fetches a few other dependencies, even compiles `ffi`; so may take a few more seconds. But basically that's it. ### fossil → git I just don't fancy git. That is all. But this fossil repo will be synced back to [https://github.com/prof-milki/xpm](https://github.com/prof-milki/xpm) once in a while. Or you can just sync it directly from here. Download or install the single [fossil binary](http://www.fossil-scm.org/download.html), then: 1. `fossil clone http://fossil.include-once.org/xpm/ xpm.fsl` 2. `fossil open xpm.fsl` 3. `fossil ui` From there you could also just `fossil export --git` and pipe that into `git fast-import`. Alternatively just use the new direct remote export: 1. `wget //fossil.include-once.org/xpm/git-fast-export` It should be noted that Git is occasionally flaky with its own export format though. ### links * mainline fpm version [https://github.com/jordansissel/fpm](https://github.com/jordansissel/fpm) * apt/yum repo builder [https://github.com/dnbert/prm](https://github.com/dnbert/prm) Z a82b1d8c84d7bd02c202d4c10fa9f3d0