wiki:Debathenificator

From time to time, we find that modifying configuration files isn't enough to enact the changes we need to build a Debathena system. In cases like these, we need to modify the packages themselves that we're configuring. In the past, some reasons we've needed to modify upstream-distributed packages include:

  • Enabling krb4 support in evolution-data-server or alpine before the mail servers supported krb5 authentication.
  • Modifying the lprng package, renaming commands like lpr to mit-lpr so they don't conflict with the cups-bsd package.

One of the great strengths of the config-package-dev development model is that mechanisms such as DEB_TRANSFORM_FILES allow you express just your changes, as opposed to the entire result. The Debathenificator framework was designed to serve this purpose for modifying whole packages.

The Debathenificator framework itself lives in source:/trunk/debathena/third/common, and individual Debathenified packages live in other subdirectories of source:/trunk/debathena/third.

A consumer of the Debathenificator is a single shell script, possibly with some ancillary files. The script is called debathenify-PACKAGE, where PACKAGE is the package being debathenified (c.f. source:/trunk/debathena/third/lprng/debathenify-lprng). Each debathenify script MUST do 4 things: set a name variable, set a daversionappend variable, define a hack_package shell function, and source ../common/debathenificator.sh. Here is a basic example:

#!/bin/sh
set -e

name=lprng
daversionappend=debathena1

hack_package() {
    add_changelog "Rebuild for Evan's amusement."
}

. ../common/debathenificator.sh