[buildd-tools-devel] Bug#865541: Bug#865541: sbuild --apt-distupgrade should not remove build-essential

Raphael Hertzog hertzog at debian.org
Sun Jun 25 20:32:41 UTC 2017


Hi,

On Sun, 25 Jun 2017, Johannes Schauer wrote:
> > It happens that the repository that I was using had a broken libc6-dev (until
> > I updated linux-libc-dev to a newer version) but since libc6-dev was already
> > installed in the build chroot, sbuild should be able to build the package
> > anyway and just be happy to keep libc6 on hold instead of force-upgrading it
> > by removing build-essential.
> 
> Yes, but by having the APT_DISTUPGRADE configuration option set to 1 (the
> default), the user instructed sbuild to do a "apt-get distupgrade" before the
> build. Imagine a user who not just implicitly (through the default) but
> explicitly (for example via the ~/.sbuildrc) instructed sbuild to do a
> distupgrade but then sbuild doesn't do that and some packages don't get
> upgraded. I think as a user explicitly requiring a distupgrade I would expect
> sbuild to fail if it cannot perform a distupgrade in a way that doesn't remove
> an important package like build-essential. So I don't think it would be a good
> solution to add code which by default does only part of a distupgrade.

Then it would make sense to not have APT_DISTUPGRADE=1 by default. Having sbuild
refusing to build in that situation is not really helpful either.

To me it seems perfectly fine to just emit a warning saying that the
distupgrade has not been made because it would have broken the chroot.

> > Note also that we are speaking of build daemons where our usual
> > interaction is just to upload a package... temporarily modifying the
> > sbuild configuration of the build daemon is painful.
> 
> Your problem sounds like a bootstrapping problem. You have a build-dependency
> cycle between two source packages where each package needs each other to be
> built. Thus, would a stage1 package built using build profiles not be able to
> solve your situation?

Huh... not really, I think you misunderstood, cf below.

> > This happens from time to time in Kali because we have forked linux (which
> > builds linux-libc-dev) but not glibc (which builds libc6-dev).  libc6-dev
> > embeds a >= dependency on linux-libc-dev on the version on which it was built
> > against and is thus non-installable in Kali until we have updated the
> > kernel...
> 
> So you are building src:glibc using a non-kali kernel?

I'm not building src:glibc, I'm importing it from Debian in kali-dev and
the run I run britney to create kali-rolling to ensure that broken
dependencies are detected and are not part of kali-rolling.

> Why is a >= dependency a problem? Isn't your fork of src:linux not having a
> higher version number than the version it comes from?

My fork of linux has a higher version number than in Debian, except that
updating the fork takes a bit of time and when glibc and the kernel
migrate together in testing (that's what we track) I get the updated glibc
immediately (because it's not forked) and we update our out-of-sync
package like once a week (or sooner when we see it creates migrations
problems).

> > I would "sbuild-update -d" to ensure that it doesn't remove
> > build-essential (assuming that's what sbuild calls when we use
> > --apt-distupgrade).
> 
> Assuring to not remove build-essential is a good idea but it wouldn't solve
> your problem if I would just ensure this by throwing an error if apt removes
> build-essential because it wants to dist-upgrade.

Indeed. I don't see why a warning would not be sufficient. Or doing it in
two steps "apt-get install build-essential, apt-mark hold build-essential,
apt-get dist-upgrade"

Cheers,
-- 
Raphaël Hertzog ◈ Debian Developer

Support Debian LTS: https://www.freexian.com/services/debian-lts.html
Learn to master Debian: https://debian-handbook.info/get/



More information about the Buildd-tools-devel mailing list