diff options
| author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-02-18 15:42:07 -0500 |
|---|---|---|
| committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-03-01 10:30:17 -0500 |
| commit | 4a3b8f4d5981de444b3590fca8dfa1facb768933 (patch) | |
| tree | a4b11ced58ed741dfaeee906eeabd2a7275d9db0 | |
| parent | a53ea46bfc219a2c184fbf3ce8f3e3ba3f539a7d (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.scm | 21 | ||||
| -rw-r--r-- | tests/boot-parameters.scm | 2 |
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) |
