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
|
{ stdenv, fetchurl, pkgconfig, unzip, which
, libuuid, attr, xfsprogs, cppunit, rdma-core
, zlib, openssl, sqlite, jre, openjdk, ant
, openssh, perl, gfortran
} :
let
version = "6.18";
subdirs = [
"beeond_thirdparty/build"
"beeond_thirdparty_gpl/build"
"beegfs_thirdparty/build"
"beegfs_opentk_lib/build"
"beegfs_common/build"
"beegfs_admon/build"
"beegfs_java_lib/build"
"beegfs_ctl/build"
"beegfs_fsck/build"
"beegfs_helperd/build"
"beegfs_meta/build"
"beegfs_mgmtd/build"
"beegfs_online_cfg/build"
"beegfs_storage/build"
"beegfs_utils/build"
];
in stdenv.mkDerivation rec {
name = "beegfs-${version}";
src = fetchurl {
url = "https://git.beegfs.com/pub/v6/repository/archive.tar.bz2?ref=${version}";
sha256 = "1g874qyxh4v53ah3lzchrqi0jci7wngr54q3f4d9q0kzvvifripn";
};
nativeBuildInputs = [ which unzip pkgconfig cppunit openjdk ant perl ];
buildInputs = [
libuuid
attr
xfsprogs
zlib
openssl
sqlite
jre
rdma-core
openssh
gfortran ];
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
done
make -C beegfs_admon/build admon_gui BEEGFS_OPENTK_IBVERBS=1
'';
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 beegfs_admon/build/beegfs-admon $binDir
cp beegfs_admon/build/dist/usr/bin/beegfs-admon-gui $binDir
cp beegfs_admon_gui/dist/beegfs-admon-gui.jar $libDirPkg
cp beegfs_admon/build/dist/etc/beegfs-admon.conf $docDir
cp beegfs_java_lib/build/jbeegfs.jar $libDirPkg
cp beegfs_java_lib/build/libjbeegfs.so $libDir
cp beegfs_ctl/build/beegfs-ctl $binDir
cp beegfs_fsck/build/beegfs-fsck $binDir
cp beegfs_utils/scripts/beegfs-check-servers $binDir
cp beegfs_utils/scripts/beegfs-df $binDir
cp beegfs_utils/scripts/beegfs-net $binDir
cp beegfs_helperd/build/beegfs-helperd $binDir
cp beegfs_helperd/build/dist/etc/beegfs-helperd.conf $docDir
cp beegfs_client_module/build/dist/sbin/beegfs-setup-client $binDir
cp beegfs_client_module/build/dist/etc/beegfs-client.conf $docDir
cp beegfs_meta/build/beegfs-meta $binDir
cp beegfs_meta/build/dist/sbin/beegfs-setup-meta $binDir
cp beegfs_meta/build/dist/etc/beegfs-meta.conf $docDir
cp beegfs_mgmtd/build/beegfs-mgmtd $binDir
cp beegfs_mgmtd/build/dist/sbin/beegfs-setup-mgmtd $binDir
cp beegfs_mgmtd/build/dist/etc/beegfs-mgmtd.conf $docDir
cp beegfs_storage/build/beegfs-storage $binDir
cp beegfs_storage/build/dist/sbin/beegfs-setup-storage $binDir
cp beegfs_storage/build/dist/etc/beegfs-storage.conf $docDir
cp beegfs_opentk_lib/build/libbeegfs-opentk.so $libDir
cp beegfs_client_devel/build/dist/usr/share/doc/beegfs-client-devel/examples/* $docDir
cp -r beegfs_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 = ''
beegfs_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 ];
};
}
|