mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-04-06 21:20:33 +02:00
services: package-database: Turn into a Shepherd timer.
* gnu/services/admin.scm (package-database-mcron-jobs): Rename to… (package-database-shepherd-services): … this. Return a shepherd service. (package-database-service-type): Update accordingly. * doc/guix.texi (File Search Services): Update documentation of the ‘schedule’ field. Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Change-Id: Id7b4c5cff95a7117dca7d95af37db7389bb5ca92
This commit is contained in:
@@ -27213,9 +27213,10 @@ following fields:
|
||||
The Guix package to use.
|
||||
|
||||
@item @code{schedule} (default: @code{%default-package-database-update-schedule})
|
||||
String or G-exp denoting an mcron schedule for the periodic
|
||||
@command{guix locate --update} job (@pxref{Guile Syntax,,, mcron,
|
||||
GNU@tie{}mcron}).
|
||||
This is the schedule of the periodic @command{guix locate --update} job,
|
||||
expressed as a string in traditional cron syntax or as a gexp evaluating
|
||||
to a Shepherd calendar event (@pxref{Timers,,, shepherd, The GNU
|
||||
Shepherd Manual}).
|
||||
|
||||
@item @code{method} (default: @code{'store})
|
||||
Indexing method for @command{guix locate}. The default value,
|
||||
|
||||
@@ -529,23 +529,37 @@ terms of CPU and input/output.")
|
||||
"G-exp denoting the channels to use when updating the database
|
||||
(@pxref{Channels})."))
|
||||
|
||||
(define (package-database-mcron-jobs configuration)
|
||||
(define (package-database-shepherd-services configuration)
|
||||
(match-record configuration <package-database-configuration>
|
||||
(package schedule method channels)
|
||||
(let ((channels (scheme-file "channels.scm" channels)))
|
||||
(list #~(job #$schedule
|
||||
;; XXX: The whole thing's running as "root" just because it
|
||||
;; needs write access to /var/cache/guix/locate.
|
||||
(string-append #$(file-append package "/bin/guix")
|
||||
" time-machine -C " #$channels
|
||||
" -- locate --update --method="
|
||||
#$(symbol->string method)))))))
|
||||
(list (shepherd-service
|
||||
(provision '(package-database-update))
|
||||
(requirement '(user-processes guix-daemon))
|
||||
(modules '((shepherd service timer)))
|
||||
;; XXX: The whole thing's running as "root" just because it needs
|
||||
;; write access to /var/cache/guix/locate.
|
||||
(start #~(make-timer-constructor
|
||||
#$(if (string? schedule)
|
||||
#~(cron-string->calendar-event #$schedule)
|
||||
schedule)
|
||||
(command '(#$(file-append package "/bin/guix")
|
||||
"time-machine" "-C" #$channels
|
||||
"--" "locate" "--update"
|
||||
#$(string-append
|
||||
"--method=" (symbol->string method))))
|
||||
#:wait-for-termination? #t))
|
||||
(stop #~(make-timer-destructor))
|
||||
(documentation
|
||||
"Periodically update the system-wide package database that can
|
||||
be queried by the 'guix locate' command.")
|
||||
(actions (list shepherd-trigger-action)))))))
|
||||
|
||||
(define package-database-service-type
|
||||
(service-type
|
||||
(name 'package-database)
|
||||
(extensions (list (service-extension mcron-service-type
|
||||
package-database-mcron-jobs)))
|
||||
(extensions (list (service-extension shepherd-root-service-type
|
||||
package-database-shepherd-services)))
|
||||
(description
|
||||
"Periodically update the package database used by the @code{guix locate} command,
|
||||
which lets you search for packages that provide a given file.")
|
||||
|
||||
Reference in New Issue
Block a user