diff options
Diffstat (limited to 'px/services/package-management.scm')
-rw-r--r-- | px/services/package-management.scm | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/px/services/package-management.scm b/px/services/package-management.scm new file mode 100644 index 0000000..d393d2d --- /dev/null +++ b/px/services/package-management.scm @@ -0,0 +1,64 @@ +(define-module (px services package-management) + #:use-module (gnu) + #:use-module (gnu packages bash) + #:use-module (gnu services shepherd) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (ice-9 match) + #:use-module (px packages package-management) + #:export (px-unattended-upgrades-configuration + px-unattended-upgrades-configuration? + px-unattended-upgrades-service-type)) + +;; +;; px-unattended-upgrades-service-type +;; + +(define-record-type* <px-unattended-upgrades-configuration> + px-unattended-upgrades-configuration make-px-unattended-upgrades-configuration + px-unattended-upgrades-configuration? + (package px-unattended-upgrades-configuration-package + (default px-unattended-upgrades)) + (timeout px-unattended-upgrades-timeout + (default 300))) + + +(define (px-unattended-upgrades-configuration->script config) + (match config + (($ <px-unattended-upgrades-configuration> package timeout) + (computed-file + "px-unattended-upgrades.sh" + #~(begin + (call-with-output-file #$output + (lambda (port) + (display "# AUTO GENERATED BY: px-unattended-upgrades-shepherd-service\n\n" port) + (display "echo \"$(date) > service started: \"\n" port) + (format port "echo \"$(date) > sleep for: ~a\"\n" #$timeout) + (format port "sleep ~a\n" #$timeout) + (display "echo \"$(date) > start upgrade\"\n" port) + (format port "~a/bin/px-unattended-upgrades\n" #$package)))))))) + + +(define (px-unattended-upgrades-shepherd-service config) + (match config + (($ <px-unattended-upgrades-configuration> package timeout) + (let ((script (px-unattended-upgrades-configuration->script config))) + (list (shepherd-service + (provision '(px-unattended-upgrades)) + (documentation "Run px-unattended-upgrades once after reboot") + (requirement '(networking user-processes)) + (one-shot? #t) + (start #~(make-forkexec-constructor + (list (string-append #$bash "/bin/bash") + #$script) + #:log-file "/var/log/px-unattended-upgrades.log")) + (stop #~(make-kill-destructor)))))))) + + +(define px-unattended-upgrades-service-type + (service-type + (name 'px-unattended-upgrades) + (description "PantherX unattended upgrades service") + (extensions (list (service-extension shepherd-root-service-type + px-unattended-upgrades-shepherd-service))) + (default-value (px-unattended-upgrades-configuration)))) |