Package: guix-patches;
Reported by: Stefan <stefan-guix <at> vodafonemail.de>
Date: Fri, 1 May 2020 20:33:02 UTC
Severity: normal
Tags: patch
Done: Stefan <stefan-guix <at> vodafonemail.de>
Bug is archived. No further changes may be made.
Message #95 received at 41011 <at> debbugs.gnu.org (full text, mbox):
From: Stefan <stefan-guix <at> vodafonemail.de> To: 41011 <at> debbugs.gnu.org Subject: [PATCH] gnu: grub: Support for network boot via tftp/nfs. Date: Sat, 5 Sep 2020 13:25:24 +0200
* gnu/bootloader/grub.scm (grub-net-bootloader): New bootloader for network booting via tftp. (install-grub-net): New bootloader installer for tftp. --- gnu/bootloader/grub.scm | 79 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 75 insertions(+), 4 deletions(-) diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm index b905ae360c..8f078dc2ac 100644 --- a/gnu/bootloader/grub.scm +++ b/gnu/bootloader/grub.scm @@ -24,7 +24,7 @@ (define-module (gnu bootloader grub) #:use-module (guix records) - #:use-module ((guix utils) #:select (%current-system)) + #:use-module ((guix utils) #:select (%current-system %current-target-system)) #:use-module (guix gexp) #:use-module (gnu artwork) #:use-module (gnu bootloader) @@ -46,8 +46,11 @@ grub-theme-color-highlight grub-theme-gfxmode + install-grub-net + grub-bootloader grub-efi-bootloader + grub-net-bootloader grub-mkrescue-bootloader grub-minimal-bootloader @@ -501,11 +504,73 @@ fi~%")))) "--bootloader-id=Guix" "--efi-directory" target-esp)))) +(define (install-grub-net subdir) + "Define a grub-net bootloader installer for installation in SUBDIR, +which is usually \"efi/boot\" or \"efi/Guix\"." + (let* ((arch (car (string-split (or (%current-target-system) + (%current-system)) + #\-))) + (efi-bootloader-link (string-append "/boot" + (match arch + ("i686" "ia32") + ("x86_64" "x64") + ("arm" "arm") + ("armhf" "arm") + ("aarch64" "aa64") + ("riscv" "riscv32") + ("riscv64" "riscv64")) + ".efi")) + (efi-bootloader (string-append (match arch + ("i686" "i386") + ("x86_64" "x86_64") + ("arm" "arm") + ("armhf" "arm") + ("aarch64" "arm64") + ("riscv" "riscv32") + ("riscv64" "riscv64")) + "-efi/core.efi"))) + #~(lambda (bootloader target mount-point) + "Install GRUB as e.g. \"bootx64.efi\" or \"bootarm64.efi\" \"into +SUBDIR, which is usually \"efi/boot\" or \"efi/Guix\" below the directory TARGET +for the system whose root is mounted at MOUNT-POINT." + (let* (;; Use target-depth and subdir-depth to construct links to + ;; "../gnu" and "../../../boot/grub/grub.cfg" with the correct + ;; number of "../". Note: This doesn't consider ".." or ".", + ;; which may appear inside target or subdir. + (target-depth (length (delete "" (string-split target #\/)))) + (subdir-depth (length (delete "" (string-split #$subdir #\/)))) + (up1 (string-join (make-list target-depth "..") "/" 'suffix)) + (up2 (string-join (make-list subdir-depth "..") "/" 'suffix)) + (net-dir (string-append mount-point target "/")) + (store-name (car (delete "" (string-split bootloader #\/)))) + (store (string-append up1 store-name)) + (store-link (string-append net-dir store-name)) + (grub-cfg (string-append up1 up2 "boot/grub/grub.cfg")) + (grub-cfg-link (string-append net-dir #$subdir "/grub.cfg")) + (efi-bootloader-link + (string-append net-dir #$subdir #$efi-bootloader-link))) + ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or + ;; root partition. + (setenv "GRUB_ENABLE_CRYPTODISK" "y") + (invoke/quiet (string-append bootloader "/bin/grub-mknetdir") + (string-append "--net-directory=" net-dir) + (string-append "--subdir=" #$subdir)) + (false-if-exception (delete-file store-link)) + (symlink store store-link) + (false-if-exception (delete-file grub-cfg-link)) + (symlink grub-cfg grub-cfg-link) + (false-if-exception (delete-file efi-bootloader-link)) + (symlink #$efi-bootloader efi-bootloader-link))))) + ^L ;;; ;;; Bootloader definitions. ;;; +;;; For all these grub-bootloader variables the path to /boot/grub/grub.cfg +;;; is fixed. Inheriting and overwriting the field 'configuration-file' will +;;; break 'guix system delete-generations', 'guix system switch-generation', +;;; and 'guix system roll-back'. (define grub-bootloader (bootloader @@ -516,12 +581,12 @@ fi~%")))) (configuration-file "/boot/grub/grub.cfg") (configuration-file-generator grub-configuration-file))) -(define* grub-minimal-bootloader +(define grub-minimal-bootloader (bootloader (inherit grub-bootloader) (package grub-minimal))) -(define* grub-efi-bootloader +(define grub-efi-bootloader (bootloader (inherit grub-bootloader) (installer install-grub-efi) @@ -529,7 +594,13 @@ fi~%")))) (name 'grub-efi) (package grub-efi))) -(define* grub-mkrescue-bootloader +(define grub-net-bootloader + (bootloader + (inherit grub-efi-bootloader) + (name 'grub-net-bootloader) + (installer (install-grub-net "efi/Guix")))) + +(define grub-mkrescue-bootloader (bootloader (inherit grub-efi-bootloader) (package grub-hybrid))) -- 2.26.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.