Hi Pierre, Pierre Langlois <[email protected]> writes:
> Hi Guix! > > I've been getting errors while running `guix pull' on an aarch64 system, > during the final guix-package-cache step: > > (repl-version 0 1 1) > Generating package cache for > '/gnu/store/m8in1imi93snq711d7568dj9hlrx4diz-profile'... > > Backtrace: > In ice-9/boot-9.scm: > 1747:15 19 (with-exception-handler #<procedure af1570 at ice-9/bo?> ?) > 1752:10 18 (with-exception-handler _ _ #:unwind? _ # _) > In guix/repl.scm: > 99:21 17 (_) > In unknown file: > 16 (_ #<procedure 82fd00 at guix/repl.scm:100:25 ()> #<pr?> ?) > 15 (primitive-load "/gnu/store/3x6g541ixbmdjav4ky6dp1ryj4l?") > In ice-9/boot-9.scm: > 1752:10 14 (with-exception-handler _ _ #:unwind? _ # _) > In gnu/packages.scm: > 438:11 13 (generate-package-cache _) > In srfi/srfi-1.scm: > 460:18 12 (fold #<procedure expand-cache expr> _ _) > In gnu/packages.scm: > 390:9 11 (expand-cache . _) > In guix/packages.scm: > 1317:17 10 (supported-package? #<package [email protected] gnu?> ?) > In guix/memoization.scm: > 101:0 9 (_ #<hash-table 31605e0 13974/28099> #<package linux-l?> ?) > In guix/packages.scm: > 1295:37 8 (_) > 1555:16 7 (package->bag _ _ _ #:graft? _) > 1660:43 6 (thunk) > In gnu/packages/linux.scm: > 986:37 5 (arguments #<package [email protected] gnu/packages/?>) > In guix/gexp.scm: > 460:52 4 (%local-file #f #<promise #<procedure 4df2660 at gnu/p?> ?) > In unknown file: > 3 (basename #f #<undefined>) > In ice-9/boot-9.scm: > 1685:16 2 (raise-exception _ #:continuable? _) > 1780:13 1 (_ #<&compound-exception components: (#<&assertion-fail?>) > In unknown file: > 0 (backtrace #<undefined>) > > (exception wrong-type-arg (value "scm_to_utf8_stringn") (value "Wrong type > argument in position ~A (expecting ~A): ~S") (value (1 "string" #f)) (value > (#f))) > > > I was able to decipher the backtrace to *maybe* put together a fix, but > I'm unsure why the problem started. My best guess is that it started > with commit dfc6957a5af7d179d4618eb19d4f555c519bc6f2, even though I > can't find where the issue actually is, it looks fine to me! > > What seems to happen is that the `kernel-config' function now receive an > `arch' argument for an architecture that isn't actually supported by > that kernel, as is the case for [email protected]. And, correctly, > the function should not expect to ever get such arch value to begin > with, so we get a `(local-file #f)'. > > (define* (kernel-config arch #:key variant) > "Return a file-like object of the Linux-Libre build configuration file for > ARCH and optionally VARIANT, or #f if there is no such configuration." > (let* ((name (string-append (if variant (string-append variant "-") "") > (if (string=? "i386" arch) "i686" arch) > ".conf")) > (file (string-append "linux-libre/" name))) > (local-file (search-auxiliary-file file)))) > > I think it's fair for that function expect the arch to be valid (why > would you ask the config for an unsupported arch?). > > I think it should be possible to fix this by checking the arch is > supported at the call site: > >>From 77829140f14928e30cbe4e53c625be3ba2f5895f Mon Sep 17 00:00:00 2001 > From: Pierre Langlois <[email protected]> > Date: Thu, 8 Dec 2022 23:41:40 +0000 > Subject: [PATCH] gnu: make-linux-libre*: Do not get config for unsupported > systems. > > * gnu/packages/linux.scm (make-linux-libre*)[phases] <configure>: Check > arch is in supported-systems before calling configuration-file. > --- > gnu/packages/linux.scm | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm > index 5ae6366593..87fc9fe94c 100644 > --- a/gnu/packages/linux.scm > +++ b/gnu/packages/linux.scm > @@ -983,6 +983,7 @@ (define* (make-linux-libre* version gnu-revision source > supported-systems > (or (%current-target-system) > (%current-system)))))) > (and configuration-file arch > + (member arch supported-systems) > (configuration-file > arch > #:variant (version-major+minor > version)))) Thanks for investigating the issue. I'm hitting the same kind of problem (it seems) trying to migrate make-u-boot-package to gexps, so I'm revisiting this. It seems to me that the produced backtrace is overly cryptic; perhaps configuration-file should throw an exception with a more detailed error "unsupported architecture -- not generating configuration file" or similar? Or should the generate-package-cache machinery catch these #f itself? That's the same place where it fails in my case with this patch applied: https://issues.guix.gnu.org/60224#30, and with the reproducer: --8<---------------cut here---------------start------------->8--- (package-transitive-supported-systems u-boot-malta (%current-system)) --8<---------------cut here---------------end--------------->8--- I'm still digging into the issue to get a better understanding. -- Thanks, Maxim
