[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: How to trick my Debian in thinking that a package is not installed



Package: aptitude
Version: 0.6.2.1-2

  aptitude's resolver will *still* upgrade held packages, due to an
interaction between the dependency solver and unused package removal.
Unused packages are removed before dependencies get solved, and
sometimes the dependency solver has to put a package "back" at a newer
version.  Removing a package clears its hold flag, so when it comes back
it doesn't have one.

  Specifically, this seems to happen with exact versioned dependencies.
For instance, mono-runtime depends on mono-gac (= $BINARY_VERSION).  So
upgrading mono-runtime without mono-gac will cause mono-gac to be
removed, then dependency resolution kicks in and realizes that we need
mono-gac in order to keep mono-runtime.

  A temporary solution for you is to cancel the auto flag on any
package you hold.

  Long-term solutions in the code could include postponing dependency
resolution until after the resolver finishes (which could have
wide-ranging implications), refusing to remove unused held packages, and
somehow "remembering" the held flag on packages that were removed
because they were unused.

  Of these three solutions, I prefer the second one, refusing to remove
unused held packages.  It fits in with the intuitive meaning of "hold",
it's easy to implement, and it doesn't have a high risk of surprising
side-effects, since it only affects a fairly precisely defined set of
packages.  Essentially, it causes held packages to be added to the root
set (and that's the best implementation, I think: modify aptitude's
custom root set function to include held packages).

  Daniel


Reply to: