~ruther/guix-local

6ffd11f129405c7bd663201096d8fcfcde6344a9 — Ludovic Courtès 12 years ago d5b429a
system: Prevent grub.cfg from being GC'd.

* guix/build/install.scm (install-grub): Use 'copy-file' instead of
  'symlink' for GRUB.CFG.
1 files changed, 12 insertions(+), 5 deletions(-)

M guix/build/install.scm
M guix/build/install.scm => guix/build/install.scm +12 -5
@@ 38,11 38,18 @@
(define* (install-grub grub.cfg device mount-point)
  "Install GRUB with GRUB.CFG on DEVICE, which is assumed to be mounted on
MOUNT-POINT.  Return #t on success."
  (mkdir-p (string-append mount-point "/boot/grub"))
  (symlink grub.cfg (string-append mount-point "/boot/grub/grub.cfg"))
  (zero? (system* "grub-install" "--no-floppy"
                  "--boot-directory" (string-append mount-point "/boot")
                  device)))
  (let* ((target (string-append mount-point "/boot/grub/grub.cfg"))
         (pivot  (string-append target ".new")))
    (mkdir-p (dirname target))

    ;; Copy GRUB.CFG instead of just symlinking it since it's not a GC root.
    ;; Do that atomically.
    (copy-file grub.cfg pivot)
    (rename-file pivot target)

    (zero? (system* "grub-install" "--no-floppy"
                    "--boot-directory" (string-append mount-point "/boot")
                    device))))

(define (evaluate-populate-directive directive target)
  "Evaluate DIRECTIVE, an sexp describing a file or directory to create under