guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: services: mpd: Remove the mpd-file field.


From: Ludovic Courtès
Subject: 01/01: services: mpd: Remove the mpd-file field.
Date: Thu, 31 Aug 2017 08:43:31 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit b6dc69af1de806e8b3a70e9a1afe0e1590da5480
Author: Peter Mikkelsen <address@hidden>
Date:   Wed Aug 23 18:39:16 2017 +0200

    services: mpd: Remove the mpd-file field.
    
    Since MPD switches user, the pid-file must be in a writable dir.  This
    is now always /var/run/mpd/(user)/pid.
    
    * gnu/services/audio.scm (mpd-service-type): Add a activation-service
    extension.
    (<mpd-configuration>)[pid-file]: Remove.
    (mpd-service): Rename to...
    (mpd-shepherd-service): ... this.
    (mpd-file-name, mpd-service-activation): New procedure.
    * doc/guix.texi (Audio Services): Document the changes.
    
    Signed-off-by: Ludovic Courtès <address@hidden>
---
 doc/guix.texi          |  3 ---
 gnu/services/audio.scm | 35 +++++++++++++++++++++++++++--------
 2 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index e8b4d5e..781c5f0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -15844,9 +15844,6 @@ The directory to scan for music files.
 @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
 The directory to store playlists.
 
address@hidden @code{pid-file} (default: @code{"/var/run/mpd.pid"})
-The file mpd wil store its PID.  This must be an absolute path.
-
 @item @code{port} (default: @code{"6600"})
 The port to run mpd on.
 
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index 22814a6..0a3e9f6 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -45,9 +45,7 @@
   (port         mpd-configuration-port
                 (default "6600"))
   (address      mpd-configuration-address
-                (default "any"))
-  (pid-file     mpd-configuration-pid-file
-                (default "/var/run/mpd.pid")))
+                (default "any")))
 
 (define (mpd-config->file config)
   (apply
@@ -56,6 +54,7 @@
    "  type \"pulse\"\n"
    "  name \"MPD\"\n"
    "}\n"
+   "pid_file \"" (mpd-file-name config "pid") "\"\n"
    (map (match-lambda
           ((config-name config-val)
            (string-append config-name " \"" (config-val config) "\"\n")))
@@ -63,10 +62,16 @@
           ("music_directory" ,mpd-configuration-music-dir)
           ("playlist_directory" ,mpd-configuration-playlist-dir)
           ("port" ,mpd-configuration-port)
-          ("bind_to_address" ,mpd-configuration-address)
-          ("pid_file" ,mpd-configuration-pid-file)))))
+          ("bind_to_address" ,mpd-configuration-address)))))
 
-(define (mpd-service config)
+(define (mpd-file-name config file)
+  "Return a path in /var/run/mpd/ that is writable
+   by @code{user} from @code{config}."
+  (string-append "/var/run/mpd/"
+                 (mpd-configuration-user config)
+                 "/" file))
+
+(define (mpd-shepherd-service config)
   (shepherd-service
    (documentation "Run the MPD (Music Player Daemon)")
    (provision '(mpd))
@@ -74,13 +79,27 @@
              (list #$(file-append mpd "/bin/mpd")
                    "--no-daemon"
                    #$(mpd-config->file config))
-             #:pid-file #$(mpd-configuration-pid-file config)))
+             #:pid-file #$(mpd-file-name config "pid")
+             #:log-file #$(mpd-file-name config "log")))
    (stop  #~(make-kill-destructor))))
 
+(define (mpd-service-activation config)
+  (with-imported-modules '((guix build utils))
+    #~(begin
+        (use-modules (guix build utils))
+        (define %user
+          (getpw #$(mpd-configuration-user config)))
+
+        (let ((directory #$(mpd-file-name config "")))
+          (mkdir-p directory)
+          (chown directory (passwd:uid %user) (passwd:gid %user))))))
+
 (define mpd-service-type
   (service-type
    (name 'mpd)
    (extensions
     (list (service-extension shepherd-root-service-type
-                             (compose list mpd-service))))
+                             (compose list mpd-shepherd-service))
+          (service-extension activation-service-type
+                             mpd-service-activation)))
    (default-value (mpd-configuration))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]