Subject: bug#30879: Commit bc499b113 broke guix on [email-masked], improper <operating-system> field initialization

From: Eric Bavier <[email-masked]>
Date: Tue, 20 Mar 2018 10:43:02 -0500

Hello Guix,

On the master branch (5d818b3557cc3b546d5bd0639359c14c7c0ab685), when
configured with [email-masked], I get the following backtrace when
running `make`.

Backtrace:
In ice-9/boot-9.scm:
1739: 19 [#<procedure 34ebc6c0 ()>]
In unknown file:
   ?: 18 [primitive-load "/home/users/bavier/src/guix/./build-aux/compile-all.scm"]
In guix/build/compile.scm:
 158: 17 [compile-files "." "/home/users/bavier/src/guix" ...]
 107: 16 [load-files "." # # ...]
In ice-9/boot-9.scm:
2900: 15 [resolve-interface (gnu tests base) #:select ...]
2825: 14 [#<procedure 34dfc200 at ice-9/boot-9.scm:2813:4 (name #:optional autoload version #:key ensure)> # ...]
3101: 13 [try-module-autoload (gnu tests base) #f]
2412: 12 [save-module-excursion #<procedure 35c46750 at ice-9/boot-9.scm:3102:17 ()>]
3121: 11 [#<procedure 35c46750 at ice-9/boot-9.scm:3102:17 ()>]
In unknown file:
   ?: 10 [primitive-load-path "gnu/tests/base" ...]
In gnu/tests/base.scm:
 390: 9 [#<procedure 38c523a0 ()>]
  63: 8 [run-basic-test # # "basic" ...]
In ice-9/eval.scm:
 387: 7 [eval # #]
 387: 6 [eval # #]
 411: 5 [eval # #]
 387: 4 [eval # #]
In unknown file:
   ?: 3 [filter #<procedure 35c461e0 at ice-9/eval.scm:416:20 (a)> (# # # #)]
In ice-9/eval.scm:
 411: 2 [eval # #]
 411: 1 [eval # #]
 387: 0 [eval # #]

ice-9/eval.scm:387:11: In procedure eval:
ice-9/eval.scm:387:11: In procedure mapped-device-target: Wrong type argument: #<<file-system> device: "my-root" title: label mount-point: "/" type: "ext4" flags: () options: #f mount?: #t needed-for-boot?: #f check?: #t create-mount-point?: #f dependencies: () location: ((line . 209) (column . 24) (filename . "gnu/tests.scm"))>

(as an aside: maybe would could postpone compilation of test modules
until `make check`).

I git bisect'd this failure to commit
bc499b113a598c0e7863da9887a4133472985713, which added the
'initrd-modules' field to the (@ (gnu system) <operating-system>)
record.

The %simple-os from (gnu tests base) seems improperly initialized.  In
particular, the fields seem to be shifted:

scheme@(guile-user)> (@@ (gnu tests base) %simple-os)
$1 = #<<operating-system>
       kernel: #<package [email-masked] ...>
       kernel-arguments: ()
       bootloader: #<<bootloader-configuration> bootloader: ...>
       initrd: #<procedure base-initrd ...>
       initrd-modules: ()
       firmware: "komputilo"
       host-name: #f
       hosts-file: ()
       mapped-devices: (#<<file-system> device: "my-root" ...> #<<file-system> ...> ...)
       file-systems: ()
       swap-devices: (#<<user-account> name: "alice" ...> ...)
       ...

Notice e.g. the "firmware" field has that value that should be in
"host-name", which has the value "hosts-file" should have, and
"mapped-devices" has the value "file-systems" should have, etc.

If you explicitely specify the new "initrd-modules" field this commit
added in (@ (gnu tests) %simple-os), then compilation proceeds as
expected.

-- 
Eric Bavier, Scientific Libraries, Cray Inc.