@@ -416,8 +416,8 @@ (define not-config?
(_ #f)))
(define (machine->boot-alternatives machine)
- "Monadic procedure returning a list of 'boot-parameters' for the generations
-of MACHINE's system profile, ordered from most recent to oldest."
+ "Monadic procedure returning a list of <boot-alternative> records for the
+generations of MACHINE's system profile, ordered from most recent to oldest."
(define remote-exp
(with-extensions (list guile-gcrypt)
(with-imported-modules `(((guix config) => ,(make-config.scm))
@@ -458,13 +458,18 @@ (define (machine->boot-alternatives machine)
read-boot-parameters))
(root (boot-parameters-root-device params))
(text (boot-parameters-label params))
- (version (boot-parameters-version params)))
- (boot-parameters
- (inherit params)
- (label (decorated-boot-label text generation epoch))
- (kernel-arguments
- (append (bootable-kernel-arguments system-path root version)
- (boot-parameters-kernel-arguments params))))))))
+ (version (boot-parameters-version params))
+ (parameters (boot-parameters
+ (inherit params)
+ (label (decorated-boot-label text generation epoch))
+ (kernel-arguments
+ (append (bootable-kernel-arguments system-path root version)
+ (boot-parameters-kernel-arguments params))))))
+ (boot-alternative
+ (generation generation)
+ (system-path system-path)
+ (epoch epoch)
+ (parameters parameters))))))
remote-results))))
(define-syntax-rule (with-roll-back should-roll-back? mbody ...)
@@ -508,7 +513,8 @@ (define (deploy-managed-host machine)
(%current-target-system #f))
(let* ((os (machine-operating-system machine))
(eval (cut machine-remote-eval machine <>))
- (menu-entries (map boot-parameters->menu-entry boot-alternatives))
+ (menu-entries (map boot-parameters->menu-entry
+ (map boot-alternative-parameters boot-alternatives)))
(bootloader-configuration (operating-system-bootloader os))
(bootcfg (operating-system-bootcfg os menu-entries)))
(define-syntax-rule (eval/error-handling condition handler ...)
@@ -582,13 +588,15 @@ (define (roll-back-managed-host machine)
(mlet* %store-monad ((boot-alternatives (machine->boot-alternatives machine))
(_ -> (if (< (length boot-alternatives) 2)
(raise roll-back-failure)))
- (parameters (second boot-alternatives))
+ (chosen-alternative (second boot-alternatives))
+ (parameters (boot-alternative-parameters chosen-alternative))
(entries -> (list (boot-parameters->menu-entry parameters)))
(locale -> (boot-parameters-locale parameters))
(crypto-dev -> (boot-parameters-store-crypto-devices parameters))
(store-dir -> (boot-parameters-store-directory-prefix parameters))
(old-entries -> (map boot-parameters->menu-entry
- (drop boot-alternatives 2)))
+ (map boot-alternative-parameters
+ (drop boot-alternatives 2))))
(bootloader -> (operating-system-bootloader
(machine-operating-system machine)))
(bootcfg (lower-object
@@ -71,6 +71,13 @@ (define-module (gnu system boot)
read-boot-parameters-file
bootable-kernel-arguments
+ boot-alternative
+ boot-alternative?
+ boot-alternative-generation
+ boot-alternative-system-path
+ boot-alternative-epoch
+ boot-alternative-parameters
+
epoch->date-string
decorated-boot-label
boot-parameters->menu-entry
@@ -299,6 +306,13 @@ (define* (bootable-kernel-arguments system root-device version)
#~(string-append (if #$version>0? "gnu.load=" "--load=")
#$system "/boot")))))
+(define-record-type* <boot-alternative>
+ boot-alternative make-boot-alternative boot-alternative?
+ (generation boot-alternative-generation)
+ (system-path boot-alternative-system-path)
+ (epoch boot-alternative-epoch)
+ (parameters boot-alternative-parameters))
+
(define (epoch->date-string epoch)
"Return a string representing the date for EPOCH seconds."
(let ((time (make-time time-utc 0 epoch)))
@@ -328,26 +328,31 @@ (define-syntax-rule (unless-file-not-found exp)
#f
(apply throw args)))))
-(define (generation->boot-parameters profile number)
- "Return the 'boot-parameters' for the generation of PROFILE specified
+(define (generation->boot-alternative profile number)
+ "Return the 'boot-alternative' for the generation of PROFILE specified
by NUMBER."
(unless-file-not-found
(let* ((system (generation-file-name profile number))
(params (read-boot-parameters-file system))
(epoch (stat:mtime (lstat system)))
- (text (boot-parameters-label params)))
- (boot-parameters
- (inherit params)
- (label (decorated-boot-label text number epoch))))))
+ (text (boot-parameters-label params))
+ (parameters (boot-parameters
+ (inherit params)
+ (label (decorated-boot-label text number epoch)))))
+ (boot-alternative
+ (generation number)
+ (system-path system)
+ (epoch epoch)
+ (parameters parameters)))))
(define* (profile->boot-alternatives #:optional (profile %system-profile)
(numbers
(reverse (generation-numbers profile))))
- "Return a list of 'boot-parameters' for the generations of PROFILE specified
+ "Return a list of 'boot-alternative' for the generations of PROFILE specified
by NUMBERS, which is a list of generation numbers. The list is ordered from
the most recent to the oldest profiles."
(filter-map (lambda (number)
- (generation->boot-parameters profile number))
+ (generation->boot-alternative profile number))
numbers))
@@ -396,7 +401,9 @@ (define (reinstall-bootloader store number)
(bootloader bootloader)))
;; Make the specified system generation the default entry.
- (params (generation->boot-parameters %system-profile number))
+ (chosen-alternative (generation->boot-alternative
+ %system-profile number))
+ (params (boot-alternative-parameters chosen-alternative))
(locale (boot-parameters-locale params))
(store-crypto-devices (boot-parameters-store-crypto-devices params))
(store-directory-prefix
@@ -407,7 +414,8 @@ (define (reinstall-bootloader store number)
%system-profile old-generations))
(entries (list (boot-parameters->menu-entry params)))
(old-entries (map boot-parameters->menu-entry
- previous-boot-alternatives)))
+ (map boot-alternative-parameters
+ previous-boot-alternatives))))
(run-with-store store
(mlet* %store-monad
((bootcfg (lower-object
@@ -824,7 +832,9 @@ (define* (perform-action action image
os
(if (eq? action 'init)
'()
- (map boot-parameters->menu-entry (profile->boot-alternatives))))))
+ (map boot-parameters->menu-entry
+ (map boot-alternative-parameters
+ (profile->boot-alternatives)))))))
(when (eq? action 'reconfigure)
(maybe-suggest-running-guix-pull)
From: Felix Lechner <felix.lechner@lease-up.com> * gnu/system/boot.scm (<boot-alternative>): New record. * gnu/machine/ssh.scm (machine->boot-alternatives): Return a boot-alternative encapsulating previous return value. (with-roll-back, roll-back-managed-host): Get parameters from boot-alternatives. * guix/scripts/system.scm (generation->boot-parameters): Rename to... (generation->boot-alternative): ...this. Return a boot-alternative encapsulating previous return value. (profile->boot-alternatives): Rename uses as above. (reinstall-bootloader, perform-action): Get parameters from boot-alternatives. Change-Id: Iaef0b0a3fa9240ca8315a9699bcf4a7bfe908e33 --- gnu/machine/ssh.scm | 32 ++++++++++++++++++++------------ gnu/system/boot.scm | 14 ++++++++++++++ guix/scripts/system.scm | 32 +++++++++++++++++++++----------- 3 files changed, 55 insertions(+), 23 deletions(-)