mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
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.
This commit is contained in:
parent
e63c87020d
commit
b3a2b3e723
2 changed files with 101 additions and 1 deletions
|
@ -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
|
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,
|
under @file{~/.cache/guix/locate}. On a multi-user system,
|
||||||
administrators may want to periodically update the system-wide database
|
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:
|
The general syntax is:
|
||||||
|
|
||||||
|
@ -25000,6 +25002,51 @@ GNU@tie{}Findutils}).
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@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
|
@node Database Services
|
||||||
@subsection Database Services
|
@subsection Database Services
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#:use-module (gnu services configuration)
|
#:use-module (gnu services configuration)
|
||||||
#:use-module (gnu services mcron)
|
#:use-module (gnu services mcron)
|
||||||
#:use-module (gnu services shepherd)
|
#: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 store) #:select (%store-prefix))
|
||||||
#:use-module (guix gexp)
|
#:use-module (guix gexp)
|
||||||
#:use-module (guix modules)
|
#:use-module (guix modules)
|
||||||
|
@ -69,6 +71,14 @@
|
||||||
%default-file-database-update-schedule
|
%default-file-database-update-schedule
|
||||||
%default-file-database-excluded-directories
|
%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-service-type
|
||||||
unattended-upgrade-configuration
|
unattended-upgrade-configuration
|
||||||
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.")
|
the @command{updatedb} command.")
|
||||||
(default-value (file-database-configuration))))
|
(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.
|
;;; Unattended upgrade.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue