Subject: Re: bug#30311: efi-less grub install fails

From: Danny Milosavljevic <[email-masked]>
Date: Sun, 18 Feb 2018 17:49:22 +0100

Hi Mark,

> This change breaks my mips64el-linux GuixSD system, which is supported
> by GRUB, but where "--target=i386-pc" is obviously not appropriate.  On
> my system I need a different 'target' setting.

A pretty safe workaround is to substitute /sys/firmware/efi by /sys/firmware/non-efi
in ./grub-core/osdep/linux/platform.c for non-efi grub.

See attachment...

> In the rare cases where GRUB fails to detect the target, perhaps we
> could provide a way to specify an explicit GRUB 'target' in the grub
> configuration?

I still think that upstream should fix this bug.  It's silly that we have to
massage grub to not select a target which grub wasn't compiled for - we
patch/configure one part of grub so another part of grub isn't confused.

It's the same package :P

Bootloader configuration is complicated enough already.  In this case I'd rather
grub did the right thing automatically.
>From 263b1dc0de9643094bc41f4be47b4b2317e95d7c Mon Sep 17 00:00:00 2001
From: Danny Milosavljevic <[email-masked]>
Date: Sun, 18 Feb 2018 17:30:48 +0100
Subject: [FIXME] gnu: grub: Make sure that non-EFI grub doesn't try to use
 EFI.
Tags: patch

* gnu/packages/bootloader.scm (grub)[arguments]<:phases>
[patch-/sys/firmware/efi-out]: New phase.
(grub-efi)[arguments]<:phases>[patch-/sys/firmware/efi-out]: Delete phase.

Fixes <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30311>.
---
 gnu/packages/bootloaders.scm | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 59eb22f24..c09829e17 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -103,6 +103,11 @@
                      (copy-file (assoc-ref inputs "unifont") "unifont.bdf.gz")
                      (system* "gunzip" "unifont.bdf.gz")
                      #t))
+                  (add-after 'unpack 'patch-/sys/firmware/efi-out
+                   (lambda _
+                     (substitute* "grub-core/osdep/linux/platform.c"
+                      (("/sys/firmware/efi") "/sys/firmware/non-efi"))
+                     #t))
                   (add-before 'check 'disable-flaky-test
                     (lambda _
                       ;; This test is unreliable. For more information, see:
@@ -177,6 +182,7 @@ menu to select one of the installed operating systems.")
             `(cons "--with-platform=efi" ,flags))
            ((#:phases phases)
             `(modify-phases ,phases
+               (delete 'patch-/sys/firmware/efi-out)
                (add-after 'patch-stuff 'use-absolute-efibootmgr-path
                  (lambda* (#:key inputs #:allow-other-keys)
                    (substitute* "grub-core/osdep/unix/platform.c"