Subject: bug#44872: GuixSD 1.2.0 installer fails with exception when formatting drive

From: Ludovic Courtès <[email-masked]>
Date: Thu, 22 Apr 2021 16:48:12 +0200

Hi,

Tim Magee <[email-masked]> skribis:

> In ./gnu/installer/parted.scm:
>   1258:19 19 (user-partition->file-system _)
> In gnu/system/uuid.scm:
>     317:2 18 (uuid->string . _)
> In ice-9/boot-9.scm:
>   1669:16 17 (raise-exception _ #:continuable? _)
>   1667:16 16 (raise-exception _ #:continuable? _)
>   1667:16 15 (raise-exception _ #:continuable? _)
>   1667:16 14 (raise-exception _ #:continuable? _)
>   1667:16 13 (raise-exception _ #:continuable? _)
>   1667:16 12 (raise-exception _ #:continuable? _)
>   1667:16 11 (raise-exception _ #:continuable? _)
>   1667:16 10 (raise-exception _ #:continuable? _)
>   1667:16  9 (raise-exception _ #:continuable? _)
>   1667:16  8 (raise-exception _ #:continuable? _)
>   1669:16  7 (raise-exception _ #:continuable? _)
>   1764:13  6 (_ #<&compound-exception components: (#<&error> #<&origin: "match"> #<&message message: "no matching pattern"> #<&irritants irritants: (#f ext4)> #<&exception-with-kind-and-arg...>)
> In ice-9/eval.scm:
>     619:8  5 (_ #(#(#<directory (guile-user) 7f10d0fb6f00> #<<installer> name: newt init: #<procedure init ()> exit: #<procedure exit ()> exit-error: #<procedure exit-error (file key args)> f...>) ...))
>     619:8  4 (_ #(#(#(#<directory (guile-user) 7f10d0fb6f00> #<<installer> name: newt init: #<procedure init ()> exit: #<procedure exit ()> exit-error: #<procedure exit-error (file key args)> f...>) ...))
> In ice-9/ports.scm:
>    463:17  3 (call-with-output-file _ _ #:binary _ #:encoding _)
> In ice-9/eval.scm:
>     691:9  2 (_ #(#(#<directory (guile-user) 7f10d0fbf00> match-error ("match" "no matching pattern" (#f ext4))) #<output: /tmp/last-installer-error 19>))
>     159:9  1 (_ #(#(#<directory (guile-user) 7f10d0fbf00> match-error ("match" "no matching pattern" (#f ext4))) #<output: /tmp/last-installer-error 19>))
> In unknown file:
>            0 (make-stack #t)
> ice-9/eval.scm:159:9: Throw to key `match-error' with args `("match" "no matching pattern" (#f ext4))'.

Apparently what happens here is that ‘read-partition-uuid’, called by
‘user-partition->file-system’, returns #f, and that value is then passed
to ‘uuid->string’.

There are two ways ‘read-partition-uuid’ can return #f:

  1. the partition doesn’t have one of the types listed in
     ‘%partition-uuid-readers’;

  2. the partition does not exist or is EIO (see use of ‘ENOENT-safe’ in
     ‘partition-field-reader’).

So most likely the problem is #2.

Now, when we reach this code (from ‘user-partitions->configuration’),
partitions have been created.  I wonder if there’s a possibility that
the kernel hasn’t yet updated /dev by the time we reach this?

‘free-parted’ is supposed to avoid that though.

WDYT, Mathieu?

Ludo’.