diff options
| author | Ricardo Wurmus <rekado@elephly.net> | 2020-01-03 18:13:38 +0100 | 
|---|---|---|
| committer | Ricardo Wurmus <rekado@elephly.net> | 2020-01-08 23:56:16 +0100 | 
| commit | af32ea35830383deb3b1540ca1b829eb53c6fe0d (patch) | |
| tree | 7530b6bdd8ba474eda4a3f58323ba13b12703f05 /gnu/services/nfs.scm | |
| parent | 5d4ba49891996df93b4219c9dc9a438cac8f4a71 (diff) | |
services: nfs: Allow idmap-service-type to be extended.
* gnu/services/nfs.scm (idmap-service-type): Rewrite using SERVICE-TYPE to add
ability to extend the service.
Diffstat (limited to 'gnu/services/nfs.scm')
| -rw-r--r-- | gnu/services/nfs.scm | 67 | 
1 files changed, 39 insertions, 28 deletions
| diff --git a/gnu/services/nfs.scm b/gnu/services/nfs.scm index 451020be31..9fb95bde7e 100644 --- a/gnu/services/nfs.scm +++ b/gnu/services/nfs.scm @@ -170,37 +170,48 @@                           (default nfs-utils)))  (define idmap-service-type -  (shepherd-service-type -   'idmap -   (lambda (config) - -     (define nfs-utils -       (idmap-configuration-nfs-utils config)) +  (let ((proc +         (lambda (config) -     (define pipefs-directory -       (idmap-configuration-pipefs-directory config)) +           (define nfs-utils +             (idmap-configuration-nfs-utils config)) -     (define domain (idmap-configuration-domain config)) +           (define pipefs-directory +             (idmap-configuration-pipefs-directory config)) -     (define (idmap-config-file config) -       (plain-file "idmapd.conf" -                   (string-append -                    "\n[General]\n" -                    (if domain -                        (format #f "Domain = ~a\n" domain)) -                    "\n[Mapping]\n" -                    "Nobody-User = nobody\n" -                    "Nobody-Group = nogroup\n"))) +           (define domain (idmap-configuration-domain config)) -     (define idmap-command -       #~(list (string-append #$nfs-utils "/sbin/rpc.idmapd") "-f" -               "-p" #$pipefs-directory -               "-c" #$(idmap-config-file config))) +           (define (idmap-config-file config) +             (plain-file "idmapd.conf" +                         (string-append +                          "\n[General]\n" +                          (if domain +                              (format #f "Domain = ~a\n" domain) +                              "") +                          "\n[Mapping]\n" +                          "Nobody-User = nobody\n" +                          "Nobody-Group = nogroup\n"))) -     (shepherd-service -       (documentation "Start the RPC IDMAP daemon.") -       (requirement '(rpcbind-daemon rpc-pipefs)) -       (provision '(idmap-daemon)) -       (start #~(make-forkexec-constructor #$idmap-command)) -       (stop #~(make-kill-destructor)))))) +           (define idmap-command +             #~(list (string-append #$nfs-utils "/sbin/rpc.idmapd") "-f" +                     "-p" #$pipefs-directory +                     ;; TODO: this is deprecated +                     "-c" #$(idmap-config-file config))) +           (shepherd-service +            (documentation "Start the RPC IDMAP daemon.") +            (requirement '(rpcbind-daemon rpc-pipefs)) +            (provision '(idmap-daemon)) +            (start #~(make-forkexec-constructor #$idmap-command)) +            (stop #~(make-kill-destructor)))))) +    (service-type +     (name 'idmap) +     (extensions +      (list (service-extension shepherd-root-service-type +                               (compose list proc)))) +     ;; We use the extensions feature to allow other services to automatically +     ;; configure and start this service.  Only one value can be provided.  We +     ;; override it with the value returned by the extending service. +     (compose identity) +     (extend (lambda (config values) (first values))) +     (default-value (idmap-configuration))))) | 
