Subject: Re: bug#27231: regression?: grub-configuration for grub-efi does not return a bootloader-configuration

From: Alex Kost <[email-masked]>
Date: Sun, 04 Jun 2017 16:38:11 +0300

pelzflorian (Florian Pelz) (2017-06-04 12:47 +0200) wrote:

> Hello,
>
> My GuixSD configuration (see attachment) for UEFI got broken some
> three weeks ago but I’ve only now caught up with my e-mail and “fixed”
> it.
>
> root@floriannotebook ~# guix system reconfigure /home/florian/keep/guixsd-asus.scm
> Backtrace:
>            9 (apply-smob/1 #<catch-closure 22dba40>)
> In ice-9/boot-9.scm:
>     713:2  8 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
> In ice-9/eval.scm:
>     619:8  7 (_ #(#(#<directory (guile-user) 235e140>)))
> In ice-9/boot-9.scm:
>    2316:4  6 (save-module-excursion _)
>   3823:12  5 (_)
> In guix/ui.scm:
>    1311:8  4 (run-guix-command _ . _)
> In ice-9/boot-9.scm:
>     837:9  3 (catch _ _ #<procedure 7f55cc0669a8 at guix/ui.scm:450…> …)
>     837:9  2 (catch _ _ #<procedure 7f55cc0669c0 at guix/ui.scm:511…> …)
> In guix/scripts/system.scm:
>    1006:8  1 (_)
>    885:27  0 (process-action _ _ _)
>
> guix/scripts/system.scm:885:27: In procedure process-action:
> guix/scripts/system.scm:885:27: In procedure bootloader-configuration-device: Wrong type argument: #<<grub-configuration> grub: #<package [email-masked] gnu/packages/bootloaders.scm:142 314cb40> device: "/dev/sda" menu-entries: () default-entry: 0 timeout: 5 theme: #<<grub-theme> images: (#<<grub-image> aspect-ratio: 4/3 file: #<<file-append> base: #<origin #<<git-reference> url: "git://git.savannah.gnu.org/guix/guix-artwork.git" commit: "6998d30" recursive?: #f> gjomvsacge5nz76kqiyzbpiin32l7nn672voskuo7ahz3za56jga () 3a4d300> suffix: ("/grub/GuixSD-fully-black-4-3.svg")>>) color-normal: ((fg . light-gray) (bg . black)) color-highlight: ((fg . yellow) (bg . black))>>

Oops, Guix breaks backward compatibility sometimes :-)

This is a limitation of 'grub-configuration' macro: that backtrace
happened because you have 'grub' field *not* in the first place of your
'grub-configuration'.

> I ‘guix pull’ed before reconfiguring.
>
> I used this:
>
>   (bootloader (grub-configuration (device "/dev/sda")
>                                   (grub grub-efi)))

Note that this will work if you put (grub grub-efi) in the first place:

  (grub-configuration (grub grub-efi)
                      (device "/dev/sda"))

> Then ‘guix system reconfigure /home/florian/keep/guixsd-asus.scm’ kept
> failing. Debugging by (load)ing .guix-real in the Guile REPL and using
> breakpoints showed me that this was not a valid
> (bootloader-configuration?).
>
> Replacing the above by
>
>   (bootloader (bootloader-configuration (bootloader grub-efi-bootloader)
>                                         (device "/dev/sda")))
>
> fixed it today and I can ‘guix system reconfigure’ again.

You figured it out!  I would stick to this variant instead of using
'grub-configuration' wrapper, but that's me :-)

> I don’t know why this broke and if it breaks for others too
> (apparently noone has filed a bug yet), which is why I’m filing a bug
> here.

I was affected as well, but I didn't consider it a bug, just a change in
the API.  In the past, I had:

   (grub-configuration (grub my-grub)
                       (device "/dev/sda")
                       (theme (grub-theme))))

And I replaced it with:

   (bootloader-configuration
    (bootloader (bootloader
                 (inherit grub-bootloader)
                 (name 'fake-grub)
                 (package my-grub)))
    (device "/dev/sda")
    (theme (grub-theme)))

-- 
Alex