Hi Guix! I've been getting errors while running `guix pull' on an aarch64 system, during the final guix-package-cache step: --8<---------------cut here---------------start------------->8--- (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 # ?) 1752:10 18 (with-exception-handler _ _ #:unwind? _ # _) In guix/repl.scm: 99:21 17 (_) In unknown file: 16 (_ # # ?) 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 # _ _) In gnu/packages.scm: 390:9 11 (expand-cache . _) In guix/packages.scm: 1317:17 10 (supported-package? # ?) In guix/memoization.scm: 101:0 9 (_ # # ?) 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 #) In guix/gexp.scm: 460:52 4 (%local-file #f # ?) In unknown file: 3 (basename #f #) 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 #) (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))) --8<---------------cut here---------------end--------------->8--- 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 linux-libre@4.14.300. And, correctly, the function should not expect to ever get such arch value to begin with, so we get a `(local-file #f)'. --8<---------------cut here---------------start------------->8--- (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)))) --8<---------------cut here---------------end--------------->8--- 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: