Subject: Re: bug#18082: 'guix system reconfigure' fails to install grub from standalone guix

From: Mark H Weaver <[email-masked]>
Date: Tue, 22 Jul 2014 22:41:26 -0400

[email-masked] (Ludovic Courtès) writes:

> Mark H Weaver <[email-masked]> skribis:
>
>> In guix/build/install.scm:
>>   47: 1 [install-grub # "/dev/sda" "/"]
>> In unknown file:
>>    ?: 0 [copy-file # "//boot/grub/grub.cfg.new"]
>>
>> ERROR: In procedure copy-file:
>> ERROR: Wrong type (expecting string): #<derivation /gnu/store/ynkp0ijahvg4x1q6bfdw34d28hhqmgb4-grub.cfg.drv => /gnu/store/6qwr8shknwlb1f1l0a7j6n3h8sg36bv7-grub.cfg b7ecf78>
>
> Oops, should be much better with this:
>
> diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
> index 57f4221..5737807 100644
> --- a/guix/scripts/system.scm
> +++ b/guix/scripts/system.scm
> @@ -299,7 +299,8 @@ actions."
>               (mlet %store-monad ((% (switch-to-system os)))
>                 (when grub?
>                   (unless (false-if-exception
> -                          (install-grub grub.cfg device "/"))
> +                          (install-grub (derivation->output-path grub.cfg)
> +                                        device "/"))
>                     (leave (_ "failed to install GRUB on device '~a'~%")
>                            device)))
>                 (return #t)))
>
> Can you confirm?

That helped, and now it successfully updates the grub.cfg file, but now
there's another problem.  When it tries to execvp 'grub-install', it
can't find it because PATH is set to:

  "/gnu/store/l5815c2iars8scdy82grfjjmxv9ahgv2-shadow-4.1.5.1/sbin"

Here's a transcript of the attempt, with (pk 'path (getenv "PATH"))
inserted just before the (system* "grub-install" ...) call in
guix/build/install.scm:

--8<---------------cut here---------------start------------->8---
root@jojen# echo $PATH
/run/setuid-programs:/run/current-system/profile/sbin:/root/.guix-profile/bin:/run/current-system/profile/bin
root@jojen# ~mhw/guix/pre-inst-env guix system reconfigure ~mhw/os-install.scm
The following derivation will be built:
   /gnu/store/1rj11nb1sv3jx2aalnqa7xl09nw6vfnr-grub.cfg.drv
killing process 1587
/gnu/store/qfacd34rj6v8b9mi21qx9mj3lkq3c2pg-system
/gnu/store/2yrylvn5c9apgfpppc5kfb24fi7mrnpl-grub-2.00
/gnu/store/ymxq6025wb6h3vp0glryykarz8r7hqhs-grub.cfg
activating system...
populating /etc from /gnu/store/89dn636ibbc2dy8wqaz30ck3dcli44jk-etc...
setting up setuid programs in '/run/setuid-programs'...
making '/gnu/store/qfacd34rj6v8b9mi21qx9mj3lkq3c2pg-system' the current system...

;;; (path "/gnu/store/l5815c2iars8scdy82grfjjmxv9ahgv2-shadow-4.1.5.1/sbin")
In execvp of grub-install: No such file or directory
Backtrace:
In ice-9/boot-9.scm:
 157: 14 [catch #t #<catch-closure 94cfcb0> ...]
In unknown file:
   ?: 13 [apply-smob/1 #<catch-closure 94cfcb0>]
In ice-9/boot-9.scm:
  63: 12 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 432: 11 [eval # #]
In ice-9/boot-9.scm:
2401: 10 [save-module-excursion #<procedure 94dfca0 at ice-9/boot-9.scm:4045:3 ()>]
4050: 9 [#<procedure 94dfca0 at ice-9/boot-9.scm:4045:3 ()>]
1724: 8 [%start-stack load-stack ...]
1729: 7 [#<procedure 94e4708 ()>]
In unknown file:
   ?: 6 [primitive-load "/home/mhw/guix/scripts/guix"]
In guix/ui.scm:
 656: 5 [run-guix-command system "reconfigure" "/home/mhw/os-install.scm"]
In ice-9/boot-9.scm:
 157: 4 [catch srfi-34 #<procedure 98f6110 at guix/ui.scm:205:2 ()> ...]
 157: 3 [catch system-error ...]
In guix/monads.scm:
 430: 2 [run-with-store # ...]
In guix/scripts/system.scm:
 301: 1 [#<procedure afe7c40 at guix/scripts/system.scm:299:13 (store)> #]
In unknown file:
   ?: 0 [scm-error misc-error #f "~A" ("failed to install GRUB") #f]

ERROR: In procedure scm-error:
ERROR: failed to install GRUB
root@jojen# 
--8<---------------cut here---------------end--------------->8---

     Thanks,
       Mark