Package: apt
Version: 0.8.10.3+squeeze1
Severity: important
Hi,
while trying to debug some squeeze2wheezy distupgrade problems (packages
being kept at the squeeze version instead of removing something
obsolete), I noticed the output from
Debug::pkgProblemResolver::ShowScores is missing some relevant packages:
those with a score of 0. From a rather random logfile (full log
attached):
1 libsigsegv2 [ amd64 ] < none -> 2.9-4 > ( libs )
1 krb5-locales [ amd64 ] < none -> 1.10.1+dfsg-3 > ( localization )
1 libdb4.7 [ amd64 ] < 4.7.25-9 > ( libs )
1 libdb4.8 [ amd64 ] < 4.8.30-2 > ( libs )
1 gnupg-curl [ amd64 ] < none -> 1.4.12-7 > ( utils )
1 rsyslog [ amd64 ] < none -> 5.8.11-2 > ( admin )
1 libsasl2-modules [ amd64 ] < none -> 2.1.25.dfsg1-6 > ( libs )
1 iptables [ amd64 ] < none -> 1.4.14-3 > ( net )
-1 makedev [ amd64 ] < 2.3.1-89 -> 2.3.1-92 > ( admin )
-1 libperl5.10 [ amd64 ] < 5.10.1-17squeeze3 > ( libs )
Starting 2
Investigating (0) resource-agents [ amd64 ] < none -> 1:3.9.2-5+deb7u1 > ( admin )
Broken resource-agents:amd64 Conflicts on cluster-agents [ amd64 ] < 1:1.0.3-3.1 -> 1:1.0.3-4 > ( admin ) (<= 1:1.0.4-1)
Considering cluster-agents:amd64 0 as a solution to resource-agents:amd64 0
Holding Back resource-agents:amd64 rather than change cluster-agents:amd64
Investigating (0) heartbeat [ amd64 ] < 1:3.0.3-2 -> 1:3.0.5-3 > ( admin )
Broken heartbeat:amd64 Depends on resource-agents [ amd64 ] < none -> 1:3.9.2-5+deb7u1 > ( admin )
Considering resource-agents:amd64 0 as a solution to heartbeat:amd64 0
Holding Back heartbeat:amd64 rather than change resource-agents:amd64
Investigating (0) libperl5.10 [ amd64 ] < 5.10.1-17squeeze3 > ( libs )
Broken libperl5.10:amd64 Depends on perl-base [ amd64 ] < 5.10.1-17squeeze3 -> 5.14.2-16 > ( perl ) (= 5.10.1-17squeeze3)
Considering perl-base:amd64 5150 as a solution to libperl5.10:amd64 -1
Removing libperl5.10:amd64 rather than change perl-base:amd64
Try to Re-Instate (1) heartbeat:amd64
Done
The following packages will be REMOVED:
libperl5.10
The following NEW packages will be installed:
heartbeat and resource-agents are bot not listed in the score output,
from the problemresolver output I conclude they have a score of 0.
Looking at apt's source code I see this in algorithms.cc:
if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
{
clog << "Show Scores" << endl;
for (pkgCache::Package **K = PList; K != PEnd; K++)
if (Scores[(*K)->ID] != 0) // <<<=== ***
{
pkgCache::PkgIterator Pkg(Cache,*K);
clog << Scores[(*K)->ID] << ' ' << Pkg << std::endl;
}
}
so the problem seems to exist still in the current version.
There may be a legitimate reason not to show score 0 if this would list
the other 35000 packages that were not even considered by apt ... but
also for the non-0 scores there seem to be only the "interesting" aka
considered packages to be listed.
Also no uninstalled package can have a score of 0 by default if I
understand the scoring correctly:
Settings used to calculate pkgProblemResolver::Scores::
Important => 3
Required => 2
Standard => 1
Optional => -1
Extra => -2
Essentials => 100
InstalledAndNotObsolete => 1
Depends => 1
Recommends => 1
AddProtected => 10000
AddEssential => 5000
For heartbeat and resource-agents I would compute
heartbeat: Optional (= -1) + InstalledAndNotObsolete (= 1) = 0
resource-agents: Optional (= -1) + Depends (= 1) * 1 (heartbeat) = 0
Andreas
PS: I'd like to have a patch for squeeze's apt s.t. I can rebuild it
locally and use this in the squeeze chroot to get more correct debug
output (and no, I don't want anything that decides differently that
squeeze's apt)
Attachment:
heartbeat_1:3.0.5-3.log.gz
Description: GNU Zip compressed data