[Bug 257279] Re: -o Dpkg::Options::=--force-confdef ignored by cleanup run -- makes pkgsync hang
Daniel Hartwig
257279 at bugs.launchpad.net
Fri Mar 16 17:03:52 UTC 2012
commit fd28ea8c2af0786d3a426d06ea3527aa48de96ac
Author: Daniel Hartwig <mandyke at gmail.com>
Date: Sat Mar 17 01:01:52 2012 +0800
Respect DPkg::Options when calling dpkg to recover failed installs
Usually we use APT to call dpkg, which handles all sorts of nice
option parsing. However, if an install run fails then we to call
'dpkg --configure -a' ourselves to see if this fixes the problem.
APT passes various options to dpkg, so we should also.
* src/generic/apt/download_install_manager.cc:
- pass DPkg::Options when invoking dpkg. LP: #257279
** Also affects: aptitude
Importance: Undecided
Status: New
** Changed in: aptitude
Status: New => Fix Committed
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to aptitude in Ubuntu.
https://bugs.launchpad.net/bugs/257279
Title:
-o Dpkg::Options::=--force-confdef ignored by cleanup run -- makes
pkgsync hang
Status in aptitude:
Fix Committed
Status in “aptitude” package in Ubuntu:
New
Bug description:
Binary package hint: aptitude
When pkgsync is running, it calls aptitude with the options "-o
Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold" to
avoid being asked about what to do with changed conffiles. If such a
prompt is displayed, aptitude will hang until killed, awaiting user
input. pkgsync is typically run from cron, so asking for user input is
a bad thing.
In the normal case, aptitude propagates options down to dpkg like
this:
/bin/sh /etc/cron.daily/nightly-pkgsync
\_ /bin/bash /usr/sbin/pkgsync
\_ aptitude -y -q -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold dist-upgrade afacli+ apache [...]
\_ /usr/bin/dpkg --force-confdef --force-confold --status-fd 34 --configure [...]
\_ /usr/bin/perl -w /usr/share/debconf/frontend /var/lib/dpkg/info/sympa.postinst configure
However, if a package installation fails, this chunk of code in src/generic/apt/download_install_manager.cc is called:
switch(pmres)
{
case pkgPackageManager::Failed:
_error->DumpErrors();
cerr << _("A package failed to install. Trying to recover:") << endl;
system("DPKG_NO_TSTP=1 dpkg --configure -a");
_error->Discard();
This results in the following call tree, which hangs as soon as a
conffile is reached:
/bin/sh /etc/cron.daily/nightly-pkgsync
\_ /bin/bash /usr/sbin/pkgsync
\_ aptitude -y -q -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold dist-upgrade afacli+ apache [...]
\_ sh -c DPKG_NO_TSTP=1 dpkg --configure -a
\_ dpkg --configure -a
The rest of aptitude seems to use an pkgDPkgPM object from apt-
pkg/deb/dpkgpm.h (from the apt source package) when interfacing with
dpkg. I believe this cleanup code should adopt a similar approach.
A workaround for this problem is to add these lines to /etc/dpkg/dpkg.cfg:
force-confdef
force-confold
To manage notifications about this bug go to:
https://bugs.launchpad.net/aptitude/+bug/257279/+subscriptions
More information about the foundations-bugs
mailing list