1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6 cfg = config.services.torque.server;
7 torque = pkgs.torque;
8in
9{
10 options = {
11
12 services.torque.server = {
13
14 enable = mkEnableOption "torque server";
15
16 };
17
18 };
19
20 config = mkIf cfg.enable {
21 environment.systemPackages = [ pkgs.torque ];
22
23 systemd.services.torque-server-init = {
24 path = with pkgs; [ torque utillinux procps inetutils ];
25
26 script = ''
27 tmpsetup=$(mktemp -t torque-XXXX)
28 cp -p ${torque}/bin/torque.setup $tmpsetup
29 sed -i $tmpsetup -e 's/pbs_server -t create/pbs_server -f -t create/'
30
31 pbs_mkdirs -v aux
32 pbs_mkdirs -v server
33 hostname > /var/spool/torque/server_name
34 cp -prv ${torque}/var/spool/torque/* /var/spool/torque/
35 $tmpsetup root
36
37 sleep 1
38 rm -f $tmpsetup
39 kill $(pgrep pbs_server) 2>/dev/null
40 kill $(pgrep trqauthd) 2>/dev/null
41 '';
42
43 serviceConfig = {
44 Type = "oneshot";
45 RemainAfterExit = true;
46 };
47
48 unitConfig = {
49 ConditionPathExists = "!/var/spool/torque";
50 };
51 };
52
53 systemd.services.trqauthd = {
54 path = [ torque ];
55
56 requires = [ "torque-server-init.service" ];
57 after = [ "torque-server-init.service" ];
58
59 serviceConfig = {
60 Type = "forking";
61 ExecStart = "${torque}/bin/trqauthd";
62 };
63 };
64
65 systemd.services.torque-server = {
66 path = [ torque ];
67
68 wantedBy = [ "multi-user.target" ];
69 wants = [ "torque-scheduler.service" "trqauthd.service" ];
70 before = [ "trqauthd.service" ];
71 requires = [ "torque-server-init.service" ];
72 after = [ "torque-server-init.service" "network.target" ];
73
74 serviceConfig = {
75 Type = "forking";
76 ExecStart = "${torque}/bin/pbs_server";
77 ExecStop = "${torque}/bin/qterm";
78 PIDFile = "/var/spool/torque/server_priv/server.lock";
79 };
80 };
81
82 systemd.services.torque-scheduler = {
83 path = [ torque ];
84
85 requires = [ "torque-server-init.service" ];
86 after = [ "torque-server-init.service" ];
87
88 serviceConfig = {
89 Type = "forking";
90 ExecStart = "${torque}/bin/pbs_sched";
91 PIDFile = "/var/spool/torque/sched_priv/sched.lock";
92 };
93 };
94
95 };
96}