services: Add 'file-database' service.
* gnu/services/admin.scm (%default-file-database-update-schedule) (%default-file-database-excluded-directories): New variables. (<file-database-configuration>): New record type. (file-database-mcron-jobs): New procedure. (file-database-service-type): New variable. * doc/guix.texi (File Search Services): New node.
parent
56667ee55c
commit
e63c87020d
|
@ -388,6 +388,7 @@ Services
|
|||
* Printing Services:: Local and remote printer support.
|
||||
* Desktop Services:: D-Bus and desktop services.
|
||||
* Sound Services:: ALSA and Pulseaudio services.
|
||||
* File Search Services:: Tools to search for files.
|
||||
* Database Services:: SQL databases, key-value stores, etc.
|
||||
* Mail Services:: IMAP, POP3, SMTP, and all that.
|
||||
* Messaging Services:: Messaging services.
|
||||
|
@ -18428,6 +18429,7 @@ declaration.
|
|||
* Printing Services:: Local and remote printer support.
|
||||
* Desktop Services:: D-Bus and desktop services.
|
||||
* Sound Services:: ALSA and Pulseaudio services.
|
||||
* File Search Services:: Tools to search for files.
|
||||
* Database Services:: SQL databases, key-value stores, etc.
|
||||
* Mail Services:: IMAP, POP3, SMTP, and all that.
|
||||
* Messaging Services:: Messaging services.
|
||||
|
@ -24938,6 +24940,66 @@ details.
|
|||
|
||||
@end defvar
|
||||
|
||||
@node File Search Services
|
||||
@subsection File Search Services
|
||||
|
||||
@cindex file search
|
||||
@cindex searching for a file
|
||||
The services in this section populate @dfn{file databases} that let you
|
||||
search for files on your machine. These services are provided by the
|
||||
@code{(gnu services admin)} module.
|
||||
|
||||
The first one, @code{file-database-service-type}, periodically runs the
|
||||
venerable @command{updatedb} command (@pxref{Invoking updatedb,,, find,
|
||||
GNU Findutils}). That command populates a database of file names that
|
||||
you can then search with the @command{locate} command (@pxref{Invoing
|
||||
locate,,, find, GNU Findutils}), as in this example:
|
||||
|
||||
@example
|
||||
locate important-notes.txt
|
||||
@end example
|
||||
|
||||
You can enable this service with its default settings by adding this
|
||||
snippet to your operating system services:
|
||||
|
||||
@lisp
|
||||
(service file-database-service-type)
|
||||
@end lisp
|
||||
|
||||
This updates the database once a week, excluding files from
|
||||
@file{/gnu/store}---these are more usefully handled by @command{guix
|
||||
locate} (@pxref{Invoking guix locate}). You can of course provide a
|
||||
custom configuration, as described below.
|
||||
|
||||
@defvar file-database-service-type
|
||||
This is the type of the file database service, which runs
|
||||
@command{updatedb} periodically. Its associated value must be a
|
||||
@code{file-database-configuration} record, as described below.
|
||||
@end defvar
|
||||
|
||||
@deftp {Data Type} file-database-configuration
|
||||
Record type for the @code{file-database-service-type} configuration,
|
||||
with the following fields:
|
||||
|
||||
@table @asis
|
||||
@item @code{package} (default: @code{findutils})
|
||||
The GNU@tie{}Findutils package from which the @command{updatedb} command
|
||||
is taken.
|
||||
|
||||
@item @code{schedule} (default: @code{%default-file-database-update-schedule})
|
||||
String or G-exp denoting an mcron schedule for the periodic
|
||||
@command{updatedb} job (@pxref{Guile Syntax,,, mcron, GNU@tie{}mcron}).
|
||||
|
||||
@item @code{excluded-directories} (default @code{%default-file-database-excluded-directories})
|
||||
List of directories to ignore when building the file database. By
|
||||
default, this includes @file{/tmp} and @file{/gnu/store}, which should
|
||||
instead be indexed by @command{guix locate} (@pxref{Invoking guix
|
||||
locate}). This list is passed to the @option{--prunepaths} option of
|
||||
@command{updatedb} (@pxref{Invoking updatedb,,, find,
|
||||
GNU@tie{}Findutils}).
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@node Database Services
|
||||
@subsection Database Services
|
||||
|
||||
|
|
|
@ -21,16 +21,21 @@
|
|||
|
||||
(define-module (gnu services admin)
|
||||
#:use-module (gnu packages admin)
|
||||
#:use-module ((gnu packages base)
|
||||
#:select (canonical-package findutils))
|
||||
#:use-module (gnu packages certs)
|
||||
#:use-module (gnu packages package-management)
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu services mcron)
|
||||
#:use-module (gnu services shepherd)
|
||||
#:use-module ((guix store) #:select (%store-prefix))
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix modules)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix records)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 vlist)
|
||||
#:export (%default-rotations
|
||||
%rotated-files
|
||||
|
@ -55,6 +60,15 @@
|
|||
log-cleanup-configuration-expiry
|
||||
log-cleanup-configuration-schedule
|
||||
|
||||
file-database-service-type
|
||||
file-database-configuration
|
||||
file-database-configuration?
|
||||
file-database-configuration-package
|
||||
file-database-configuration-schedule
|
||||
file-database-configuration-excluded-directories
|
||||
%default-file-database-update-schedule
|
||||
%default-file-database-excluded-directories
|
||||
|
||||
unattended-upgrade-service-type
|
||||
unattended-upgrade-configuration
|
||||
unattended-upgrade-configuration?
|
||||
|
@ -255,6 +269,75 @@ Old log files are removed or compressed according to the configuration.")
|
|||
(description
|
||||
"Periodically delete old log files.")))
|
||||
|
||||
|
||||
;;;
|
||||
;;; File databases.
|
||||
;;;
|
||||
|
||||
(define %default-file-database-update-schedule
|
||||
;; Default mcron schedule for the periodic 'updatedb' job: once every
|
||||
;; Sunday.
|
||||
"10 23 * * 0")
|
||||
|
||||
(define %default-file-database-excluded-directories
|
||||
;; Directories excluded from the 'locate' database.
|
||||
(list (%store-prefix)
|
||||
"/tmp" "/var/tmp" "/var/cache" ".*/\\.cache"
|
||||
"/run/udev"))
|
||||
|
||||
(define (string-or-gexp? obj)
|
||||
(or (string? obj) (gexp? obj)))
|
||||
|
||||
(define string-list?
|
||||
(match-lambda
|
||||
(((? string?) ...) #t)
|
||||
(_ #f)))
|
||||
|
||||
(define-configuration/no-serialization file-database-configuration
|
||||
(package
|
||||
(file-like (let-system (system target)
|
||||
;; Unless we're cross-compiling, avoid pulling a second copy
|
||||
;; of findutils.
|
||||
(if target
|
||||
findutils
|
||||
(canonical-package findutils))))
|
||||
"The GNU@tie{}Findutils package from which the @command{updatedb} command
|
||||
is taken.")
|
||||
(schedule
|
||||
(string-or-gexp %default-file-database-update-schedule)
|
||||
"String or G-exp denoting an mcron schedule for the periodic
|
||||
@command{updatedb} job (@pxref{Guile Syntax,,, mcron, GNU@tie{}mcron}).")
|
||||
(excluded-directories
|
||||
(string-list %default-file-database-excluded-directories)
|
||||
"List of directories to ignore when building the file database. By
|
||||
default, this includes @file{/tmp} and @file{/gnu/store}, which should instead
|
||||
be indexed by @command{guix locate} (@pxref{Invoking guix locate}). This list
|
||||
is passed to the @option{--prunepaths} option of
|
||||
@command{updatedb} (@pxref{Invoking updatedb,,, find, GNU@tie{}Findutils})."))
|
||||
|
||||
(define (file-database-mcron-jobs configuration)
|
||||
(match-record configuration <file-database-configuration>
|
||||
(package schedule excluded-directories)
|
||||
(let ((updatedb (program-file
|
||||
"updatedb"
|
||||
#~(execl #$(file-append package "/bin/updatedb")
|
||||
"updatedb"
|
||||
#$(string-append "--prunepaths="
|
||||
(string-join
|
||||
excluded-directories))))))
|
||||
(list #~(job #$schedule #$updatedb)))))
|
||||
|
||||
(define file-database-service-type
|
||||
(service-type
|
||||
(name 'file-database)
|
||||
(extensions (list (service-extension mcron-service-type
|
||||
file-database-mcron-jobs)))
|
||||
(description
|
||||
"Periodically update the file database used by the @command{locate} command,
|
||||
which lets you search for files by name. The database is created by running
|
||||
the @command{updatedb} command.")
|
||||
(default-value (file-database-configuration))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Unattended upgrade.
|
||||
|
|
Reference in New Issue