Subject: [bug#55231] [PATCH v1] initrd: Allow extra search paths with ‘initrd-extra-module-paths’

From: Maxim Cournoyer <[email-masked]>
Date: Sun, 16 Feb 2025 18:05:37 +0900

Hi Morgan,

Morgan Arnold <[email-masked]> writes:

> Hi all,
>
>> I'm not sure if what I'm proposing would actually work.
>
> How prophetic.
>
> I did some more testing with the proposed change to `derivation`, and
> it seems to be causing a weird issue. I didn't think that propagating
> non-substitutability would be much of a problem, since there are very
> few non-substitutable packages, but I was surprised to find that this
> change makes almost all packages non-substitutable! I did some
> REPL-ing to find the culprit, and it when I traced it back, I found
> that all of my non-substitutable derivations appeared to be so because
> their dependency graph included a derivation called `#<derivation
> /gnu/store/qbrwrmdgnfx3p9gl499f5pyhv0fcnw0a-gcc-11.4.0.drv =>
> /gnu/store/d69awcc5wahh71amx0dmgaimsdvvp2bg-gcc-11.4.0-lib
> 7fc7c9bb99b0>`.

That's probably the GCC implicitly added by gnu-build-system, which is
listed in the %final-inputs variable.

> Unfortunately, I cannot for the life of me figure out what this
> derivation is, or why it isn't substitutable (all of its inputs are
> substitutable, and I can't find any relevant package explicitly marked
> as non-substitutable). I wonder if maybe it has something to do with
> the `gnu-build-system`? It appears to be an input of `bash-minimal`,
> which is what leads me to that suspicion. If I could figure out what
> this derivation is and why it's non-substitutable, I think that the
> change that the proposed change to `derivation` would work (and, in
> some sense, implement what ought intuitively to be the default
> behaviour, as Brian noted).

I'm not sure what's wrong, but I think we could start by investigating
why this changes causes 29 new failures when running:

--8<---------------cut here---------------start------------->8---
export SCM_LOG_DRIVER_FLAGS="--brief=no --errors-only=yes" VERBOSE=1
make check TESTS=tests/derivations.scm
$ make check TESTS=tests/derivations.scm 
make  check-recursive
make[1] : on entre dans le répertoire « /home/maxim/src/guix-spare »
Making check in po/guix
make[2] : on entre dans le répertoire « /home/maxim/src/guix-spare/po/guix »
make[2]: Rien à faire pour « check ».
make[2] : on quitte le répertoire « /home/maxim/src/guix-spare/po/guix »
Making check in po/packages
make[2] : on entre dans le répertoire « /home/maxim/src/guix-spare/po/packages »
make[2]: Rien à faire pour « check ».
make[2] : on quitte le répertoire « /home/maxim/src/guix-spare/po/packages »
make[2] : on entre dans le répertoire « /home/maxim/src/guix-spare »
Compiling Scheme modules...
Compiling Scheme modules...
Compiling Scheme modules...
Compiling Scheme modules...
Compiling Scheme modules...
Compiling Scheme modules...
Compiling Scheme modules...
Compiling Scheme modules...
make  check-TESTS check-local
make[3] : on entre dans le répertoire « /home/maxim/src/guix-spare »
make[4] : on entre dans le répertoire « /home/maxim/src/guix-spare »
PASS: tests/derivations.scm - parse & export 
PASS: tests/derivations.scm - add-to-store, flat 
PASS: tests/derivations.scm - add-to-store, recursive 
PASS: tests/derivations.scm - derivation with no inputs 
PASS: tests/derivations.scm - build derivation with 1 source 
FAIL: tests/derivations.scm - derivation fails but keep going 
PASS: tests/derivations.scm - identical files are deduplicated 
PASS: tests/derivations.scm - built-in-builders 
PASS: tests/derivations.scm - unknown built-in builder 
PASS: tests/derivations.scm - 'download' built-in builder 
PASS: tests/derivations.scm - 'download' built-in builder, invalid hash 
PASS: tests/derivations.scm - 'download' built-in builder, not found 
PASS: tests/derivations.scm - 'download' built-in builder, not fixed-output 
PASS: tests/derivations.scm - 'download' built-in builder, no fixed-output hash 
PASS: tests/derivations.scm - 'download' built-in builder, check mode 
PASS: tests/derivations.scm - 'git-download' built-in builder 
PASS: tests/derivations.scm - 'git-download' built-in builder, invalid hash 
PASS: tests/derivations.scm - 'git-download' built-in builder, invalid commit 
PASS: tests/derivations.scm - 'git-download' built-in builder, not found 
PASS: tests/derivations.scm - derivation-name 
PASS: tests/derivations.scm - derivation-output-names 
PASS: tests/derivations.scm - offloadable-derivation? 
PASS: tests/derivations.scm - substitutable-derivation? 
PASS: tests/derivations.scm - fixed-output-derivation? 
PASS: tests/derivations.scm - fixed-output-derivation?, no hash 
PASS: tests/derivations.scm - fixed-output derivation 
PASS: tests/derivations.scm - fixed-output derivation: output paths are equal 
PASS: tests/derivations.scm - fixed-output derivation, recursive 
PASS: tests/derivations.scm - fixed-output derivation, invalid hash size 
PASS: tests/derivations.scm - derivation with a fixed-output input 
PASS: tests/derivations.scm - derivation with duplicate fixed-output inputs 
PASS: tests/derivations.scm - derivation with equivalent fixed-output inputs 
PASS: tests/derivations.scm - multiple-output derivation 
PASS: tests/derivations.scm - multiple-output derivation, non-alphabetic order 
PASS: tests/derivations.scm - read-derivation vs. derivation 
PASS: tests/derivations.scm - read-derivation with hash = #f 
PASS: tests/derivations.scm - multiple-output derivation, derivation-path->output-path 
PASS: tests/derivations.scm - user of multiple-output derivation 
PASS: tests/derivations.scm - derivation with #:references-graphs 
PASS: tests/derivations.scm - derivation #:allowed-references, ok 
PASS: tests/derivations.scm - derivation #:allowed-references, not allowed 
PASS: tests/derivations.scm - derivation #:allowed-references, self allowed 
PASS: tests/derivations.scm - derivation #:allowed-references, self not allowed 
PASS: tests/derivations.scm - derivation #:disallowed-references, ok 
PASS: tests/derivations.scm - derivation #:disallowed-references, not ok 
PASS: tests/derivations.scm - derivation #:leaked-env-vars 
PASS: tests/derivations.scm - build derivation with coreutils 
PASS: tests/derivations.scm - build-expression->derivation and invalid module name 
FAIL: tests/derivations.scm - build-expression->derivation and builder encoding 
FAIL: tests/derivations.scm - build-expression->derivation and derivation-prerequisites 
FAIL: tests/derivations.scm - derivation-prerequisites and valid-derivation-input? 
FAIL: tests/derivations.scm - build-expression->derivation without inputs 
FAIL: tests/derivations.scm - build-expression->derivation and max-silent-time 
FAIL: tests/derivations.scm - build-expression->derivation and timeout 
FAIL: tests/derivations.scm - build-derivations with specific output 
FAIL: tests/derivations.scm - build-expression->derivation and derivation-build-plan 
FAIL: tests/derivations.scm - derivation-build-plan when outputs already present 
FAIL: tests/derivations.scm - derivation-build-plan and substitutes 
FAIL: tests/derivations.scm - derivation-build-plan and substitutes, non-substitutable build 
FAIL: tests/derivations.scm - derivation-build-plan and substitutes, non-substitutable dep 
FAIL: tests/derivations.scm - derivation-build-plan and substitutes, local build 
FAIL: tests/derivations.scm - derivation-build-plan in 'check' mode 
FAIL: tests/derivations.scm - derivation-build-plan, topological ordering 
FAIL: tests/derivations.scm - derivation-input-fold 
FAIL: tests/derivations.scm - substitution-oracle and #:substitute? #f 
FAIL: tests/derivations.scm - build-expression->derivation with expression returning #f 
FAIL: tests/derivations.scm - build-expression->derivation with two outputs 
FAIL: tests/derivations.scm - build-expression->derivation with one input 
FAIL: tests/derivations.scm - build-expression->derivation with modules 
FAIL: tests/derivations.scm - build-expression->derivation: same fixed-output path 
FAIL: tests/derivations.scm - build-expression->derivation with a fixed-output input 
FAIL: tests/derivations.scm - build-expression->derivation produces recursive fixed-output 
FAIL: tests/derivations.scm - build-expression->derivation uses recursive fixed-output 
FAIL: tests/derivations.scm - build-expression->derivation with #:references-graphs 
FAIL: tests/derivations.scm - derivation-properties 
FAIL: tests/derivations.scm - map-derivation 
PASS: tests/derivations.scm - map-derivation, sources
===================================================
   GNU Guix 1.3.0.77462-364394: ./test-suite.log
===================================================

# TOTAL: 77
# PASS:  48
# SKIP:  0
# XFAIL: 0
# FAIL:  29
# XPASS: 0
# ERROR: 0

.. contents:: :depth: 2
--8<---------------cut here---------------end--------------->8---
  
-- 
Thanks,
Maxim