me
/
guix
Archived
1
0
Fork 0

gnu: grub: Support loading files from TFTP if the root filesystem is NFS.

* gnu/bootloader/grub.scm (grub-root-search): Set the root to "(tftp)" if
the searched-for file is stored on NFS.
master
Stefan 2020-09-14 14:20:16 +02:00 committed by Danny Milosavljevic
parent f6807498be
commit 8c4f1aa85f
No known key found for this signature in database
GPG Key ID: E71A35542C30BAA5
1 changed files with 27 additions and 0 deletions

View File

@ -295,6 +295,33 @@ code."
((? file-system-label? label)
(format #f "search --label --set ~a"
(file-system-label->string label)))
((? (lambda (device)
(and (string? device) (string-contains device ":/"))) nfs-uri)
;; This assumes that if your root file system is on NFS, then
;; you also want to load your grub extra files, kernel and initrd
;; from there.
;;
;; We explicitly set "root=(tftp)" here even though if grub.cfg
;; had been loaded via TFTP, Grub would have set "root=(tftp)"
;; automatically anyway. The reason is if you have a system that
;; used to be on NFS but now is local, root would be set to local
;; disk. If you then selected an older system generation that is
;; supposed to boot from network in the Grub boot menu, Grub still
;; wouldn't load those files from network otherwise.
;;
;; TFTP is preferred to HTTP because it is used more widely and
;; specified in standards more widely--especially BOOTP/DHCPv4
;; defines a TFTP server for DHCP option 66, but not HTTP.
;;
;; Note: DHCPv6 specifies option 59 to contain a boot-file-url,
;; which can contain a HTTP or TFTP URL.
;;
;; Note: It is assumed that the file paths are of a similar
;; setup on both the TFTP server and the NFS server (it is
;; not possible to search for files on TFTP).
;;
;; TODO: Allow HTTP.
"set root=(tftp)")
((or #f (? string?))
#~(format #f "search --file --set ~a" #$file)))))