Comment 43 for bug 1295440

Revision history for this message
In , Harald Sitter (apachelogger) wrote :

Thanks guys, I found the issue.

To work around the issue you can use the following command or wait for Muon 2.1.3, which will be available in about 7 days:
sudo apt-get dist-upgrade

Analysis
=======
upgrades from nvidia-331.20 on xorgedgers will pull in bumblebee, bumblebee depends on primus depends on libprimus-libs-ia32:i386. However muon-updater cannot resolve libpriums-libs-ia32 because of the architecture difference.

In particular QApt::Package::isMultiArchDuplicate() apparently yields the wrong value. This is supposedly because it uses
> d->packageIter.Group().FindPkg()
rather than
> d->packageIter.Group().FindPreferredPkg()
which would yield the correct result. The function comments that it attempts to check whether /this/ is the best possible version of a multiarch package, which appears to not be what FindPkg is doing, rather it is checking whether it is the host architectures' duplicate package (i.e. in order to have the function return false the package needs to be :amd64 when running amd64...). However primus-libs-ia32 has no actual native version, there only is the i386 version, so isMultiArchDuplicate leads to it being discarded even tough it is the preferred package, or rather it is the only possible package.

Recommendation solution
a) use FindPreferredPkg inside isMultiArchDuplicate
b) kDebug() when a package is being discarded be it because of duplicatedness or other factors, to improve debugability of similar issues
c) evaluate whether discarding packages based on duplicatedness is even an acceptable thing to do in the update/upgrade use case

Also there's other weirdness with the updater exposed by this particular package lineup, needs separate investigation and doesn't seem related to the bug at hand though.