From 14be6d401f0d45dbf7785f3ff3f00d43ad1b98ba Mon Sep 17 00:00:00 2001 From: Saku Laesvuori Date: Tue, 18 Aug 2026 17:53:07 +0300 Subject: [PATCH] =?UTF-8?q?Suorita=20automaattip=C3=A4ivitys=20aina=20k?= =?UTF-8?q?=C3=A4ynnistyess=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Läppärit ovat lähes aina pois päältä ajastettujen päivitysten aikaan, jolloin ne eivät muuten päivittyisi kohtuullisella tahdilla. --- modules/oms/systems.scm | 61 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/modules/oms/systems.scm b/modules/oms/systems.scm index 1573bcd..83f99e7 100644 --- a/modules/oms/systems.scm +++ b/modules/oms/systems.scm @@ -9,12 +9,14 @@ #:use-module (gnu services dns) #:use-module (gnu services guix) #:use-module (gnu services networking) + #:use-module (gnu services shepherd) #:use-module (gnu services ssh) #:use-module (gnu services sysctl) #:use-module (gnu services vpn) #:use-module (gnu services xorg) #:use-module (gnu system pam) #:use-module (guix gexp) + #:use-module (guix modules) #:use-module (nongnu packages linux) #:use-module (nongnu system linux-initrd) #:use-module (oms channel-file) @@ -145,6 +147,54 @@ sources=[('xkb', 'fi')]")) (create-mount-point? #t))) %base-file-systems)))) +(define upgrade-if-needed-script + (program-file + "upgrade-if-needed" + (with-imported-modules (source-module-closure + '((gnu services herd) + (guix config) + (guix profiles))) + #~(begin + (use-modules (gnu services herd) + (guix config) + (guix profiles) + (ice-9 exceptions) + (srfi srfi-1) + (srfi srfi-19) + (srfi srfi-26)) + + ;; From guix/scripts/system.scm + (define %system-profile + (string-append %state-directory "/profiles/system")) + + (define (latest-of lst) + (reduce (lambda (next largest) + (if (time>? next largest) next largest)) + #f lst)) + + (define latest-generation + (latest-of (map (cut generation-time %system-profile <>) + (profile-generations %system-profile)))) + + (define one-week (make-time time-duration 0 (* 7 24 60 60))) + + (define no-generations-exception + (make-exception + (make-exception-with-message + (format #f "No system generations found at '~a'! Not upgrading.~%" + %system-profile)) + (make-external-error))) + + (if (time>? (current-time time-utc) + (add-duration + (or latest-generation + (raise-exception no-generations-exception)) + one-week)) + (with-shepherd-action 'unattended-upgrade ('trigger) + result result) + (format #t "Latest generation is from ~a. No need to upgrade.~%" + (date->string (time-utc->date latest-generation)))))))) + (define-syntax-rule (define-system id os) "Extend the operating system OS with unattended upgrades and define a varible ID with the extended system as it's value." @@ -168,7 +218,16 @@ ID with the extended system as it's value." "A0C9 1947 734F 076F 5F08 E9FF 257D 284A 2A1D 3A32")))) %default-channels)) (operating-system-expression - #~(@ (oms systems) id))))) + #~(@ (oms systems) id)))) + (simple-service + 'check-upgrade-on-boot + shepherd-root-service-type + (list (shepherd-service + (provision '(upgrade-if-needed)) + (requirement '(unattended-upgrade)) + (one-shot? #t) + (start #~(make-forkexec-constructor + (list #$upgrade-if-needed-script))))))) (operating-system-user-services base))))))) (define-system oms-morn (base-operating-system "OMS-morn"))