aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/nixos/modules/services/computing/torque/server.nix
blob: 8d923fc04d46d3a5f03508e47bdacd4ea6e051b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{ config, pkgs, lib, ... }:

with lib;

let
  cfg = config.services.torque.server;
  torque = pkgs.torque;
in
{
  options = {

    services.torque.server = {

      enable = mkEnableOption "torque server";

    };

  };

  config = mkIf cfg.enable {
    environment.systemPackages = [ pkgs.torque ];

    systemd.services.torque-server-init = {
      path = with pkgs; [ torque util-linux procps inetutils ];

      script = ''
        tmpsetup=$(mktemp -t torque-XXXX)
        cp -p ${torque}/bin/torque.setup $tmpsetup
        sed -i $tmpsetup -e 's/pbs_server -t create/pbs_server -f -t create/'

        pbs_mkdirs -v aux
        pbs_mkdirs -v server
        hostname > /var/spool/torque/server_name
        cp -prv ${torque}/var/spool/torque/* /var/spool/torque/
        $tmpsetup root

        sleep 1
        rm -f $tmpsetup
        kill $(pgrep pbs_server) 2>/dev/null
        kill $(pgrep trqauthd) 2>/dev/null
      '';

      serviceConfig = {
        Type = "oneshot";
        RemainAfterExit = true;
      };

      unitConfig = {
        ConditionPathExists = "!/var/spool/torque";
      };
    };

    systemd.services.trqauthd = {
      path = [ torque ];

      requires = [ "torque-server-init.service" ];
      after = [ "torque-server-init.service" ];

      serviceConfig = {
        Type = "forking";
        ExecStart = "${torque}/bin/trqauthd";
      };
    };

    systemd.services.torque-server = {
      path = [ torque ];

      wantedBy = [ "multi-user.target" ];
      wants = [ "torque-scheduler.service" "trqauthd.service" ];
      before = [ "trqauthd.service" ];
      requires = [ "torque-server-init.service" ];
      after = [ "torque-server-init.service" "network.target" ];

      serviceConfig = {
        Type = "forking";
        ExecStart = "${torque}/bin/pbs_server";
        ExecStop = "${torque}/bin/qterm";
        PIDFile = "/var/spool/torque/server_priv/server.lock";
      };
    };

    systemd.services.torque-scheduler = {
      path = [ torque ];

      requires = [ "torque-server-init.service" ];
      after = [ "torque-server-init.service" ];

      serviceConfig = {
        Type = "forking";
        ExecStart = "${torque}/bin/pbs_sched";
        PIDFile = "/var/spool/torque/sched_priv/sched.lock";
      };
    };

  };
}