From ce1d00939358d272c04454599d3156f9c5065a5c Mon Sep 17 00:00:00 2001 From: Sander van der Burg Date: Sun, 28 Feb 2021 14:41:25 +0100 Subject: [PATCH] Add initial version of dbus-service and disnix-service --- example-deployments/disnix/processes.nix | 34 +++++ service-containers-agnostic/constructors.nix | 3 +- services-agnostic/constructors.nix | 10 ++ services-agnostic/dbus-daemon/default.nix | 127 +++++++++++++++++++ services-agnostic/disnix-service/default.nix | 25 ++++ 5 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 example-deployments/disnix/processes.nix create mode 100644 services-agnostic/dbus-daemon/default.nix create mode 100644 services-agnostic/disnix-service/default.nix diff --git a/example-deployments/disnix/processes.nix b/example-deployments/disnix/processes.nix new file mode 100644 index 0000000..9a81b10 --- /dev/null +++ b/example-deployments/disnix/processes.nix @@ -0,0 +1,34 @@ +{ pkgs ? import { inherit system; } +, system ? builtins.currentSystem +, stateDir ? "/var" +, runtimeDir ? "${stateDir}/run" +, logDir ? "${stateDir}/log" +, spoolDir ? "${stateDir}/spool" +, cacheDir ? "${stateDir}/cache" +, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp") +, forceDisableUserChange ? false +, processManager +}: + +let + constructors = import ../../services-agnostic/constructors.nix { + inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager; + }; +in +rec { + openssh = rec { + pkg = constructors.openssh {}; + }; + + dbus-daemon = { + pkg = constructors.dbus-daemon { + packages = [ pkgs.disnix ]; + }; + }; + + disnix-service = { + pkg = constructors.disnix-service { + inherit dbus-daemon; + }; + }; +} diff --git a/service-containers-agnostic/constructors.nix b/service-containers-agnostic/constructors.nix index 638bbb4..a101f31 100644 --- a/service-containers-agnostic/constructors.nix +++ b/service-containers-agnostic/constructors.nix @@ -4,6 +4,7 @@ , logDir , runtimeDir , cacheDir +, spoolDir , tmpDir , forceDisableUserChange , processManager @@ -12,7 +13,7 @@ let constructors = import ../services-agnostic/constructors.nix { - inherit nix-processmgmt pkgs stateDir logDir runtimeDir cacheDir tmpDir forceDisableUserChange processManager ids; + inherit nix-processmgmt pkgs stateDir logDir runtimeDir cacheDir spoolDir tmpDir forceDisableUserChange processManager ids; }; in { diff --git a/services-agnostic/constructors.nix b/services-agnostic/constructors.nix index 5dbbae4..38cf2f7 100644 --- a/services-agnostic/constructors.nix +++ b/services-agnostic/constructors.nix @@ -46,6 +46,16 @@ in tomcat = pkgs.tomcat9; }; + dbus-daemon = import ./dbus-daemon { + inherit createManagedProcess stateDir runtimeDir; + inherit (pkgs) stdenv dbus writeTextFile; + }; + + disnix-service = import ./disnix-service { + inherit createManagedProcess; + inherit (pkgs) stdenv disnix nix; + }; + docker = import ./docker { inherit createManagedProcess; inherit (pkgs) docker kmod; diff --git a/services-agnostic/dbus-daemon/default.nix b/services-agnostic/dbus-daemon/default.nix new file mode 100644 index 0000000..bed7c07 --- /dev/null +++ b/services-agnostic/dbus-daemon/default.nix @@ -0,0 +1,127 @@ +{createManagedProcess, stdenv, writeTextFile, dbus, stateDir, runtimeDir}: +{extraConfig ? "", packages ? []}: + +let + user = "messagebus"; + group = "messagebus"; + + dbusRuntimeDir = "${runtimeDir}/dbus"; + + configFile = writeTextFile { + name = "system.conf"; + text = '' + + + + + system + + + ${user} + + + ${runtimeDir}/dbus-daemon.pid + + + EXTERNAL + + + + unix:path=${dbusRuntimeDir}/system_bus_socket + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${stdenv.lib.concatMapStrings (package: '' + ${package}/share/dbus-1/system-services + ${package}/etc/dbus-1/system.d + ${package}/share/dbus-1/system.d + '') packages} + + + ${extraConfig} + + ''; + }; +in +createManagedProcess { + name = "dbus-daemon"; + initialize = '' + mkdir -p ${stateDir}/lib/dbus + mkdir -p ${dbusRuntimeDir} + ${dbus}/bin/dbus-uuidgen --ensure + ''; + process = "${dbus}/bin/dbus-daemon"; + args = [ "--config-file" configFile ]; + foregroundProcessExtraArgs = [ "--nofork" "--nopidfile" ]; + daemonExtraArgs = [ "--fork" ]; + + credentials = { + groups = { + "${group}" = {}; + }; + users = { + "${user}" = { + inherit group; + homeDir = dbusRuntimeDir; + description = "D-Bus system message bus daemon user"; + }; + }; + }; + + overrides = { + sysvinit = { + runlevels = [ 2 3 4 5 ]; + }; + }; +} diff --git a/services-agnostic/disnix-service/default.nix b/services-agnostic/disnix-service/default.nix new file mode 100644 index 0000000..9f271aa --- /dev/null +++ b/services-agnostic/disnix-service/default.nix @@ -0,0 +1,25 @@ +{createManagedProcess, stdenv, disnix, nix}: +{dbus-daemon ? null}: + +let + group = "disnix"; +in +createManagedProcess { + name = "disnix-service"; + process = "${disnix}/bin/disnix-service"; + path = [ nix ]; + daemonExtraArgs = [ "--daemon" ]; + dependencies = stdenv.lib.optional (dbus-daemon != null) dbus-daemon.pkg; + + credentials = { + groups = { + "${group}" = {}; + }; + }; + + overrides = { + sysvinit = { + runlevels = [ 2 3 4 5 ]; + }; + }; +}