From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 19 18:15:00 2020 Received: (at 39531) by debbugs.gnu.org; 19 Apr 2020 22:15:00 +0000 Received: from localhost ([127.0.0.1]:46134 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jQIDL-0002Aq-Mt for submit@debbugs.gnu.org; Sun, 19 Apr 2020 18:15:00 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59850 helo=eggs1p.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jQIDK-0002Ad-Cp for 39531@debbugs.gnu.org; Sun, 19 Apr 2020 18:14:58 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:56502) by eggs1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQIDE-0000dO-No; Sun, 19 Apr 2020 18:14:52 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=59270 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jQIDE-0005AK-7N; Sun, 19 Apr 2020 18:14:52 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Christopher Baines Subject: Re: bug#39531: guix pull on aarch64-linux glibc derivation has incorrect output References: <87d0an1qs7.fsf@cbaines.net> Date: Mon, 20 Apr 2020 00:14:50 +0200 In-Reply-To: <87d0an1qs7.fsf@cbaines.net> (Christopher Baines's message of "Sun, 09 Feb 2020 19:53:12 +0000") Message-ID: <87pnc315t1.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 39531 Cc: 39531@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, Christopher Baines skribis: > When attempting to guix pull using the aarch64-linux system, I'm seeing > some issues with derivation outputs. I tried with a newer and older > commit, and the result is the same. > > > =E2=86=92 guix pull --commit=3D27b09f3ab11a30821a5ce0b071aac1bc6156497d -= -system=3Daarch64-linux --profile=3D/tmp/testprofile2 > Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.= org/git/guix.git'... > Building from this channel: > guix https://git.savannah.gnu.org/git/guix.git 27b09f3 > Computing Guix derivation for 'aarch64-linux'... - > guix pull: error: derivation `/gnu/store/800ky8qa4az7yx36gsg9ak6bih3530qm= -glibc-2.29.drv' has incorrect output `/gnu/store/8v34v81q86klja9rihaixkypc= ml5ad5j-glibc-2.29-debug', should be `/gnu/store/w3iq60ias1qlrjigbj75ssda09= hwg21i-glibc-2.29-debug' The problem here is that we=E2=80=99re building the trampoline, =E2=80=9Ccompute-guix-derivation=E2=80=9D, for AArch64. It builds if subst= itutes are available (likely) and fails to build otherwise. And then we try to execute it locally, and since your machine is not AArch64, it fails. The first patch attached does what I thought was all it would take to fix it. But then I realized that the second patch is needed so that =E2=80=98make-config.scm=E2=80=99 uses a Guile for the right system, same f= or =E2=80=9Cmodule-import.drv=E2=80=9D and so on. Together, these two patches solve the problem (not retroactively though), but we need to check the implications of changing the default value of #:guile-for-build. Thanks, Ludo=E2=80=99. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-build-self-Always-build-the-trampoline-for-the-curre.patch From 366729d477960127424076bdac51e7c937857081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 19 Apr 2020 23:14:56 +0200 Subject: [PATCH 1/2] build-self: Always build the trampoline for the current system. Previously we'd build 'compute-guix-derivation' for the target system. Running it would then fail (unless qemu-binfmt support was set up or something similar). Fixes . Reported by Christopher Baines . * build-aux/build-self.scm (load-path-expression): Add #:system and honor it. (gexp->script): Likewise. (build-program): Pass #:system to 'gexp->script'. --- build-aux/build-self.scm | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm index f86c79f0d0..58ecf20cf4 100644 --- a/build-aux/build-self.scm +++ b/build-aux/build-self.scm @@ -148,14 +148,17 @@ ;;; 1ae16033f34cebe802023922436883867010850f (March 2018.) ;;; -(define (load-path-expression modules path) +(define* (load-path-expression modules path + #:key (system (%current-system))) "Return as a monadic value a gexp that sets '%load-path' and '%load-compiled-path' to point to MODULES, a list of module names. MODULES are searched for in PATH." (mlet %store-monad ((modules (imported-modules modules - #:module-path path)) + #:module-path path + #:system system)) (compiled (compiled-modules modules - #:module-path path))) + #:module-path path + #:system system))) (return (gexp (eval-when (expand load eval) (set! %load-path (cons (ungexp modules) %load-path)) @@ -165,12 +168,14 @@ are searched for in PATH." (define* (gexp->script name exp #:key (guile (default-guile)) - (module-path %load-path)) + (module-path %load-path) + (system (%current-system))) "Return an executable script NAME that runs EXP using GUILE, with EXP's imported modules in its search path." (mlet %store-monad ((set-load-path (load-path-expression (gexp-modules exp) - module-path))) + module-path + #:system system))) (gexp->derivation name (gexp (call-with-output-file (ungexp output) @@ -186,7 +191,8 @@ imported modules in its search path." (write '(ungexp set-load-path) port) (write '(ungexp exp) port) (chmod port #o555)))) - #:module-path module-path))) + #:module-path module-path + #:system system))) (define (date-version-string) @@ -364,7 +370,11 @@ interface (FFI) of Guile.") #$pull-version) #:system system) derivation-file-name)))))) - #:module-path (list source)))) + #:module-path (list source) + + ;; Always build the trampoline for the local system. The + ;; system being targeted will be passed as an argument. + #:system %system))) (define (call-with-clean-environment thunk) (let ((env (environ))) -- 2.26.0 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0002-DRAFT-gexp-guile-for-build-defaults-to-a-system-depe.patch From d35b68374543f9eed7dc1f49c73d49a31332e2b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 19 Apr 2020 23:58:10 +0200 Subject: [PATCH 2/2] DRAFT gexp: #:guile-for-build defaults to a system-dependent derivation. Until now, the default #:guile-for-build would be Guile lowered to whichever system was current when %GUILE-FOR-BUILD was set. This would break when passing #:system to a value other than %CURRENT-SYSTEM. * guix/gexp.scm (lower-gexp): #:guile-for-build defaults to #f. (gexp->derivation): Likewise. (imported-files/derivation): Likewise. (imported-files): Likewise. (imported-modules): Likewise. (compiled-modules): Likewise. --- guix/gexp.scm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/guix/gexp.scm b/guix/gexp.scm index 4ac0411da1..753da8cb4d 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -784,7 +784,7 @@ second element is the derivation to compile them." (system (%current-system)) (target 'current) (graft? (%graft?)) - (guile-for-build (%guile-for-build)) + (guile-for-build #f) (effective-version "2.2") deprecation-warnings) @@ -885,7 +885,7 @@ derivations--e.g., code evaluated for its side effects." (env-vars '()) (modules '()) (module-path %load-path) - (guile-for-build (%guile-for-build)) + (guile-for-build #f) (effective-version "2.2") (graft? (%graft?)) references-graphs @@ -1357,7 +1357,7 @@ to a tree suitable for 'interned-file-tree'." #:key (name "file-import") (symlink? #f) (system (%current-system)) - (guile (%guile-for-build))) + (guile #f)) "Return a derivation that imports FILES into STORE. FILES must be a list of (FINAL-PATH . FILE) pairs. Each FILE is mapped to FINAL-PATH in the resulting store path. FILE can be either a file name, or a file-like object, @@ -1406,7 +1406,7 @@ to the source files instead of copying them." ;; The following parameters make sense when creating ;; an actual derivation. (system (%current-system)) - (guile (%guile-for-build))) + (guile #f)) "Import FILES into the store and return the resulting derivation or store file name (a derivation is created if and only if some elements of FILES are file-like objects and not local file names.) FILES must be a list @@ -1426,7 +1426,7 @@ as returned by 'local-file' for example." (define* (imported-modules modules #:key (name "module-import") (system (%current-system)) - (guile (%guile-for-build)) + (guile #f) (module-path %load-path)) "Return a derivation that contains the source files of MODULES, a list of module names such as `(ice-9 q)'. All of MODULES must be either names of @@ -1455,7 +1455,7 @@ last one is created from the given object." #:key (name "module-import-compiled") (system (%current-system)) target - (guile (%guile-for-build)) + (guile #f) (module-path %load-path) (extensions '()) (deprecation-warnings #f)) -- 2.26.0 --=-=-=--