fpm README

The project's README from github.com/jordansissel/fpm. As one markdown file: README.md.

fpm

|Gem|

The goal of fpm is to make it easy and quick to build packages such as rpms, debs, OSX packages, etc.

fpm, as a project, exists to help you build packages, therefore:

If there is a bug in fpm, then we can work together to fix it. If you wish to report a bug/problem/whatever, I welcome you to do on the project issue tracker_.

.. _the project issue tracker: https://github.com/jordansissel/fpm/issues

You can find out how to use fpm in the documentation_.

.. _documentation: https://fpm.readthedocs.io/en/latest/

You can learn how to install fpm on your platform in the installation guide_.

.. _installation guide: https://fpm.readthedocs.io/en/latest/installation.html

Project Principles

Backstory

Sometimes packaging is done wrong (because you can't do it right for all situations), but small tweaks can fix it.

And sometimes, there isn't a package available for the tool you need.

And sometimes if you ask "How do I get python 3.9 on RHEL 8?" some unhelpful trolls will tell you to "Use another distro"

Further, job switches have me flipping between Ubuntu and CentOS. These use two totally different package systems with completely different packaging policies and support tools. Learning both was painful and confusing. I want to save myself (and you) that pain in the future.

It should be easy to say "here's my install dir and here's some dependencies; please make a package"

The Solution - FPM

I wanted a simple way to create packages without needing to memorize too much.

I wanted a tool to help me deliver software with minimal steps or training.

The goal of FPM is to be able to easily build platform-native packages.

With fpm, you can do many things, including:

.. include: docs/installing

Things that should work

Sources:

Targets:

.. include: docs/contributing

.. |Gem| image:: https://img.shields.io/gem/v/fpm.svg :target: https://rubygems.org/gems/fpm

fpm (jordansissel/fpm)

packaging
Searching Database…

11.5K ·GitHub
What is this?fpm (Effing Package Management) is a command-line tool that builds native packages (deb, rpm, Mac OS X pkg, FreeBSD, pacman, etc) from many kinds of input sources, so you don't have to learn each platform's packaging toolchain.
Is this a library I import, or a CLI tool I run?It's a CLI tool (a Ruby gem) you invoke from the terminal, not a library you embed in code.
How do I install and run it?Install it like a Ruby gem and follow the installation guide for your platform, then run the fpm command pointing it at your source (a directory, gem, tarball, rpm, deb, etc) and target package format.
What source types and target formats does fpm actually support?Supported sources include gem, python modules, pear, directories, tar(.gz), rpm, deb, npm packages, and pacman packages; supported targets include deb, rpm, solaris, freebsd, tar, directories, and Mac OS X .pkg files.
Can I also use it to tweak existing packages instead of building new ones?Yes, fpm can modify existing packages: removing files, changing metadata or dependencies, and stripping pre/post/maintainer scripts.
Why did the author build fpm instead of just using each distro's native packaging tools?Switching jobs meant flipping between Ubuntu and CentOS, which have completely different packaging systems and policies; fpm lets you say 'here is my install dir and dependencies, make a package' without memorizing each one.
Can fpm auto-download dependencies for me?Yes, for gem, python module, and pear sources fpm will automatically download the package for you before building.
Does fpm run inside Docker?The repo includes Docker support, which is useful for building platform-specific packages in an isolated, matching environment.
What are similar projects?brew, pipx, homebrew-cask, kamal, capistrano, rye, pip, nixpkgs
Size
3 MB
Stars
11.5K
Age
15y
Commits · 90 Days