Creating Ubuntu packages with checkinstall

Many guides can be found on the net about software packaging for various distributions. This is not an attempt to create the next one or maybe the best one. Is just a piece of scratch paper where I would like to fix my procedure to create Tagsistant packages and if anyone will find it useful… nice to know.

Packaging for Debian and its derivatives like Ubuntu is very complex because the underlying packaging system is flexible enough to handle a lot of situations. But this imposes an extra burden on the developer which would just like to quickly have its software packaged for a distro. That’s what I’ve faced when I decided to release Tagsistant for Ubuntu to ease its adoption.

After some explorations I’ve stumbled upon checkinstall which is a useful package to track software installation and produce packages. I’ve installed it on Ubuntu with apt and in minutes I’ve produced my first package. First I’ve created a file named description-pak in Tagsistant root directory containing a description of the package: “Semantic filesystem with tags, relations, autotagging and deduplication”.

Then I used ./configure –prefix=/usr to prepare Tagsistant for a system install. Then I’ve used checkinstall to produce the packages:

$ sudo checkinstall

This is the set of default values checkinstall proposes:

This package will be built according to these values: 

0 -  Maintainer: [ root@wallace ]
1 -  Summary: [ Semantic filesystem with tags, relations, autotagging and deduplication ]
2 -  Name:    [ tagsistant ]
3 -  Version: [ 0.8 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ tagsistant-0.8 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ tagsistant ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Note the Summary which contains the phrase from description-pak. I’ve changes some of the default values to:

0 -  Maintainer: [ Tx0 <tx0@strumentiresistenti.org> ]
1 -  Summary: [ Semantic filesystem with tags, relations, autotagging and deduplication ]
2 -  Name:    [ tagsistant ]
3 -  Version: [ 0.8 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ filesystem ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ tagsistant-0.8 ]
9 -  Alternate source location: [  ]
10 - Requires: [ libglib2.0-0,libdbi1,libdbd-mysql,libdbd-sqlite3,libextractor-plugins,libfuse2,libextractor1c2a ]
11 - Provides: [ tagsistant ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Then I’ve pressed ENTER to start the installation. I’ve got he list of dependencies at point 10 from the dependencies I had to install to let Tagsistant compile. This should be obvious for any developer depending on the requirements of its own software.

checkinstall produces a .deb file compatible for the platform it was runt on. I’ve installed several virtual machines to have all the environments I would like to publish Tagsistant for: 12.04 32bit, 12.04 64bit, 14.04 32bit and 14.04 64bit.