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

Re: Bug#773061: aptitude-robot: Hangs with dpkg zombies under some (not yet 100% clear) circumstances



Control: clone -1 -2
Control: reassign -2 apt/1.0.9.4
Control: tag -2 - patch
Control: retitle -2 apt-get: improper tty handling, causes dpkg zombies if STDIN is a pipe
Control: block -1 by -2

Hi again,

Axel Beckert wrote:
> > → echo bar > /tmp/bar.txt
> > → bash -c 'echo foo | cat -v < /tmp/bar.txt'
> > bar
> > → dash -c 'echo foo | cat -v < /tmp/bar.txt'
> > bar
> > 
> > i.e. the initial "yes '' |" in the patch would be ignored.
> > 
> > Need to dig deeper...
> 
> Digging deeper revealed two things:
> 
> 1) The above simplification is too simple. It does not take into
>    account that the tool in the middle may fiddle around with file
>    descriptors and pseudo ttys besides plain STDIN/STDOUT handling as
>    "cat" does.

Maybe not. Maybe the reason why we initially added the "yes '' |" is
gone and dpkg handles existing conffiles upon first installation
properly according to --force-conf{old,def} now -- although I haven't
found anything in that direction in dpkg's changelog.

> 2) I now know that the trigger for these issues wasn't the dpkg
>    1.17.13 → 1.17.21 update, but the apt 1.0.9.3 → 1.0.9.4 update.
>    Downgrading apt to 1.0.9.3 makes the issue vanish.
> 
>    I suspect that either the fix for https://bugs.debian.org/767774 or
>    the one for https://bugs.debian.org/765687 are the actual culprit.

I've now also checked if the patch at
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772641#10 solves
this issue, but it doesn't.

Steps how to reproduce this with pure apt-get (including APT binaries
and libraries with the above mentioned patch):

# dpkg --purge less
# yes '' | apt-get install -y less

This will hang with a dpkg zombie child process after outputing a
bunch of blank lines to the terminal. (If you use any other parameter
than '' that one will be printed instead of the blank lines.)

I can make apt-get continue (and the zombie to vanish) after a few
seconds if I "cat" the /dev/pts/<somenumber> which has been opened by
apt-get.

The "yes '' |" is supposed to answer potential dpkg conffile or
debconf critical questions, but imagine someone wants to pipe a
deliberately chosen set of answers into apt-get. (I also know that
there is --force-conf{old,def} for dpkg, but at least with older dpkg
versions (either Wheezy or Squeeze) there were cases (see above) where
--force-conf{old,def} didn't suffice.)

		Regards, Axel
-- 
 ,''`.  |  Axel Beckert <abe@debian.org>, http://people.debian.org/~abe/
: :' :  |  Debian Developer, ftp.ch.debian.org Admin
`. `'   |  1024D: F067 EA27 26B9 C3FC 1486  202E C09E 1D89 9593 0EDE
  `-    |  4096R: 2517 B724 C5F6 CA99 5329  6E61 2FF9 CD59 6126 16B5


Reply to: