1{
2 lib,
3 stdenv,
4 fetchurl,
5 autoreconfHook,
6 perl,
7 readline,
8 rsh,
9 ssh,
10 slurm,
11 slurmSupport ? false,
12}:
13
14stdenv.mkDerivation rec {
15 pname = "pdsh";
16 version = "2.35";
17
18 src = fetchurl {
19 url = "https://github.com/chaos/pdsh/releases/download/pdsh-${version}/pdsh-${version}.tar.gz";
20 sha256 = "sha256-de8VNHhI//Q/jW/5xEJP4Fx90s26ApE5kB+GGgUJPP4=";
21 };
22
23 buildInputs = [
24 perl
25 readline
26 ssh
27 ]
28 ++ (lib.optional slurmSupport slurm);
29
30 nativeBuildInputs = [ autoreconfHook ];
31
32 # Do not use git to derive a version.
33 postPatch = ''
34 sed -i 's/m4_esyscmd(\[git describe.*/[${version}])/' configure.ac
35 '';
36
37 preConfigure = ''
38 configureFlagsArray=(
39 "--infodir=$out/share/info"
40 "--mandir=$out/share/man"
41 "--with-machines=/etc/pdsh/machines"
42 ${if readline == null then "--without-readline" else "--with-readline"}
43 ${if ssh == null then "--without-ssh" else "--with-ssh"}
44 ${if rsh == false then "--without-rsh" else "--with-rsh"}
45 ${if slurmSupport then "--with-slurm" else "--without-slurm"}
46 "--with-dshgroups"
47 "--with-xcpu"
48 "--disable-debug"
49 '--with-rcmd-rank-list=ssh,krb4,exec,xcpu,rsh'
50 )
51 '';
52
53 meta = {
54 homepage = "https://github.com/chaos/pdsh";
55 description = "High-performance, parallel remote shell utility";
56 license = lib.licenses.gpl2Plus;
57
58 longDescription = ''
59 Pdsh is a high-performance, parallel remote shell utility. It has
60 built-in, thread-safe clients for Berkeley and Kerberos V4 rsh and
61 can call SSH externally (though with reduced performance). Pdsh
62 uses a "sliding window" parallel algorithm to conserve socket
63 resources on the initiating node and to allow progress to continue
64 while timeouts occur on some connections.
65 '';
66
67 platforms = lib.platforms.unix;
68 };
69}