diff options
Diffstat (limited to 'gnu/bootloader/grub.scm')
-rw-r--r-- | gnu/bootloader/grub.scm | 49 |
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. |