Hi!

On Thu, 2015-01-08 at 15:15:43 +0000, Iain Lane wrote:
> Package: dpkg
> Version: 1.17.23
> Severity: serious

> [ Reported as RC because it could make packages fail to install
>   correctly, but I don't have an instance in Debian handy, so feel free
>   to downgrade ]

I don't think this is a bug at all in dpkg, but see below.

> Since commit 9ee62ecfc8937f24a82805a424564997042dd984 ("Make the initial
> dependtry be 1 instead of 0"), dpkg will in some circumstances configure
> the dependencies of a package *after* configuring the package itself.

The only effect of that commit was that it removed a run stage from
the package processing queue, possibly affecting how packages are
ordered in some cases, which has exposed wrong assumptions (for example
in debootstrap). But any package depending on that specific ordering
was relying on undefined behavior.

> And you can reproduce like this, once you've got the dependencies
> installed

Thanks for the reproducer!

> (sid-amd64)root@vivid:/# dpkg --unpack --auto-deconfigure 
> /var/cache/apt/archives/default-jre-headless_2%3a1.7-52_amd64.deb 
> /var/cache/apt/archives/ca-certificates-java_20140324_all.deb 
> /var/cache/apt/archives/openjdk-7-jre-headless_7u71-2.5.3-2_amd64.deb 
> /var/cache/apt/archives/foo_1.0_all.deb
> […]
> (sid-amd64)root@vivid:/# dpkg --configure openjdk-7-jre-headless:amd64 
> ca-certificates-java:all default-jre-headless:amd64 foo:all
> Setting up default-jre-headless (2:1.7-52) ...
> Setting up foo (1.0) ...
> Setting up openjdk-7-jre-headless:amd64 (7u71-2.5.3-2) ...
> Setting up ca-certificates-java (20140324) ...
> […]
> 
> Let me know if you need any more info, like debugging output.
> 
> (If a solution isn't immediately apparent, is this commit safe to revert
> for the time being?)

The problem here is that there's a dependency cycle and dpkg breaks it
now in a different place due to the change in the processing queue. But
this has been a latent issue or an actual issue (depending on the
upgrade path) on the java packages. Here's the cycle:

  foo -Depends→ default-jre-headless | java6-runtime-headless
  default-jre-headless -Depends→ openjdk-7-jre-headless
  default-jre-headless -Provides→ java6-runtime-headless
  openjdk-7-jre-headless -Depends→ ca-certificates-java
  openjdk-7-jre-headless -Provides→ java6-runtime-headless
  ca-certificates-java -Depends→
    openjdk-6-jre-headless (>= 6b16-1.6.1-2) | java6-runtime-headless

And dpkg decides to do this (from the debug output), after having made
no progress so far:

,---
[…]
D000400: findbreakcyclerecursive openjdk-6-jre-headless  <- ca-certificates-java
D000400: findbreakcyclerecursive java6-runtime-headless  <- ca-certificates-java
D000400: findbreakcyclerecursive default-jre-headless:amd64  <- 
ca-certificates-java
D000400: findbreakcyclerecursive openjdk-7-jre-headless:amd64  <- 
default-jre-headless <- ca-certificates-java
D000040: found cycle
D000040: cycle broken at default-jre-headless:amd64 -> openjdk-7-jre-headless
[…]
D000001: process queue pkg default-jre-headless:amd64 queue.len 3 progress 1, tr
D000400: findbreakcyclerecursive default-jre-headless:amd64
D000400: findbreakcyclerecursive java-common:all  <- default-jre-headless
D000040: checking dependencies of default-jre-headless:amd64 (- <none>)
D000400:   checking group ...
D000400:     checking possibility  -> openjdk-7-jre-headless
D000400:       break cycle so ok and found
D000400:   found 3 matched 0 possfixbytrig -
D000400:   checking group ...
D000400:     checking possibility  -> java-common
D000400:       checking non-provided pkg java-common:all
D000400:       is installed, ok and found
D000400:     found 3
D000400:   found 3 matched 0 possfixbytrig -
D000040: ok 2 msgs >><<
D000040:     checking Breaks
D000400:      checking virtbroken java-runtime-headless
D000400:      checking virtbroken java2-runtime-headless
D000400:      checking virtbroken java5-runtime-headless
D000400:      checking virtbroken java6-runtime-headless
D000400:      checking virtbroken java7-runtime-headless
Setting up default-jre-headless (2:1.7-52) ...
`---

And that's why the Depends order is not preserved. This needs to be
reassigned and fixed somewhere in the Java packages.

Thanks,
Guillem


-- 
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to