Add service container configurations for s6-svscan and docker

This commit is contained in:
Sander van der Burg 2021-04-19 21:05:36 +02:00 committed by Sander van der Burg
parent b962597e94
commit 4f45ec6787
5 changed files with 93 additions and 3 deletions

View File

@ -47,6 +47,14 @@ in
});
};
docker = import ./docker {
inherit (pkgs) lib;
dockerConstructorFun = constructors.docker;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableDockerContainer = true;
});
};
simpleInfluxdb = import ./influxdb/simpleinfluxdb.nix {
influxdbConstructorFun = constructors.simpleInfluxdb;
dysnomia = pkgs.dysnomia.override (origArgs: {
@ -90,6 +98,15 @@ in
});
};
s6-svscan = import ./s6-svscan {
inherit libDir runtimeDir;
inherit (pkgs) lib;
s6-svscanConstructorFun = constructors.s6-svscan;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableS6RCService = true;
});
};
svnserve = import ./svnserve {
inherit (pkgs) lib;
svnserveConstructorFun = constructors.svnserve;

View File

@ -0,0 +1,33 @@
{dockerConstructorFun, lib, dysnomia}:
{ instanceSuffix ? ""
, instanceName ? "docker${instanceSuffix}"
, containerName ? "docker-container${instanceSuffix}"
, postInstall ? ""
, type ? null
, properties ? {}
}:
let
pkg = dockerConstructorFun {
inherit instanceName;
postInstall = ''
# Add Dysnomia container configuration file for a Docker container
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/${containerName} <<EOF
EOF
# Copy the Dysnomia module that manages a docker-container
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/docker-container $out/libexec/dysnomia
'';
};
in
{
name = instanceName;
inherit pkg;
providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties

View File

@ -0,0 +1,38 @@
{s6-svscanConstructorFun, lib, dysnomia, libDir, runtimeDir}:
{ instanceSuffix ? ""
, instanceName ? "s6-svscan${instanceSuffix}"
, containerName ? "s6-rc-service${instanceSuffix}"
, scanDir ? "${runtimeDir}/service${instanceSuffix}"
, postInstall ? ""
, type ? null
, properties ? {}
}:
let
serviceDir = "${libDir}/${instanceName}/sv";
pkg = s6-svscanConstructorFun {
inherit instanceName scanDir serviceDir;
postInstall = ''
# Add Dysnomia container configuration file for s6-svscan
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/${containerName} <<EOF
serviceDir="${serviceDir}"
scanDir="${scanDir}"
EOF
# Copy the Dysnomia module that manages a s6-rc service
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/supervisord-program $out/libexec/dysnomia
'';
};
in
{
name = instanceName;
inherit pkg serviceDir scanDir;
providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties

View File

@ -1,12 +1,13 @@
{createManagedProcess, docker, kmod, runtimeDir, libDir}:
{instanceSuffix ? "", instanceName ? "docker${instanceSuffix}", extraArgs ? []}:
{instanceSuffix ? "", instanceName ? "docker${instanceSuffix}", extraArgs ? [], postInstall ? ""}:
let
user = instanceName;
group = instanceName;
in
createManagedProcess {
inherit instanceName;
inherit instanceName postInstall;
foregroundProcess = "${docker}/bin/dockerd";
args = [
"--group=${group}"

View File

@ -5,10 +5,11 @@
, scanDir ? "${runtimeDir}/service${instanceSuffix}"
, logUser ? "s6-log${instanceSuffix}"
, logGroup ? "s6-log${instanceSuffix}"
, postInstall ? ""
}:
createManagedProcess {
inherit instanceName;
inherit instanceName postInstall;
path = [ s6 ];
foregroundProcess = "${s6}/bin/s6-svscan";