Merge pull request #82507 from FRidh/hydra
hydra: wrap executables with hydra env vars Closes #84977
This commit is contained in:
commit
d7e011c864
@ -39,6 +39,36 @@ let
|
|||||||
|
|
||||||
inherit (config.system) stateVersion;
|
inherit (config.system) stateVersion;
|
||||||
|
|
||||||
|
hydra-package =
|
||||||
|
let
|
||||||
|
makeWrapperArgs = concatStringsSep " " (mapAttrsToList (key: value: "--set \"${key}\" \"${value}\"") hydraEnv);
|
||||||
|
in pkgs.buildEnv rec {
|
||||||
|
name = "hydra-env";
|
||||||
|
buildInputs = [ pkgs.makeWrapper ];
|
||||||
|
paths = [ cfg.package ];
|
||||||
|
|
||||||
|
postBuild = ''
|
||||||
|
if [ -L "$out/bin" ]; then
|
||||||
|
unlink "$out/bin"
|
||||||
|
fi
|
||||||
|
mkdir -p "$out/bin"
|
||||||
|
|
||||||
|
for path in ${concatStringsSep " " paths}; do
|
||||||
|
if [ -d "$path/bin" ]; then
|
||||||
|
cd "$path/bin"
|
||||||
|
for prg in *; do
|
||||||
|
if [ -f "$prg" ]; then
|
||||||
|
rm -f "$out/bin/$prg"
|
||||||
|
if [ -x "$prg" ]; then
|
||||||
|
makeWrapper "$path/bin/$prg" "$out/bin/$prg" ${makeWrapperArgs}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -266,7 +296,7 @@ in
|
|||||||
use-substitutes = ${if cfg.useSubstitutes then "1" else "0"}
|
use-substitutes = ${if cfg.useSubstitutes then "1" else "0"}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
environment.systemPackages = [ cfg.package ];
|
environment.systemPackages = [ hydra-package ];
|
||||||
|
|
||||||
environment.variables = hydraEnv;
|
environment.variables = hydraEnv;
|
||||||
|
|
||||||
@ -327,7 +357,7 @@ in
|
|||||||
chown hydra.hydra ${cfg.gcRootsDir}
|
chown hydra.hydra ${cfg.gcRootsDir}
|
||||||
chmod 2775 ${cfg.gcRootsDir}
|
chmod 2775 ${cfg.gcRootsDir}
|
||||||
'';
|
'';
|
||||||
serviceConfig.ExecStart = "${cfg.package}/bin/hydra-init";
|
serviceConfig.ExecStart = "${hydra-package}/bin/hydra-init";
|
||||||
serviceConfig.PermissionsStartOnly = true;
|
serviceConfig.PermissionsStartOnly = true;
|
||||||
serviceConfig.User = "hydra";
|
serviceConfig.User = "hydra";
|
||||||
serviceConfig.Type = "oneshot";
|
serviceConfig.Type = "oneshot";
|
||||||
@ -342,7 +372,7 @@ in
|
|||||||
restartTriggers = [ hydraConf ];
|
restartTriggers = [ hydraConf ];
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
{ ExecStart =
|
{ ExecStart =
|
||||||
"@${cfg.package}/bin/hydra-server hydra-server -f -h '${cfg.listenHost}' "
|
"@${hydra-package}/bin/hydra-server hydra-server -f -h '${cfg.listenHost}' "
|
||||||
+ "-p ${toString cfg.port} --max_spare_servers 5 --max_servers 25 "
|
+ "-p ${toString cfg.port} --max_spare_servers 5 --max_servers 25 "
|
||||||
+ "--max_requests 100 ${optionalString cfg.debugServer "-d"}";
|
+ "--max_requests 100 ${optionalString cfg.debugServer "-d"}";
|
||||||
User = "hydra-www";
|
User = "hydra-www";
|
||||||
@ -355,15 +385,15 @@ in
|
|||||||
{ wantedBy = [ "multi-user.target" ];
|
{ wantedBy = [ "multi-user.target" ];
|
||||||
requires = [ "hydra-init.service" ];
|
requires = [ "hydra-init.service" ];
|
||||||
after = [ "hydra-init.service" "network.target" ];
|
after = [ "hydra-init.service" "network.target" ];
|
||||||
path = [ cfg.package pkgs.nettools pkgs.openssh pkgs.bzip2 config.nix.package ];
|
path = [ hydra-package pkgs.nettools pkgs.openssh pkgs.bzip2 config.nix.package ];
|
||||||
restartTriggers = [ hydraConf ];
|
restartTriggers = [ hydraConf ];
|
||||||
environment = env // {
|
environment = env // {
|
||||||
PGPASSFILE = "${baseDir}/pgpass-queue-runner"; # grrr
|
PGPASSFILE = "${baseDir}/pgpass-queue-runner"; # grrr
|
||||||
IN_SYSTEMD = "1"; # to get log severity levels
|
IN_SYSTEMD = "1"; # to get log severity levels
|
||||||
};
|
};
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
{ ExecStart = "@${cfg.package}/bin/hydra-queue-runner hydra-queue-runner -v";
|
{ ExecStart = "@${hydra-package}/bin/hydra-queue-runner hydra-queue-runner -v";
|
||||||
ExecStopPost = "${cfg.package}/bin/hydra-queue-runner --unlock";
|
ExecStopPost = "${hydra-package}/bin/hydra-queue-runner --unlock";
|
||||||
User = "hydra-queue-runner";
|
User = "hydra-queue-runner";
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
|
|
||||||
@ -377,11 +407,11 @@ in
|
|||||||
{ wantedBy = [ "multi-user.target" ];
|
{ wantedBy = [ "multi-user.target" ];
|
||||||
requires = [ "hydra-init.service" ];
|
requires = [ "hydra-init.service" ];
|
||||||
after = [ "hydra-init.service" "network.target" ];
|
after = [ "hydra-init.service" "network.target" ];
|
||||||
path = with pkgs; [ cfg.package nettools jq ];
|
path = with pkgs; [ hydra-package nettools jq ];
|
||||||
restartTriggers = [ hydraConf ];
|
restartTriggers = [ hydraConf ];
|
||||||
environment = env;
|
environment = env;
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
{ ExecStart = "@${cfg.package}/bin/hydra-evaluator hydra-evaluator";
|
{ ExecStart = "@${hydra-package}/bin/hydra-evaluator hydra-evaluator";
|
||||||
User = "hydra";
|
User = "hydra";
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
WorkingDirectory = baseDir;
|
WorkingDirectory = baseDir;
|
||||||
@ -393,7 +423,7 @@ in
|
|||||||
after = [ "hydra-init.service" ];
|
after = [ "hydra-init.service" ];
|
||||||
environment = env;
|
environment = env;
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
{ ExecStart = "@${cfg.package}/bin/hydra-update-gc-roots hydra-update-gc-roots";
|
{ ExecStart = "@${hydra-package}/bin/hydra-update-gc-roots hydra-update-gc-roots";
|
||||||
User = "hydra";
|
User = "hydra";
|
||||||
};
|
};
|
||||||
startAt = "2,14:15";
|
startAt = "2,14:15";
|
||||||
@ -404,7 +434,7 @@ in
|
|||||||
after = [ "hydra-init.service" ];
|
after = [ "hydra-init.service" ];
|
||||||
environment = env;
|
environment = env;
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
{ ExecStart = "@${cfg.package}/bin/hydra-send-stats hydra-send-stats";
|
{ ExecStart = "@${hydra-package}/bin/hydra-send-stats hydra-send-stats";
|
||||||
User = "hydra";
|
User = "hydra";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -418,7 +448,7 @@ in
|
|||||||
PGPASSFILE = "${baseDir}/pgpass-queue-runner";
|
PGPASSFILE = "${baseDir}/pgpass-queue-runner";
|
||||||
};
|
};
|
||||||
serviceConfig =
|
serviceConfig =
|
||||||
{ ExecStart = "@${cfg.package}/bin/hydra-notify hydra-notify";
|
{ ExecStart = "@${hydra-package}/bin/hydra-notify hydra-notify";
|
||||||
# FIXME: run this under a less privileged user?
|
# FIXME: run this under a less privileged user?
|
||||||
User = "hydra-queue-runner";
|
User = "hydra-queue-runner";
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
|
Loading…
Reference in New Issue
Block a user