[buildd-tools-devel] Bug#633777: sbuild: virtual dependency resolver broken?

Thibaut VARENE varenet at debian.org
Wed Jul 13 15:38:16 UTC 2011


Package: sbuild
Version: 0.60.0-2squeeze1
Severity: normal

Hi, it's me again ;P

I've recently discovered that some of my packages stopped building because of the following error:

Checking for source dependency conflicts...
E: Package 'libjpeg-dev' has no installation candidate
libjpeg-dev is a virtual package provided by: 
Using  (no default, using first one)
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 339.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 340.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 341.
Use of uninitialized value $command in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 353.
Use of uninitialized value in exec at /usr/share/perl5/Sbuild/Chroot.pm line 354.
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::compare
Installing positive dependencies: debhelper docbook-xml docbook-xsl ladspa-sdk libaa1-dev libasound2-dev libaudio-dev libcaca-dev libcdparanoia-dev libdirectfb-dev libdts-dev libdvdnav-dev libdvdread-dev libenca-dev libfaad-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgif-dev libgl1-mesa-dev libjack-dev libjpeg-dev liblircclient-dev liblivemedia-dev liblzo2-dev libmpcdec-dev libncurses5-dev libopenal-dev libpng12-dev libpulse-dev libschroedinger-dev libsdl1.2-dev xsltproc libsmbclient-dev libspeex-dev yasm zlib1g-dev libtheora-dev libvdpau-dev libvorbis-dev libvorbisidec-dev libx11-dev libxext-dev libxinerama-dev libxv-dev libxvmc-dev libxxf86dga-dev libxxf86vm-dev pkg-config python vstream-client-dev x11proto-core-dev ccache quilt
Reading package lists...
Building dependency tree...
Reading state information...
Package libjpeg-dev is a virtual package provided by:
E: Package 'libjpeg-dev' has no installation candidate
libjpeg-dev is a virtual package provided by: 
Using  (no default, using first one)
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 339.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 340.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 341.
Use of uninitialized value $command in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 353.
Use of uninitialized value in exec at /usr/share/perl5/Sbuild/Chroot.pm line 354.
Reading package lists...
Building dependency tree...
Reading state information...
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::compare
apt-get failed.
Package installation failed

Investigating this, I noticed that sbuild calls apt-get with '-q' in -s mode:
D: Running command: /usr/bin/schroot -d / -c sid-ia64-sbuild-3667d049-42aa-43a0-88ac-f064fee342c4 --run-session -q -u root -p -- /usr/bin/apt-get --purge -o DPkg::Options::=--force-confold -q -s install debhelper docbook-xml docbook-xsl ladspa-sdk libaa1-dev libasound2-dev libaudio-dev libcaca-dev libcdparanoia-dev libdirectfb-dev libdts-dev libdvdnav-dev libdvdread-dev libenca-dev libfaad-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgif-dev libgl1-mesa-dev libjack-dev libjpeg-dev liblircclient-dev liblivemedia-dev liblzo2-dev libmpcdec-dev libncurses5-dev libopenal-dev libpng12-dev libpulse-dev libschroedinger-dev libsdl1.2-dev xsltproc libsmbclient-dev libspeex-dev yasm zlib1g-dev libtheora-dev libvdpau-dev libvorbis-dev libvorbisidec-dev libx11-dev libxext-dev libxinerama-dev libxv-dev libxvmc-dev libxxf86dga-dev libxxf86vm-dev pkg-config python vstream-client-dev x11proto-core-dev ccache quilt

Turns out -q apparently inhibits apt-get from displaying the providers of the virtual package:

buildd at envy:~/build$ /usr/bin/schroot -d / -c sid-ia64-sbuild -q -u root -p -- /usr/bin/apt-get --purge -o DPkg::Options::=--force-confold -q -s install libjpeg-dev
Reading package lists...
Building dependency tree...
Reading state information...
Package libjpeg-dev is a virtual package provided by:
E: Package 'libjpeg-dev' has no installation candidate
buildd at envy:~/build$ /usr/bin/schroot -d / -c sid-ia64-sbuild -q -u root -p -- /usr/bin/apt-get --purge -o DPkg::Options::=--force-confold -s install libjpeg-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libjpeg-dev is a virtual package provided by:
  libjpeg8-dev 8c-2
  libjpeg62-dev 6b1-1
You should explicitly select one to install.

So, I tried editing /usr/share/perl5/Sbuild/Build.pm:1136 to remove the '-q' bit, but unfortunately it didn't fix the issue.

I've checked that the apt-get command did NOT include '-q', and that was right. Still, for some reason, either sbuild doesn't get the output from apt-get, or apt-get isn't showing its
expected behaviour when run through sbuild, because I still got the same error messages. Adding a 'print("pipe: $_");' at line 1147, in the "while(<pipe>)" block, shows:

Checking for source dependency conflicts...
pipe: Reading package lists...
pipe: Building dependency tree...
pipe: Reading state information...
pipe: Package libjpeg-dev is a virtual package provided by:
E: Package 'libjpeg-dev' has no installation candidate
libjpeg-dev is a virtual package provided by: 
Using  (no default, using first one)
Use of uninitialized value $selected in concatenation (.) or string at /usr/share/perl5/Sbuild/Build.pm line 1179.
Use of uninitialized value $aptcommand[59] in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 379.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 235.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 339.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 340.
Use of uninitialized value in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 341.
Use of uninitialized value $command in join or string at /usr/share/perl5/Sbuild/Chroot.pm line 353.
Use of uninitialized value in exec at /usr/share/perl5/Sbuild/Chroot.pm line 354.
pipe: Reading package lists...
pipe: Building dependency tree...
pipe: Reading state information...
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::compare
Installing positive dependencies: [snip]

sbuild never gets the list of providers, and thus cannot pick any.

I *think* this might be a recent apt-get bug since I had the same issue with sbuild 0.58.2 a couple days before upgrading, but maybe it's also a new "expected" behaviour from apt-get and
thus sbuild should get fixed...

In any case, the fact is it breaks the virtual resolver for packages with multiple providers (i've tested that when there's only one provider, there is no problem. I suppose apt-get does
the right thing then).

HTH
T-Bone

-- System Information:
Debian Release: 6.0.2
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: ia64

Kernel: Linux 2.6.32.40 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash

Versions of packages sbuild depends on:
ii  adduser                3.112+nmu2        add and remove users and groups
ii  libsbuild-perl         0.60.0-2squeeze1  Tool for building Debian binary pa
ii  perl                   5.10.1-17squeeze2 Larry Wall's Practical Extraction 
ii  perl-modules           5.10.1-17squeeze2 Core Perl modules

Versions of packages sbuild recommends:
ii  debootstrap              1.0.26+squeeze1 Bootstrap a basic Debian system
ii  fakeroot                 1.14.4-1        Gives a fake root environment

Versions of packages sbuild suggests:
pn  deborphan                     <none>     (no description available)
ii  wget                          1.12-2.1   retrieves files from the web

-- debconf information:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory





More information about the Buildd-tools-devel mailing list