services: Add 'package-database' service.
* gnu/services/admin.scm (%default-package-database-update-schedule): New variable. (<package-database-configuration>): New record type. (package-database-mcron-jobs): New procedure. (package-database-service-type): New variable. * doc/guix.texi (File Search Services): Document it.
parent
e63c87020d
commit
b3a2b3e723
|
@ -4481,7 +4481,9 @@ database, usually under @file{/var/cache/guix/locate}; if it does not
|
|||
exist or is too old, it falls back to the per-user database, by default
|
||||
under @file{~/.cache/guix/locate}. On a multi-user system,
|
||||
administrators may want to periodically update the system-wide database
|
||||
so that all users can benefit from it.
|
||||
so that all users can benefit from it, for instance by setting up
|
||||
@code{package-database-service-type} (@pxref{File Search Services,
|
||||
@code{package-database-service-type}}).
|
||||
|
||||
The general syntax is:
|
||||
|
||||
|
@ -25000,6 +25002,51 @@ GNU@tie{}Findutils}).
|
|||
@end table
|
||||
@end deftp
|
||||
|
||||
The second service, @code{package-database-service-type}, builds the
|
||||
database used by @command{guix locate}, which lets you search for
|
||||
packages that contain a given file (@pxref{Invoking guix locate}). The
|
||||
service periodically updates a system-wide database, which will be
|
||||
readily available to anyone running @command{guix locate} on the system.
|
||||
To use this service with its default settings, add this snippet to your
|
||||
service list:
|
||||
|
||||
@lisp
|
||||
(service package-database-service-type)
|
||||
@end lisp
|
||||
|
||||
This will run @command{guix locate --update} once a week.
|
||||
|
||||
@defvar package-database-service-type
|
||||
This is the service type for periodic @command{guix locate} updates
|
||||
(@pxref{Invoking guix locate}). Its value must be a
|
||||
@code{package-database-configuration} record, as shown below.
|
||||
@end defvar
|
||||
|
||||
@deftp {Data Type} package-database-configuration
|
||||
Data type to configure periodic package database updates. It has the
|
||||
following fields:
|
||||
|
||||
@table @asis
|
||||
@item @code{package} (default: @code{guix})
|
||||
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}).
|
||||
|
||||
@item @code{method} (default: @code{'store})
|
||||
Indexing method for @command{guix locate}. The default value,
|
||||
@code{'store}, yields a more complete database but is relatively
|
||||
expensive in terms of CPU and input/output.
|
||||
|
||||
@item @code{channels} (default: @code{#~%default-channels})
|
||||
G-exp denoting the channels to use when updating the database
|
||||
(@pxref{Channels}).
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
|
||||
@node Database Services
|
||||
@subsection Database Services
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu services mcron)
|
||||
#:use-module (gnu services shepherd)
|
||||
#:use-module (gnu system accounts)
|
||||
#:use-module ((gnu system shadow) #:select (account-service-type))
|
||||
#:use-module ((guix store) #:select (%store-prefix))
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix modules)
|
||||
|
@ -69,6 +71,14 @@
|
|||
%default-file-database-update-schedule
|
||||
%default-file-database-excluded-directories
|
||||
|
||||
package-database-service-type
|
||||
package-database-configuration
|
||||
package-database-configuration?
|
||||
package-database-configuration-package
|
||||
package-database-configuration-schedule
|
||||
package-database-configuration-method
|
||||
package-database-configuration-channels
|
||||
|
||||
unattended-upgrade-service-type
|
||||
unattended-upgrade-configuration
|
||||
unattended-upgrade-configuration?
|
||||
|
@ -338,6 +348,49 @@ which lets you search for files by name. The database is created by running
|
|||
the @command{updatedb} command.")
|
||||
(default-value (file-database-configuration))))
|
||||
|
||||
(define %default-package-database-update-schedule
|
||||
;; Default mcron schedule for the periodic 'guix locate --update' job: once
|
||||
;; every Monday.
|
||||
"10 23 * * 1")
|
||||
|
||||
(define-configuration/no-serialization package-database-configuration
|
||||
(package (file-like guix)
|
||||
"The Guix package to use.")
|
||||
(schedule (string-or-gexp
|
||||
%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}).")
|
||||
(method (symbol 'store)
|
||||
"Indexing method for @command{guix locate}. The default value,
|
||||
@code{'store}, yields a more complete database but is relatively expensive in
|
||||
terms of CPU and input/output.")
|
||||
(channels (gexp #~%default-channels)
|
||||
"G-exp denoting the channels to use when updating the database
|
||||
(@pxref{Channels})."))
|
||||
|
||||
(define (package-database-mcron-jobs 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)))))))
|
||||
|
||||
(define package-database-service-type
|
||||
(service-type
|
||||
(name 'package-database)
|
||||
(extensions (list (service-extension mcron-service-type
|
||||
package-database-mcron-jobs)))
|
||||
(description
|
||||
"Periodically update the package database used by the @code{guix locate} command,
|
||||
which lets you search for packages that provide a given file.")
|
||||
(default-value (package-database-configuration))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Unattended upgrade.
|
||||
|
|
Reference in New Issue