This leads to ci failure otherwise if the file gets changed. git-blame can ignore whitespace changes.
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ 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 utillinux 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";
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
}
 |