summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-02-18 15:42:07 -0500
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-03-01 10:30:17 -0500
commit4a3b8f4d5981de444b3590fca8dfa1facb768933 (patch)
treea4b11ced58ed741dfaeee906eeabd2a7275d9db0
parenta53ea46bfc219a2c184fbf3ce8f3e3ba3f539a7d (diff)
system: Add a version field to the <boot-parameters> record.
This version field exposes the (already present) version information of a boot parameters file. * gnu/system.scm (%boot-parameters-version): New variable. (<boot-parameters>)[version]: New field. (read-boot-parameters): Use it. (operating-system-boot-parameters-file): Likewise. * tests/boot-parameters.scm (test-read-boot-parameters): Use %boot-parameters-version as the default version value in the template.
-rw-r--r--gnu/system.scm21
-rw-r--r--tests/boot-parameters.scm2
2 files changed, 18 insertions, 5 deletions
diff --git a/gnu/system.scm b/gnu/system.scm
index cc925de16f0..19e6262e967 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -9,7 +9,7 @@
9;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org> 9;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
10;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re> 10;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
11;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de> 11;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
12;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> 12;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
13;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org> 13;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
14;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il> 14;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
15;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be> 15;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
@@ -161,6 +161,8 @@
161 boot-parameters-kernel-arguments 161 boot-parameters-kernel-arguments
162 boot-parameters-initrd 162 boot-parameters-initrd
163 boot-parameters-multiboot-modules 163 boot-parameters-multiboot-modules
164 boot-parameters-version
165 %boot-parameters-version
164 read-boot-parameters 166 read-boot-parameters
165 read-boot-parameters-file 167 read-boot-parameters-file
166 boot-parameters->menu-entry 168 boot-parameters->menu-entry
@@ -295,6 +297,9 @@ directly by the user."
295;;; Boot parameters 297;;; Boot parameters
296;;; 298;;;
297 299
300;;; When bumping the boot-parameters version, increment it by one (1).
301(define %boot-parameters-version 0)
302
298(define-record-type* <boot-parameters> 303(define-record-type* <boot-parameters>
299 boot-parameters make-boot-parameters boot-parameters? 304 boot-parameters make-boot-parameters boot-parameters?
300 (label boot-parameters-label) 305 (label boot-parameters-label)
@@ -322,7 +327,9 @@ directly by the user."
322 (kernel boot-parameters-kernel) 327 (kernel boot-parameters-kernel)
323 (kernel-arguments boot-parameters-kernel-arguments) 328 (kernel-arguments boot-parameters-kernel-arguments)
324 (initrd boot-parameters-initrd) 329 (initrd boot-parameters-initrd)
325 (multiboot-modules boot-parameters-multiboot-modules)) 330 (multiboot-modules boot-parameters-multiboot-modules)
331 (version boot-parameters-version ;positive integer
332 (default %boot-parameters-version)))
326 333
327(define (ensure-not-/dev device) 334(define (ensure-not-/dev device)
328 "If DEVICE starts with a slash, return #f. This is meant to filter out 335 "If DEVICE starts with a slash, return #f. This is meant to filter out
@@ -359,12 +366,18 @@ file system labels."
359 (warning (G_ "unrecognized uuid ~a at '~a'~%") x (port-filename port)) 366 (warning (G_ "unrecognized uuid ~a at '~a'~%") x (port-filename port))
360 #f))) 367 #f)))
361 368
369 ;; New versions are not backward-compatible, so only accept past and current
370 ;; versions, not future ones.
371 (define (version? n)
372 (member n (iota (1+ %boot-parameters-version))))
373
362 (match (read port) 374 (match (read port)
363 (('boot-parameters ('version 0) 375 (('boot-parameters ('version (? version? version))
364 ('label label) ('root-device root) 376 ('label label) ('root-device root)
365 ('kernel kernel) 377 ('kernel kernel)
366 rest ...) 378 rest ...)
367 (boot-parameters 379 (boot-parameters
380 (version version)
368 (label label) 381 (label label)
369 (root-device (device-sexp->device root)) 382 (root-device (device-sexp->device root))
370 383
@@ -1500,7 +1513,7 @@ being stored into the \"parameters\" file)."
1500 system-kernel-arguments?))) 1513 system-kernel-arguments?)))
1501 (scheme-file "parameters" 1514 (scheme-file "parameters"
1502 #~(boot-parameters 1515 #~(boot-parameters
1503 (version 0) 1516 (version #$(boot-parameters-version params))
1504 (label #$(boot-parameters-label params)) 1517 (label #$(boot-parameters-label params))
1505 (root-device 1518 (root-device
1506 #$(device->sexp 1519 #$(device->sexp
diff --git a/tests/boot-parameters.scm b/tests/boot-parameters.scm
index b2799d05964..d4b680df2e4 100644
--- a/tests/boot-parameters.scm
+++ b/tests/boot-parameters.scm
@@ -101,7 +101,7 @@
101;; Call read-boot-parameters with the desired string as input. 101;; Call read-boot-parameters with the desired string as input.
102(define* (test-read-boot-parameters 102(define* (test-read-boot-parameters
103 #:key 103 #:key
104 (version 0) 104 (version %boot-parameters-version)
105 (bootloader-name 'grub) 105 (bootloader-name 'grub)
106 (bootloader-menu-entries '()) 106 (bootloader-menu-entries '())
107 (label %default-label) 107 (label %default-label)