diff options
author | Josselin Poiret <dev@jpoiret.xyz> | 2022-08-21 10:41:15 +0200 |
---|---|---|
committer | Marius Bakke <marius@gnu.org> | 2022-08-28 23:37:28 +0200 |
commit | 0811d2cb8dff5de9f535e14726c9874ec2f4a96c (patch) | |
tree | e0cf417522262a2b213b76d8a7f20f1e476b9c5f | |
parent | b9322d78194fe76ef1586e5dc6fc30d0707d7310 (diff) | |
download | guix-0811d2cb8dff5de9f535e14726c9874ec2f4a96c.tar.gz |
bootloader: Convert device in menu-entry to proper sexp.
Previously, menu-entry->sexp didn't try to convert `device` to a proper sexp, which was inserted directly into the boot parameters G-exp, leading to a G-exp input error. Now convert both uuid and file-system-label possibilities to sexps, and add parsing code to sexp->menu-entry. This fixes #57307. * gnu/bootloader.scm (menu-entry->sexp, sexp->menu-entry): Take non-string devices into account. Signed-off-by: Marius Bakke <marius@gnu.org>
-rw-r--r-- | gnu/bootloader.scm | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm index 70e1836179..2eec48693c 100644 --- a/gnu/bootloader.scm +++ b/gnu/bootloader.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2019, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> +;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,8 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu bootloader) + #:use-module (gnu system file-systems) + #:use-module (gnu system uuid) #:use-module (guix discovery) #:use-module (guix gexp) #:use-module (guix profiles) @@ -104,12 +107,19 @@ (define (menu-entry->sexp entry) "Return ENTRY serialized as an sexp." + (define (device->sexp device) + (match device + ((? uuid? uuid) + `(uuid ,(uuid-type uuid) ,(uuid->string uuid))) + ((? file-system-label? label) + `(label ,(file-system-label->string label))) + (_ device))) (match entry (($ <menu-entry> label device mount-point linux linux-arguments initrd #f ()) `(menu-entry (version 0) (label ,label) - (device ,device) + (device ,(device->sexp device)) (device-mount-point ,mount-point) (linux ,linux) (linux-arguments ,linux-arguments) @@ -118,7 +128,7 @@ multiboot-kernel multiboot-arguments multiboot-modules) `(menu-entry (version 0) (label ,label) - (device ,device) + (device ,(device->sexp device)) (device-mount-point ,mount-point) (multiboot-kernel ,multiboot-kernel) (multiboot-arguments ,multiboot-arguments) @@ -127,6 +137,13 @@ (define (sexp->menu-entry sexp) "Turn SEXP, an sexp as returned by 'menu-entry->sexp', into a <menu-entry> record." + (define (sexp->device device-sexp) + (match device-sexp + (('uuid type uuid-string) + (uuid uuid-string type)) + (('label label) + (file-system-label label)) + (_ device-sexp))) (match sexp (('menu-entry ('version 0) ('label label) ('device device) @@ -135,7 +152,7 @@ record." ('initrd initrd) _ ...) (menu-entry (label label) - (device device) + (device (sexp->device device)) (device-mount-point mount-point) (linux linux) (linux-arguments linux-arguments) @@ -148,7 +165,7 @@ record." ('multiboot-modules multiboot-modules) _ ...) (menu-entry (label label) - (device device) + (device (sexp->device device)) (device-mount-point mount-point) (multiboot-kernel multiboot-kernel) (multiboot-arguments multiboot-arguments) |