Suorita automaattipäivitys aina käynnistyessä

Läppärit ovat lähes aina pois päältä ajastettujen päivitysten aikaan,
jolloin ne eivät muuten päivittyisi kohtuullisella tahdilla.
This commit is contained in:
Saku Laesvuori 2026-08-18 17:53:07 +03:00
parent 8e54761370
commit 14be6d401f
Signed by: slaesvuo
GPG Key ID: 257D284A2A1D3A32

View File

@ -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"))