summaryrefslogtreecommitdiff
path: root/pkgs/by-name/sl/slurm/package.nix
blob: a75e4751c22b5f3ed456e2eee1e62ca01dcc0389 (about) (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
{
  lib,
  stdenv,
  fetchFromGitHub,
  runCommand,
  config,
  pkg-config,
  libtool,
  curl,
  python3,
  munge,
  perl,
  pam,
  shadow,
  coreutils,
  dbus,
  libbpf,
  ncurses,
  libmysqlclient,
  lua,
  hwloc,
  numactl,
  readline,
  freeipmi,
  xorg,
  lz4,
  rdma-core,
  nixosTests,
  pmix,
  libjwt,
  libyaml,
  json_c,
  http-parser,
  # enable internal X11 support via libssh2
  enableX11 ? true,
  enableGtk2 ? false,
  gtk2,
  enableNVML ? config.cudaSupport,
  nvml,
}:

stdenv.mkDerivation rec {
  pname = "slurm";
  version = "24.11.3.1";

  # N.B. We use github release tags instead of https://www.schedmd.com/downloads.php
  # because the latter does not keep older releases.
  src = fetchFromGitHub {
    owner = "SchedMD";
    repo = "slurm";
    # The release tags use - instead of .
    rev = "${pname}-${builtins.replaceStrings [ "." ] [ "-" ] version}";
    hash = "sha256-DdGCPNmLCp1SgsYPVr7Gr4yqBrV2Ot3nJsWpcuYty5U=";
  };

  outputs = [
    "out"
    "dev"
  ];

  patches = [
    # increase string length to allow for full
    # path of 'echo' in nix store
    ./common-env-echo.patch
  ];

  prePatch =
    ''
      substituteInPlace src/common/env.c \
          --replace "/bin/echo" "${coreutils}/bin/echo"

      # Autoconf does not support split packages for pmix (libs and headers).
      # Fix the path to the pmix libraries, so dlopen can find it.
      substituteInPlace src/plugins/mpi/pmix/mpi_pmix.c \
          --replace 'xstrfmtcat(full_path, "%s/", PMIXP_LIBPATH)' \
                    'xstrfmtcat(full_path, "${lib.getLib pmix}/lib/")'

    ''
    + (lib.optionalString enableX11 ''
      substituteInPlace src/common/x11_util.c \
          --replace '"/usr/bin/xauth"' '"${xorg.xauth}/bin/xauth"'
    '');

  # nixos test fails to start slurmd with 'undefined symbol: slurm_job_preempt_mode'
  # https://groups.google.com/forum/#!topic/slurm-devel/QHOajQ84_Es
  # this doesn't fix tests completely at least makes slurmd to launch
  hardeningDisable = [ "bindnow" ];

  nativeBuildInputs = [
    pkg-config
    libtool
    python3
    perl
  ];
  buildInputs =
    [
      curl
      python3
      munge
      pam
      libmysqlclient
      ncurses
      lz4
      rdma-core
      lua
      hwloc
      numactl
      readline
      freeipmi
      shadow.su
      pmix
      json_c
      libjwt
      libyaml
      dbus
      libbpf
      http-parser
    ]
    ++ lib.optionals enableX11 [ xorg.xauth ]
    ++ lib.optionals enableGtk2 [ gtk2 ]
    ++ lib.optionals enableNVML [
      (runCommand "collect-nvml" { } ''
        mkdir $out
        ln -s ${nvml.dev}/include $out/include
        ln -s ${nvml.lib}/lib/stubs $out/lib
      '')
    ];

  configureFlags =
    [
      "--with-freeipmi=${freeipmi}"
      "--with-http-parser=${http-parser}"
      "--with-hwloc=${lib.getDev hwloc}"
      "--with-json=${lib.getDev json_c}"
      "--with-jwt=${libjwt}"
      "--with-lz4=${lib.getDev lz4}"
      "--with-munge=${munge}"
      "--with-yaml=${lib.getDev libyaml}"
      "--with-ofed=${lib.getDev rdma-core}"
      "--sysconfdir=/etc/slurm"
      "--with-pmix=${lib.getDev pmix}"
      "--with-bpf=${libbpf}"
      "--without-rpath" # Required for configure to pick up the right dlopen path
    ]
    ++ (lib.optional enableGtk2 "--disable-gtktest")
    ++ (lib.optional (!enableX11) "--disable-x11")
    ++ (lib.optional (enableNVML) "--with-nvml");

  preConfigure = ''
    patchShebangs ./doc/html/shtml2html.py
    patchShebangs ./doc/man/man2html.py
  '';

  postInstall = ''
    rm -f $out/lib/*.la $out/lib/slurm/*.la
  '';

  enableParallelBuilding = true;

  passthru.tests.slurm = nixosTests.slurm;

  meta = with lib; {
    homepage = "http://www.schedmd.com/";
    description = "Simple Linux Utility for Resource Management";
    platforms = platforms.linux;
    license = licenses.gpl2Only;
    maintainers = with maintainers; [
      jagajaga
      markuskowa
    ];
  };
}