Re: Handling s390 libc ABI change in Debian

2014-07-15 Thread Philipp Kern
On Tue, Jul 15, 2014 at 07:18:39AM +0200, Aurelien Jarno wrote:
 I can follow up with a list affected packages, but we are slowly
 discovering them one by one, so it might takes time. So far we have:
 
 * Mixing modules/libraries built with pre-2.19 and 2.19 libc
 - perl
 - libpng 
 
 * Using libc 2.19 without rebuilding anything:
 - gauche
 - mono

I think it's pretty important for perl to keep working as much as is
required for the system to upgrade itself. I'd be a bit less concerned
(aside already broken binary compatibility) if the base system keeps
working during the upgrade.

We could conceivably document the breakage in the release upgrade notes,
as long as updates can complete and suggest a reboot afterwards.

 It's a huge work for Debian, maybe not for other distribution, as it
 basically means we have to rebootstrap everything. This includes manual
 bootstrapping of self-dependent languages (haskell, gnat, ...) and
 manual handling of some dependencies loop. In addition it's something
 which hasn't been done since the libc5 transition, so we might discover
 some unexpected issues.

Will it necessarily explode if both libcs are loaded into the same
address space or only if the broken functionality is used? Would
setjmp/longjmp only break if used across libc6/6.1 boundaries? Passing
around an incompatible pthread struct seems bad, though.
If this would work, a re-bootstrap would not necessarily be needed, I
think?

Kind regards and thanks
Philipp Kern 


signature.asc
Description: Digital signature


Re: Handling s390 libc ABI change in Debian

2014-07-15 Thread Carlos O'Donell
On Tue, Jul 15, 2014 at 1:18 AM, Aurelien Jarno aure...@debian.org wrote:
 On Mon, Jul 14, 2014 at 11:14:42PM -0400, Carlos O'Donell wrote:
 On Mon, Jul 14, 2014 at 4:36 PM, Aurelien Jarno aure...@debian.org wrote:
  glibc 2.19 has changed the libc ABI on s390, more specifically the
  setjmp/longjmp functions [1] [2]. Symbol versioning is used to handle
  some cases, but it doesn't work when a jmp_buf variable is embedded
  into a structure, as it changes the size of the structure. The result
  is that mixing programs or libraries built with 2.18 with ones built
  with 2.19 do not work anymore, usually they end up with a segmentation
  fault. Some persons from this list have experienced that with perl.

 That is not true. This is an over generalization of the problem. You
 can use libraries built with 2.18 and 2.19 and they work just fine.

 I agree I probably a bit over exaggerated here, but the problem is real,
 breakages do happen, and some persons on this mailing list have already
 experienced them.

 The extent of the problem in correct language is listed here:
 https://sourceware.org/glibc/wiki/Release/2.19#Packaging_Changes

 This seems to minimize the problem, listing only perl. In practice we
 have seen much more breakages, part of them being due to the change of
 the __pthread_unwind_buf_t struct.

That is a change that nobody reported. You're the first to mention it
and that does make it more serious. We have discussed this upstream
and I agree that we need more versioning of the interfaces there to
support the change fully.

  We first thought it was limited to a few packages (even if all perl is
  already more than that), but as time goes more and more issues are
  found. libpng and gauche are also affected, the issue with mono is
  also likely due to this ABI change.

 That is new information, and it is important for distributions to
 relay this information back upstream where the decision for a SO bump
 can be made.

 I can follow up with a list affected packages, but we are slowly
 discovering them one by one, so it might takes time. So far we have:

 * Mixing modules/libraries built with pre-2.19 and 2.19 libc
 - perl
 - libpng

You can never support a mixed-ABI environment with versioning.

You must update all of those packages at once.

The best we could do is warn the user of the incompatibility at
runtime and refuse to load the module via dlopen, or refuse to start
the application at startup.

 * Using libc 2.19 without rebuilding anything:
 - gauche
 - mono

This we believe to be pthread issues.

  According to upstream [3], the problem is that Debian doesn't do a mass
  rebuild, which is the strategy chosen by Red Hat to handle^Wworkaround
  this issue. This means some programs might segfault during the upgrade,
  or on partially upgraded systems.

 I apologize if you took what I wrote to mean that. I did not mean it
 was Debian's problem, but rather that Debian suffered the most because
 they don't do rebuilds. The two are orthogonal. You face a situation
 that is unique to the framework used to build the distribution.

 Please engage upstream to champion a SO name bump for libc for

 I think that would be the correct solution. That said as it is not
 something trivial and thus not done often, it's an opportunity to push
 for more ABI changes if some others are envisaged in the future.

The problems are worse.

I just tried to simulate this on x86-64 and there are serious problems.

In most libraries you can load multiple different copies and it won't conflict.

Here libc.so.6 and libc.so.7 or libc.so.6.1 all conflict in the same
namespace and worse control aspects of the implementation like TLS. It
doesn't work to bump the SONAME.

We would have to implement a coordination framework amongst all the
SONAME bumped libc's for all of the basic functionality that had to
keep working. That would force future libcs to stay compatible
internally with other libcs and that would be very difficult to
maintain.

I am starting to think that a tooling option to fail to load mixed-ABI
objects is the only option, with user rebuilds happening after that.

  Now we have to chose a strategy for Debian. I see multiple options:
 
  1) Ignore the issue and just rebuild (binNMU) the packages that seems
  affected when we discover them. This means partial upgrades will likely
  be broken, and that we might discover some broken packages only after
  the jessie release.
 
  2) Rebuild (binNMU) all packages. This means partial upgrades will
  likely be broken.
 
  3) Bump the soname of affected packages and rebuild their reverse
  dependencies. It is the solution that is currently being implemented for
  perl. It clearly won't scale if more broken packages (and even for
  libpng) are discovered as it requires a source upload and a transition
  handled by the release team. It also means breaking the ABI compatibility
  with other distributions.
 
  4) Bump the libc soname to libc.so.6.1 and do a libc 

Re: Handling s390 libc ABI change in Debian

2014-07-15 Thread Aurelien Jarno
On Tue, Jul 15, 2014 at 09:21:30AM +0200, Philipp Kern wrote:
 On Tue, Jul 15, 2014 at 07:18:39AM +0200, Aurelien Jarno wrote:
  I can follow up with a list affected packages, but we are slowly
  discovering them one by one, so it might takes time. So far we have:
  
  * Mixing modules/libraries built with pre-2.19 and 2.19 libc
  - perl
  - libpng 
  
  * Using libc 2.19 without rebuilding anything:
  - gauche
  - mono
 
 I think it's pretty important for perl to keep working as much as is
 required for the system to upgrade itself. I'd be a bit less concerned
 (aside already broken binary compatibility) if the base system keeps
 working during the upgrade.

It might not be easy to ensure the upgrade process works correctly. For
example in mono case, as soon as a new libc is installed, mono stops
working, and installing/upgrading a mono package would fail as mono is
called in the postinst (this is bug#751171). We have to avoid this by
using strict dependencies to make sure the packages are installed in the
right order, but we can't guarantee to detect and handle all cases. That
means some upgrades might break.

-- 
Aurelien Jarno  GPG: 4096R/1DDD8C9B
aurel...@aurel32.net http://www.aurel32.net


-- 
To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140715075003.gd32...@hall.aurel32.net



Re: Handling s390 libc ABI change in Debian

2014-07-15 Thread Aurelien Jarno
On Tue, Jul 15, 2014 at 03:49:04AM -0400, Carlos O'Donell wrote:
 On Tue, Jul 15, 2014 at 1:18 AM, Aurelien Jarno aure...@debian.org wrote:
  On Mon, Jul 14, 2014 at 11:14:42PM -0400, Carlos O'Donell wrote:
  On Mon, Jul 14, 2014 at 4:36 PM, Aurelien Jarno aure...@debian.org wrote:
   glibc 2.19 has changed the libc ABI on s390, more specifically the
   setjmp/longjmp functions [1] [2]. Symbol versioning is used to handle
   some cases, but it doesn't work when a jmp_buf variable is embedded
   into a structure, as it changes the size of the structure. The result
   is that mixing programs or libraries built with 2.18 with ones built
   with 2.19 do not work anymore, usually they end up with a segmentation
   fault. Some persons from this list have experienced that with perl.
 
  That is not true. This is an over generalization of the problem. You
  can use libraries built with 2.18 and 2.19 and they work just fine.
 
  I agree I probably a bit over exaggerated here, but the problem is real,
  breakages do happen, and some persons on this mailing list have already
  experienced them.
 
  The extent of the problem in correct language is listed here:
  https://sourceware.org/glibc/wiki/Release/2.19#Packaging_Changes
 
  This seems to minimize the problem, listing only perl. In practice we
  have seen much more breakages, part of them being due to the change of
  the __pthread_unwind_buf_t struct.
 
 That is a change that nobody reported. You're the first to mention it
 and that does make it more serious. We have discussed this upstream
 and I agree that we need more versioning of the interfaces there to
 support the change fully.
 
   We first thought it was limited to a few packages (even if all perl is
   already more than that), but as time goes more and more issues are
   found. libpng and gauche are also affected, the issue with mono is
   also likely due to this ABI change.
 
  That is new information, and it is important for distributions to
  relay this information back upstream where the decision for a SO bump
  can be made.
 
  I can follow up with a list affected packages, but we are slowly
  discovering them one by one, so it might takes time. So far we have:
 
  * Mixing modules/libraries built with pre-2.19 and 2.19 libc
  - perl
  - libpng
 
 You can never support a mixed-ABI environment with versioning.
 
 You must update all of those packages at once.
 
 The best we could do is warn the user of the incompatibility at
 runtime and refuse to load the module via dlopen, or refuse to start
 the application at startup.

For perl we handled that using dependencies in the package manager, and
we can probably add some more checks for user modules. That said that do
not scale if we discover more and more affected packages. This is my
fear so far.

  * Using libc 2.19 without rebuilding anything:
  - gauche
  - mono
 
 This we believe to be pthread issues.

Yes, this is the pthread issue.

  It's a huge work for Debian, maybe not for other distribution, as it
  basically means we have to rebootstrap everything. This includes manual
  bootstrapping of self-dependent languages (haskell, gnat, ...) and
  manual handling of some dependencies loop. In addition it's something
  which hasn't been done since the libc5 transition, so we might discover
  some unexpected issues.
 
 Why do you have to do that? Is it just like for rpm where the
 packaging system encodes the SONAME as a dependency? We would also
 need a manual bootstrap in Fedora because of this issue.

I assumed that both libc can't be used simultaneously, so that's
basically like bootstrapping a new architecture, except the manual
bootstrapping of self-dependent languages can be done more easily.

Cheers,
Aurelien

-- 
Aurelien Jarno  GPG: 4096R/1DDD8C9B
aurel...@aurel32.net http://www.aurel32.net


-- 
To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140715083054.gk1...@hall.aurel32.net



Bug#754596: libc6 package upgrade sends ISO-2022 escape sequences to a terminal which doesn't support them (PuTTY in UTF-8 mode)

2014-07-15 Thread Sven Joachim
On 2014-07-12 23:30 +0200, Stephen Powell wrote:

 The problem occurs when libc6 must be upgraded during apt-get upgrade
 or apt-get dist-upgrade.  I see a screen which looks like this:

 -

 lu Configuring libc6:s390x tk
 x Running services and programs that are using NSS need to be restarted,x
 x otherwise they might not be able to do lookup or authentication any more  x
 x (for services such as ssh, this can affect your ability to login).x
 x Please review the following space-separated list of init.d scripts forx
 x services to be restarted now, and correct it if needed.   x
 x   x
 x Note: restarting sshd/telnetd should not affect any existing  x
 x connections.  x
 x   x
 x Services to restart for GNU libc library upgrade: x
 x   x
 x vsftpd exim4 cron atd x
 x   x
 x  Ok x
 x   x
 mqqqj

 -

 As you can see, PuTTY was sent the traditional ISO-2022 box-drawing escape
 sequences to draw the box, which does not work when PuTTY is operating in
 UTF-8 mode.  These need to be converted into equivalent UTF-8 sequences to
 look right.  I wish to emphasize that libc6 is the *only* package which does
 this.

Seems logical, see below.

 If the bug is not in package libc6, then why is libc6 the *only* package
 which doesn't use the proper box-drawing technique?

Because your UTF-8 locale isn't available at the time the above screen
is shown.  It comes from the libc6 preinst, and libc6 declares a Breaks
on the old locales package (see #585737 for details).

Cheers,
   Sven


-- 
To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/874myiny9d@turtle.gmx.de



Bug#742640: src:eglibc: build stage2 without selinux

2014-07-15 Thread Helmut Grohne
On Thu, Jul 10, 2014 at 09:46:05PM +0200, Aurelien Jarno wrote:
 Hmm, the above has actually been removed in favor of a test on
 $(DEB_BUILD_PROFILES).
 
 Instead of duplicating the code, please test for both stage1 and stage2
 in the same test.

Updating patch addressing both concerns. Successfully tested on
jenkins.d.n.

Helmut
diff -Nru eglibc-2.19/debian/sysdeps/linux.mk eglibc-2.19/debian/sysdeps/linux.mk
--- eglibc-2.19/debian/sysdeps/linux.mk
+++ eglibc-2.19/debian/sysdeps/linux.mk
@@ -11,5 +11,5 @@
 
-ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
+ifneq ($(filter stage1 stage2,$(DEB_BUILD_PROFILES)),)
   libc_extra_config_options = $(extra_config_options)
 else
   libc_extra_config_options = --with-selinux --enable-systemtap $(extra_config_options)