diff options
author | Nikolay Amiantov <ab@fmap.me> | 2017-02-17 11:47:51 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-17 11:47:51 +0300 |
commit | 8ecd5c4019771802b035f7cbe515331c3a3e113f (patch) | |
tree | cfa9315887de135ad1eaba277b9eee0e5ebc1184 | |
parent | 101d90d18b338a73541d5ddaac0c35b5ad57a9d8 (diff) | |
parent | ac0cdc1952fb0133ec26f2fdde5a77a648d3c1cd (diff) | |
download | nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.tar nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.tar.gz nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.tar.bz2 nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.tar.lz nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.tar.xz nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.tar.zst nixlib-8ecd5c4019771802b035f7cbe515331c3a3e113f.zip |
Merge pull request #22864 from abbradar/dbus-etc
Redo DBus configuration
-rw-r--r-- | nixos/modules/services/system/dbus-session-local.conf.in | 5 | ||||
-rw-r--r-- | nixos/modules/services/system/dbus-system-local.conf.in | 6 | ||||
-rw-r--r-- | nixos/modules/services/system/dbus.nix | 30 | ||||
-rw-r--r-- | pkgs/development/libraries/dbus/default.nix | 10 | ||||
-rw-r--r-- | pkgs/development/libraries/dbus/make-dbus-conf.nix | 27 | ||||
-rw-r--r-- | pkgs/development/libraries/dbus/make-session-conf.xsl | 30 | ||||
-rw-r--r-- | pkgs/development/libraries/dbus/make-system-conf.xsl | 34 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 5 |
8 files changed, 108 insertions, 39 deletions
diff --git a/nixos/modules/services/system/dbus-session-local.conf.in b/nixos/modules/services/system/dbus-session-local.conf.in deleted file mode 100644 index 5fd6f80a3539..000000000000 --- a/nixos/modules/services/system/dbus-session-local.conf.in +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" - "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> -<busconfig> - @extra@ -</busconfig> diff --git a/nixos/modules/services/system/dbus-system-local.conf.in b/nixos/modules/services/system/dbus-system-local.conf.in deleted file mode 100644 index edbb476f585a..000000000000 --- a/nixos/modules/services/system/dbus-system-local.conf.in +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" - "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> -<busconfig> - <servicehelper>@servicehelper@</servicehelper> - @extra@ -</busconfig> diff --git a/nixos/modules/services/system/dbus.nix b/nixos/modules/services/system/dbus.nix index 33bc890a78c8..643bec188142 100644 --- a/nixos/modules/services/system/dbus.nix +++ b/nixos/modules/services/system/dbus.nix @@ -10,32 +10,10 @@ let homeDir = "/run/dbus"; - systemExtraxml = concatStrings (flip concatMap cfg.packages (d: [ - "<servicedir>${d}/share/dbus-1/system-services</servicedir>" - "<includedir>${d}/etc/dbus-1/system.d</includedir>" - ])); - - sessionExtraxml = concatStrings (flip concatMap cfg.packages (d: [ - "<servicedir>${d}/share/dbus-1/services</servicedir>" - "<includedir>${d}/etc/dbus-1/session.d</includedir>" - ])); - - configDir = pkgs.runCommand "dbus-conf" - { preferLocalBuild = true; - allowSubstitutes = false; - } - '' - mkdir -p $out - - sed '${./dbus-system-local.conf.in}' \ - -e 's,@servicehelper@,${config.security.wrapperDir}/dbus-daemon-launch-helper,g' \ - -e 's,@extra@,${systemExtraxml},' \ - > "$out/system-local.conf" - - sed '${./dbus-session-local.conf.in}' \ - -e 's,@extra@,${sessionExtraxml},' \ - > "$out/session-local.conf" - ''; + configDir = pkgs.makeDBusConf { + suidHelper = "${config.security.wrapperDir}/dbus-daemon-launch-helper"; + serviceDirectories = cfg.packages; + }; in diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix index 7743c1e3f80b..49b71ff99748 100644 --- a/pkgs/development/libraries/dbus/default.nix +++ b/pkgs/development/libraries/dbus/default.nix @@ -50,7 +50,8 @@ self = stdenv.mkDerivation { "--with-systemdsystemunitdir=$(out)/etc/systemd/system" "--with-systemduserunitdir=$(out)/etc/systemd/user" "--enable-user-session" - "--libexecdir=$(out)/libexec" # we don't need dbus-daemon-launch-helper + "--datadir=/etc" + "--libexecdir=$(out)/libexec" ] ++ lib.optional (!x11Support) "--without-x"; # Enable X11 autolaunch support in libdbus. This doesn't actually depend on X11 @@ -63,7 +64,12 @@ self = stdenv.mkDerivation { doCheck = true; - installFlags = [ "sysconfdir=$(out)/etc" ]; + installFlags = [ "sysconfdir=$(out)/etc" "datadir=$(out)/share" ]; + + postInstall = '' + mkdir -p $doc/share/xml/dbus + cp doc/*.dtd $doc/share/xml/dbus + ''; # it's executed from $lib by absolute path postFixup = '' diff --git a/pkgs/development/libraries/dbus/make-dbus-conf.nix b/pkgs/development/libraries/dbus/make-dbus-conf.nix new file mode 100644 index 000000000000..7e35a9162c8d --- /dev/null +++ b/pkgs/development/libraries/dbus/make-dbus-conf.nix @@ -0,0 +1,27 @@ +{ runCommand, libxslt, dbus, serviceDirectories ? [], suidHelper ? "/var/setuid-wrappers/dbus-daemon-launch-helper" }: + +/* DBus has two configuration parsers -- normal and "trivial", which is used + * for suid helper. Unfortunately the latter doesn't support <include> + * directive. That means that we can't just place our configuration to + * *-local.conf -- it needs to be in the main configuration file. + */ +runCommand "dbus-1" + { + buildInputs = [ libxslt ]; + inherit serviceDirectories suidHelper; + } + '' + mkdir -p $out + + xsltproc \ + --stringparam serviceDirectories "$serviceDirectories" \ + --stringparam suidHelper "$suidHelper" \ + --path ${dbus.doc}/share/xml/dbus \ + ${./make-system-conf.xsl} ${dbus}/share/dbus-1/system.conf \ + > $out/system.conf + xsltproc \ + --stringparam serviceDirectories "$serviceDirectories" \ + --path ${dbus.doc}/share/xml/dbus \ + ${./make-session-conf.xsl} ${dbus}/share/dbus-1/session.conf \ + > $out/session.conf + '' diff --git a/pkgs/development/libraries/dbus/make-session-conf.xsl b/pkgs/development/libraries/dbus/make-session-conf.xsl new file mode 100644 index 000000000000..bc73369af944 --- /dev/null +++ b/pkgs/development/libraries/dbus/make-session-conf.xsl @@ -0,0 +1,30 @@ +<?xml version="1.0"?> + +<!-- + This script copies the original system.conf from the dbus + distribution, but sets paths from $serviceDirectories parameter + and suid helper from $suidHelper parameter. +--> + +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:str="http://exslt.org/strings" + extension-element-prefixes="str" + > + + <xsl:output method='xml' encoding="UTF-8" doctype-system="busconfig.dtd" /> + + <xsl:param name="serviceDirectories" /> + + <xsl:template match="/busconfig"> + <busconfig> + <xsl:copy-of select="child::node()[name() != 'include' and name() != 'standard_session_servicedirs' and name() != 'servicedir' and name() != 'includedir']" /> + + <xsl:for-each select="str:tokenize($serviceDirectories)"> + <servicedir><xsl:value-of select="." />/share/dbus-1/services</servicedir> + <includedir><xsl:value-of select="." />/etc/dbus-1/session.d</includedir> + </xsl:for-each> + </busconfig> + </xsl:template> + +</xsl:stylesheet> diff --git a/pkgs/development/libraries/dbus/make-system-conf.xsl b/pkgs/development/libraries/dbus/make-system-conf.xsl new file mode 100644 index 000000000000..3d8b823437d6 --- /dev/null +++ b/pkgs/development/libraries/dbus/make-system-conf.xsl @@ -0,0 +1,34 @@ +<?xml version="1.0"?> + +<!-- + This script copies the original system.conf from the dbus + distribution, but sets paths from $serviceDirectories parameter + and suid helper from $suidHelper parameter. +--> + +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:str="http://exslt.org/strings" + extension-element-prefixes="str" + > + + <xsl:output method='xml' encoding="UTF-8" doctype-system="busconfig.dtd" /> + + <xsl:param name="serviceDirectories" /> + <xsl:param name="suidHelper" /> + + <xsl:template match="/busconfig"> + <busconfig> + <xsl:copy-of select="child::node()[name() != 'include' and name() != 'standard_system_servicedirs' and name() != 'servicehelper' and name() != 'servicedir' and name() != 'includedir']" /> + + <!-- set suid helper --> + <servicehelper><xsl:value-of select="$suidHelper" /></servicehelper> + + <xsl:for-each select="str:tokenize($serviceDirectories)"> + <servicedir><xsl:value-of select="." />/share/dbus-1/system-services</servicedir> + <includedir><xsl:value-of select="." />/etc/dbus-1/system.d</includedir> + </xsl:for-each> + </busconfig> + </xsl:template> + +</xsl:stylesheet> diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2c05a1ea4924..78d6cd0e9bf9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7089,6 +7089,11 @@ with pkgs; dbus_libs = dbus; dbus_daemon = dbus.daemon; + makeDBusConf = { suidHelper, serviceDirectories }: + callPackage ../development/libraries/dbus/make-dbus-conf.nix { + inherit suidHelper serviceDirectories; + }; + dee = callPackage ../development/libraries/dee { }; dhex = callPackage ../applications/editors/dhex { }; |