[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