A tool for building software packages with fpm.
The fpm project is really nice for
building operating system packages like .deb
and .rpm
. But it only helps
you to create the packages and doesn't help you with actually building the
software.
fpm-cookery provides an infrastructure to automatically build software based on recipes. It's heavily inspired and borrows code from the great homebrew and brew2deb projects. The OpenBSD Ports System is probably another source of inspiration since I've been working with that for quite some time
It is using fpm to create the actual packages.
Please find the documentation page here: https://fpm-cookery.readthedocs.org/
The documentation source is located in the docs/
folder. Pull requests welcome! :)
Hosting and building of the documentation is provided by the great Read the Docs project!
Building operating system packages for Debian/Ubuntu and RedHat using the official process and tools is pretty annoying if you just want some custom packages. Jordan's fpm removes the biggest hurdle by providing a simple command line tool to build packages for different operating systems.
Before you can use fpm to create the package, you have to build the software, though. In the past I've been using some shell scripts and Makefiles to automate this task.
Then I discovered Aman's brew2deb which is actually homebrew with some modifications to make it work on Linux. (only Debian/Ubuntu for now) Since homebrew was designed for Mac OS X, I thought it would be nice to have a "native" Linux tool for the job.
fpm-cookery is my attempt to build such a tool.
fpm-cook
command.fpm-cook
command.fpm-cookery is available as a gem.
$ gem install fpm-cookery
Create a recipe directory or change into an existing recipe tree.
$ cd recipes/redis
$ fpm-cook clean
$ fpm-cook
You can install the development dependencies with bundle install
and run
the included test suite with rake test
.
It can build the included recipes/redis/recipe.rb
and
recipes/nodejs/recipe.rb
recipes. (both imported from brew2deb)
See CAVEATS for an incomplete list of missing stuff.
The following is an example recipe. I have some more in my recipe collection over here.
class Redis < FPM::Cookery::Recipe
homepage 'http://redis.io'
source 'http://redis.googlecode.com/files/redis-2.2.5.tar.gz'
md5 'fe6395bbd2cadc45f4f20f6bbe05ed09'
name 'redis-server'
version '2.2.5'
revision '1'
description 'An advanced key-value store.'
conflicts 'redis-server'
config_files '/etc/redis/redis.conf'
def build
make
inline_replace 'redis.conf' do |s|
s.gsub! 'daemonize no', 'daemonize yes'
end
end
def install
# make :install, 'DESTDIR' => destdir
var('lib/redis').mkdir
%w(run log/redis).each {|p| var(p).mkdir }
bin.install ['src/redis-server', 'src/redis-cli']
etc('redis').install 'redis.conf'
etc('init.d').install 'redis-server.init.d' => 'redis-server'
end
end
fpm-cookery borrows lots of ideas and also code from the homebrew and brew2deb projects.
The BSD 2-Clause License - See LICENSE for details