Subject: bug#20067: [PATCH] system: grub: Introduce foreign-menu-entry.

From: [email-masked] (Ludovic Courtès)
Date: Wed, 03 Aug 2016 18:52:32 +0200

Hi!

Tomáš Čech <[email-masked]> skribis:

> * gnu/system/grub(foreign-menu-entry): New record type.
>
> menu-entry type is suitable for kernel and initrd from GuixSD as it is looking
> for menu-entry-linux/bzImage for kernel in every case which makes pasing any
> other form impossible.

AIUI, this is a followup to <http://bugs.gnu.org/20067>, and it’s
admittedly a shame that this isn’t fixed!

I still think that the approach proposed at
<http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20067#10> is more
appropriate; ‘menu-entry’ would always work, no duplication would be
necessary.

As a stop-gap measure, I would prefer to (1) allow:

  (menu-entry
    ;; …
    (linux #~(string-append #$kernel "/bzImage")))

(2) remove the “/bzImage” assumption and use the above idiom everywhere
in the current code, and (3) and have a hack along these lines to
correctly interpret (string-append …) in the ‘parameters’ file:

diff --git a/gnu/system.scm b/gnu/system.scm
index d6bf6c4..467d907 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -766,7 +766,11 @@ this file is the reconstruction of GRUB menu entries for old configurations."
      (boot-parameters
       (label label)
       (root-device root)
-      (kernel linux)
+      (kernel (match linux
+                (('string-append (? string? strings) ...)
+                 (string-concatenate strings))
+                (_
+                 linux)))
       (kernel-arguments
        (match (assq 'kernel-arguments rest)
          ((_ args) args)

Thoughts?

Thanks,
Ludo’.