Subject: Re: bug#21224: guix system init --no-grub doesn't work

From: [email-masked] (Ludovic Courtès)
Date: Tue, 25 Aug 2015 15:50:00 +0200

Mark H Weaver <[email-masked]> skribis:

> Mark H Weaver <[email-masked]> writes:
>
>> I'm in the early stages of adding GuixSD for the Lemote Yeeloong, and so
>> for now would like to avoid getting grub working on the Yeeloong.  So,
>> I tried running "guix system init config.scm /target --no-grub", and
>> this is what happens:
>>
>>   /gnu/store/...-system
>>
>>   initializing operating system under '/target'...
>>   guix system: error: build failed: path `/gnu/store/...-grub.cfg' is not valid
>
> I ran into the same problem while porting GuixSD to MIPS, before I had
> GRUB working.
>
> The problem here is that the method for copying the necessary store
> items to the target directory is to copy grub.cfg and its transitive
> closure, using (maybe-copy grub.cfg).

Right.

> However, if --no-grub is specified, then grub.cfg is not built.

I see.  Good catch!

> The preliminary approach I used successfully was to build and install
> grub.cfg even if --no-grub is specified, although 'grub-install' is not
> run in that case.  Here's the patch I used:
>
> diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
> index 45f5982..6ec1f29 100644
> --- a/guix/scripts/system.scm
> +++ b/guix/scripts/system.scm
> @@ -331,8 +331,10 @@ boot directly to the kernel or to the bootloader."
>                                               (if (eq? 'init action)
>                                                   '()
>                                                   (previous-grub-entries))))
> -       (drvs   -> (if (and grub? (memq action '(init reconfigure)))
> -                      (list sys grub grub.cfg)
> +       (drvs   -> (if (memq action '(init reconfigure))
> +                      (if grub?
> +                          (list sys grub.cfg grub)
> +                          (list sys grub.cfg))

Sounds like a reasonable approach.  We’d be building slightly too much
in the --no-grub case, but that’s probably acceptable.

WDYT?

Thanks,
Ludo’.