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}