emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#55631: closed ([PATCH] gnu: grub: add removable grub-efi bootloader


From: GNU bug Tracking System
Subject: bug#55631: closed ([PATCH] gnu: grub: add removable grub-efi bootloader option)
Date: Mon, 06 Jun 2022 20:14:02 +0000

Your message dated Mon, 06 Jun 2022 22:12:50 +0200
with message-id <871qw1czzx.fsf_-_@gnu.org>
and subject line Re: bug#55631: [PATCH] gnu: grub: add removable grub-efi 
bootloader option
has caused the debbugs.gnu.org bug report #55631,
regarding [PATCH] gnu: grub: add removable grub-efi bootloader option
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
55631: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=55631
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: [PATCH] gnu: grub: add removable grub-efi bootloader option Date: Tue, 24 May 2022 23:32:54 -0500
For single-disk installs (external USBs) and for amnesiac UEFIs, Guix is not
found using its default Grub EFI bootloader location of
/boot/efi/EFI/Guix/grubx64.efi means the Guix install will not be found.

To handle this, we can place the bootloader file in the UEFI specification
location, overwriting any other OS that may have placed a file there. This
location is namely /boot/efi/EFI/BOOT/BOOTX64.efi. Grub has explicit support
for this location/situation with the `--removable` flag.
---
 gnu/bootloader/grub.scm | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 120cd55012..65d7171432 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
+;;; Copyright © 2022 Karl Hallsby <karl@hallsby.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -50,10 +51,12 @@ (define-module (gnu bootloader grub)
             grub-theme-color-highlight
             grub-theme-gfxmode
 
+            install-grub-efi-removable
             install-grub-efi-netboot
 
             grub-bootloader
             grub-efi-bootloader
+            grub-efi-removable-bootloader
             grub-efi-netboot-bootloader
             grub-mkrescue-bootloader
             grub-minimal-bootloader
@@ -608,6 +611,31 @@ (define install-grub-efi
                         "--bootloader-id=Guix"
                         "--efi-directory" target-esp)))))
 
+(define install-grub-efi-removable
+  #~(lambda (bootloader efi-dir mount-point)
+      ;; NOTE: mount-point is /mnt in guix system init /etc/config.scm 
/mnt/point
+      ;; NOTE: efi-dir comes from target list of booloader configuration
+      ;; There is nothing useful to do when called in the context of a disk
+      ;; image generation.
+      (when efi-dir
+        ;; 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"))
+              ;; When installing Guix, it's common to mount EFI-DIR below
+              ;; MOUNT-POINT rather than /boot/efi on the live image.
+              (target-esp (if (file-exists? (string-append mount-point 
efi-dir))
+                              (string-append mount-point efi-dir)
+                              efi-dir)))
+          ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
+          ;; root partition.
+          (setenv "GRUB_ENABLE_CRYPTODISK" "y")
+          (invoke/quiet grub-install "--boot-directory" install-dir
+                        "--removable"
+                        ;; "--no-nvram"
+                        "--bootloader-id=Guix"
+                        "--efi-directory" target-esp)))))
+
 (define (install-grub-efi-netboot subdir)
   "Define a grub-efi-netboot bootloader installer for installation in SUBDIR,
 which is usually efi/Guix or efi/boot."
@@ -734,6 +762,12 @@ (define grub-efi-bootloader
    (name 'grub-efi)
    (package grub-efi)))
 
+(define grub-efi-removable-bootloader
+  (bootloader
+   (inherit grub-efi-bootloader)
+   (name 'grub-efi-removable-bootloader)
+   (installer install-grub-efi-removable)))
+
 (define grub-efi-netboot-bootloader
   (bootloader
    (inherit grub-efi-bootloader)

base-commit: d129d962e437fd215c5e9428fc1b26e2d72ffbda
-- 
2.36.1




--- End Message ---
--- Begin Message --- Subject: Re: bug#55631: [PATCH] gnu: grub: add removable grub-efi bootloader option Date: Mon, 06 Jun 2022 22:12:50 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux)
Hi Karl,

Karl Hallsby <karl@hallsby.com> skribis:

> +@vindex grub-efi-removable-bootloader
> +@code{grub-efi-removable-bootloader} allows you to boot your system from
> +removable media by writing the GRUB file to the UEFI-specification location 
> of
> +@file{/EFI/BOOT/BOOTX64.efi} of the boot directory, usually @file{/boot/efi}.
> +This is also useful for some UEFI firmwares that ``forget'' their 
> configuration
> +from their non-volatile storage. Like @code{grub-efi-bootloader}, this can 
> only
> +be used if the @file{/sys/firmware/efi} directory is available.

I merged the two patches, added a ChangeLog-style commit log¹, and
committed.

Thank you!

Ludo’.

¹ https://guix.gnu.org/manual/devel/en/html_node/Submitting-Patches.html


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]