dbus: add socket activation but do not enable it
The following changes are included: 1) install user unit files from upstream dbus 2) use absolute paths to config for --system and --session instances 3) make socket activation of user units configurable There has been a number of PRs to address this, so this one does the bare minimum, which is to make the functionality available and configurable but defaults to off. Related PRs: - #18382 - #18222 (cherry picked from commit f7215c9b5b47dfb0a6dbe87ff33d7730729a32e5) Signed-off-by: Domen Kožar <domen@dev.si>
This commit is contained in:
parent
2a53b06e06
commit
639e5401ff
|
@ -8,7 +8,7 @@ let
|
||||||
|
|
||||||
cfg = config.services.dbus;
|
cfg = config.services.dbus;
|
||||||
|
|
||||||
homeDir = "/var/run/dbus";
|
homeDir = "/run/dbus";
|
||||||
|
|
||||||
systemExtraxml = concatStrings (flip concatMap cfg.packages (d: [
|
systemExtraxml = concatStrings (flip concatMap cfg.packages (d: [
|
||||||
"<servicedir>${d}/share/dbus-1/system-services</servicedir>"
|
"<servicedir>${d}/share/dbus-1/system-services</servicedir>"
|
||||||
|
@ -20,6 +20,8 @@ let
|
||||||
"<includedir>${d}/etc/dbus-1/session.d</includedir>"
|
"<includedir>${d}/etc/dbus-1/session.d</includedir>"
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
daemonArgs = "--address=systemd: --nofork --nopidfile --systemd-activation";
|
||||||
|
|
||||||
configDir = pkgs.runCommand "dbus-conf"
|
configDir = pkgs.runCommand "dbus-conf"
|
||||||
{ preferLocalBuild = true;
|
{ preferLocalBuild = true;
|
||||||
allowSubstitutes = false;
|
allowSubstitutes = false;
|
||||||
|
@ -27,6 +29,14 @@ let
|
||||||
''
|
''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
|
|
||||||
|
cp ${pkgs.dbus.out}/share/dbus-1/{system,session}.conf $out
|
||||||
|
|
||||||
|
# avoid circular includes
|
||||||
|
sed -ri 's@(<include ignore_missing="yes">/etc/dbus-1/(system|session)\.conf</include>)@<!-- \1 -->@g' $out/{system,session}.conf
|
||||||
|
|
||||||
|
# include by full path
|
||||||
|
sed -ri "s@/etc/dbus-1/(system|session)-@$out/\1-@" $out/{system,session}.conf
|
||||||
|
|
||||||
sed '${./dbus-system-local.conf.in}' \
|
sed '${./dbus-system-local.conf.in}' \
|
||||||
-e 's,@servicehelper@,${config.security.wrapperDir}/dbus-daemon-launch-helper,g' \
|
-e 's,@servicehelper@,${config.security.wrapperDir}/dbus-daemon-launch-helper,g' \
|
||||||
-e 's,@extra@,${systemExtraxml},' \
|
-e 's,@extra@,${systemExtraxml},' \
|
||||||
|
@ -72,11 +82,16 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
socketActivated = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Make the user instance socket activated.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
###### implementation
|
###### implementation
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
@ -114,13 +129,29 @@ in
|
||||||
config.system.path
|
config.system.path
|
||||||
];
|
];
|
||||||
|
|
||||||
# Don't restart dbus-daemon. Bad things tend to happen if we do.
|
systemd.services.dbus = {
|
||||||
systemd.services.dbus.reloadIfChanged = true;
|
# Don't restart dbus-daemon. Bad things tend to happen if we do.
|
||||||
|
reloadIfChanged = true;
|
||||||
|
restartTriggers = [ configDir ];
|
||||||
|
serviceConfig.ExecStart = [
|
||||||
|
""
|
||||||
|
"${lib.getBin pkgs.dbus}/bin/dbus-daemon --config-file=${configDir}/system.conf ${daemonArgs}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
systemd.services.dbus.restartTriggers = [ configDir ];
|
systemd.user = {
|
||||||
|
services.dbus = {
|
||||||
|
# Don't restart dbus-daemon. Bad things tend to happen if we do.
|
||||||
|
reloadIfChanged = true;
|
||||||
|
restartTriggers = [ configDir ];
|
||||||
|
serviceConfig.ExecStart = [
|
||||||
|
""
|
||||||
|
"${lib.getBin pkgs.dbus}/bin/dbus-daemon --config-file=${configDir}/session.conf ${daemonArgs}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
sockets.dbus.wantedBy = mkIf cfg.socketActivated [ "sockets.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
environment.pathsToLink = [ "/etc/dbus-1" "/share/dbus-1" ];
|
environment.pathsToLink = [ "/etc/dbus-1" "/share/dbus-1" ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,13 +134,8 @@ let
|
||||||
(*) echo "$0: Desktop manager '$desktopManager' not found.";;
|
(*) echo "$0: Desktop manager '$desktopManager' not found.";;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# FIXME: gdbus should not be in glib.dev!
|
${optionalString cfg.updateDbusEnvironment ''
|
||||||
${optionalString (cfg.startDbusSession && cfg.updateDbusEnvironment) ''
|
${lib.getBin pkgs.dbus}/bin/dbus-update-activation-environment --systemd --all
|
||||||
${pkgs.glib.dev}/bin/gdbus call --session \
|
|
||||||
--dest org.freedesktop.DBus --object-path /org/freedesktop/DBus \
|
|
||||||
--method org.freedesktop.DBus.UpdateActivationEnvironment \
|
|
||||||
"{$(env | ${pkgs.gnused}/bin/sed "s/'/\\\\'/g; s/\([^=]*\)=\(.*\)/'\1':'\2'/" \
|
|
||||||
| ${pkgs.coreutils}/bin/paste -sd,)}"
|
|
||||||
''}
|
''}
|
||||||
|
|
||||||
test -n "$waitPID" && wait "$waitPID"
|
test -n "$waitPID" && wait "$waitPID"
|
||||||
|
|
|
@ -44,7 +44,11 @@ self = stdenv.mkDerivation {
|
||||||
"--localstatedir=/var"
|
"--localstatedir=/var"
|
||||||
"--sysconfdir=/etc"
|
"--sysconfdir=/etc"
|
||||||
"--with-session-socket-dir=/tmp"
|
"--with-session-socket-dir=/tmp"
|
||||||
|
"--with-system-pid-file=/run/dbus/pid"
|
||||||
|
"--with-system-socket=/run/dbus/system_bus_socket"
|
||||||
"--with-systemdsystemunitdir=$(out)/etc/systemd/system"
|
"--with-systemdsystemunitdir=$(out)/etc/systemd/system"
|
||||||
|
"--with-systemduserunitdir=$(out)/etc/systemd/user"
|
||||||
|
"--enable-user-session"
|
||||||
# this package installs nothing into those dirs and they create a dependency
|
# this package installs nothing into those dirs and they create a dependency
|
||||||
"--datadir=/run/current-system/sw/share"
|
"--datadir=/run/current-system/sw/share"
|
||||||
"--libexecdir=$(out)/libexec" # we don't need dbus-daemon-launch-helper
|
"--libexecdir=$(out)/libexec" # we don't need dbus-daemon-launch-helper
|
||||||
|
@ -81,4 +85,3 @@ self = stdenv.mkDerivation {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in self
|
in self
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue