services: mympd: Use records for user and group fields.
* gnu/services/audio.scm (%mympd-user, %mympd-group) (mympd-user-sanitizer, mympd-group-sanitizer): New variables. (mympd-configuration)[user]: Use user-account as value type. Sanitize via mympd-user-sanitizer. [group]: Use user-group as value type. Sanitize via mympd-group-sanitizer. (mympd-serialize-configuration): Adjust accordingly. (mympd-accounts): Likewise. * doc/guix.texi (Audio Services)[myMPD]: Likewise. Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>master
parent
7fdadeac11
commit
380faf265b
|
@ -33738,12 +33738,15 @@ The package object of the myMPD server.
|
|||
This is a list of symbols naming Shepherd services that this service
|
||||
will depend on.
|
||||
|
||||
@item @code{user} (default: @code{"mympd"}) (type: string)
|
||||
@item @code{user} (default: @code{%mympd-user}) (type: user-account)
|
||||
Owner of the @command{mympd} process.
|
||||
|
||||
@item @code{group} (default: @code{"nogroup"}) (type: string)
|
||||
The default @code{%mympd-user} is a system user with the name ``mympd'',
|
||||
who is a part of the group @var{group} (see below).
|
||||
@item @code{group} (default: @code{%mympd-group}) (type: user-group)
|
||||
Owner group of the @command{mympd} process.
|
||||
|
||||
The default @code{%mympd-group} is a system group with name ``mympd''.
|
||||
@item @code{work-directory} (default: @code{"/var/lib/mympd"}) (type: string)
|
||||
Where myMPD will store its data.
|
||||
|
||||
|
|
|
@ -658,6 +658,48 @@ appended to the configuration.")
|
|||
(define-maybe/no-serialization integer)
|
||||
(define-maybe/no-serialization mympd-ip-acl)
|
||||
|
||||
(define %mympd-user
|
||||
(user-account
|
||||
(name "mympd")
|
||||
(group %lazy-group)
|
||||
(system? #t)
|
||||
(comment "myMPD user")
|
||||
(home-directory "/var/empty")
|
||||
(shell (file-append shadow "/sbin/nologin"))))
|
||||
|
||||
(define %mympd-group
|
||||
(user-group
|
||||
(name "mympd")
|
||||
(system? #t)))
|
||||
|
||||
;;; TODO: Procedures for unsupported value types, to be removed.
|
||||
(define (mympd-user-sanitizer value)
|
||||
(cond ((user-account? value) value)
|
||||
((string? value)
|
||||
(warning (G_ "string value for 'user' is not supported, use \
|
||||
user-account instead~%"))
|
||||
(user-account
|
||||
(inherit %mympd-user)
|
||||
(name value)
|
||||
;; XXX: this is to be lazily substituted in (…-accounts)
|
||||
;; with the value from 'group'.
|
||||
(group %lazy-group)))
|
||||
(else
|
||||
(configuration-field-error #f 'user value))))
|
||||
|
||||
(define (mympd-group-sanitizer value)
|
||||
(cond ((user-group? value) value)
|
||||
((string? value)
|
||||
(warning (G_ "string value for 'group' is not supported, use \
|
||||
user-group instead~%"))
|
||||
(user-group
|
||||
(inherit %mympd-group)
|
||||
(name value)))
|
||||
(else
|
||||
(configuration-field-error #f 'group value))))
|
||||
;;;
|
||||
|
||||
|
||||
;; XXX: The serialization procedures are insufficient since we require
|
||||
;; access to multiple fields at once.
|
||||
;; Fields marked with empty-serializer are never serialized and are
|
||||
|
@ -675,13 +717,15 @@ will depend on."
|
|||
empty-serializer)
|
||||
|
||||
(user
|
||||
(string "mympd")
|
||||
(user-account %mympd-user)
|
||||
"Owner of the @command{mympd} process."
|
||||
(sanitizer mympd-user-sanitizer)
|
||||
empty-serializer)
|
||||
|
||||
(group
|
||||
(string "nogroup")
|
||||
(user-group %mympd-group)
|
||||
"Owner group of the @command{mympd} process."
|
||||
(sanitizer mympd-group-sanitizer)
|
||||
empty-serializer)
|
||||
|
||||
(work-directory
|
||||
|
@ -816,7 +860,8 @@ prompting a pin from the user.")
|
|||
(match-record config <mympd-configuration> (package shepherd-requirement
|
||||
user work-directory
|
||||
cache-directory log-level log-to)
|
||||
(let ((log-level* (format #f "MYMPD_LOGLEVEL=~a" log-level)))
|
||||
(let ((log-level* (format #f "MYMPD_LOGLEVEL=~a" log-level))
|
||||
(username (user-account-name user)))
|
||||
(shepherd-service
|
||||
(documentation "Run the myMPD daemon.")
|
||||
(requirement `(loopback user-processes
|
||||
|
@ -826,7 +871,7 @@ prompting a pin from the user.")
|
|||
,@shepherd-requirement))
|
||||
(provision '(mympd))
|
||||
(start #~(begin
|
||||
(let* ((pw (getpwnam #$user))
|
||||
(let* ((pw (getpwnam #$username))
|
||||
(uid (passwd:uid pw))
|
||||
(gid (passwd:gid pw)))
|
||||
(for-each (lambda (dir)
|
||||
|
@ -836,8 +881,8 @@ prompting a pin from the user.")
|
|||
|
||||
(make-forkexec-constructor
|
||||
`(#$(file-append package "/bin/mympd")
|
||||
"--user" #$user
|
||||
#$@(if (eqv? log-to 'syslog) '("--syslog") '())
|
||||
"--user" #$username
|
||||
#$@(if (eq? log-to 'syslog) '("--syslog") '())
|
||||
"--workdir" #$work-directory
|
||||
"--cachedir" #$cache-directory)
|
||||
#:environment-variables (list #$log-level*)
|
||||
|
@ -846,14 +891,11 @@ prompting a pin from the user.")
|
|||
|
||||
(define (mympd-accounts config)
|
||||
(match-record config <mympd-configuration> (user group)
|
||||
(list (user-group (name group)
|
||||
(system? #t))
|
||||
(user-account (name user)
|
||||
(group group)
|
||||
(system? #t)
|
||||
(comment "myMPD user")
|
||||
(home-directory "/var/empty")
|
||||
(shell (file-append shadow "/sbin/nologin"))))))
|
||||
;; TODO: Deprecation code, to be removed.
|
||||
(let ((user (if (eq? (user-account-group user) %lazy-group)
|
||||
(%set-user-group user group)
|
||||
user)))
|
||||
(list user group))))
|
||||
|
||||
(define (mympd-log-rotation config)
|
||||
(match-record config <mympd-configuration> (log-to)
|
||||
|
|
Reference in New Issue