aboutsummaryrefslogtreecommitdiff
path: root/gnu/bootloader/grub.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/bootloader/grub.scm')
-rw-r--r--gnu/bootloader/grub.scm49
1 files changed, 33 insertions, 16 deletions
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 880491c983..a9f0875f36 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -55,6 +55,7 @@
grub-bootloader
grub-efi-bootloader
+ grub-mkrescue-bootloader
grub-configuration))
@@ -316,16 +317,14 @@ code."
STORE-FS, a <file-system> object. OLD-ENTRIES is taken to be a list of menu
entries corresponding to old generations of the system."
(define all-entries
- (append entries (map menu-entry->boot-parameters
- (bootloader-configuration-menu-entries config))))
-
- (define (boot-parameters->gexp params)
- (let ((device (boot-parameters-store-device params))
- (device-mount-point (boot-parameters-store-mount-point params))
- (label (boot-parameters-label params))
- (kernel (boot-parameters-kernel params))
- (arguments (boot-parameters-kernel-arguments params))
- (initrd (boot-parameters-initrd params)))
+ (append entries (bootloader-configuration-menu-entries config)))
+ (define (menu-entry->gexp entry)
+ (let ((device (menu-entry-device entry))
+ (device-mount-point (menu-entry-device-mount-point entry))
+ (label (menu-entry-label entry))
+ (kernel (menu-entry-linux entry))
+ (arguments (menu-entry-linux-arguments entry))
+ (initrd (menu-entry-initrd entry)))
;; Here DEVICE is the store and DEVICE-MOUNT-POINT is its mount point.
;; Use the right file names for KERNEL and INITRD in case
;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
@@ -341,11 +340,10 @@ entries corresponding to old generations of the system."
#$(grub-root-search device kernel)
#$kernel (string-join (list #$@arguments))
#$initrd))))
-
(mlet %store-monad ((sugar (eye-candy config
- (boot-parameters-store-device
+ (menu-entry-device
(first all-entries))
- (boot-parameters-store-mount-point
+ (menu-entry-device-mount-point
(first all-entries))
#:system system
#:port #~port)))
@@ -362,12 +360,12 @@ set default=~a
set timeout=~a~%"
#$(bootloader-configuration-default-entry config)
#$(bootloader-configuration-timeout config))
- #$@(map boot-parameters->gexp all-entries)
+ #$@(map menu-entry->gexp all-entries)
#$@(if (pair? old-entries)
#~((format port "
submenu \"GNU system, old configurations...\" {~%")
- #$@(map boot-parameters->gexp old-entries)
+ #$@(map menu-entry->gexp old-entries)
(format port "}~%"))
#~()))))
@@ -391,7 +389,20 @@ submenu \"GNU system, old configurations...\" {~%")
(unless (zero? (system* grub "--no-floppy"
"--boot-directory" install-dir
device))
- (error "failed to install GRUB")))))
+ (error "failed to install GRUB (BIOS)")))))
+
+(define install-grub-efi
+ #~(lambda (bootloader efi-dir mount-point)
+ ;; Install GRUB onto the EFI partition mounted at EFI-DIR, for the
+ ;; system whose root is mounted at MOUNT-POINT.
+ (let ((grub-install (string-append bootloader "/sbin/grub-install"))
+ (install-dir (string-append mount-point "/boot")))
+ ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
+ ;; root partition.
+ (setenv "GRUB_ENABLE_CRYPTODISK" "y")
+ (unless (zero? (system* grub-install "--boot-directory" install-dir
+ "--efi-directory" efi-dir))
+ (error "failed to install GRUB (EFI)")))))
@@ -410,9 +421,15 @@ submenu \"GNU system, old configurations...\" {~%")
(define* grub-efi-bootloader
(bootloader
(inherit grub-bootloader)
+ (installer install-grub-efi)
(name 'grub-efi)
(package grub-efi)))
+(define* grub-mkrescue-bootloader
+ (bootloader
+ (inherit grub-efi-bootloader)
+ (package grub-hybrid)))
+
;;;
;;; Compatibility macros.