guix-patches
[Top][All Lists]
Advanced

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

[bug#28208] [PATCH] services: mpd: remove the mpd-file field.


From: Peter Mikkelsen
Subject: [bug#28208] [PATCH] services: mpd: remove the mpd-file field.
Date: Wed, 23 Aug 2017 18:39:16 +0200

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.
* doc/guix.texi (Audio Services): Document the changes.
---
 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 77435d897..5a3ba2652 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -15827,9 +15827,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 22814a6c0..66b23fcca 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-path 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-path 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-path config "pid")
+             #:log-file #$(mpd-path 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-path 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))))
--
2.14.1





reply via email to

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