Allan Espinosa

Arbitrary files in fpm-built packages

2016 August 14

This approach was originally shared in the FPM Mailing list.

The example below creates a symlink file inside my ffi-rmzq-core debian package:

mq = FPM::Package::Gem.new
mq.input 'ffi-rzmq-core'

FileUtils.mkdir_p mq.staging_path 'var/lib/gems/2.1.0/gems/ffi-rzmq-core-1.0.5/ext'

mq.dependencies << "libzmq3"

# The actual shared object in the libzmq3 Debian package
FileUtils.ln_s '/usr/lib/x86_64-linux-gnu/libzmq.so.3.1.0', mq.staging_path('var/lib/gems/2.1.0/gems/ffi-rzmq-core-1.0.5/ext/libzmq.so')

mq.convert(FPM::Package::Deb).output './foo.deb'

The key to this approach is messing around with the FPM::Package#staging_path and insert the files you need there. In theory, you can merge two input package types in fpm by making them share the #staging_path. I will write a post about it once I used this approach in an actual project.