#debian #packaging #versioning #metadata #pack

app bulk

A simple tool for making deb packages, repositories, and update version numbers

4 releases

Uses old Rust 2015

0.4.9 Nov 10, 2017
0.4.7 Jul 20, 2016
0.4.6 Jun 16, 2016
0.4.2 Jun 4, 2016

#953 in Development tools

MIT license

2.5K SLoC

==== Bulk

Bulk is a super-simple packaging utility. It's similar to fpm_ but implemented in rust.

It does three things for you:

  • Makes directory of files into deb package
  • Maintains a number of repos (stable, testing...) from list of packages
  • Updates your version numbers

.. _fpm: https://github.com/jordansissel/fpm

:Status: Alpha


Default packaging tools for debian are too complex. Also I wanted:

  1. Simple to install zero-dependency tool (comparing to fpm_)
  2. Experiment a little bit with reproducible packages (i.e. omit timestamps from a package)
  3. Simple utility to maintain (multiple) repositories
  4. Add tiny wrapper around vagga to actually build the packages for all distributions by single command

It turned out that all functionality I needed from fpm_ could be reimplemented in a night, so we have a new tool, ready for the new experiments.


Bulk should be simple. While we may lift few limitation in future versions we don't aim to support all the features.

Limitations are:

  1. No install scripts
  2. All files owned by root and no timestamps
  3. No devices, sockets, empty dirs and other possible habitants of tar/deb archive
  4. Limited support of package metadata (focusing on common between different linux distributions)


Currently we provide static binary for x86_64:

wget http://files.zerogw.com/bulk/bulk-0.4.9.tar.gz
tar -xzf bulk-0.4.9.tar.gz -C /

Or you can install it with cargo:

cargo install bulk

This will install bulk in /usr/bin. Ubuntu packages will be available shortly.

How To Use

Build program and install to some directory, say pkg. Put some metadata into bulk.yaml. Then pack it into a debian package::

bulk pack --config bulk.yaml --dir pkg --dest-dir dist

And you will get a package in dist directory. You may find the example bulk.yaml in this repository.

Building Packages

Just a few examples on how to prepare things to be packaged. With autotools it looks like this::

./configure --prefix=/usr
rm -rf pkg
make install DESTDIR=$(pwd)/pkg
bulk pack --config bulk.yaml --dir pkg --dest-dir dist

Or with new cargo install::

rm -rf pkg
cargo install PACKAGE_NAME --root ./pkg/usr
rm pkg/usr/.crates.toml
bulk pack --config bulk.yaml --dir pkg --dest-dir dist

This way you may package crate from crates.io.

======= License

Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~470K SLoC