[buildd-tools-devel] Bug#700522: sbuild: Support for locally-built build dependencies

Geoffrey Thomas gthomas at mokafive.com
Wed Feb 13 21:01:57 UTC 2013


Package: sbuild
Version: 0.63.2-1
Severity: wishlist
Tags: patch

Hi maintainers,

When I'm backporting packages locally with the help of sbuild, it's often 
the case that I need to backport a build-dependency too. Let's say that 
package foo version 2.0 depends on libbar1 (>= 2.0~). If I backport 
libbar1, I need to make it available to the build of foo.

One way to do this is to configure my local schroot to have e.g. ~/apt 
configured as a repository. This might work okay on a personal machine, 
provided I remember to be conscientious about cleaning out ~/apt between 
builds and pass --apt-update, but I'm running into a situation at work 
where I'm using the same build machine for two different products (one of 
which should not be built with a backported libbar1), and cleaning out a 
local apt repository would be painful and also enforce unnecessary 
serialization on builds.

One way to do this would be to have multiple schroots for building the two 
products, only one of which has the local apt repo. This seems like a 
waste of space.

Attached is a patch that provides the "--add-package" option to sbuild, 
which makes a .deb from the host system available to apt in the build 
chroot for use when resolving build dependencies. Concretely, this means I 
can do something like

sbuild -d stable libbar1_2.0-1.dsc
sbuild -d stable --add-package=libbar1_2.0-1_amd64.deb foo_2.0-1.dsc

with non-hacked-up schroots, and have things work the way I expect.

The implementation of this patch simply copies the .deb into the directory 
for the local archive (for build-dependency resolution). This makes it a 
very small patch, and works out fine because it specifically is needed for 
build-dependency resolution. I'm not positive this is the right approach, 
though, and would be willing to write a longer patch.

Another feature along related lines would be "--add-repository", e.g.

sbuild -d stable --add-repository="file:/home/geofft/apt ./" foo_2.0-1.dsc
or
sbuild -d stable --add-repository="http://local-archive/apt stable myrepo" foo_2.0-1.dsc

I have a naive implementation of this, which doesn't actually work because 
`apt-get update` is not run after the local archive is created (which the 
manpage mentions). One approach would be to instead implement this 
somewhere before --apt-update executes, and have this imply --apt-update. 
Another would be to add functionality to apt to update only a single repo, 
which the manpage mentions would be useful (and I think I'd like that 
functionality for its own sake, anyway). Do you have thoughts on which 
approach would be better?

Both patches are available on my github "add-package" branch, although 
this is more intended for feedback than merge:
https://github.com/geofft/sbuild/commits/add-package

Thanks,
-- 
Geoffrey Thomas
gthomas at mokafive.com



More information about the Buildd-tools-devel mailing list