diff options
Diffstat (limited to 'gnu/services/dict.scm')
-rw-r--r-- | gnu/services/dict.scm | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm index 23e1d36364..a4e25f5302 100644 --- a/gnu/services/dict.scm +++ b/gnu/services/dict.scm @@ -56,7 +56,9 @@ (handlers dicod-configuration-handlers ;list of <dicod-handler> (default '())) (databases dicod-configuration-databases ;list of <dicod-database> - (default (list %dicod-database:gcide)))) + (default (list %dicod-database:gcide))) + (home-service? dicod-configuration-home-service? ;boolean + (default for-home?) (innate))) (define-record-type* <dicod-handler> dicod-handler make-dicod-handler @@ -73,12 +75,24 @@ (complex? dicod-database-complex? (default #f)) (options dicod-database-options (default '()))) +(define %dicod-gcide-index + ;; The GCIDE pre-built index. The Dico 'gcide' module can build it lazily; + ;; do it upfront so there's no need for a writable directory at run-time. + (computed-file "dicod-gcide-index" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir #$output) + (invoke #+(file-append dico "/libexec/idxgcide") + #+(file-append gcide "/share/gcide") + #$output))))) + (define %dicod-database:gcide (dicod-database (name "gcide") (handler "gcide") (options (list #~(string-append "dbdir=" #$gcide "/share/gcide") - "idxdir=/var/run/dicod")))) + #~(string-append "idxdir=" #$%dicod-gcide-index))))) (define %dicod-accounts (list (user-group @@ -137,55 +151,43 @@ database { (apply mixed-text-file "dicod.conf" (configuration->text config))) -(define %dicod-activation - #~(begin - (use-modules (guix build utils)) - (let ((user (getpwnam "dicod")) - (rundir "/var/run/dicod")) - (mkdir-p rundir) - (chown rundir (passwd:uid user) (passwd:gid user))))) - (define (dicod-shepherd-service config) (let* ((dicod.conf (dicod-configuration-file config)) (interfaces (dicod-configuration-interfaces config)) + (home-service? (dicod-configuration-home-service? config)) + (mappings `(,@(if home-service? + '() + (list (file-system-mapping + (source "/dev/log") + (target source)))) + ,(file-system-mapping + (source dicod.conf) + (target source)))) (dicod (least-authority-wrapper (file-append (dicod-configuration-dico config) "/bin/dicod") #:name "dicod" - #:mappings (list (file-system-mapping - (source "/var/run/dicod") - (target source) - (writable? #t)) - (file-system-mapping - (source "/dev/log") - (target source)) - (file-system-mapping - (source dicod.conf) - (target source))) + #:mappings mappings #:namespaces (delq 'net %namespaces)))) (list (shepherd-service (provision '(dicod)) - (requirement '(user-processes)) + (requirement (if home-service? + '() + '(user-processes))) (documentation "Run the dicod daemon.") - (start #~(if (defined? 'make-inetd-constructor) - (make-inetd-constructor - (list #$dicod "--inetd" "--foreground" - (string-append "--config=" #$dicod.conf)) - (map (lambda (interface) - (endpoint - (addrinfo:addr - (car (getaddrinfo interface "dict"))))) - '#$interfaces) - #:requirements '#$requirement - #:user "dicod" #:group "dicod" - #:service-name-stem "dicod") - (make-forkexec-constructor - (list #$dicod "--foreground" - (string-append "--config=" #$dicod.conf)) - #:user "dicod" #:group "dicod"))) - (stop #~(if (defined? 'make-inetd-destructor) - (make-inetd-destructor) - (make-kill-destructor))) + (start #~(make-inetd-constructor + (list #$dicod "--inetd" "--foreground" + (string-append "--config=" #$dicod.conf)) + (map (lambda (interface) + (endpoint + (addrinfo:addr + (car (getaddrinfo interface "dict"))))) + '#$interfaces) + #:requirements '#$requirement + #:user #$(and (not home-service?) "dicod") + #:group #$(and (not home-service?) "dicod") + #:service-name-stem "dicod")) + (stop #~(make-inetd-destructor)) (actions (list (shepherd-configuration-action dicod.conf))))))) (define dicod-service-type @@ -194,8 +196,6 @@ database { (extensions (list (service-extension account-service-type (const %dicod-accounts)) - (service-extension activation-service-type - (const %dicod-activation)) (service-extension shepherd-root-service-type dicod-shepherd-service))) (default-value (dicod-configuration)) |