~ruther/guix-local

4aee6e60033786e1fa09595f116199a17516e64e — Ludovic Courtès 11 years ago 996ed73
services: nscd-service: Add #:name-services parameter.

* gnu/services/base.scm (nscd-service): Add #:name-services parameter.
  In 'start' field, set LD_LIBRARY_PATH based on #:name-services.
* doc/guix.texi (Base Services): Document it.
  (Name Service Switch): Link to 'nscd-service'.
2 files changed, 25 insertions(+), 6 deletions(-)

M doc/guix.texi
M gnu/services/base.scm
M doc/guix.texi => doc/guix.texi +11 -3
@@ 4319,9 4319,12 @@ the ``message of the day''.

@cindex name service cache daemon
@cindex nscd
@deffn {Monadic Procedure} nscd-service [@var{config}] [#:glibc glibc]
Return a service that runs libc's name service cache daemon (nscd) with the
given @var{config}---an @code{<nscd-configuration>} object.
@deffn {Monadic Procedure} nscd-service [@var{config}] [#:glibc glibc] @
                [#:name-services '()]
Return a service that runs libc's name service cache daemon (nscd) with
the given @var{config}---an @code{<nscd-configuration>} object.
Optionally, @code{#:name-services} is a list of packages that provide
name service switch (NSS) modules needed by nscd.
@end deffn

@defvr {Scheme Variable} %nscd-default-configuration


@@ 4753,6 4756,11 @@ associated lookup action.
A string denoting the name service (@pxref{Services in the NSS
configuration,,, libc, The GNU C Library Reference Manual}).

Note that name services listed here must be visible to nscd.  This is
achieved by passing the @code{#:name-services} argument to
@code{nscd-service} the list of packages providing the needed name
services (@pxref{Base Services, @code{nscd-service}}).

@item reaction
An action specified using the @code{lookup-specification} macro
(@pxref{Actions in the NSS configuration,,, libc, The GNU C Library

M gnu/services/base.scm => gnu/services/base.scm +14 -3
@@ 492,9 492,12 @@ the ``message of the day''."
                                (map cache->config caches)))))))

(define* (nscd-service #:optional (config %nscd-default-configuration)
                       #:key (glibc (canonical-package glibc)))
                       #:key (glibc (canonical-package glibc))
                       (name-services '()))
  "Return a service that runs libc's name service cache daemon (nscd) with the
given @var{config}---an @code{<nscd-configuration>} object."
given @var{config}---an @code{<nscd-configuration>} object.  Optionally,
@code{#:name-services} is a list of packages that provide name service switch
 (NSS) modules needed by nscd."
  (mlet %store-monad ((nscd.conf (nscd.conf-file config)))
    (return (service
             (documentation "Run libc's name service cache daemon (nscd).")


@@ 507,7 510,15 @@ given @var{config}---an @code{<nscd-configuration>} object."

             (start #~(make-forkexec-constructor
                       (list (string-append #$glibc "/sbin/nscd")
                             "-f" #$nscd.conf "--foreground")))
                             "-f" #$nscd.conf "--foreground")

                       #:environment-variables
                       (list (string-append "LD_LIBRARY_PATH="
                                            (string-join
                                             (map (lambda (dir)
                                                    (string-append dir "/lib"))
                                                  (list #$@name-services))
                                             ":")))))
             (stop #~(make-kill-destructor))

             (respawn? #f)))))