In my previous post I drafted a rough idea how to add a feature to Debian that would bridge the gap between Debian as a Binary Distribution and any Source Distribution. The feature in question is giving users the chance to build customized Debian packages for specific feature sets. The possible use cases are simple:
Lets say Anthony User needs super-duper-tool with postgresql support. However this is a not so common use case and so the archive only has postgresql support. If he now wants to build a custom package, the process is „as simple“ as:
apt-get source super-duper-tool
apt-get build-dep super-duper-tool OR sudo mk-build-deps -r -i
(possibly try out which ./configure options are supported by super-duper-tool)
dpkg-buildpackage -us -uc
That is, to be honest lot of work. And the biggest problem about it is that you need to know all this, which is not really user knowledge.
The basic idea is that Anthony can do something like
deb-build-tool build super-duper-tool
and is done.
So the question is how could this be achieved?
- Define a set of common options (options should be consistent through all source packages, otherwise it makes not that much sense) that every package should support, if it is a supported feature by the package in question. This includes flags like mysql, postgresql, ldap and its no-equivalents (nomysql, nopostgresql) to negate it.
- Enable use of this common options in the package build process and that is really the hardest part. Defining a lot of ifneq..findstring constructs for 2-10 options per source package in any available source package is…. not…. a good approach. Luckily a lot of packages uses autoconf where enabling and disabling features is as easy as adding a –with-foo or –enable-foo option to the ./configure parameters. So we could write a wrapper that would handle these options. The debhelper scripts already have dh_auto_configure: Maybe this could get enhanced.
- If it does not exist: Write a tool to auto-build packages with DEB_BUILD_OPTIONS set by the user. Should automatically get the source, (optional: setup/update a pbuilder environment) and build it and optional install/upload it (to a user repository for example) .
Still, the idea is only a rough draft. There are still a lot of open questions/issues, for example:
- How to handle these feature flags in packages that don’t use autoconf
- How to enable these feature flags for packages that don’t use debhelpers
- Shall a central place for setting DEB_BUILD_OPTIONS exist (like it does for Gentoo, FreeBSD etc.) and if so: Where?
- How should packages define new build options, if those defined Debian-wide, aren’t enough?
- What about support? Do we support such custom builds of packages or will this be a support-on-good-will thing
Is anybody interested in pushing this idea forward? I’m happily interested in it and I know people who like the idea, too. But I can’t push this forward on my own all alone. Certainly the work won’t affect Lenny anymore, but considerable the time frame that is planned for Lenny+1 by the release team, this could be a feature for Lenny+1.