On 2023-04-28 15:27, Maxim Cournoyer wrote: > Rationale: the tristate value was awkward to deal with, the default log file > name was odd (/var/log/mpd/log) and it required special attention to create > the 'mpd' parent directory as root and chowning it to the MPD user. It also > didn't match the default behavior of MPD, which is to log to systemd or syslog > unless a log file is specified. > > * gnu/services/audio.scm (mpd-log-file-sanitizer): New procedure. > (mpd-configuration) [log-file]: Remove default maybe value. Add sanitizer. > (mpd-shepherd-service): Validate the log file parent directory exists and has > the right permissions. > * doc/guix.texi (Audio Services): Update doc.
How about a similar approach taken in mympd for handling the logging parameter? In any case, I'd like to remind you that mpd-service-type also has a rottlog service extension so that also needs to be taken into account. > (log-level > maybe-string > @@ -563,17 +573,18 @@ (define (mpd-shepherd-service config) > (requirement `(user-processes loopback ,@shepherd-requirement)) > (provision '(mpd)) > (start #~(begin > - (and=> #$(maybe-value log-file) > - (compose mkdir-p dirname)) > - > (let ((user (getpw #$username))) > (for-each > (lambda (x) > - (when (and x (not (file-exists? x))) > + ;; Take action on absolute file names, to filter out > + ;; the 'syslog' special value. > + (when (and x (string-prefix? "/" x) > + (not (file-exists? x))) > (mkdir-p x) > (chown x (passwd:uid user) (passwd:gid user)))) I'd use mkdir-p/perms from (gnu build activation) instead.
