all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Lilah Tascheter via Guix-patches <guix-patches@gnu.org>
To: 69343@debbugs.gnu.org
Cc: Herman Rimm <herman@rimm.ee>,
	Felix Lechner <felix.lechner@lease-up.com>,
	Christopher Baines <guix@cbaines.net>,
	Josselin Poiret <dev@jpoiret.xyz>,
	Ludovic Court??s <ludo@gnu.org>,
	Mathieu Othacehe <othacehe@gnu.org>,
	Simon Tournier <zimon.toutoune@gmail.com>,
	Tobias Geerinckx-Rice <me@tobias.gr>
Subject: [bug#69343] [PATCH v4 11/11] Encapsulate <boot-parameters> to retain generation, system-path and epoch.
Date: Thu, 19 Sep 2024 23:16:05 -0500	[thread overview]
Message-ID: <5440f547c4fd458acdc327afeded9a6067e98124.1726805765.git.lilah@lunabee.space> (raw)
In-Reply-To: <cover.1726805765.git.lilah@lunabee.space>

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     | 29 ++++++++++++++++++-----------
 gnu/system/boot.scm     | 14 ++++++++++++++
 guix/scripts/system.scm | 32 +++++++++++++++++++++-----------
 3 files changed, 53 insertions(+), 22 deletions(-)

diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index 37806a2e1b..ca0f3483a4 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -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))
@@ -459,13 +459,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 ...)
@@ -509,7 +514,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 ...)
@@ -583,7 +589,8 @@ (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))
diff --git a/gnu/system/boot.scm b/gnu/system/boot.scm
index 82ca353cb3..c29e48d607 100644
--- a/gnu/system/boot.scm
+++ b/gnu/system/boot.scm
@@ -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)) ; <boot-parameters>
+
 (define (epoch->date-string epoch)
   "Return a string representing the date for EPOCH seconds."
   (let ((time (make-time time-utc 0 epoch)))
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 0c69f6d90b..0f7d864e06 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -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))
 
 \f
@@ -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)
-- 
2.45.2





  parent reply	other threads:[~2024-09-20  4:18 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-24  1:05 [bug#69343] [PATCH 00/12] Simplify bootloader data structures and procedures Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 01/12] Fix bug where the extra menu entries for a bootloader were shown twice Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 02/12] Move <boot-parameters> record to a separate file Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 03/12] Also move boot-parameters->menu-entry Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 04/12] Rename seconds->string procedure to epoch->date-string Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 05/12] Move epoch->date-string to gnu/system/boot.scm and use it elsewhere Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 06/12] Offer a uniform decorated-boot-label and use it Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 07/12] Rename boot-parameters to boot-alternatives when appropriate Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 08/12] Rename two remote variables confusingly named 'generations' Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 09/12] Give a separate name to a commonly used expression Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 10/12] Simplify profile->boot-alternatives Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 11/12] Split generation->boot-parameters out of profile->boot-alternatives Felix Lechner via Guix-patches via
2024-02-24  1:51 ` [bug#69343] [PATCH 12/12] Encapsulate <boot-parameters> to retain generation, system-path and epoch Felix Lechner via Guix-patches via
2024-03-02 23:46 ` [bug#69343] Simplify bootloader data structures and procedures Lilah Tascheter via Guix-patches
2024-03-08  8:11 ` [bug#69343] [PATCH v2 00/12] " Lilah Tascheter via Guix-patches
2024-03-08  8:11   ` [bug#69343] [PATCH v2 01/12] Fix bug where the extra menu entries for a bootloader were shown twice Lilah Tascheter via Guix-patches
2024-03-08  8:11   ` [bug#69343] [PATCH v2 02/12] Move <boot-parameters> record to a separate file Lilah Tascheter via Guix-patches
2024-03-08  8:11   ` [bug#69343] [PATCH v2 03/12] Also move boot-parameters->menu-entry Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 04/12] Rename seconds->string procedure to epoch->date-string Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 05/12] Move epoch->date-string to gnu/system/boot.scm and use it elsewhere Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 06/12] Offer a uniform decorated-boot-label and use it Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 07/12] Rename boot-parameters to boot-alternatives when appropriate Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 08/12] Rename two remote variables confusingly named 'generations' Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 09/12] Give a separate name to a commonly used expression Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 10/12] Simplify profile->boot-alternatives Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 11/12] Split generation->boot-parameters out of profile->boot-alternatives Lilah Tascheter via Guix-patches
2024-03-08  8:12   ` [bug#69343] [PATCH v2 12/12] Encapsulate <boot-parameters> to retain generation, system-path and epoch Lilah Tascheter via Guix-patches
2024-03-08 16:33   ` [bug#69343] Simplify bootloader data structures and procedures Felix Lechner via Guix-patches via
2024-08-04  3:13 ` [bug#69343] [PATCH v3 00/12] " Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 01/12] Fix bug where the extra menu entries for a bootloader were shown twice Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 02/12] Move <boot-parameters> record to a separate file Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 03/12] Also move boot-parameters->menu-entry Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 04/12] Rename seconds->string procedure to epoch->date-string Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 05/12] Move epoch->date-string to gnu/system/boot.scm and use it elsewhere Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 06/12] Offer a uniform decorated-boot-label and use it Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 07/12] Rename boot-parameters to boot-alternatives when appropriate Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 08/12] Rename two remote variables confusingly named 'generations' Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 09/12] Give a separate name to a commonly used expression Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 10/12] Simplify profile->boot-alternatives Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 11/12] Split generation->boot-parameters out of profile->boot-alternatives Lilah Tascheter via Guix-patches
2024-08-04  3:13   ` [bug#69343] [PATCH v3 12/12] Encapsulate <boot-parameters> to retain generation, system-path and epoch Lilah Tascheter via Guix-patches
2024-09-05  7:13   ` [bug#69343] [PATCH v3 00/12] Simplify bootloader data structures and procedures Herman Rimm via Guix-patches via
2024-09-20  4:15 ` [bug#69343] [PATCH v4 00/11] " Lilah Tascheter via Guix-patches
2024-09-20  4:15   ` [bug#69343] [PATCH v4 01/11] Fix bug where the extra menu entries for a bootloader were shown twice Lilah Tascheter via Guix-patches
2024-09-20  4:15   ` [bug#69343] [PATCH v4 02/11] Move <boot-parameters> record to a separate file Lilah Tascheter via Guix-patches
2024-09-20  4:15   ` [bug#69343] [PATCH v4 03/11] Rename seconds->string procedure to epoch->date-string Lilah Tascheter via Guix-patches
2024-09-20  4:15   ` [bug#69343] [PATCH v4 04/11] Move epoch->date-string to gnu/system/boot.scm and use it elsewhere Lilah Tascheter via Guix-patches
2024-09-20  4:15   ` [bug#69343] [PATCH v4 05/11] Offer a uniform decorated-boot-label and use it Lilah Tascheter via Guix-patches
2024-09-20  4:16   ` [bug#69343] [PATCH v4 06/11] Rename boot-parameters to boot-alternatives when appropriate Lilah Tascheter via Guix-patches
2024-09-20  4:16   ` [bug#69343] [PATCH v4 07/11] Rename two remote variables confusingly named 'generations' Lilah Tascheter via Guix-patches
2024-09-20  4:16   ` [bug#69343] [PATCH v4 08/11] Give a separate name to a commonly used expression Lilah Tascheter via Guix-patches
2024-09-20  4:16   ` [bug#69343] [PATCH v4 09/11] Simplify profile->boot-alternatives Lilah Tascheter via Guix-patches
2024-09-20  4:16   ` [bug#69343] [PATCH v4 10/11] Split generation->boot-parameters out of profile->boot-alternatives Lilah Tascheter via Guix-patches
2024-09-20  4:16   ` Lilah Tascheter via Guix-patches [this message]
2024-09-21 10:23 ` [bug#69343] [PATCH v5 00/10] Simplify bootloader data structures and procedures Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 01/10] Fix bug where the extra menu entries for a bootloader were shown twice Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 02/10] Move <boot-parameters> record to a separate file Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 03/10] Rename seconds->string procedure to epoch->date-string Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 04/10] Move epoch->date-string to gnu/system/boot.scm and use it elsewhere Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 05/10] Offer a uniform decorated-boot-label and use it Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 06/10] Rename boot-parameters to boot-alternatives when appropriate Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 07/10] Rename two remote variables confusingly named 'generations' Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 08/10] Give a separate name to a commonly used expression Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 09/10] Split system->boot-parameters out of profile->boot-alternatives Herman Rimm via Guix-patches via
2024-09-21 10:23   ` [bug#69343] [PATCH v5 10/10] Encapsulate <boot-parameters> to retain generation, system-path and epoch Herman Rimm via Guix-patches via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5440f547c4fd458acdc327afeded9a6067e98124.1726805765.git.lilah@lunabee.space \
    --to=guix-patches@gnu.org \
    --cc=69343@debbugs.gnu.org \
    --cc=dev@jpoiret.xyz \
    --cc=felix.lechner@lease-up.com \
    --cc=guix@cbaines.net \
    --cc=herman@rimm.ee \
    --cc=lilah@lunabee.space \
    --cc=ludo@gnu.org \
    --cc=me@tobias.gr \
    --cc=othacehe@gnu.org \
    --cc=zimon.toutoune@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.