Hi!

On Thu, 2018-10-11 at 19:56:46 +0200, Holger Levsen wrote:
> Package: dpkg
> Version: 1.18.25
> Severity: important

> on June 28th 2018 was the last successful test of
> https://jenkins.debian.net/job/chroot-installation_stretch_install_education-mathematics_upgrade_to_buster/
> which tests the installation of the education-mathmatics meta-package on
> a clean stretch install (in a chroot) and then upgrades this chroot to
> buster. Since July 7th 2018 this test is failing...
> 
> As I read
> https://jenkins.debian.net/job/chroot-installation_stretch_install_education-mathematics_upgrade_to_buster/35/consoleFull
> the upgrade is done using dpkg 1.8.25, however I'm not fully sure the
> bug is coming from dpkg...
> 
> The failure is (happening when upgrading packages to buster):
> 
> Setting up kalgebra (4:17.08.3-2) ...
> dpkg: ../../src/packages.c:245: process_queue: Assertion `dependtry <= 4' 
> failed.
> E: Sub-process /usr/bin/dpkg exited unexpectedly
> 
> Feedback much appreciated as I'm lost here. Also maybe this bug should
> have severity 'serious' as it breaks upgrades to Buster?!?

Just in case this is helpful in the future, I've reproduced this now,
by using in addition:

  ,--- /etc/dpkg/dpkg.cfg.d/00db-git ---
  post-invoke "cd /var/lib/dpkg && git add -A && git commit -m 'Committing dpkg 
db to git' || true"
  `---

  ,--- /etc/dpkg/dpkg.cfg.d/01debug ---
  debug 77777
  `---

And an initial:

  $ cd /var/lib/dpkg
  $ git init
  $ git add -A
  $ git commit -m 'Initial import'

Then, first, there's a bug (normal probably) in dpkg with the
assert/internal-error, which should be a proper error message, this
needs to be fixed, and I think there's one or two bugs about just that.
Then, the current reporting in the buster internal error message still
sucks, so I'll try to improve that too, to:

  - Print the current processed package and in the ones in the queue.
  - Print the command-line options used to invoke dpkg, or at least
    the state of the --[no-]triggers option, and whether we were
    called with a --pending or an explicit list of packages.
  - Recommend running «dpkg --audit» and attaching that too, while
    reporting the problem.

But in any case the real cause for this seem to be just the usual trigger
cycle problem (serious, for the offending cycle introducer), that gets
abandoned and resets the state of dbus, which is never tried to get
configure again, as specified.

The trigger happens with this:

  ,---
  […]
  D000001: process queue pkg gconf2:amd64 queue.len 168 progress 53, try 2
  D010000: trigproc gconf2:amd64
  D010000: check_triggers_cycle pnow=gconf2:amd64
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=dbus
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=dbus 
tortoisetrig=/etc/dbus-1/system.d
  D040000: tortoise_not_in_hare pnow=gconf2 tortoise=dbus 
tortoisetrig=/etc/dbus-1/system.d haretrig=/etc/dbus-1/system.d
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=shared-mime-info
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=shared-mime-info 
tortoisetrig=/usr/share/mime/packages
  D040000: tortoise_not_in_hare pnow=gconf2 tortoise=shared-mime-info 
tortoisetrig=/usr/share/mime/packages haretrig=/usr/share/mime/packages
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=libvlc-bin:amd64
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=libvlc-bin:amd64 
tortoisetrig=/usr/lib/x86_64-linux-gnu/vlc/plugins
  D040000: tortoise_not_in_hare pnow=gconf2 tortoise=libvlc-bin:amd64 
tortoisetrig=/usr/lib/x86_64-linux-gnu/vlc/plugins 
haretrig=/usr/lib/x86_64-linux-gnu/vlc/plugins
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=libc-bin
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=libc-bin 
tortoisetrig=ldconfig
  D040000: tortoise_not_in_hare pnow=gconf2 tortoise=libc-bin 
tortoisetrig=ldconfig haretrig=ldconfig
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=dictionaries-common
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=dictionaries-common 
tortoisetrig=aspell-autobuildhash
  D040000: tortoise_not_in_hare pnow=gconf2 tortoise=dictionaries-common 
tortoisetrig=aspell-autobuildhash haretrig=aspell-autobuildhash
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=gconf2
  D020000: tortoise_not_in_hare pnow=gconf2 tortoise=gconf2 
tortoisetrig=/usr/share/gconf/schemas
  D040000: tortoise_not_in_hare pnow=gconf2 tortoise=gconf2 
tortoisetrig=/usr/share/gconf/schemas haretrig=/usr/share/gconf/schemas
  dpkg: cycle found while processing triggers:
   chain of packages whose triggers are or may be responsible:
    shared-mime-info -> gconf2
   packages' pending triggers which are or may be unresolvable:
    dbus: /etc/dbus-1/system.d
    shared-mime-info: /usr/share/mime/packages
    libvlc-bin:amd64: /usr/lib/x86_64-linux-gnu/vlc/plugins
    libc-bin: ldconfig
    dictionaries-common: aspell-autobuildhash
    gconf2: /usr/share/gconf/schemas
  D010000: check_triggers_cycle pnow=gconf2:amd64 giveup=dbus:amd64
  dpkg: error processing package dbus (--configure):
   triggers looping, abandoned
  […]
  `---

I see the following await triggers in the system:

  ,---
  triggers/File:/etc/sgml sgml-base
  triggers/File:/usr/share/sgml sgml-base
  triggers/File:/usr/share/xml sgml-base
  triggers/File:/usr/share/glib-2.0/schemas libglib2.0-0:amd64
  triggers/File:/usr/share/gconf/defaults gconf2
  triggers/File:/usr/share/gconf/mandatory gconf2
  triggers/File:/usr/share/gconf/schemas gconf2
  triggers/ldconfig:libc-bin
  triggers/update-ca-certificates:ca-certificates
  triggers/update-ca-certificates-fresh:ca-certificates
  triggers/update-sgmlcatalog:sgml-base
  `---

After some quick digging, I'm not able to spot any obvious cycle here,
either I'm missing it, or perhaps a required package to resolve one of
the cyles is not in the processing queue. I might try to improve the
«triggers looping, abandoned» error to perhaps also print the
processing queue contents with their current states.


The problematic state just before the assert is this:

  ,--- dpkg --audit ---
  The following packages have been unpacked but not yet configured.
  They must be configured using dpkg --configure or the configure
  menu option in dselect for them to work:
   avahi-daemon         Avahi mDNS/DNS-SD daemon
   libnss-mdns:amd64    NSS module for Multicast DNS name resolution

  The following packages are only half configured, probably due to problems
  configuring them the first time.  The configuration should be retried using
  dpkg --configure <package> or the configure menu option in dselect:
   dbus                 simple interprocess messaging system (daemon and 
utilitie

  The following packages have been triggered, but the trigger processing
  has not yet been done.  Trigger processing can be requested using
  dselect or dpkg --configure --pending (or dpkg --triggers-only):
   dictionaries-common  spelling dictionaries - common utilities
   libc-bin             GNU C Library: Binaries
   libvlc-bin:amd64     tools for VLC's base library
   tex-common           common infrastructure for building and installing TeX
  `---

From the debug log, we also see that dpkg got stuck with avahi-daemon
and libnss-mdns:amd64 in the queue. libnss-mdns:amd64 depends on
avahi-daemon:

  ,---
  […]
  D000040: checking dependencies of libnss-mdns:amd64 (- <none>)
  D000400:   checking group ...
  D000400:     checking possibility  -> avahi-daemon
  D000400:       checking non-provided pkg avahi-daemon:amd64
  D000400:       unpacked/halfconfigured, defer
  D000400:     found 1
  D000400:   found 1 matched 0 possfixbytrig -
  […]
  D000040: ok 1 msgs >><<
  `---

And avahi-daemon depend on dbus:

  ,---
  […]
  D000040: checking dependencies of avahi-daemon:amd64 (- <none>)
  […]
  D000400:   checking group ...
  D000400:     checking possibility  -> dbus
  D000400:       checking non-provided pkg dbus:amd64
  D000400:       unpacked/halfconfigured, defer
  D000400:     found 1
  D000400:   found 1 matched 0 possfixbytrig -
  […]
  D000040: ok 1 msgs >><<
  `---

And dbus as seen from «dpkg --audit» is half-configured, and was not
in the processing queue, so dpkg was unable to make progress.

After the assert/internerr, if you just run «dpkg --configure --pending»
dpkg will be able to make normal progress.

Thanks,
Guillem

Reply via email to