summary refs log tree commit diff
path: root/pkgs/os-specific/linux/beegfs/default.nix
blob: 7ce2fea692453e40a77c214e99934917913e70b9 (plain) (blame)
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
{ stdenv, fetchurl, pkgconfig, unzip, which
, libuuid, attr, xfsprogs, cppunit, rdma-core
, zlib, openssl, sqlite, jre, openjdk, ant
, openssh, perl, gfortran, influxdb, curl
} :

let
  version = "7.0";

  subdirs = [
    "beeond_thirdparty/build"
    "beeond_thirdparty_gpl/build"
    "thirdparty/build"
    "opentk_lib/build"
    "common/build"
    "admon/build"
    "java_lib/build"
    "ctl/build"
    "fsck/build"
    "helperd/build"
    "meta/build"
    "mgmtd/build"
    "storage/build"
    "utils/build"
    "mon/build"
    "upgrade/beegfs_mirror_md/build"
  ];

in stdenv.mkDerivation {
  pname = "beegfs";
  inherit version;

  src = fetchurl {
    url = "https://git.beegfs.com/pub/v7/repository/archive.tar.bz2?ref=${version}";
    sha256 = "1wsljd5ybyhl94aqrdfvcs8a0l8w4pr0bs1vhjrf4y7ldhw35m3k";
  };

  nativeBuildInputs = [ which unzip pkgconfig cppunit openjdk ant perl ];

  buildInputs = [
    libuuid
    attr
    xfsprogs
    zlib
    openssl
    sqlite
    jre
    rdma-core
    openssh
    gfortran
    influxdb
    curl
  ];

  hardeningDisable = [ "format" ]; # required for building beeond

  postPatch = ''
    patchShebangs ./
    find -type f -name Makefile -exec sed -i "s:/bin/bash:${stdenv.shell}:" \{} \;
    find -type f -name Makefile -exec sed -i "s:/bin/true:true:" \{} \;
    find -type f -name "*.mk" -exec sed -i "s:/bin/true:true:" \{} \;

    # unpack manually and patch variable name
    sed -i '/tar -C $(SOURCE_PATH) -xzf $(PCOPY_TAR)/d' beeond_thirdparty/build/Makefile
    cd beeond_thirdparty/source
    tar xf pcopy-0.96.tar.gz
    sed -i 's/\([^_]\)rank/\1grank/' pcopy-0.96/src/pcp.cpp
    cd ../..
  '';

  buildPhase = ''
    for i in ${toString subdirs}; do
      make -C $i BEEGFS_OPENTK_IBVERBS=1 ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
    done
    make -C admon/build admon_gui BEEGFS_OPENTK_IBVERBS=1
  '';

  enableParallelBuilding = true;

  installPhase = ''
    binDir=$out/bin
    docDir=$out/share/doc/beegfs
    includeDir=$out/include/beegfs
    libDir=$out/lib
    libDirPkg=$out/lib/beegfs

    mkdir -p $binDir $libDir $libDirPkg $docDir $includeDir

    cp admon/build/beegfs-admon $binDir
    cp admon/build/dist/usr/bin/beegfs-admon-gui $binDir
    cp admon_gui/dist/beegfs-admon-gui.jar $libDirPkg
    cp admon/build/dist/etc/beegfs-admon.conf $docDir

    cp java_lib/build/jbeegfs.jar $libDirPkg
    cp java_lib/build/libjbeegfs.so $libDir

    cp ctl/build/beegfs-ctl $binDir
    cp fsck/build/beegfs-fsck $binDir

    cp utils/scripts/beegfs-check-servers $binDir
    cp utils/scripts/beegfs-df $binDir
    cp utils/scripts/beegfs-net $binDir

    cp helperd/build/beegfs-helperd $binDir
    cp helperd/build/dist/etc/beegfs-helperd.conf $docDir

    cp client_module/build/dist/sbin/beegfs-setup-client $binDir
    cp client_module/build/dist/etc/beegfs-client.conf $docDir

    cp meta/build/beegfs-meta $binDir
    cp meta/build/dist/sbin/beegfs-setup-meta $binDir
    cp meta/build/dist/etc/beegfs-meta.conf $docDir

    cp mgmtd/build/beegfs-mgmtd $binDir
    cp mgmtd/build/dist/sbin/beegfs-setup-mgmtd $binDir
    cp mgmtd/build/dist/etc/beegfs-mgmtd.conf $docDir

    cp storage/build/beegfs-storage $binDir
    cp storage/build/dist/sbin/beegfs-setup-storage $binDir
    cp storage/build/dist/etc/beegfs-storage.conf $docDir

    cp opentk_lib/build/libbeegfs-opentk.so $libDir

    cp upgrade/beegfs_mirror_md/build/beegfs-mirror-md $binDir

    cp client_devel/build/dist/usr/share/doc/beegfs-client-devel/examples/* $docDir
    cp -r client_devel/include/* $includeDir

    cp beeond_thirdparty_gpl/build/parallel $out/bin
    cp beeond_thirdparty/build/pcopy/p* $out/bin
    cp beeond_thirdparty/build/pcopy/s* $out/bin
    cp -r beeond/scripts/* $out
    cp beeond/source/* $out/bin
  '';

  postFixup = ''
    substituteInPlace $out/bin/beegfs-admon-gui \
      --replace " java " " ${jre}/bin/java " \
      --replace "/opt/beegfs/beegfs-admon-gui/beegfs-admon-gui.jar" \
                "$libDirPkg/beegfs-admon-gui.jar"

    substituteInPlace $out/bin/beeond \
      --replace /opt/beegfs/sbin "$out/bin"
  '';

  doCheck = true;

  checkPhase = ''
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/opentk_lib/build/ \
      common/build/test-runner --text
  '';

  meta = with stdenv.lib; {
    description = "High performance distributed filesystem with RDMA support";
    homepage = "https://www.beegfs.io";
    platforms = [ "i686-linux" "x86_64-linux" ];
    license = {
      fullName = "BeeGFS_EULA";
      url = "https://www.beegfs.io/docs/BeeGFS_EULA.txt";
      free = false;
    };
    maintainers = with maintainers; [ markuskowa ];
    # 2019-08-09
    # fails to build and had stability issues earlier
    broken = true;
  };
}