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 -
fpm -s gem -t rpm --rpm-user root -m "Me <nerd@micronerds.org>" passenger
fpm -s gem -t rpm --rpm-user root -m "Me <nerd@micronerds.org>" rack
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.