me
/
guix
Archived
1
0
Fork 0

services: jami-dbus-session: Use ‘least-authority-wrapper’.

* gnu/services/telephony.scm (jami-shepherd-services): Use
‘least-authority-wrapper’ for ‘dbus-daemon’.  Use ‘fork+exec-command’
instead of ‘make-forkexec-constructor/container’ in the ‘start’ method’.
Remove reference to (gnu build shepherd).

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Change-Id: I9d9f8de6ecea77950000ff64aa8c8d097dc028a0
Ludovic Courtès 2023-11-12 22:49:12 +01:00
parent 2cc881ac13
commit 8bd1c14997
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 43 additions and 23 deletions

View File

@ -34,6 +34,9 @@
#:use-module (guix modules)
#:use-module (guix packages)
#:use-module (guix gexp)
#:autoload (guix least-authority) (least-authority-wrapper)
#:autoload (gnu system file-systems) (file-system-mapping)
#:autoload (gnu build linux-container) (%namespaces)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-2)
#:use-module (srfi srfi-26)
@ -298,7 +301,28 @@ CONFIG, a <jami-configuration> object."
(let* ((libjami (jami-configuration-libjami config))
(nss-certs (jami-configuration-nss-certs config))
(dbus (jami-configuration-dbus config))
(dbus-daemon (file-append dbus "/bin/dbus-daemon"))
(dbus-daemon (least-authority-wrapper
(file-append dbus "/bin/dbus-daemon")
#:name "dbus-daemon"
#:user "jami"
#:group "jami"
#:preserved-environment-variables
'("XDG_DATA_DIRS")
#:mappings
(list (file-system-mapping
(source "/dev/log") ;for syslog
(target source))
(file-system-mapping
(source "/var/run/jami")
(target source)
(writable? #t))
(file-system-mapping
(source (gexp-input libjami "bin"))
(target source)))
;; 'dbus-daemon' wants to look up users in /etc/passwd
;; so run it in the global user namespace.
#:namespaces
(fold delq %namespaces '(net user))))
(accounts (jami-configuration-accounts config))
(declarative-mode? (maybe-value-set? accounts)))
@ -490,8 +514,7 @@ argument, either a registered username or the fingerprint of the account.")
(list (shepherd-service
(documentation "Run a D-Bus session for the Jami daemon.")
(provision '(jami-dbus-session))
(modules `((gnu build shepherd)
(gnu build dbus-service)
(modules `((gnu build dbus-service)
(gnu build jami-service)
(gnu system file-systems)
,@%default-modules))
@ -499,26 +522,23 @@ argument, either a registered username or the fingerprint of the account.")
;; activation for D-Bus, such as a /etc/machine-id file.
(requirement '(dbus-system syslogd))
(start
#~(make-forkexec-constructor/container
(list #$dbus-daemon "--session"
"--address=unix:path=/var/run/jami/bus"
"--syslog-only")
#:pid-file "/var/run/jami/pid"
#:mappings
(list (file-system-mapping
(source "/dev/log") ;for syslog
(target source))
(file-system-mapping
(source "/var/run/jami")
(target source)
(writable? #t)))
#:user "jami"
#:group "jami"
#:environment-variables
;; This is so that the cx.ring.Ring service D-Bus
;; definition is found by dbus-daemon.
(list (string-append "XDG_DATA_DIRS="
#$libjami:bin "/share"))))
#~(lambda ()
(define pid
(fork+exec-command
(list #$dbus-daemon "--session"
"--address=unix:path=/var/run/jami/bus"
"--syslog-only")
#:environment-variables
;; This is so that the cx.ring.Ring service D-Bus
;; definition is found by dbus-daemon.
(list (string-append "XDG_DATA_DIRS="
#$libjami:bin "/share"))))
;; The PID file contains the "wrong" PID (the one in the
;; separate PID namespace) so ignore it and return the
;; value returned by 'fork+exec-command'.
(and (read-pid-file "/var/run/jami/pid")
pid)))
(stop #~(make-kill-destructor)))
(shepherd-service