~ruther/guix-local

3382bfe9ea199086134d90e45e3d759aefed3dcf — Chris Marusich 9 years ago f4dc22b
system: Avoid using device paths in <menu-entry> device field.

This fixes a regression introduced by
1ef8b72a7f87afe7cffe52393d99e1b14e4770e1, in which we would incorrectly use a
device path in a label-based grub root search command, e.g. 'search --label
--set /dev/sda4'.

* gnu/system.scm (grub-device): New procedure.
(operating-system-grub.cfg, operating-system-parameters-file): Use it.
(read-boot-parameters): Handle device paths correctly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
1 files changed, 16 insertions(+), 6 deletions(-)

M gnu/system.scm
M gnu/system.scm => gnu/system.scm +16 -6
@@ 60,6 60,7 @@
  #:use-module (srfi srfi-26)
  #:use-module (srfi srfi-34)
  #:use-module (srfi srfi-35)
  #:use-module (rnrs bytevectors)
  #:export (operating-system
            operating-system?



@@ 738,7 739,7 @@ listed in OS.  The C library expects to find it under
                           (label label)

                           ;; The device where the kernel and initrd live.
                           (device (file-system-device store-fs))
                           (device (grub-device store-fs))
                           (device-mount-point
                            (file-system-mount-point store-fs))



@@ 753,6 754,14 @@ listed in OS.  The C library expects to find it under
    (grub-configuration-file (operating-system-bootloader os) entries
                             #:old-entries old-entries)))

(define (grub-device fs)
  "Given FS, a <file-system> object, return a value suitable for use as the
device in a <menu-entry>."
  (case (file-system-title fs)
    ((uuid) (file-system-device fs))
    ((label) (file-system-device fs))
    (else #f)))

(define (operating-system-parameters-file os)
  "Return a file that describes the boot parameters of OS.  The primary use of
this file is the reconstruction of GRUB menu entries for old configurations."


@@ 771,10 780,7 @@ this file is the reconstruction of GRUB menu entries for old configurations."
                    #$(operating-system-kernel-arguments os))
                   (initrd #$initrd)
                   (store
                    (device #$(case (file-system-title store)
                                ((uuid) (file-system-device store))
                                ((label) (file-system-device store))
                                (else #f)))
                    (device #$(grub-device store))
                    (mount-point #$(file-system-mount-point store))))
                #:set-load-path? #f)))



@@ 836,7 842,11 @@ this file is the reconstruction of GRUB menu entries for old configurations."
         (('store ('device device) _ ...)
          device)
         (_                                       ;the old format
          root)))
          ;; Root might be a device path like "/dev/sda1", which is not a
          ;; suitable GRUB device identifier.
          (if (string-prefix? "/" root)
              #f
              root))))

      (store-mount-point
       (match (assq 'store rest)