Informer posts I wrote about packaging your software as RPM packages for a variety of use cases. The other big binary packaging system on Linux systems is DEB for Debian, Ubuntu and friends. Both serve the purpose of convenient distribution, installation and update of binary software artifacts. They define their dependencies and describe what the package provides.
How do you provide your software as DEB packages?
The master guide to debian packaging can be found at https://www.debian.org/doc/manuals/maint-guide/ . It is a very comprehensive guide spanning many pages and providing loads of information. Building a usable package of your software for your clients can be a matter of minutes if you know what to do. So I want to show you the basic steps, for refinement you will need to consult the guide or other resources specific to the software you want to package. For example there are several guides specific to packaging of software written in Python . I find it hard to determine what the current and recommended way to debian packages for python is because there are differing guides over the last 10 years or so. You may of course say “Just use pip for python”
The basic tools for building debian packages are
. To check the resulting package you will need
in addition. You can install them and basic software build tools using:
sudo apt-get install build-essential dh-make debhelper lintian
The python packaging system uses
and several scripts under the hood to help building the binary packages out of source tarballs.
Your first package
First you need a tar-archive of the software you want to package. With python setuptools you could use
python setup.py sdist
to generate the tarball. Then you run dh_make on it to generate metadata and the package build environment for your package. Now you have to edit the metadata files, namely
control, copyright, changelog
. Finally you run
to generate the package itself. Here is an example of the necessary commands:
mkdir hello-deb-1.0 cd hello-deb-1.0 dh_make -f ../hello-deb-1.0.tar.gz # edit deb metadata files vi debian/control vi debian/copyright vi debian/changelog dpkg-buildpackage -us -uc lintian -i -I --show-overrides hello-deb_1.0-1_amd64.changes
file roughly resembles RPMs SPEC file. Package name, description, version and dependency information belong there. Note that debian is very strict
when it comes to naming of packages, so make sure you use the pattern
for the archive and that it extracts into a corresponding directory without the extension, e.g.
If everything went ok several files were generated in your base directory:
The package itself as
A file containing the changelog and checksums between package versions and revisions ending with
A file with the package description ending with
A tarball with the original sources renamed according to debian convention
hello-deb_1.0.orig.tar.gz(note the underscore!)
Going from here
Of course there is a lot more to the tooling and workflow when maintaining debian packages. In future posts I will explore additional means for improving and updating your packages like the quilt patch management tool , signing the package, symlinking, scripts for pre- and post-installation and so forth.