~ruther/guix-local

5babe521c8adc722c2411b255cbeeef308339d06 — Ludovic Courtès 9 years ago 7acd71d
system: Don't emit a GRUB 'search' command when passed a GRUB file name.

Reported by Tomáš Čech <tcech@suse.com>
at <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20067#26>.

* gnu/system/grub.scm (grub-root-search): Don't emit anything when FILE
is a string that does not denote an absolute file name.
1 files changed, 17 insertions(+), 12 deletions(-)

M gnu/system/grub.scm
M gnu/system/grub.scm => gnu/system/grub.scm +17 -12
@@ 234,18 234,23 @@ fi~%"
  "Return the GRUB 'search' command to look for ROOT-FS, which contains FILE,
a gexp.  The result is a gexp that can be inserted in the grub.cfg-generation
code."
  (case (file-system-title root-fs)
    ;; Preferably refer to ROOT-FS by its UUID or label.  This is more
    ;; efficient and less ambiguous, see <>.
    ((uuid)
     (format #f "search --fs-uuid --set ~a"
             (uuid->string (file-system-device root-fs))))
    ((label)
     (format #f "search --label --set ~a"
             (file-system-device root-fs)))
    (else
     ;; As a last resort, look for any device containing FILE.
     #~(format #f "search --file --set ~a" #$file))))
  ;; Usually FILE is a file name gexp like "/gnu/store/…-linux/vmlinuz", but
  ;; it can also be something like "(hd0,msdos1)/vmlinuz" in the case of
  ;; custom menu entries.  In the latter case, don't emit a 'search' command.
  (if (and (string? file) (not (string-prefix? "/" file)))
      ""
      (case (file-system-title root-fs)
        ;; Preferably refer to ROOT-FS by its UUID or label.  This is more
        ;; efficient and less ambiguous, see <>.
        ((uuid)
         (format #f "search --fs-uuid --set ~a"
                 (uuid->string (file-system-device root-fs))))
        ((label)
         (format #f "search --label --set ~a"
                 (file-system-device root-fs)))
        (else
         ;; As a last resort, look for any device containing FILE.
         #~(format #f "search --file --set ~a" #$file)))))

(define* (grub-configuration-file config store-fs entries
                                  #:key