Cross package maker. DEB/RPM generation or conversion. Derived from jordansissel/fpm.

โŒˆโŒ‹ โŽ‡ branch:  cross package maker

Add crude Python bdist_wheel generation method. Only tested with singular packages. Hack to relocate single module scripts into pkgname subdir + stub __init__.py. Otherwise relies on -s src or -s di
mario authored 3240 days ago last checkin d275f1986
๐Ÿ“‚ .batcave 'dk add ruby fpm' โ€นโ€บ 4401 days ago
๐Ÿ“‚ bin - include some more paths in npm packages - set more default values sโ€นโ€บ 4822 days ago
๐Ÿ“‚ examples Add api examples โ€นโ€บ 4401 days ago
๐Ÿ“‚ experimental - moved to lib/rpm/... โ€นโ€บ 4692 days ago
๐Ÿ“‚ lib actually require the new code โ€นโ€บ 4821 days ago
๐Ÿ“‚ misc - add work-in-progress to build packages with pkgsrc โ€นโ€บ 4667 days ago
๐Ÿ“‚ spec Added support for extra control files for debs (fixes #599) โ€นโ€บ 3610 days ago
๐Ÿ“‚ templates - purge swap file โ€นโ€บ 4823 days ago
๐Ÿ“‚ test - add more tests - better test running โ€นโ€บ 4578 days ago
๐Ÿ“‚ tools - make fpm-npm a toplevel tool โ€นโ€บ 4823 days ago
๐Ÿ“„ .travis.yml - tell travis to run on more rubies โ€นโ€บ 4382 days ago
๐Ÿ“„ .travis.yml.disabled - disable travis; it's too noisy and I don't have time to keep it hapโ€นโ€บ 4000 days ago
๐Ÿ“„ CHANGELIST - version bump โ€นโ€บ 4686 days ago
๐Ÿ“„ CODE_OF_CONDUCT.md Add a Code of Conduct from http://contributor-covenant.org/ โ€นโ€บ 3405 days ago
๐Ÿ“„ CONTRIBUTORS - add contributors and license file (License is MIT) โ€นโ€บ 4689 days ago
๐Ÿ“„ Gemfile - try using rspec+insist โ€นโ€บ 4393 days ago
๐Ÿ“„ Gemfile.lock . โ€นโ€บ 4382 days ago
๐Ÿ“„ Guardfile - I don't use this. โ€นโ€บ 4393 days ago
๐Ÿ“„ LICENSE - add contributors and license file (License is MIT) โ€นโ€บ 4689 days ago
๐Ÿ“„ Makefile clean more stuff โ€นโ€บ 4393 days ago
๐Ÿ“„ NOTES.md - Add notes โ€นโ€บ 4813 days ago
๐Ÿ“„ README move to markdown โ€นโ€บ 4823 days ago
๐Ÿ“„ README.md - add install notes โ€นโ€บ 4823 days ago
๐Ÿ“„ Rakefile - Add gem packaging โ€นโ€บ 4823 days ago
๐Ÿ“„ TODO - ok, I really use github issues for a todo list. โ€นโ€บ 4382 days ago
๐Ÿ“„ Vagrantfile - Add Vagrantfile + puppet manifest to help me much more easily test โ€นโ€บ 3996 days ago
๐Ÿ“„ a remove test file โ€นโ€บ 4273 days ago
๐Ÿ“„ notify-failure.sh 'dk add ruby fpm' โ€นโ€บ 4401 days ago
๐Ÿ“„ pkg.rb - finish move โ€นโ€บ 4823 days ago
๐Ÿ“„ xpm.gemspec Release xpm branch as v1.3.3.3; rename binary and gem.โ€นโ€บ 3374 days ago

cross package maker

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 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)

  • -t arch builds a binary Arch Linux package.

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 from apt.io or assemble it yourself:

  1. Download the xpm.tgz tarball, extract somewhere
  2. gem build ./xpm.gemspec
  3. gem install ./xpm-1.3.3.6.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:

  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