Create function to automatically generate log companion services
This commit is contained in:
parent
b773dfe295
commit
a0f6da840e
|
@ -1,5 +1,11 @@
|
|||
{createManagedProcess, s6, runtimeDir}:
|
||||
{instanceSuffix ? "", instanceName ? "s6-svscan${instanceSuffix}", scanDir ? "${runtimeDir}/service${instanceSuffix}"}:
|
||||
|
||||
{ instanceSuffix ? ""
|
||||
, instanceName ? "s6-svscan${instanceSuffix}"
|
||||
, scanDir ? "${runtimeDir}/service${instanceSuffix}"
|
||||
, logUser ? "s6-log${instanceSuffix}"
|
||||
, logGroup ? "s6-log${instanceSuffix}"
|
||||
}:
|
||||
|
||||
createManagedProcess {
|
||||
name = instanceName;
|
||||
|
@ -9,4 +15,22 @@ createManagedProcess {
|
|||
initialize = ''
|
||||
mkdir -p ${scanDir}
|
||||
'';
|
||||
|
||||
credentials = {
|
||||
groups = {
|
||||
"${logGroup}" = {};
|
||||
};
|
||||
users = {
|
||||
"${logUser}" = {
|
||||
group = logGroup;
|
||||
description = "s6-log user";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
overrides = {
|
||||
sysvinit = {
|
||||
runlevels = [ 3 4 5 ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
{stdenv, execline, logDir, logDirUser, logDirGroup, forceDisableUserChange}:
|
||||
{name}:
|
||||
|
||||
let
|
||||
serviceName = "${name}-log";
|
||||
|
||||
util = import ./util.nix {
|
||||
inherit (stdenv) lib;
|
||||
};
|
||||
|
||||
serviceLogDir = "${logDir}/s6-log/${name}";
|
||||
|
||||
notificationFd = 3;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = serviceName;
|
||||
buildCommand = ''
|
||||
mkdir -p $out/etc/s6/sv/${serviceName}
|
||||
cd $out/etc/s6/sv/${serviceName}
|
||||
''
|
||||
+ util.generateStringProperty { value = "longrun"; filename = "type"; }
|
||||
+ ''
|
||||
cat > run <<EOF
|
||||
#!${execline}/bin/execlineb -P
|
||||
|
||||
foreground { mkdir -p ${serviceLogDir} }
|
||||
${stdenv.lib.optionalString (!forceDisableUserChange) ''
|
||||
foreground { chown -R ${logDirUser}:${logDirGroup} ${serviceLogDir} }
|
||||
s6-setuidgid ${logDirUser}
|
||||
''}
|
||||
exec -c s6-log -d${toString notificationFd} ${serviceLogDir}
|
||||
EOF
|
||||
''
|
||||
+ util.generateStringProperty { value = "${name}-srv"; filename = "consumer-for"; }
|
||||
+ util.generateIntProperty { value = notificationFd; filename = "notification-fd"; }
|
||||
+ util.generateStringProperty { value = name; filename = "pipeline-name"; };
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
{stdenv, createCredentials}:
|
||||
{stdenv, createCredentials, createLogServiceForLongRunService}:
|
||||
|
||||
{ name
|
||||
# When a service is flagged as essential it will not stop with the command: s6-rc -d change foo, but only: s6-rc -D change foo
|
||||
|
@ -33,6 +33,8 @@
|
|||
# named with the content of the pipeline-name file, and containing all the services in the pipeline that ends at service.
|
||||
# The pipeline-name file is ignored if service is not a last consumer.
|
||||
, pipelineName ? null
|
||||
# Automatically generates a logging longrun service that writes the output to a log file
|
||||
, autoGenerateLogService ? true
|
||||
# Specifies which groups and users that need to be created.
|
||||
, credentials ? {}
|
||||
# Arbitrary commands executed after generating the configuration files
|
||||
|
@ -45,12 +47,21 @@ let
|
|||
util = import ./util.nix {
|
||||
inherit (stdenv) lib;
|
||||
};
|
||||
|
||||
logService = createLogServiceForLongRunService {
|
||||
inherit name;
|
||||
};
|
||||
|
||||
_producerFor = if autoGenerateLogService then logService else producerFor;
|
||||
|
||||
# The service name gets a -srv suffix so that it can be paired with a -log service and put in a bundle that corresponds to: name
|
||||
serviceName = if autoGenerateLogService then "${name}-srv" else name;
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit name;
|
||||
name = serviceName;
|
||||
buildCommand = ''
|
||||
mkdir -p $out/etc/s6/sv/${name}
|
||||
cd $out/etc/s6/sv/${name}
|
||||
mkdir -p $out/etc/s6/sv/${serviceName}
|
||||
cd $out/etc/s6/sv/${serviceName}
|
||||
''
|
||||
+ util.generateStringProperty { value = "longrun"; filename = "type"; }
|
||||
+ util.generateBooleanProperty { value = flagEssential; filename = "flag-essential"; }
|
||||
|
@ -65,9 +76,13 @@ stdenv.mkDerivation {
|
|||
+ util.generateStringProperty { value = downSignal; filename = "down-signal"; }
|
||||
+ util.copyDir { path = data; filename = "data"; }
|
||||
+ util.copyDir { path = env; filename = "env"; }
|
||||
+ util.generateServiceName { service = producerFor; filename = "producer-for"; }
|
||||
+ util.generateServiceName { service = _producerFor; filename = "producer-for"; }
|
||||
+ util.generateServiceNameList { services = consumerFor; filename = "consumer-for"; }
|
||||
+ util.generateStringProperty { value = pipelineName; filename = "pipeline-name"; }
|
||||
+ stdenv.lib.optionalString autoGenerateLogService ''
|
||||
cd ..
|
||||
ln -sfn ${logService}/etc/s6/sv/${name}-log
|
||||
''
|
||||
+ ''
|
||||
ln -s ${credentialsSpec}/dysnomia-support $out/dysnomia-support
|
||||
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
{stdenv, createCredentials}:
|
||||
{stdenv, execline, createCredentials, logDir, logDirUser ? "s6-log", logDirGroup ? "s6-log", forceDisableUserChange}:
|
||||
|
||||
{
|
||||
rec {
|
||||
createLogServiceForLongRunService = import ./create-log-service-for-longrun-service.nix {
|
||||
inherit stdenv execline logDir logDirUser logDirGroup forceDisableUserChange;
|
||||
};
|
||||
createLongRunService = import ./create-longrun-service.nix {
|
||||
inherit stdenv createCredentials;
|
||||
inherit stdenv createCredentials createLogServiceForLongRunService;
|
||||
};
|
||||
createOneShotService = import ./create-oneshot-service.nix {
|
||||
inherit stdenv createCredentials;
|
||||
|
|
|
@ -88,6 +88,10 @@ let
|
|||
''
|
||||
+ stdenv.lib.optionalString (nice != null) ''
|
||||
nice -n ${toString nice}
|
||||
''
|
||||
# Always forward standard error so that it can be captured by the s6-log service
|
||||
+ ''
|
||||
fdmove -c 2 1
|
||||
'';
|
||||
|
||||
escapeArgs = args:
|
||||
|
|
|
@ -104,8 +104,8 @@ let
|
|||
};
|
||||
|
||||
s6-rc = import ../s6-rc {
|
||||
inherit (pkgs) stdenv;
|
||||
inherit createCredentials;
|
||||
inherit (pkgs) stdenv execline;
|
||||
inherit createCredentials logDir forceDisableUserChange;
|
||||
};
|
||||
|
||||
generateS6Service = import ../s6-rc/generate-s6-service.nix {
|
||||
|
|
Loading…
Reference in New Issue