NFPM is Not FPM - a simple deb and rpm packager written in Go.
While fpm is great, for me it is a bummer that it depends on Ruby, tar and probably other software.
I wanted something that could be used as a binary and/or as a lib on go-software, so I hacked this together and it works!
- be simple to use
- provide packaging for the most common linux packaging systems (at very least deb and rpm)
- be distributed as a single binary
- reproducible results
- depend on the fewer external things as possible
- generate packages based on yaml files (maybe also json and toml?)
- be possible to use it as a lib in other go projects (namely goreleaser itself)
- support complex packages and power users
The first steps are to run nfpm init
to initialize a config file and edit
the generated file according to your needs:
The next step is to run nfpm pkg --target mypkg.deb
.
NFPM will guess which packager to use based on the target file extension.
And that's it!
You can run it with docker as well:
docker run --rm \
-v $PWD:/tmp/pkg \
goreleaser/nfpm pkg --config /tmp/pkg/foo.yml --target /tmp/pkg/foo.rpm
That's it!
You can look at the code of nfpm itself to see how to use it as a library, or, take a look at the nfpm pipe on GoReleaser.
Attention: GoReleaser
deb
packager only compiles with go1.10+.
- both deb and rpm packaging are working but there are some missing features.
Thanks to the fpm authors for fpm, which inspires nfpm a lot.
Donations are very much appreciated! You can donate/sponsor on the main goreleaser opencollective! It's easy and will surely help the developers at least buy some ☕️ or 🍺!
Would you like to fix something in the documentation? Feel free to open an issue.