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
|
{
version,
hash,
updateScriptArgs ? "",
}:
{
lib,
stdenv,
fetchFromGitHub,
autoreconfHook,
gnused,
libbpf,
libcap_ng,
numactl,
openssl,
pkg-config,
procps,
python3,
unbound,
xdp-tools,
writeScript,
}:
stdenv.mkDerivation rec {
pname = "ovn";
inherit version;
src = fetchFromGitHub {
owner = "ovn-org";
repo = "ovn";
rev = "refs/tags/v${version}";
inherit hash;
fetchSubmodules = true;
};
nativeBuildInputs = [
autoreconfHook
pkg-config
python3
];
buildInputs = [
libbpf
libcap_ng
numactl
openssl
unbound
xdp-tools
];
# need to build the ovs submodule first
preConfigure = ''
pushd ovs
./boot.sh
./configure
make -j $NIX_BUILD_CORES
popd
'';
configureFlags = [
"--localstatedir=/var"
];
enableParallelBuilding = true;
# disable tests due to networking issues and because individual tests can't be skipped easily
doCheck = false;
nativeCheckInputs = [
gnused
procps
];
# https://docs.ovn.org/en/latest/topics/testing.html
preCheck = ''
export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
# allow rechecks to retry flaky tests
export RECHECK=yes
# hack to stop tests from trying to read /etc/resolv.conf
export OVS_RESOLV_CONF="$PWD/resolv.conf"
touch $OVS_RESOLV_CONF
'';
passthru.updateScript = writeScript "ovs-update.nu" ''
${./update.nu} ${updateScriptArgs}
'';
meta = with lib; {
description = "Open Virtual Network";
longDescription = ''
OVN (Open Virtual Network) is a series of daemons that translates virtual network configuration into OpenFlow, and installs them into Open vSwitch.
'';
homepage = "https://github.com/ovn-org/ovn";
changelog = "https://github.com/ovn-org/ovn/blob/${src.rev}/NEWS";
license = licenses.asl20;
maintainers = with maintainers; [ adamcstephens ];
platforms = platforms.linux;
};
}
|