gitmyhub

fpm

Ruby ★ 11k updated 2mo ago

Effing package management! Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity.

A command-line tool that builds software packages for multiple platforms from a single description, so you can produce .deb.rpm, macOS, and FreeBSD packages without learning each platform's packaging rules.

Rubysetup: easycomplexity 2/5

FPM is a command-line tool for building software packages in multiple formats without having to learn the packaging rules of each platform separately. If you want to distribute a program as a .deb file for Ubuntu, an .rpm for Red Hat, a FreeBSD package, or a Mac OS X installer, FPM handles the translation so you do not need to become an expert in each system's packaging format.

The README explains the backstory plainly: packaging rules differ significantly between Linux distributions, and switching between Ubuntu and CentOS means dealing with completely different tools and conventions. FPM was created to remove that friction, letting you describe what you want to install and where, then produce a native package for whichever platform you need.

FPM can take software from a variety of sources: Ruby gems, Python modules, Node packages, directories on your filesystem, existing .deb or .rpm files, tar archives, PEAR packages, or ArchLinux pacman packages. It can convert or repackage any of those into the target format you need. The README also notes you can tweak existing packages, such as removing files from them or stripping out installation scripts.

The project's stated principles are notable. If a new user has a bad experience, the maintainers treat that as a bug in the tool, not a gap in the user's knowledge. The same goes for confusing documentation. That philosophy shapes how the project handles issues and contributions.

FPM is written in Ruby and distributed as a gem. The README links to external documentation for installation instructions and usage details rather than repeating them inline, so the README itself is brief. The full documentation lives at fpm.readthedocs.io.

Where it fits