GNU bug report logs - #70636
[PATCH] services: admin: Support restarting system after unattended upgrade

Previous Next

Package: guix-patches;

Reported by: Richard Sent <richard <at> freakingpenguin.com>

Date: Sun, 28 Apr 2024 21:35:02 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 70636 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#70636; Package guix-patches. (Sun, 28 Apr 2024 21:35:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Richard Sent <richard <at> freakingpenguin.com>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sun, 28 Apr 2024 21:35:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Richard Sent <richard <at> freakingpenguin.com>
To: guix-patches <at> gnu.org
Cc: Richard Sent <richard <at> freakingpenguin.com>
Subject: [PATCH] services: admin: Support restarting system after unattended
 upgrade
Date: Sun, 28 Apr 2024 17:32:47 -0400
* gnu/services/admin.scm (unattended-upgrade-configuration): Add restart?
field. When truthy, unattended upgrade will tell shepherd to stop the root
service, which triggers a restart.
* /doc/guix.texi (Unattended Upgrades): Document it.

Change-Id: I0af659b3c318421b1a7baa94dde3dadacc1fa10d
---
Hi Guix!

This patch adds support for running a complete system restart after an
unattended upgrade. Previously, unattended upgrades were not capable
of, say, upgrading the kernel.

/Technically/ without this patch I'm pretty sure you could restart the
system by restarting the 'file-systems service. I haven't found
documentation on that and it feels like a hack more than a feature. I
don't know if it would perform a safe shutdown. Thankfully, Shepherd
explicitly treats "stop root service" as "restart" so the method in
this patch should be safe.

 doc/guix.texi          |  4 ++++
 gnu/services/admin.scm | 13 ++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 3ee9f54773..08fdac4cd3 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -22891,6 +22891,10 @@ Unattended Upgrades
     #~(@@ (guix system install) installation-os)))
 @end lisp
 
+@item @code{restart?} (default: @code{#f})
+This field specifies whether the system should restart after completing
+an unattended upgrade.
+
 @item @code{services-to-restart} (default: @code{'(mcron)})
 This field specifies the Shepherd services to restart when the upgrade
 completes.
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index 0b325fddb1..579cf83132 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -420,6 +420,8 @@ (define-record-type* <unattended-upgrade-configuration>
                         (default "30 01 * * 0"))
   (channels             unattended-upgrade-configuration-channels
                         (default #~%default-channels))
+  (restart?             unattended-upgrade-configuration-restart?
+                        (default #f))
   (services-to-restart  unattended-upgrade-configuration-services-to-restart
                         (default '(mcron)))
   (system-expiration    unattended-upgrade-system-expiration
@@ -443,6 +445,9 @@ (define (unattended-upgrade-mcron-jobs config)
   (define services
     (unattended-upgrade-configuration-services-to-restart config))
 
+  (define restart?
+    (unattended-upgrade-configuration-restart? config))
+
   (define expiration
     (unattended-upgrade-system-expiration config))
 
@@ -512,7 +517,13 @@ (define (unattended-upgrade-mcron-jobs config)
 
             ;; XXX: If 'mcron' has been restarted, perhaps this isn't
             ;; reached.
-            (format #t "~a upgrade complete~%" (timestamp))))))
+            (format #t "~a upgrade complete~%" (timestamp))
+
+            ;; Stopping the root shepherd service triggers a restart.
+            (when #$restart?
+              (format #t "~a restarting system~%" (timestamp))
+              (force-output) ;ensure the entire log is written.
+              (stop-service 'root))))))
 
   (define upgrade
     (program-file "unattended-upgrade" code))

base-commit: 9f183c3627a006e8fd3bb9708448bc05a6204e6d
-- 
2.41.0





Information forwarded to guix-patches <at> gnu.org:
bug#70636; Package guix-patches. (Mon, 29 Apr 2024 04:36:01 GMT) Full text and rfc822 format available.

Message #8 received at 70636 <at> debbugs.gnu.org (full text, mbox):

From: Richard Sent <richard <at> freakingpenguin.com>
To: 70636 <at> debbugs.gnu.org
Cc: Richard Sent <richard <at> freakingpenguin.com>
Subject: [PATCH v2] services: admin: Support rebooting after an unattended
 upgrade
Date: Mon, 29 Apr 2024 00:34:20 -0400
* gnu/services/admin.scm (unattended-upgrade-configuration): Add reboot?
field. When truthy, unattended upgrade will stop the shepherd root service,
triggering a reboot.
* doc/guix.texi (Unattended Upgrades): Document it.

Change-Id: I0af659b3c318421b1a7baa94dde3dadacc1fa10d
---
Decided to change restart? to reboot?. The manual seems to generally
prefer reboot and it makes restarting services vs. rebooting the
system a bit more distinct.

 doc/guix.texi          |  4 ++++
 gnu/services/admin.scm | 13 ++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 5d3c9225b4..709db674c9 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -22891,6 +22891,10 @@ Unattended Upgrades
     #~(@@ (guix system install) installation-os)))
 @end lisp
 
+@item @code{reboot?} (default: @code{#f})
+This field specifies whether the system should reboot after completing
+an unattended upgrade.
+
 @item @code{services-to-restart} (default: @code{'(mcron)})
 This field specifies the Shepherd services to restart when the upgrade
 completes.
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index 0b325fddb1..4882883878 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -420,6 +420,8 @@ (define-record-type* <unattended-upgrade-configuration>
                         (default "30 01 * * 0"))
   (channels             unattended-upgrade-configuration-channels
                         (default #~%default-channels))
+  (reboot?              unattended-upgrade-configuration-reboot?
+                        (default #f))
   (services-to-restart  unattended-upgrade-configuration-services-to-restart
                         (default '(mcron)))
   (system-expiration    unattended-upgrade-system-expiration
@@ -443,6 +445,9 @@ (define (unattended-upgrade-mcron-jobs config)
   (define services
     (unattended-upgrade-configuration-services-to-restart config))
 
+  (define reboot?
+    (unattended-upgrade-configuration-reboot? config))
+
   (define expiration
     (unattended-upgrade-system-expiration config))
 
@@ -512,7 +517,13 @@ (define (unattended-upgrade-mcron-jobs config)
 
             ;; XXX: If 'mcron' has been restarted, perhaps this isn't
             ;; reached.
-            (format #t "~a upgrade complete~%" (timestamp))))))
+            (format #t "~a upgrade complete~%" (timestamp))
+
+            ;; Stopping the root shepherd service triggers a reboot.
+            (when #$reboot?
+              (format #t "~a rebooting system~%" (timestamp))
+              (force-output) ;ensure the entire log is written.
+              (stop-service 'root))))))
 
   (define upgrade
     (program-file "unattended-upgrade" code))

base-commit: 3bd8d238aba718bf949691d0e37fa310e2cfc12a
-- 
2.41.0





This bug report was last modified 17 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.