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
|
{ lib
, stdenv
, rustPlatform
, fetchFromGitHub
, buildPackages
, cargo
, lzo
, openssl
, pkg-config
, ronn
, rustc
, zlib
, libiconv
, darwin
, fetchpatch
}:
let
pname = "zerotierone";
version = "1.14.0";
src = fetchFromGitHub {
owner = "zerotier";
repo = "ZeroTierOne";
rev = version;
hash = "sha256-YWcqALUB3ZEukL4er2FKcyNdEbuaf//QU5hRbKAfxDA=";
};
in stdenv.mkDerivation {
inherit pname version src;
cargoDeps = rustPlatform.importCargoLock {
lockFile = ./Cargo.lock;
outputHashes = {
"jwt-0.16.0" = "sha256-P5aJnNlcLe9sBtXZzfqHdRvxNfm6DPBcfcKOVeLZxcM=";
"rustfsm-0.1.0" = "sha256-q7J9QgN67iuoNhQC8SDVzUkjCNRXGiNCkE8OsQc5+oI=";
};
};
patches = [
# https://github.com/zerotier/ZeroTierOne/pull/2314
(fetchpatch {
url = "https://github.com/zerotier/ZeroTierOne/commit/f9c6ee0181acb1b77605d9a4e4106ac79aaacca3.patch";
hash = "sha256-zw7KmaxiCH99Y0wQtOQM4u0ruxiePhvv/birxMQioJU=";
})
./0001-darwin-disable-link-time-optimization.patch
];
postPatch = ''
cp ${./Cargo.lock} Cargo.lock
cp ${./Cargo.lock} rustybits/Cargo.lock
'';
preConfigure = ''
cmp ./Cargo.lock ./rustybits/Cargo.lock || {
echo 1>&2 "Please make sure that the derivation's Cargo.lock is identical to ./rustybits/Cargo.lock!"
exit 1
}
patchShebangs ./doc/build.sh
substituteInPlace ./doc/build.sh \
--replace '/usr/bin/ronn' '${buildPackages.ronn}/bin/ronn' \
substituteInPlace ./make-linux.mk \
--replace '-march=armv6zk' "" \
--replace '-mcpu=arm1176jzf-s' ""
'';
nativeBuildInputs = [
pkg-config
ronn
rustPlatform.cargoSetupHook
cargo
rustc
];
buildInputs = [
lzo
openssl
zlib
] ++ lib.optionals stdenv.isDarwin [
libiconv
darwin.apple_sdk.frameworks.SystemConfiguration
darwin.apple_sdk.frameworks.CoreServices
];
enableParallelBuilding = true;
# Ensure Rust compiles for the right target
env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTarget;
preBuild = if stdenv.isDarwin then ''
makeFlagsArray+=("ARCH_FLAGS=") # disable multi-arch build
if ! grep -q MACOS_VERSION_MIN=10.13 make-mac.mk; then
echo "You may need to update MACOSX_DEPLOYMENT_TARGET to match the value in make-mac.mk"
exit 1
fi
(cd rustybits && MACOSX_DEPLOYMENT_TARGET=10.13 cargo build -p zeroidc --release)
cp \
./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
./rustybits/target
# zerotier uses the "FORCE" target as a phony target to force rebuilds.
# We don't want to rebuild libzeroidc.a as we build want to build this library ourself for a single architecture
touch FORCE
'' else ''
# Cargo won't compile to target/release but to target/<RUST_TARGET>/release when a target is
# explicitly defined. The build-system however expects target/release. Hence we just symlink from
# the latter to the former.
mkdir -p rustybits/target/release
ln -rs \
./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
./rustybits/target/release/
'';
buildFlags = [ "all" "selftest" ];
doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
checkPhase = ''
runHook preCheck
./zerotier-selftest
runHook postCheck
'';
installFlags = [
# only linux has an install target, we borrow this for macOS as well
"-f" "make-linux.mk"
"DESTDIR=$$out/upstream"
];
postInstall = ''
mv $out/upstream/usr/sbin $out/bin
mkdir -p $man/share
mv $out/upstream/usr/share/man $man/share/man
rm -rf $out/upstream
'';
outputs = [ "out" "man" ];
passthru.updateScript = ./update.sh;
meta = with lib; {
description = "Create flat virtual Ethernet networks of almost unlimited size";
homepage = "https://www.zerotier.com";
license = licenses.bsl11;
maintainers = with maintainers; [
sjmackenzie zimbatm ehmry obadz danielfullmer
mic92 # also can test darwin
];
platforms = platforms.unix;
};
}
|