You're right btw that it's a dpkg bug, but it's a bit more subtle. The
cleanup that dpkg performs after installation is meant to preserve the
hold state for non-installed packages. This is handled by the
pkg_is_informative function, which classifies everything with "pkg->want
!= PKG_WANT_UNKNOWN" as informative, so would actually preserve hold for
non-installed packages. However, pkg_parse_verify contains logic to fix
up state left by older dpkg versions, without taking into account that
this also includes valid state by current dpkg versions:
/* XXX: Mark not-installed leftover packages for automatic removal on
* next database dump. This code can be removed after dpkg 1.16.x, when
* there's guarantee that no leftover is found on the status file on
* major distributions. */
if (!(ps->flags & pdb_recordavailable) &&
pkg->status == PKG_STAT_NOTINSTALLED &&
pkg->eflag == PKG_EFLAG_OK &&
(pkg->want == PKG_WANT_PURGE ||
pkg->want == PKG_WANT_DEINSTALL ||
pkg->want == PKG_WANT_HOLD)) {
pkg_set_want(pkg, PKG_WANT_UNKNOWN);
}
We are now at dpkg 1.20.x, well after 1.16.x. If this block of code is
removed (or at least the pkg->want == PKG_WANT_HOLD condition), direct
installation by dpkg works as expected, and presumably installation
using apt will work as expected as well.
** Also affects: dpkg (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1904195
Title:
apt cancels holds on uninstalled packages
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1904195/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs