welcome: please sign in

Revision 1 as of 2008-01-15 02:56:52

Clear message
Edit

DebianPackaging

This page describes how to make custom Debian packages for HCoop.

TableOfContents()

1. Making a new custom package

If you want to make changes to an existing Debian package, and we haven't made our own custom package before, then do the following.

mkdir -p /afs/hcoop.net/common/debian/<pkg>/<upstream-version>
cd /afs/hcoop.net/common/debian/<pkg>/<upstream-version>
# Browse http://packages.debian.org/<pkg> and find a link to a dsc file
dget -x http://path/to/file.dsc
# Or if you already have the .dsc, .diff.gz, and orig tarball downloaded,
# then do dpkg-source -x path/to/file.dsc instead.
git-import-dsc --debian-branch=debian <pkg>-<ver>.dsc

This last step creates a subdirectory named after the package. The subdirectory has the complete source, including the ./debian directory. The original tarball (without ./debian) is in the "upstream" branch, and the original stuff plus Debian changes would be in the "debian" branch, and a copy of the contents of the "debian" branch is placed in the "master" branch. You will be in the "master" branch now.

Make your HCoop-specific changes (preferably in an incremental and atomic fashion) and commit them using git.

2. Building a package

First, make sure you are on the "master" branch by running:

git branch -l

If you see an asterisk by "master", you're on the right branch.

If we want to build the package with some uncommitted changes, as a sanity check, then do:

When it comes time to test the changes, build the package using:

The packages will be built and placed in the parent directory. To indicate that we are done making changes to this particular version of the Debian package, tag it with:

This makes the package version show up when you do "git tag -l", for easy diffing and viewing.

3. New package from Debian etch

When a new Debian package comes out, and we want to incorporate their changes, the routine would look something like this (untested):

The rebase command checks out the debian changes, and then replays our changes on top, committing the result if there are no conflicts (or printing the command to call after resolving conflicts, if conflicts exist). This conceptually indicates that we want to stick close to Debian's packaging, with a few necessary modifications for our setup.

A wrapper script would be handy to do much of the heavy lifting in the first half of the above list. The work flow could then be:

4. New upstream package not yet in Debian etch

Write me.