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:
parent
8e54761370
commit
14be6d401f
@ -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"))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user