diff options
| -rw-r--r-- | gnu/services/upnp.scm | 45 | ||||
| -rw-r--r-- | gnu/tests/upnp.scm | 21 |
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 |
