Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-23 Thread Ludovic Courtès
Hello,

Ricardo Wurmus  skribis:

> I have a bad day.  After the upgrade to glibc 2.26 none of the
> Guix-installed software runs on the HPC cluster running CentOS 6.8.

Bah.  :-(

> The glibc 2.26 expects a minimum kernel version of 3.x on x86_64, but
> CentOS 6.8 only comes with a heavily patched 2.6.32.

It’s annoying, but we can surely apply the patch you sent (though rather
by passing ‘--enable-kernel’ if possible, as Danny suggested.)


personality(2) has a knob to change the kernel version reported by
uname(2) to 2.6.  Here it’s a case where we’d need the reverse:
reporting 3.2 instead of 2.6.  That doesn’t seem to exist.

Looking for other hacks (or kludges), I found the kernel module below at
,
which could be adjusted to report a different kernel version:

--8<---cut here---start->8---
#include 
#include 
#include 

#ifndef UNAME_DUMB_STEPPING
#define UNAME_DUMB_STEPPING '5';
#endif

MODULE_AUTHOR("The one who invented the uname hack");
MODULE_DESCRIPTION("Changes the uname output");
MODULE_LICENSE("GPL");

static int uname_hack_init() {
save = system_utsname.machine[1];
system_utsname.machine[1] = UNAME_DUMB_STEPPING;
return 0;
}

static void uname_hack_cleanup() {
system_utsname.machine[1] = save;
}

module_init(uname_hack_init);
module_exit(uname_hack_cleanup);
--8<---cut here---end--->8---

Another option would be to ptrace processes, handle the first ‘uname’
call, and then PTRACE_DETACH.  Ugly.

Ludo’.



Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Danny Milosavljevic
Hi Ricardo,

> Does this work even though the official minimum kernel version for glibc
> 2.26 is 3.2.0?

I think so, BUT the patchset looks pretty similar to what would happen
if you specified the configure flag except for one spot.
So maybe Nix found out some ill effects.

The most worrying part in glibc is

#if __LINUX_KERNEL_VERSION < 0x040300
# undef __ASSUME_ACCEPT4_SYSCALL
# undef __ASSUME_SENDMSG_SYSCALL
# undef __ASSUME_RECVMSG_SYSCALL
# undef __ASSUME_CONNECT_SYSCALL
# undef __ASSUME_RECVFROM_SYSCALL
# undef __ASSUME_SENDTO_SYSCALL
#endif

So that would have to be watched out for.

__ASSUME_CONNECT_SYSCALL is some scary stuff.  Getting it wrong could break all
networking in the system.

> The Red Hat kernels are a bit special in that they are not just old
> kernels, but heavily patched to work with newer software.  The Nix
> people wrote that they have confirmed that 2.6.32 works up to
> glibc-2.26-131.

Oh, I didn't know that.  If it's tested that way, let's use it that way
for the time being.

> If there was a way to test for kernel features instead of looking at the
> kernel version I’d do that instead of looking for a way to relax the
> lower kernel version bound.

Yeah...



Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Ricardo Wurmus

Hi Danny,

> Can you try just passing --enable-kernel=2.6.32 to "configure" of glibc 
> instead?
>
> It should set the minimal version without any weird patching.

Does this work even though the official minimum kernel version for glibc
2.26 is 3.2.0?

> But newer glibc has moved a lot of kernel definitions into glibc, might cause 
> a
> problem if glibc just assumes it's all there but in fact it's not there at
> runtime (like the recent Haskell problem etc).

The Red Hat kernels are a bit special in that they are not just old
kernels, but heavily patched to work with newer software.  The Nix
people wrote that they have confirmed that 2.6.32 works up to
glibc-2.26-131.

There are additional notes on how that was done:

# HOWTO: check glibc sources for changes in kernel requirements
git log -p glibc-2.25.. sysdeps/unix/sysv/linux/x86_64/kernel-features.h 
sysdeps/unix/sysv/linux/kernel-features.h
# get kernel sources (update the URL)
mkdir tmp && cd tmp
curl 
http://vault.centos.org/6.9/os/Source/SPackages/kernel-2.6.32-696.el6.src.rpm | 
rpm2cpio - | cpio -idmv
tar xf linux-*.bz2
# check syscall presence, for example
less linux-*?/arch/x86/kernel/syscall_table_32.S

If there was a way to test for kernel features instead of looking at the
kernel version I’d do that instead of looking for a way to relax the
lower kernel version bound.

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net





Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Jan Nieuwenhuizen
Ricardo Wurmus writes:

>> Here’s a patch to graft the glibc to apply the patch to allow the 2.6.32
>> kernel.  I’m going to apply this at work now.
>
> That patch had a couple of problems.  Here’s a new version.

Sad to hear of your troubles, thanks a lot for posting this.  We
discovered at Verum that a guix pack would not run on CentOS and
took another road in the end.  Good to know there's still a way
to work around this.

Thanks,
janneke

-- 
Jan Nieuwenhuizen  | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com



Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Ricardo Wurmus

Ricardo Wurmus  writes:

> Ricardo Wurmus  writes:
>
>> Ricardo Wurmus  writes:
>>
>>> The NixOS developers patch glibc to make sure that all software still
>>> runs on Linux 2.6.32:
>>>
>>> 
>>> https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/libraries/glibc/allow-kernel-2.6.32.patch
>>>
>>> Can we please also apply this?
>>
>> We could also apply this conditionally to x86_64 only, because that’s
>> probably the only architecture that’s used for HPC systems running
>> CentOS.
>
> Here’s a patch to graft the glibc to apply the patch to allow the 2.6.32
> kernel.  I’m going to apply this at work now.

That patch had a couple of problems.  Here’s a new version.

The main differences are:

* fix an undefined variable (“base” –> “glibc”)
* use package/inherit for glibc-final and
  glibc-final-with-bootstrap-bash; don’t override the “replacement”
  field with “#f”

-- 
Ricardo

>From 3cf46dce4129cb52574de52b4221f6c4dde566fe Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus 
Date: Mon, 19 Feb 2018 20:04:06 +0100
Subject: [PATCH] WIP graft glibc to allow execution on Linux 2.6.32.

* gnu/packages/patches/glibc-allow-kernel-2.6.32.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/base.scm (glibc/linux)[replacement]: New field.
(glibc-2.26-patched): New variable.
(glibc-2.25, glibc-2.24, glibc-2.23, glibc-2.22): Disable replacement.
* gnu/packages/commencement.scm (glibc-final-with-bootstrap-bash,
glibc-final): Use package/inherit to enable grafted glibc.
---
 gnu/local.mk   |  3 +-
 gnu/packages/base.scm  | 15 +
 gnu/packages/commencement.scm  |  5 +--
 .../patches/glibc-allow-kernel-2.6.32.patch| 39 ++
 4 files changed, 59 insertions(+), 3 deletions(-)
 create mode 100644 gnu/packages/patches/glibc-allow-kernel-2.6.32.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f1834e368..c7bd4c6a9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -7,7 +7,7 @@
 # Copyright © 2016, 2017 Kei Kebreau 
 # Copyright © 2016, 2017 Rene Saavedra 
 # Copyright © 2016 Adonay "adfeno" Felipe Nogueira  
-# Copyright © 2016, 2017 Ricardo Wurmus 
+# Copyright © 2016, 2017, 2018 Ricardo Wurmus 
 # Copyright © 2016 Ben Woodcroft 
 # Copyright © 2016, 2017, 2018 Alex Vong 
 # Copyright © 2016, 2017 Efraim Flashner 
@@ -705,6 +705,7 @@ dist_patch_DATA =		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt1.patch		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt2.patch		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt3.patch		\
+  %D%/packages/patches/glibc-allow-kernel-2.6.32.patch		\
   %D%/packages/patches/glibc-bootstrap-system.patch		\
   %D%/packages/patches/glibc-ldd-x86_64.patch			\
   %D%/packages/patches/glibc-locales.patch			\
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index b2c1d232f..111bbbcec 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe 
 ;;; Copyright © 2017 Marius Bakke 
 ;;; Copyright © 2017 Eric Bavier 
+;;; Copyright © 2018 Ricardo Wurmus 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -537,6 +538,7 @@ store.")
;; Note: Always use a dot after the minor version since various places rely
;; on "version-major+minor" to determine where locales are found.
(version "2.26.105-g0890d5379c")
+   (replacement glibc-2.26-patched)
(source (origin
 (method url-fetch)
 (uri (string-append "https://alpha.gnu.org/gnu/guix/mirror/;
@@ -839,10 +841,20 @@ GLIBC/HURD for a Hurd host"
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
+(define glibc-2.26-patched
+  (package
+(inherit glibc)
+(replacement #f)
+(source (origin
+  (inherit (package-source glibc))
+  (patches (cons (search-patch "glibc-allow-kernel-2.6.32.patch")
+ (origin-patches (package-source glibc
+
 (define-public glibc-2.25
   (package
 (inherit glibc)
 (version "2.25")
+(replacement #f)
 (source (origin
   (inherit (package-source glibc))
   (uri (string-append "mirror://gnu/glibc/glibc-"
@@ -862,6 +874,7 @@ GLIBC/HURD for a Hurd host"
   (package
 (inherit glibc)
 (version "2.24")
+(replacement #f)
 (source (origin
   (inherit (package-source glibc))
   (uri (string-append "mirror://gnu/glibc/glibc-"
@@ -882,6 +895,7 @@ 

Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Danny Milosavljevic
Hi Ricardo,

sorry to hear about those problems.

Can you try just passing --enable-kernel=2.6.32 to "configure" of glibc instead?

It should set the minimal version without any weird patching.

Our glibc/linux in gnu/packages/base.scm specifies --enable-kernel=3.2.0 which
we could modify to something older.

But newer glibc has moved a lot of kernel definitions into glibc, might cause a
problem if glibc just assumes it's all there but in fact it's not there at
runtime (like the recent Haskell problem etc).



Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Ricardo Wurmus

Ricardo Wurmus  writes:

> Ricardo Wurmus  writes:
>
>> The NixOS developers patch glibc to make sure that all software still
>> runs on Linux 2.6.32:
>>
>> 
>> https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/libraries/glibc/allow-kernel-2.6.32.patch
>>
>> Can we please also apply this?
>
> We could also apply this conditionally to x86_64 only, because that’s
> probably the only architecture that’s used for HPC systems running
> CentOS.

Here’s a patch to graft the glibc to apply the patch to allow the 2.6.32
kernel.  I’m going to apply this at work now.

-- 
Ricardo

>From 5f9a81cbb4ab97a20b62c2e7e9505877a5b004e8 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus 
Date: Mon, 19 Feb 2018 20:04:06 +0100
Subject: [PATCH] WIP graft glibc to allow execution on Linux 2.6.32.

* gnu/packages/patches/glibc-allow-kernel-2.6.32.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/base.scm (glibc/linux)[replacement]: Register
glibc-2.26-patched as replacement.
(glibc-2.26-patched): New variable.
(glibc-2.25, glibc-2.24, glibc-2.23, glibc-2.22): Disable replacement.
* gnu/packages/commencement.scm (glibc-final-with-bootstrap-bash,
glibc-final): Likewise.
---
 gnu/local.mk   |  3 +-
 gnu/packages/base.scm  | 15 +
 gnu/packages/commencement.scm  |  3 ++
 .../patches/glibc-allow-kernel-2.6.32.patch| 39 ++
 4 files changed, 59 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/glibc-allow-kernel-2.6.32.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f1834e368..c7bd4c6a9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -7,7 +7,7 @@
 # Copyright © 2016, 2017 Kei Kebreau 
 # Copyright © 2016, 2017 Rene Saavedra 
 # Copyright © 2016 Adonay "adfeno" Felipe Nogueira  
-# Copyright © 2016, 2017 Ricardo Wurmus 
+# Copyright © 2016, 2017, 2018 Ricardo Wurmus 
 # Copyright © 2016 Ben Woodcroft 
 # Copyright © 2016, 2017, 2018 Alex Vong 
 # Copyright © 2016, 2017 Efraim Flashner 
@@ -705,6 +705,7 @@ dist_patch_DATA =		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt1.patch		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt2.patch		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt3.patch		\
+  %D%/packages/patches/glibc-allow-kernel-2.6.32.patch		\
   %D%/packages/patches/glibc-bootstrap-system.patch		\
   %D%/packages/patches/glibc-ldd-x86_64.patch			\
   %D%/packages/patches/glibc-locales.patch			\
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index b2c1d232f..d16bc6d26 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe 
 ;;; Copyright © 2017 Marius Bakke 
 ;;; Copyright © 2017 Eric Bavier 
+;;; Copyright © 2018 Ricardo Wurmus 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -537,6 +538,7 @@ store.")
;; Note: Always use a dot after the minor version since various places rely
;; on "version-major+minor" to determine where locales are found.
(version "2.26.105-g0890d5379c")
+   (replacement glibc-2.26-patched)
(source (origin
 (method url-fetch)
 (uri (string-append "https://alpha.gnu.org/gnu/guix/mirror/;
@@ -839,10 +841,20 @@ GLIBC/HURD for a Hurd host"
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
+(define glibc-2.26-patched
+  (package
+(inherit glibc)
+(replacement #f)
+(source (origin
+  (inherit (package-source glibc))
+  (patches (cons (search-patch "glibc-allow-kernel-2.6.32.patch")
+ (origin-patches (package-source base
+
 (define-public glibc-2.25
   (package
 (inherit glibc)
 (version "2.25")
+(replacement #f)
 (source (origin
   (inherit (package-source glibc))
   (uri (string-append "mirror://gnu/glibc/glibc-"
@@ -862,6 +874,7 @@ GLIBC/HURD for a Hurd host"
   (package
 (inherit glibc)
 (version "2.24")
+(replacement #f)
 (source (origin
   (inherit (package-source glibc))
   (uri (string-append "mirror://gnu/glibc/glibc-"
@@ -882,6 +895,7 @@ GLIBC/HURD for a Hurd host"
   (package
 (inherit glibc)
 (version "2.23")
+(replacement #f)
 (source (origin
   (inherit (package-source glibc))
   (uri (string-append "mirror://gnu/glibc/glibc-"
@@ -905,6 +919,7 @@ GLIBC/HURD for a Hurd host"
   (package
 (inherit glibc)
 (version "2.22")
+

Re: glibc 2.26 refuses to run on CentOS 6.8

2018-02-19 Thread Ricardo Wurmus

Ricardo Wurmus  writes:

> The NixOS developers patch glibc to make sure that all software still
> runs on Linux 2.6.32:
>
> 
> https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/libraries/glibc/allow-kernel-2.6.32.patch
>
> Can we please also apply this?

We could also apply this conditionally to x86_64 only, because that’s
probably the only architecture that’s used for HPC systems running
CentOS.

--
Ricardo