[Bug 1624837] [NEW] upgrading ubuntu 14.04 -> 16.04 deadlocks in libc6's preinst

Marius Gedminas marius at gedmin.as
Sun Sep 18 10:23:37 UTC 2016


Public bug reported:

I was upgrading a VPS from Ubuntu 14.04 to 16.04.  The VPS is actually
an OpenVZ container because this is a very cheap VPS provider.  As such,
it runs a rather old kernel (uname -r returns "2.6.32-042stab116.2").
The libc6 preinst script, quite correctly, decided to warn me about it:

> This version of the GNU libc requires kernel version 3.2 or later.
Older versions might work but are not officially supported. Please
consider upgrading your kernel.

After that the preinst script displayed

    Checking for services that may need to be restarted...
    Checking init scripts...
    /var/lib/dpkg/tmp.ci/preinst: 355: /var/lib/dpkg/tmp.ci/preinst: runlevel: not found

and froze.

(I filed bug 1624835 about /sbin/runlevel being missing).

strace showed that the preinst script was blocked in read(0, ...).
lsof showed that 0 was a pipe, the other end of which was open in the debconf frontend process.
strace showed that the frontend process was blocked in wait4(<pid-of-the-preinst-script>).

Now I'm not a debconf expert, but it seems to me that the preinst script
was trying to display two prompts (the outdated kernel warning and the
select what services you want to restart one), but it incorrectly used
the debconf API to tell the frontend it wasn't going to be displaying
any further prompts after the first one (i.e. called db_stop).

I was able to continue the upgrade by killing the preinst script.  (I
had to do that twice: once for libc6:amd64 and once for libc6:i386.)

** Affects: glibc (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/1624837

Title:
  upgrading ubuntu 14.04 -> 16.04 deadlocks in libc6's preinst

Status in glibc package in Ubuntu:
  New

Bug description:
  I was upgrading a VPS from Ubuntu 14.04 to 16.04.  The VPS is actually
  an OpenVZ container because this is a very cheap VPS provider.  As
  such, it runs a rather old kernel (uname -r returns
  "2.6.32-042stab116.2").  The libc6 preinst script, quite correctly,
  decided to warn me about it:

  > This version of the GNU libc requires kernel version 3.2 or later.
  Older versions might work but are not officially supported. Please
  consider upgrading your kernel.

  After that the preinst script displayed

      Checking for services that may need to be restarted...
      Checking init scripts...
      /var/lib/dpkg/tmp.ci/preinst: 355: /var/lib/dpkg/tmp.ci/preinst: runlevel: not found

  and froze.

  (I filed bug 1624835 about /sbin/runlevel being missing).

  strace showed that the preinst script was blocked in read(0, ...).
  lsof showed that 0 was a pipe, the other end of which was open in the debconf frontend process.
  strace showed that the frontend process was blocked in wait4(<pid-of-the-preinst-script>).

  Now I'm not a debconf expert, but it seems to me that the preinst
  script was trying to display two prompts (the outdated kernel warning
  and the select what services you want to restart one), but it
  incorrectly used the debconf API to tell the frontend it wasn't going
  to be displaying any further prompts after the first one (i.e. called
  db_stop).

  I was able to continue the upgrade by killing the preinst script.  (I
  had to do that twice: once for libc6:amd64 and once for libc6:i386.)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1624837/+subscriptions



More information about the foundations-bugs mailing list