Update of "cross package maker"
Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Artifact ID: | d8b5ce3ff41b1679419d965f2f5b4770b301e170 |
---|---|
Page Name: | cross package maker |
Date: | 2015-04-17 13:11:03 |
Original User: | mario |
Mimetype: | text/x-markdown |
Parent: | e41ce40ff7e2b8fb7dc3074708d80a808467808f (diff) |
Next | 99a1bfefd131b65759b8b169fc29f0260c75e9e5 |
fpm greatly simplifies distribution package generation.
xpm is a feature-oriented branch of fpm.
It creates or converts between
- Debian
deb
- RedHat
rpm
- Node
npm
- OSX
pkg
- Ruby
gem
- Solaris packages, plain
zip
ortar
archives, and a few more..
See the → 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 assembles Windows SFX "installers"
-s src consumes per-file relative
pack:
specifiers from meta comment fields for source-based apps-t phar bundles PHP scripts into
.phar
/zip/tars with meta fields-t ipk creates a static Listaller (.IPK) or Limba archive (which is a cross-distro packaging format)
-s 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 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:
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 - compresses man pages
- appdata - creates pkg.appdata.xml for distro managers
- desktop - add stub fpm:pkg.desktop file
- composer - update/generate
composer.json
for phar target - fixperms - limit file permissions (umask 755 / 644)
- strip - strip debugging symbols from binaries
- deps - resolve cross-distro library names per whohas/distromatch
- unprefix - workaround for converting system packages back to local paths
- lcase - lowercase filenames prior packaging
- packfile - runs any
Packfile
within the /tmp/staging dir on assembled files
Debian 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 → a GUI/Python-based BSD/Linux cross-distro installer (reusing zip, deb, alien, pkcon, xdg-tools)
-t msi - for proper Windows packages
depending on further research, one of the AppImage-formats (utilizing their actual tools) might make sense
See 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
or assemble it yourself:
- Download the xpm.tgz tarball, extract somewhere
gem build ./xpm.gemspec
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 once in a while.
Or you can just sync it directly from here. Download or install the single fossil binary, then:
fossil clone http://fossil.include-once.org/xpm/ xpm.fsl
fossil open xpm.fsl
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:
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
- apt/yum repo builder https://github.com/dnbert/prm