summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/services/upnp.scm45
-rw-r--r--gnu/tests/upnp.scm21
2 files changed, 55 insertions, 11 deletions
diff --git a/gnu/services/upnp.scm b/gnu/services/upnp.scm
index e0b9b974b93..8ae6c2f928e 100644
--- a/gnu/services/upnp.scm
+++ b/gnu/services/upnp.scm
@@ -33,6 +33,8 @@
33 #:use-module (ice-9 match) 33 #:use-module (ice-9 match)
34 #:export (%readymedia-default-cache-directory 34 #:export (%readymedia-default-cache-directory
35 %readymedia-default-log-file 35 %readymedia-default-log-file
36 %readymedia-default-pid-directory
37 %readymedia-pid-file
36 %readymedia-user-account 38 %readymedia-user-account
37 %readymedia-user-group 39 %readymedia-user-group
38 readymedia-configuration 40 readymedia-configuration
@@ -68,6 +70,13 @@
68 (use-modules (shepherd support)) ;for %user-log-dir 70 (use-modules (shepherd support)) ;for %user-log-dir
69 (string-append %user-log-dir "/readymedia.log")) 71 (string-append %user-log-dir "/readymedia.log"))
70 "/var/log/readymedia.log")) 72 "/var/log/readymedia.log"))
73(define %readymedia-default-pid-directory "/var/run/readymedia")
74(define* (%readymedia-pid-file #:key (home-service? #f) (name "minidlna.pid"))
75 (if home-service?
76 #~(begin
77 (use-modules (shepherd support)) ;for %user-runtime-dir
78 (string-append %user-runtime-dir "/readymedia/" #$name))
79 (string-append %readymedia-default-pid-directory "/" name)))
71(define %readymedia-user-group "readymedia") 80(define %readymedia-user-group "readymedia")
72(define %readymedia-user-account "readymedia") 81(define %readymedia-user-account "readymedia")
73 82
@@ -157,6 +166,10 @@
157 (target source) 166 (target source)
158 (writable? #t)) 167 (writable? #t))
159 (file-system-mapping 168 (file-system-mapping
169 (source %readymedia-default-pid-directory)
170 (target source)
171 (writable? #t))
172 (file-system-mapping
160 (source minidlna-conf) 173 (source minidlna-conf)
161 (target source)) 174 (target source))
162 (map (lambda (directory) 175 (map (lambda (directory)
@@ -168,6 +181,8 @@
168 #:namespaces (delq 'net %namespaces)) 181 #:namespaces (delq 'net %namespaces))
169 "-f" 182 "-f"
170 #$minidlna-conf 183 #$minidlna-conf
184 "-P"
185 #$(%readymedia-pid-file)
171 "-S") 186 "-S")
172 #:log-file #$log-file 187 #:log-file #$log-file
173 #:user #$(if home-service? #f %readymedia-user-account) 188 #:user #$(if home-service? #f %readymedia-user-account)
@@ -182,6 +197,8 @@
182 "/sbin/minidlnad") 197 "/sbin/minidlnad")
183 "-f" 198 "-f"
184 #$minidlna-conf 199 #$minidlna-conf
200 "-P"
201 #$(%readymedia-pid-file #:home-service? home-service?)
185 "-S") 202 "-S")
186 #:log-file #$log-file))) 203 #:log-file #$log-file)))
187 (stop #~(make-kill-destructor)))))) 204 (stop #~(make-kill-destructor))))))
@@ -215,17 +232,23 @@
215 #$(if home-service? #o755 #o775)))) 232 #$(if home-service? #o755 #o775))))
216 (list #$@(map readymedia-media-directory-path 233 (list #$@(map readymedia-media-directory-path
217 media-directories))) 234 media-directories)))
218 (unless (file-exists? directory) 235 (for-each (lambda (directory)
219 (mkdir-p/perms (if (absolute-file-name? #$cache-directory) 236 (unless (file-exists? directory)
220 #$cache-directory 237 (mkdir-p/perms directory
221 (string-append (or (getenv "HOME") 238 (getpw #$(if home-service?
222 (passwd:dir 239 #~(getuid)
223 (getpwuid (getuid)))) 240 %readymedia-user-account))
224 "/" #$cache-directory)) 241 #o755)))
225 (getpw #$(if home-service? 242 (list (if #$home-service?
226 #~(getuid) 243 (if (absolute-file-name? #$cache-directory)
227 %readymedia-user-account)) 244 #$cache-directory
228 #o755)))))) 245 (string-append (or (getenv "HOME")
246 (passwd:dir
247 (getpwuid (getuid))))
248 "/" #$cache-directory))
249 #$cache-directory)
250 (dirname #$(%readymedia-pid-file
251 #:home-service? home-service?))))))))
229 252
230(define readymedia-service-type 253(define readymedia-service-type
231 (service-type 254 (service-type
diff --git a/gnu/tests/upnp.scm b/gnu/tests/upnp.scm
index 547351b4463..226aa2ae0e9 100644
--- a/gnu/tests/upnp.scm
+++ b/gnu/tests/upnp.scm
@@ -99,6 +99,27 @@
99 '(file-exists? #$(%readymedia-default-log-file)) 99 '(file-exists? #$(%readymedia-default-log-file))
100 marionette)) 100 marionette))
101 101
102 ;; Pid directory and file
103 (test-assert "pid directory exists"
104 (marionette-eval
105 '(eq? (stat:type (stat #$%readymedia-default-pid-directory))
106 'directory)
107 marionette))
108 (test-assert "pid directory has correct ownership"
109 (marionette-eval
110 '(let ((pid-dir (stat #$%readymedia-default-pid-directory))
111 (user (getpwnam #$%readymedia-user-account)))
112 (and (eqv? (stat:uid pid-dir) (passwd:uid user))
113 (eqv? (stat:gid pid-dir) (passwd:gid user))))
114 marionette))
115 (test-assert "pid directory has expected permissions"
116 (marionette-eval
117 '(eqv? (stat:perms (stat #$%readymedia-default-pid-directory))
118 #o755)
119 marionette))
120 (test-assert "containerd PID file present"
121 (wait-for-file #$(%readymedia-pid-file) marionette))
122
102 ;; Service 123 ;; Service
103 (test-assert "ReadyMedia service is running" 124 (test-assert "ReadyMedia service is running"
104 (marionette-eval 125 (marionette-eval