Efficient Package Management

Easy packaging of application and files.


Easy and plain installation via gem. It's currently not in the Fedora repositories, but widely distributet in Gem.

    $ gem install fpm



    $ fpm -s <source type> -t <target type> [options]

Package source types:

  • dir - make a package from directories or files
  • rpm - make a package from an RPM
  • gem - make a package from a Rubygem
  • python - make a package from a python module (via easy_install or local setup.py)
  • empty - make a package without any files (useful for meta packages and other things)
  • tar - make a package out of the contents of a tarball
  • deb - make a package from an existing deb

Target package types:

  • rpm - produce an RPM
  • deb - produce a .deb
  • solaris - produce a solaris package (for use with pkgadd). NB Solaris is not yet implemented in the new API - creation of SVR4 packages currently requires use of version 0.3.x
  • puppet - produce a puppet module (we should have a closer look at this).


  • '-n': Name
  • '-a': Architecture (all = noarch)
  • '-v': Version, -v 1.0


For some Puppet stuff I had to install automated some GEM packages. Locally there wasn't any gem store available and no time to set one up. So: FPM to the rescue:

    $ sudo su -
    $ root> fpm -s gem -t rpm --rpm-user root -m "Me <nerd@micronerds.org>" passenger
    $ root> fpm -s gem -t rpm --rpm-user root -m "Me <nerd@micronerds.org>" rack
    $ root> fpm -s gem -t rpm --rpm-user root -m "Me <nerd@micronerds.org>" daemon_controller


This left me three noarch rpm packages I could install on a CentOS 7 system.

The important part here was to run the fpm command as root user. Whenever I tried to create the RPM package as 'me', the files ended up in /home/me/.rvm/..... and where not available for the puppet root process to use later on.