Subject: Re: bug#30537: glibc 2.26 refuses to run on CentOS 6.8

From: Mark H Weaver <[email-masked]>
Date: Wed, 21 Feb 2018 18:12:31 -0500

Hi Ricardo,

Ricardo Wurmus <[email-masked]> writes:

> Ricardo Wurmus <[email-masked]> 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.

[...]

> 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 <[email-masked]>
>  ;;; Copyright © 2017 Marius Bakke <[email-masked]>
>  ;;; Copyright © 2017 Eric Bavier <[email-masked]>
> +;;; Copyright © 2018 Ricardo Wurmus <[email-masked]>
>  ;;;
>  ;;; 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 @@ 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")
> +    (replacement #f)
>      (source (origin
>                (inherit (package-source glibc))
>                (uri (string-append "mirror://gnu/glibc/glibc-"

These (replacement #f) fields should not be needed.  'replacement' is
now an 'innate' field of the package record type, which means that it is
not inherited.

> diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
> index 7286e954c..db43691fd 100644
> --- a/gnu/packages/commencement.scm
> +++ b/gnu/packages/commencement.scm
> @@ -4,6 +4,7 @@
>  ;;; Copyright © 2012 Nikita Karetnikov <[email-masked]>
>  ;;; Copyright © 2014, 2015, 2017 Mark H Weaver <[email-masked]>
>  ;;; Copyright © 2017, 2018 Efraim Flashner <[email-masked]>
> +;;; Copyright © 2018 Ricardo Wurmus <[email-masked]>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -486,7 +487,7 @@ the bootstrap environment."
>    ;; built just below; the only difference is that this one uses the
>    ;; bootstrap Bash.
>    (package-with-bootstrap-guile
> -   (package (inherit glibc)
> +   (package/inherit glibc
>       (name "glibc-intermediate")
>       (arguments
>        `(#:guile ,%bootstrap-guile
> @@ -664,7 +665,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
>  
>  (define glibc-final
>    ;; The final glibc, which embeds the statically-linked Bash built above.
> -  (package (inherit glibc-final-with-bootstrap-bash)
> +  (package/inherit glibc-final-with-bootstrap-bash
>      (name "glibc")
>      (inputs `(("static-bash" ,static-bash-for-glibc)
>                ,@(alist-delete

We seem to be oscillating on the question of whether to graft these
early GLIBCs.  In June 2017, I switched to using 'package/inherit' here
in commit 13f7f2fd2b208c29361ef2290f55911879a6adf2, and in October those
changes were reverted in commit 848f550f2c105326dc3be4033c8aaf35ec21cde4
by Efraim, although I'm not sure why.

It'll be painful to have *everything* grafted until the next
core-updates cycle, but I suppose it's necessary.

      Thanks,
        Mark