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
];
};
}
|