services: wesnothd: Grant write access to /var/run/wesnothd.

* gnu/services/games.scm (wesnothd-shepherd-service): Augment 'modules'
field.  Pass #:mappings argument to 'make-forkexec-constructor/container'.
(wesnothd-activation): New variable.
(wesnothd-service-type): Extend ACTIVATION-SERVICE-TYPE.
This commit is contained in:
Ludovic Courtès 2022-04-17 15:25:24 +02:00
parent f5ef68ba98
commit 19df5f2423
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -57,18 +58,35 @@ (define wesnothd-shepherd-service
(match-lambda
(($ <wesnothd-configuration> package port)
(with-imported-modules (source-module-closure
'((gnu build shepherd)))
'((gnu build shepherd)
(gnu system file-systems)))
(shepherd-service
(documentation "The Battle for Wesnoth server")
(provision '(wesnoth-daemon))
(requirement '(networking))
(modules '((gnu build shepherd)))
(modules '((gnu build shepherd)
(gnu system file-systems)))
(start #~(make-forkexec-constructor/container
(list #$(file-append package "/bin/wesnothd")
"-p" #$(number->string port))
#:mappings (list (file-system-mapping
(source "/var/run/wesnothd")
(target source)
(writable? #t)))
#:user "wesnothd" #:group "wesnothd"))
(stop #~(make-kill-destructor)))))))
(define wesnothd-activation
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils))
(let* ((user (getpw "wesnothd"))
(directory "/var/run/wesnothd"))
;; wesnothd creates a Unix-domain socket in DIRECTORY.
(mkdir-p directory)
(chown directory (passwd:uid user) (passwd:gid user))))))
(define wesnothd-service-type
(service-type
(name 'wesnothd)
@ -77,6 +95,8 @@ (define wesnothd-service-type
(extensions
(list (service-extension account-service-type
(const %wesnothd-accounts))
(service-extension activation-service-type
(const wesnothd-activation))
(service-extension shepherd-root-service-type
(compose list wesnothd-shepherd-service))))
(default-value (wesnothd-configuration))))