Make createMultiProcessImage function composable, move all target-specific process manager stuff into the backends/ folder, add script for easy startup of s6-svscan

This commit is contained in:
Sander van der Burg 2021-01-25 20:26:34 +01:00 committed by Sander van der Burg
parent acd56b6207
commit 600c0b14cf
68 changed files with 225 additions and 108 deletions

View File

@ -32,8 +32,8 @@ Currently, the following process managers are supported:
* `systemd`: [systemd](https://www.freedesktop.org/wiki/Software/systemd)
* `launchd`: [launchd](https://www.launchd.info)
* `cygrunsrv`: Cygwin's [cygrunsrv](http://web.mit.edu/cygwin/cygwin_v1.3.2/usr/doc/Cygwin/cygrunsrv.README)
* `s6-rc`: the [s6-rc](https://skarnet.org/software/s6-rc) tool that manages
services, using [s6](https://skarnet.org/software/s6) as a supervising process
* `s6-rc`: [s6-rc](https://skarnet.org/software/s6-rc) for managing services
supervised by [s6](https://skarnet.org/software/s6)
It can also work with the following solutions that are technically not
categorized as process managers (but can still be used as such):

View File

@ -5,7 +5,7 @@
}:
let
createMultiProcessImage = import ../../nixproc/create-multi-process-image/create-multi-process-image.nix {
createMultiProcessImage = import ../../nixproc/create-multi-process-image/create-multi-process-image-universal.nix {
inherit pkgs system;
inherit (pkgs) dockerTools stdenv;
};

View File

@ -9,7 +9,7 @@
}:
let
createSystemVInitScript = import ../../nixproc/create-managed-process/sysvinit/create-sysvinit-script.nix {
createSystemVInitScript = import ../../nixproc/backends/sysvinit/create-sysvinit-script.nix {
inherit (pkgs) stdenv writeTextFile daemon;
inherit runtimeDir logDir tmpDir forceDisableUserChange;
@ -18,7 +18,7 @@ let
inherit ids forceDisableUserChange;
};
initFunctions = import ../../nixproc/create-managed-process/sysvinit/init-functions.nix {
initFunctions = import ../../nixproc/backends/sysvinit/init-functions.nix {
basePackages = [ pkgs.coreutils pkgs.gnused pkgs.inetutils pkgs.gnugrep pkgs.sysvinit ];
inherit (pkgs) stdenv fetchurl;
inherit runtimeDir;

View File

@ -1,21 +1,21 @@
{pkgs, system, exprFile, stateDir, runtimeDir, forceDisableUserChange, extraParams}:
let
sysvinitTools = (import ../../tools {
sysvinitTools = (import ../../../tools {
inherit pkgs system;
}).sysvinit;
generateCompoundProxy = import ./generate-compound-proxy.nix {
generateCompoundProxy = import ../util/generate-compound-proxy.nix {
inherit (pkgs) stdenv writeTextFile;
};
disnixDataDir = "${pkgs.disnix}/share/disnix";
profile = import ../create-managed-process/disnix/build-disnix-env.nix {
profile = import ./build-disnix-env.nix {
inherit pkgs system exprFile stateDir runtimeDir forceDisableUserChange extraParams disnixDataDir;
};
emptyProfile = import ../create-managed-process/disnix/build-disnix-env.nix {
emptyProfile = import ./build-disnix-env.nix {
inherit pkgs system stateDir runtimeDir forceDisableUserChange extraParams disnixDataDir;
exprFile = null;
};

View File

@ -1,7 +1,7 @@
{pkgs, system, exprFile, stateDir, runtimeDir, forceDisableUserChange, extraParams}:
let
profile = import ../create-managed-process/s6-rc/build-s6-rc-env.nix {
profile = import ./build-s6-rc-env.nix {
inherit pkgs system exprFile extraParams stateDir runtimeDir forceDisableUserChange;
};

View File

@ -1,7 +1,7 @@
{pkgs, system, exprFile, stateDir, runtimeDir, forceDisableUserChange, extraParams}:
let
profile = import ../create-managed-process/supervisord/build-supervisord-env.nix {
profile = import ./build-supervisord-env.nix {
inherit pkgs system exprFile extraParams stateDir runtimeDir forceDisableUserChange;
};
in

View File

@ -1,11 +1,11 @@
{pkgs, system, exprFile, stateDir, runtimeDir, forceDisableUserChange, extraParams}:
let
sysvinitTools = (import ../../tools {
sysvinitTools = (import ../../../tools {
inherit pkgs system;
}).sysvinit;
generateCompoundProxy = import ./generate-compound-proxy.nix {
generateCompoundProxy = import ../util/generate-compound-proxy.nix {
inherit (pkgs) stdenv writeTextFile;
};
@ -16,7 +16,7 @@ let
stopCommand = "${sysvinitTools}/bin/nixproc-sysvinit-runactivity -r stop ${profile}";
};
profile = import ../create-managed-process/sysvinit/build-sysvinit-env.nix {
profile = import ./build-sysvinit-env.nix {
inherit exprFile stateDir runtimeDir forceDisableUserChange extraParams;
};
in

View File

@ -13,102 +13,102 @@ let
inherit ids forceDisableUserChange;
};
createSystemVInitScript = import ../sysvinit/create-sysvinit-script.nix {
createSystemVInitScript = import ../../backends/sysvinit/create-sysvinit-script.nix {
inherit (pkgs) stdenv writeTextFile daemon;
inherit createCredentials runtimeDir logDir tmpDir forceDisableUserChange;
initFunctions = import ../sysvinit/init-functions.nix {
initFunctions = import ../../backends/sysvinit/init-functions.nix {
inherit (pkgs) stdenv fetchurl;
inherit runtimeDir;
basePackages = basePackages ++ [ pkgs.sysvinit ];
};
};
generateSystemVInitScript = import ../sysvinit/generate-sysvinit-script.nix {
generateSystemVInitScript = import ../../backends/sysvinit/generate-sysvinit-script.nix {
inherit createSystemVInitScript;
inherit (pkgs) stdenv;
};
createSystemdService = import ../systemd/create-systemd-service.nix {
createSystemdService = import ../../backends/systemd/create-systemd-service.nix {
inherit (pkgs) writeTextFile stdenv;
inherit createCredentials basePackages forceDisableUserChange;
};
generateSystemdService = import ../systemd/generate-systemd-service.nix {
generateSystemdService = import ../../backends/systemd/generate-systemd-service.nix {
inherit createSystemdService;
inherit (pkgs) stdenv writeTextFile;
};
createSupervisordProgram = import ../supervisord/create-supervisord-program.nix {
createSupervisordProgram = import ../../backends/supervisord/create-supervisord-program.nix {
inherit (pkgs) writeTextFile stdenv;
inherit (pkgs.pythonPackages) supervisor;
inherit createCredentials basePackages forceDisableUserChange runtimeDir;
};
generateSupervisordProgram = import ../supervisord/generate-supervisord-program.nix {
generateSupervisordProgram = import ../../backends/supervisord/generate-supervisord-program.nix {
inherit createSupervisordProgram runtimeDir;
inherit (pkgs) stdenv writeTextFile;
};
createBSDRCScript = import ../bsdrc/create-bsdrc-script.nix {
createBSDRCScript = import ../../backends/bsdrc/create-bsdrc-script.nix {
inherit (pkgs) writeTextFile stdenv;
inherit createCredentials forceDisableUserChange runtimeDir tmpDir;
rcSubr = import ../bsdrc/rcsubr.nix {
rcSubr = import ../../backends/bsdrc/rcsubr.nix {
inherit (pkgs) stdenv;
inherit forceDisableUserChange;
};
};
generateBSDRCScript = import ../bsdrc/generate-bsdrc-script.nix {
generateBSDRCScript = import ../../backends/bsdrc/generate-bsdrc-script.nix {
inherit createBSDRCScript;
inherit (pkgs) stdenv;
};
createLaunchdDaemon = import ../launchd/create-launchd-daemon.nix {
createLaunchdDaemon = import ../../backends/launchd/create-launchd-daemon.nix {
inherit (pkgs) writeTextFile stdenv;
inherit createCredentials forceDisableUserChange;
};
generateLaunchdDaemon = import ../launchd/generate-launchd-daemon.nix {
generateLaunchdDaemon = import ../../backends/launchd/generate-launchd-daemon.nix {
inherit (pkgs) stdenv writeTextFile;
inherit createLaunchdDaemon runtimeDir;
};
createCygrunsrvParams = import ../cygrunsrv/create-cygrunsrv-params.nix {
createCygrunsrvParams = import ../../backends/cygrunsrv/create-cygrunsrv-params.nix {
inherit (pkgs) writeTextFile stdenv;
};
generateCygrunsrvParams = import ../cygrunsrv/generate-cygrunsrv-params.nix {
generateCygrunsrvParams = import ../../backends/cygrunsrv/generate-cygrunsrv-params.nix {
inherit (pkgs) stdenv writeTextFile;
inherit createCygrunsrvParams runtimeDir;
};
createProcessScript = import ../disnix/create-process-script.nix {
createProcessScript = import ../../backends/disnix/create-process-script.nix {
inherit (pkgs) stdenv;
inherit createCredentials forceDisableUserChange;
};
generateProcessScript = import ../disnix/generate-process-script.nix {
generateProcessScript = import ../../backends/disnix/generate-process-script.nix {
inherit (pkgs) stdenv writeTextFile daemon;
inherit createProcessScript runtimeDir logDir tmpDir forceDisableUserChange basePackages;
};
createDockerContainer = import ../docker/create-docker-container.nix {
createDockerContainer = import ../../backends/docker/create-docker-container.nix {
inherit (pkgs) stdenv;
};
generateDockerContainer = import ../docker/generate-docker-container.nix {
generateDockerContainer = import ../../backends/docker/generate-docker-container.nix {
inherit (pkgs) stdenv writeTextFile dockerTools findutils glibc dysnomia;
inherit createDockerContainer basePackages runtimeDir stateDir forceDisableUserChange createCredentials;
};
s6-rc = import ../s6-rc {
s6-rc = import ../../backends/s6-rc {
inherit (pkgs) stdenv execline;
inherit createCredentials logDir forceDisableUserChange;
};
generateS6Service = import ../s6-rc/generate-s6-service.nix {
generateS6RCService = import ../../backends/s6-rc/generate-s6-rc-service.nix {
inherit (pkgs) stdenv writeTextFile execline;
inherit s6-rc tmpDir runtimeDir forceDisableUserChange;
};
@ -118,14 +118,14 @@ import ../agnostic/create-managed-process.nix {
inherit (pkgs) stdenv;
generators = {
sysvinit = generateSystemVInitScript;
systemd = generateSystemdService;
supervisord = generateSupervisordProgram;
bsdrc = generateBSDRCScript;
launchd = generateLaunchdDaemon;
cygrunsrv = generateCygrunsrvParams;
disnix = generateProcessScript;
docker = generateDockerContainer;
s6-rc = generateS6Service;
launchd = generateLaunchdDaemon;
s6-rc = generateS6RCService;
supervisord = generateSupervisordProgram;
systemd = generateSystemdService;
sysvinit = generateSystemVInitScript;
};
}

View File

@ -0,0 +1,11 @@
{dockerTools, stdenv, pkgs, system}:
import ./create-multi-process-image.nix {
inherit dockerTools stdenv pkgs system;
generators = {
disnix = ../backends/disnix/generate-disnix-image-args.nix;
s6-rc = ../backends/s6-rc/generate-s6-rc-image-args.nix;
supervisord = ../backends/supervisord/generate-supervisord-image-args.nix;
sysvinit = ../backends/sysvinit/generate-sysvinit-image-args.nix;
};
}

View File

@ -1,4 +1,4 @@
{dockerTools, stdenv, pkgs, system}:
{dockerTools, stdenv, pkgs, system, generators}:
{ interactive ? true
, exprFile
@ -20,22 +20,15 @@ let
commonTools = (import ../../tools { inherit pkgs; }).common;
processManagerArgs =
if processManager == "disnix" then import ./generate-disnix-args.nix {
inherit exprFile stateDir runtimeDir forceDisableUserChange extraParams pkgs system;
}
else if processManager == "s6-rc" then import ./generate-s6-rc-args.nix {
inherit exprFile stateDir runtimeDir forceDisableUserChange extraParams pkgs system;
}
else if processManager == "supervisord" then import ./generate-supervisord-args.nix {
inherit exprFile stateDir runtimeDir forceDisableUserChange extraParams pkgs system;
}
else if processManager == "sysvinit" then import ./generate-sysvinit-args.nix {
inherit exprFile stateDir runtimeDir forceDisableUserChange extraParams pkgs system;
}
else throw "Unsupported process manager: ${processManager}";
generateImageArgsModule = if builtins.hasAttr processManager generators
then builtins.getAttr processManager generators
else throw "Cannot use process manager: ${processManager} in a multi-process container!";
setupProcessManagement = import ../create-managed-process/docker/setup.nix {
processManagerArgs = import generateImageArgsModule {
inherit exprFile stateDir runtimeDir forceDisableUserChange extraParams pkgs system;
};
setupProcessManagement = import ../backends/docker/setup.nix {
inherit (pkgs) dockerTools stdenv dysnomia findutils glibc;
inherit (processManagerArgs) credentialsSpec;
inherit commonTools stateDir runtimeDir forceDisableUserChange;

View File

@ -5,7 +5,7 @@ with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.curren
let
pkgs = import nixpkgs {};
dockerProcessEnv = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
dockerProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ./processes-docker.nix;
};

View File

@ -5,7 +5,7 @@ with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.curren
let
disnixDataDir = "${pkgs.disnix}/share/disnix";
processesEnvForeground = import ../nixproc/create-managed-process/disnix/build-disnix-env.nix {
processesEnvForeground = import ../nixproc/backends/disnix/build-disnix-env.nix {
inherit disnixDataDir;
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
@ -13,7 +13,7 @@ let
};
};
processesEnvDaemon = import ../nixproc/create-managed-process/disnix/build-disnix-env.nix {
processesEnvDaemon = import ../nixproc/backends/disnix/build-disnix-env.nix {
inherit disnixDataDir;
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
@ -21,23 +21,23 @@ let
};
};
processesEnvAuto = import ../nixproc/create-managed-process/disnix/build-disnix-env.nix {
processesEnvAuto = import ../nixproc/backends/disnix/build-disnix-env.nix {
inherit disnixDataDir;
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvAdvanced = import ../nixproc/create-managed-process/disnix/build-disnix-env.nix {
processesEnvAdvanced = import ../nixproc/backends/disnix/build-disnix-env.nix {
inherit disnixDataDir;
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvNoUserChange = import ../nixproc/create-managed-process/disnix/build-disnix-env.nix {
processesEnvNoUserChange = import ../nixproc/backends/disnix/build-disnix-env.nix {
inherit disnixDataDir;
exprFile = ../examples/webapps-agnostic/processes.nix;
forceDisableUserChange = true;
};
processesEnvEmpty = import ../nixproc/create-managed-process/disnix/build-disnix-env.nix {
processesEnvEmpty = import ../nixproc/backends/disnix/build-disnix-env.nix {
inherit disnixDataDir;
exprFile = null;
};

View File

@ -3,38 +3,38 @@
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
dockerProcessEnv = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
dockerProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ./processes-docker.nix;
};
processesEnvForeground = import ../nixproc/create-managed-process/docker/build-docker-env.nix {
processesEnvForeground = import ../nixproc/backends/docker/build-docker-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "foreground";
};
};
processesEnvDaemon = import ../nixproc/create-managed-process/docker/build-docker-env.nix {
processesEnvDaemon = import ../nixproc/backends/docker/build-docker-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "daemon";
};
};
processesEnvAuto = import ../nixproc/create-managed-process/docker/build-docker-env.nix {
processesEnvAuto = import ../nixproc/backends/docker/build-docker-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvAdvanced = import ../nixproc/create-managed-process/docker/build-docker-env.nix {
processesEnvAdvanced = import ../nixproc/backends/docker/build-docker-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvUnprivileged = import ../nixproc/create-managed-process/docker/build-docker-env.nix {
processesEnvUnprivileged = import ../nixproc/backends/docker/build-docker-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
forceDisableUserChange = true;
};
processesEnvEmpty = import ../nixproc/create-managed-process/docker/build-docker-env.nix {
processesEnvEmpty = import ../nixproc/backends/docker/build-docker-env.nix {
exprFile = null;
};

View File

@ -3,38 +3,38 @@
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
s6-svscanProcessEnv = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
s6-svscanProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ./processes-s6-svscan.nix;
};
processesEnvForeground = import ../nixproc/create-managed-process/s6-rc/build-s6-rc-env.nix {
processesEnvForeground = import ../nixproc/backends/s6-rc/build-s6-rc-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "foreground";
};
};
processesEnvDaemon = import ../nixproc/create-managed-process/s6-rc/build-s6-rc-env.nix {
processesEnvDaemon = import ../nixproc/backends/s6-rc/build-s6-rc-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "daemon";
};
};
processesEnvAuto = import ../nixproc/create-managed-process/s6-rc/build-s6-rc-env.nix {
processesEnvAuto = import ../nixproc/backends/s6-rc/build-s6-rc-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvAutoUnprivileged = import ../nixproc/create-managed-process/s6-rc/build-s6-rc-env.nix {
processesEnvAutoUnprivileged = import ../nixproc/backends/s6-rc/build-s6-rc-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
forceDisableUserChange = true;
};
processesEnvAdvanced = import ../nixproc/create-managed-process/s6-rc/build-s6-rc-env.nix {
processesEnvAdvanced = import ../nixproc/backends/s6-rc/build-s6-rc-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvEmpty = import ../nixproc/create-managed-process/s6-rc/build-s6-rc-env.nix {
processesEnvEmpty = import ../nixproc/backends/s6-rc/build-s6-rc-env.nix {
exprFile = null;
};

View File

@ -3,7 +3,7 @@
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
processesEnvAuto = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvAuto = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};

View File

@ -3,38 +3,38 @@
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
supervisordProcessEnv = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
supervisordProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ./processes-supervisord.nix;
};
processesEnvForeground = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvForeground = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "foreground";
};
};
processesEnvDaemon = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvDaemon = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "daemon";
};
};
processesEnvAuto = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvAuto = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvAutoUnprivileged = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvAutoUnprivileged = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
forceDisableUserChange = true;
};
processesEnvAdvanced = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvAdvanced = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvEmpty = import ../nixproc/create-managed-process/supervisord/build-supervisord-env.nix {
processesEnvEmpty = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = null;
};

View File

@ -3,13 +3,13 @@
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
processesEnvAuto = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvAuto = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
stateDir = "/home/unprivileged/var";
forceDisableUserChange = true;
};
processesEnvEmpty = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvEmpty = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = null;
stateDir = "/home/unprivileged/var";
forceDisableUserChange = true;

View File

@ -3,29 +3,29 @@
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
processesEnvForeground = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvForeground = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "foreground";
};
};
processesEnvDaemon = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvDaemon = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "daemon";
};
};
processesEnvAuto = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvAuto = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvAdvanced = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvAdvanced = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvEmpty = import ../nixproc/create-managed-process/systemd/build-systemd-env.nix {
processesEnvEmpty = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = null;
};

View File

@ -24,31 +24,31 @@ let
webappMode = null;
}).webapp.pkg;
processesEnv = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnv = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvUnprivileged = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvUnprivileged = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
stateDir = "/home/unprivileged/var";
forceDisableUserChange = true;
};
processesEnvAdvanced = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvAdvanced = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvAdvancedUnprivileged = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvAdvancedUnprivileged = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
stateDir = "/home/unprivileged/var";
forceDisableUserChange = true;
};
processesEnvEmpty = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvEmpty = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = null;
};
processesEnvEmptyUnprivileged = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvEmptyUnprivileged = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = null;
stateDir = "/home/unprivileged/var";
forceDisableUserChange = true;

View File

@ -8,31 +8,31 @@ let
stateDir = "/home/unprivileged/var";
}).webapp.pkg;
processesEnv = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnv = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-sysvinit/processes.nix;
};
processesEnvUnprivileged = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvUnprivileged = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-sysvinit/processes.nix;
forceDisableUserChange = true;
stateDir = "/home/unprivileged/var";
};
processesEnvAdvanced = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvAdvanced = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-sysvinit/processes-advanced.nix;
};
processesEnvAdvancedUnprivileged = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvAdvancedUnprivileged = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = ../examples/webapps-sysvinit/processes-advanced.nix;
forceDisableUserChange = true;
stateDir = "/home/unprivileged/var";
};
processesEnvEmpty = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvEmpty = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = null;
};
processesEnvEmptyUnprivileged = import ../nixproc/create-managed-process/sysvinit/build-sysvinit-env.nix {
processesEnvEmptyUnprivileged = import ../nixproc/backends/sysvinit/build-sysvinit-env.nix {
exprFile = null;
forceDisableUserChange = true;
stateDir = "/home/unprivileged/var";

View File

@ -162,4 +162,4 @@ fi
NIXPROC=${NIXPROC:-@NIXPROC@}
# Build the profile
nix-build $stateDirArg $runtimeDirArg $logDirArg $tmpDirArg $cacheDirArg $forceDisableUserChangeArg $noOutLinkArg $showTraceArg $processManagerArg "${extraParamsArg[@]}" $exprFileArg $NIXPROC/create-managed-process/$processManager/build-$processManager-env.nix
nix-build $stateDirArg $runtimeDirArg $logDirArg $tmpDirArg $cacheDirArg $forceDisableUserChangeArg $noOutLinkArg $showTraceArg $processManagerArg "${extraParamsArg[@]}" $exprFileArg $NIXPROC/backends/$processManager/build-$processManager-env.nix

View File

@ -128,4 +128,4 @@ NIXPROC=${NIXPROC:-@NIXPROC@}
export PROCESSES_EXPR="$(@readlink@ -f "$processesFile")"
# Assign IDs
dydisnix-id-assign -s $NIXPROC/create-managed-process/disnix/services-adapter.nix --id-resources $idResourcesFile $idsParam $servicePropertyArg $outputFileArg $outputXmlArg $stateDirArg $runtimeDirArg $logDirArg $tmpDirArg $cacheDirArg $forceDisableUserChangeArg
dydisnix-id-assign -s $NIXPROC/backends/disnix/services-adapter.nix --id-resources $idResourcesFile $idsParam $servicePropertyArg $outputFileArg $outputXmlArg $stateDirArg $runtimeDirArg $logDirArg $tmpDirArg $cacheDirArg $forceDisableUserChangeArg

View File

@ -15,7 +15,15 @@ stdenv.mkDerivation {
-e "s|@getopt@|${getopt}/bin/getopt|" \
-e "s|@readlink@|$(type -p readlink)|" \
-e "s|@commonchecks@|${../commonchecks}|" \
-e "s|@s6rcchecks@|${./s6-rc-checks}|" \
${./nixproc-s6-rc-deploy.in} > $out/bin/nixproc-s6-rc-deploy
chmod +x $out/bin/nixproc-s6-rc-deploy
sed -e "s|/bin/bash|$SHELL|" \
-e "s|@getopt@|${getopt}/bin/getopt|" \
-e "s|@commonchecks@|${../commonchecks}|" \
-e "s|@s6rcchecks@|${./s6-rc-checks}|" \
${./nixproc-s6-svscan.in} > $out/bin/nixproc-s6-svscan
chmod +x $out/bin/nixproc-s6-svscan
'';
}

View File

@ -94,15 +94,16 @@ profilePath="$1"
# Validate the given options
source @commonchecks@
source @s6rcchecks@
checkNixStateDir
checkProfile
stateDir="${stateDir:-/var}"
runtimeDir="${runtimeDir:-$stateDir/run}"
checkStateDir
checkRuntimeDir
checkScanDir
compileDir="$stateDir/etc/s6/rc"
liveDir="$runtimeDir/s6-rc"
scanDir="$runtimeDir/service"
# Initialize all state

View File

@ -0,0 +1,72 @@
#!/bin/bash
set -e
shopt -s nullglob
showUsage()
{
cat <<EOF
Usage: $0 [OPTION]
Starts the s6-svscan service for supervising process trees.
Options:
--state-dir Changes the directory in which the state of the
processes are stored
--runtime-dir Changes the directory in which the PID files are stored
-h, --help Shows the usage of this command
Environment:
NIXPROC_STATE_DIR Changes the directory in which the state of the
processes is stored
NIXPROC_RUNTIME_DIR Changes the directory in which the PID files are stored
EOF
}
# Parse valid argument options
PARAMS=`@getopt@ -n $0 -o h -l state-dir:,runtime-dir:,help -- "$@"`
if [ $? != 0 ]
then
showUsage
exit 1
fi
# Evaluate valid options
eval set -- "$PARAMS"
while [ "$1" != "--" ]
do
case "$1" in
--state-dir)
stateDir="$2"
;;
--runtime-dir)
runtimeDir="$2"
;;
-h|--help)
showUsage
exit 0
;;
esac
shift
done
shift
# Validate the given options
source @commonchecks@
source @s6rcchecks@
checkStateDir
checkRuntimeDir
checkScanDir
# Initialize scan dir
mkdir -p "$scanDir"
# Run s6-svscan
s6-svscan "$scanDir"

32
tools/s6-rc/s6-rc-checks Normal file
View File

@ -0,0 +1,32 @@
#!/bin/bash -e
checkStateDir()
{
if [ "$stateDir" = "" ]
then
if [ "$NIXPROC_STATE_DIR" = "" ]
then
stateDir="/var"
else
stateDir="$NIXPROC_STATE_DIR"
fi
fi
}
checkRuntimeDir()
{
if [ "$runtimeDir" = "" ]
then
if [ "$NIXPROC_RUNTIME_DIR" = "" ]
then
runtimeDir="$stateDir/run"
else
runtimeDir="$NIXPROC_RUNTIME_DIR"
fi
fi
}
checkScanDir()
{
scanDir="$runtimeDir/service"
}