From d5dd0da8976211a0d0b77663ae8f8f945e92a7a1 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Fri, 27 Nov 2020 09:32:41 +0100 Subject: [PATCH 1/2] services: unattended-upgrade: Add 'search-paths' field. * gnu/services/admin.scm ()[search-paths]: New field. (unattended-upgrade-mcron-jobs): Honor it. * doc/guix.texi (Unattended Upgrades): Document it. --- doc/guix.texi | 4 ++++ gnu/services/admin.scm | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 32b91272cf..7f42fe8867 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17063,6 +17063,10 @@ This gexp specifies the channels to use for the upgrade (@pxref{Channels}). By default, the tip of the official @code{guix} channel is used. +@item @code{search-paths} (default: @code{'()}) +This list specifies the extra search paths used. By default, no search paths +are added. + @item @code{operating-system-file} (default: @code{"/run/current-system/configuration.scm"}) This field specifies the operating system configuration file to use. The default is to reuse the config file of the current configuration. diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index b34b990f32..87cf76c57f 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -205,6 +205,8 @@ Old log files are removed or compressed according to the configuration.") (default "30 01 * * 0")) (channels unattended-upgrade-configuration-channels (default #~%default-channels)) + (search-paths unattended-upgrade-configuration-search-paths + (default '())) (services-to-restart unattended-upgrade-configuration-services-to-restart (default '(mcron))) (system-expiration unattended-upgrade-system-expiration @@ -219,8 +221,8 @@ Old log files are removed or compressed according to the configuration.") (define (unattended-upgrade-mcron-jobs config) (define channels - (scheme-file "channels.scm" - (unattended-upgrade-configuration-channels config))) + (let ((c (unattended-upgrade-configuration-channels config))) + (if c (scheme-file "channels.scm" c) #f))) (define log (unattended-upgrade-configuration-log-file config)) @@ -271,9 +273,15 @@ Old log files are removed or compressed according to the configuration.") (format #t "~a starting upgrade...~%" (timestamp)) (guard (c ((invoke-error? c) (report-invoke-error c))) - (invoke #$(file-append guix "/bin/guix") - "time-machine" "-C" #$channels - "--" "system" "reconfigure" #$config-file) + (let* ((channel #$(if channels #~(list "-C" #$channels) (quote '()))) + (search-paths (quote #$(unattended-upgrade-configuration-search-paths config))) + (search-path-args (apply append (map (lambda (x) (list "-L" x)) search-paths))) + (command (append (list #$(file-append guix "/bin/guix") "time-machine") + channel + (list "--" "system" "reconfigure") + search-path-args + (list #$config-file)))) + (apply invoke command)) ;; 'guix system delete-generations' fails when there's no ;; matching generation. Thus, catch 'invoke-error?'. -- 2.25.1