GNU bug report logs -
#57496
[PATCH 0/2] Add support for chain-loader
Previous Next
Reported by: typ22 <at> foxmail.com
Date: Wed, 31 Aug 2022 05:26:02 UTC
Severity: normal
Tags: patch
Done: Julien Lepiller <julien <at> lepiller.eu>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
From: tiantian <typ22 <at> foxmail.com>
* gnu/bootloader.scm (report-menu-entry-error): New procedure.
(menu-entry->sexp): Modify the pattern and add `else' to call
`report-menu-entry-error'.
Co-Authored-By: Julien Lepiller <julien <at> lepiller.eu>
---
The error message like so:
guix system: error: invalid menu-entry: #<<menu-entry> label: "test" device: #<file-system-label "guix-root"> device-mount-point: #f linux: #f linux-arguments: () initrd: #f multiboot-kernel: #f multiboot-arguments: () multiboot-modules: () chain-loader: #f>
hint: Please chose only one of:
1. direct boot by specifying fields `linux', `linux-arguments' and `linux-modules',
2. multiboot by specifying fields `multiboot-kernel', `multiboot-arguments' and `multiboot-modules',
3. chain-loader by specifying field `chain-loader'.
The code of `report-menu-entry-error' is quoted from Julien Lepiller.
Thanks the help from Julien Lepiller.
gnu/bootloader.scm | 44 +++++++++++++++++++++++++++++++++++++++-----
1 file changed, 39 insertions(+), 5 deletions(-)
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index 9e8b545d10..d4fe460570 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -34,6 +34,8 @@ (define-module (gnu bootloader)
#:use-module (guix diagnostics)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-34)
+ #:use-module (srfi srfi-35)
#:use-module (ice-9 match)
#:export (menu-entry
menu-entry?
@@ -110,6 +112,23 @@ (define-record-type* <menu-entry>
(chain-loader menu-entry-chain-loader
(default #f))) ; string, path of efi file
+(define (report-menu-entry-error menu-entry)
+ (raise
+ (condition
+ (&message
+ (message
+ (format #f (G_ "invalid menu-entry: ~a") menu-entry)))
+ (&fix-hint
+ (hint
+ (G_ "Please chose only one of:
+@enumerate
+@item direct boot by specifying fields @code{linux},
+@code{linux-arguments} and @code{linux-modules},
+@item multiboot by specifying fields @code{multiboot-kernel},
+@code{multiboot-arguments} and @code{multiboot-modules},
+@item chain-loader by specifying field @code{chain-loader}.
+@end enumerate"))))))
+
(define (menu-entry->sexp entry)
"Return ENTRY serialized as an sexp."
(define (device->sexp device)
@@ -119,9 +138,21 @@ (define (menu-entry->sexp entry)
((? file-system-label? label)
`(label ,(file-system-label->string label)))
(_ device)))
+ (define (set-field? field)
+ "If the field is the default value, return #f."
+ (and field ; not default value #f
+ (not (null? field)))) ; not default value '()
(match entry
+ ;; Modify the pattern to achieve more strict matching and prevent
+ ;; wrong matching, which ensures the output of error information
+ ;; when menu-entry is wrong.
+
+ ;; The linux-arguments is optional and the test code for boot-parameters
+ ;; does not set it, so don't check it here.
(($ <menu-entry> label device mount-point
- (? identity linux) linux-arguments initrd
+ (? set-field? linux)
+ linux-arguments
+ (? set-field? initrd)
#f () () #f)
`(menu-entry (version 0)
(label ,label)
@@ -131,8 +162,10 @@ (define (menu-entry->sexp entry)
(linux-arguments ,linux-arguments)
(initrd ,initrd)))
(($ <menu-entry> label device mount-point #f () #f
- (? identity multiboot-kernel) multiboot-arguments
- multiboot-modules #f)
+ (? set-field? multiboot-kernel)
+ (? set-field? multiboot-arguments)
+ (? set-field? multiboot-modules)
+ #f)
`(menu-entry (version 0)
(label ,label)
(device ,(device->sexp device))
@@ -141,12 +174,13 @@ (define (menu-entry->sexp entry)
(multiboot-arguments ,multiboot-arguments)
(multiboot-modules ,multiboot-modules)))
(($ <menu-entry> label device mount-point #f () #f #f () ()
- (? identity chain-loader))
+ (? set-field? chain-loader))
`(menu-entry (version 0)
(label ,label)
(device ,(device->sexp device))
(device-mount-point ,mount-point)
- (chain-loader ,chain-loader)))))
+ (chain-loader ,chain-loader)))
+ (else (report-menu-entry-error entry))))
(define (sexp->menu-entry sexp)
"Turn SEXP, an sexp as returned by 'menu-entry->sexp', into a <menu-entry>
--
2.37.2
This bug report was last modified 2 years and 279 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.