* gnu/services/backup.scm (restic-backup-configuration): Add restic field.
(restic-backup-job-program): Add restic package to function signature.
(restic-guix): Ditto.
(restic-guix-wrapper-package): Ditto. Add restic package as package input.
(restic-backup-service-profile): Remove excess lamba.
* doc/guix.texi (Miscellaneous Services): Document it.
Change-Id: I1e5f63c21cd072354225afe0ee270dca8d9d840b
---
doc/guix.texi | 6 +++---
gnu/services/backup.scm | 38 ++++++++++++++++++++------------------
2 files changed, 23 insertions(+), 21 deletions(-)
Toggle diff (145 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 32ce0c86b9..e4379c5e1c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -41311,6 +41311,9 @@ Miscellaneous Services
Available @code{restic-backup-configuration} fields are:
@table @asis
+@item @code{restic} (default: @code{restic}) (type: package)
+The restic package to use for all jobs.
+
@item @code{jobs} (default: @code{'()}) (type: list-of-restic-backup-jobs)
The list of backup jobs for the current system.
@@ -41327,9 +41330,6 @@ Miscellaneous Services
Available @code{restic-backup-job} fields are:
@table @asis
-@item @code{restic} (default: @code{restic}) (type: package)
-The restic package to be used for the current job.
-
@item @code{user} (default: @code{"root"}) (type: string)
The user used for running the current job.
diff --git a/gnu/services/backup.scm b/gnu/services/backup.scm
index a6d8404a5a..a59cf08c71 100644
--- a/gnu/services/backup.scm
+++ b/gnu/services/backup.scm
@@ -29,10 +29,10 @@ (define-module (gnu services backup)
#:use-module (guix modules)
#:use-module (guix packages)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
#:export (restic-backup-job
restic-backup-job?
restic-backup-job-fields
- restic-backup-job-restic
restic-backup-job-user
restic-backup-job-name
restic-backup-job-repository
@@ -46,6 +46,7 @@ (define-module (gnu services backup)
restic-backup-configuration
restic-backup-configuration?
+ restic-backup-configuration-restic
restic-backup-configuration-fields
restic-backup-configuration-jobs
@@ -71,9 +72,6 @@ (define-maybe/no-serialization string)
(define-maybe/no-serialization file-like)
(define-configuration/no-serialization restic-backup-job
- (restic
- (package restic)
- "The restic package to be used for the current job.")
(user
(string "root")
"The user used for running the current job.")
@@ -129,11 +127,14 @@ (define list-of-restic-backup-jobs?
(list-of restic-backup-job?))
(define-configuration/no-serialization restic-backup-configuration
+ (restic
+ (package restic)
+ "The restic package to be used.")
(jobs
(list-of-restic-backup-jobs '())
"The list of backup jobs for the current system."))
-(define (restic-backup-job-program config)
+(define (restic-backup-job-program restic-package config)
(define (maybe-value-or-false maybe)
(if (maybe-value-set? maybe)
maybe
@@ -143,7 +144,7 @@ (define (restic-backup-job-program config)
(verify-restic-backup-job-configuration config)
(let ((restic
- (file-append (restic-backup-job-restic config) "/bin/restic"))
+ (file-append restic-package "/bin/restic"))
(repository
(restic-backup-job-repository config))
(password-file
@@ -191,7 +192,7 @@ (define (restic-backup-job-program config)
#$@extra-flags
"backup" #$@files)))))
-(define (restic-guix jobs)
+(define (restic-guix restic-package jobs)
(program-file
"restic-guix"
#~(begin
@@ -199,7 +200,7 @@ (define (restic-guix jobs)
(srfi srfi-1))
(define names '#$(map restic-backup-job-name jobs))
- (define programs '#$(map restic-backup-job-program jobs))
+ (define programs '#$(map (cut restic-backup-job-program restic-package <>) jobs))
(define (get-program name)
(define idx
@@ -242,13 +243,13 @@ (define (restic-backup-job->mcron-job config)
#$(string-append "restic-guix backup " name)
#:user #$user)))
-(define (restic-guix-wrapper-package jobs)
+(define (restic-guix-wrapper-package restic jobs)
(let ((extra-packages (append-map restic-backup-job-extra-packages
jobs)))
(package
(name "restic-backup-service-wrapper")
(version "0.0.0")
- (source (restic-guix restic-package jobs))
+ (source (restic-guix restic jobs))
(build-system copy-build-system)
(arguments
(list #:install-plan #~'(("./" "/bin"))))
@@ -260,16 +261,17 @@ (define (restic-guix-wrapper-package jobs)
by the @code{restic-backup-service-type}. It allows for easily interacting
with Guix configured backup jobs, for example for manually triggering a backup
without waiting for the scheduled job to run.")
- (inputs extra-packages)
+ (inputs (cons restic extra-packages))
(license license:gpl3+))))
-(define restic-backup-service-profile
- (lambda (config)
- (define jobs (restic-backup-configuration-jobs config))
- (if (> (length jobs) 0)
- (list
- (restic-guix-wrapper-package jobs))
- '())))
+(define (restic-backup-service-profile config)
+ (let ((jobs (restic-backup-configuration-jobs config))
+ (restic (restic-backup-configuration-restic config)))
+ ;; Even if we provide a wrapper we need to add restic to the profile so
+ ;; the service works in containers and VMs which only see a subset of
+ ;; /gnu/store. https://issues.guix.gnu.org/70553. Ergo pass restic to
+ ;; the wrapper package so it is added as an input.
+ (list (restic-guix-wrapper-package restic jobs))))
(define restic-backup-service-type
(service-type (name 'restic-backup)
--
2.45.1