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
|
{ stdenv, fetchurl, makeWrapper, which, coreutils, rrdtool, perl, perlPackages
, python, ruby, openjdk, nettools
}:
stdenv.mkDerivation rec {
version = "2.0.25";
name = "munin-${version}";
src = fetchurl {
url = "https://github.com/munin-monitoring/munin/archive/${version}.tar.gz";
sha256 = "1ig67l3p5fnx44fcvbbinajxlin9i7g9cbac93h2hcvb2qhzzzra";
};
buildInputs = [
makeWrapper
which
coreutils
rrdtool
nettools
perl
perlPackages.ModuleBuild
perlPackages.HTMLTemplate
perlPackages.NetCIDR
perlPackages.NetSSLeay
perlPackages.NetServer
perlPackages.Log4Perl
perlPackages.IOSocketInet6
perlPackages.Socket6
perlPackages.URI
perlPackages.DBFile
perlPackages.DateManip
perlPackages.FileCopyRecursive
perlPackages.FCGI
perlPackages.NetSNMP
perlPackages.NetServer
perlPackages.ListMoreUtils
perlPackages.TimeHiRes
perlPackages.LWPUserAgent
perlPackages.DBDPg
python
ruby
openjdk
# tests
perlPackages.TestLongString
perlPackages.TestDifferences
perlPackages.TestDeep
perlPackages.TestMockModule
perlPackages.TestMockObject
perlPackages.FileSlurp
perlPackages.IOStringy
];
# TODO: tests are failing http://munin-monitoring.org/ticket/1390#comment:1
# NOTE: important, test command always exits with 0, think of a way to abort the build once tests pass
doCheck = false;
checkPhase = ''
export PERL5LIB="$PERL5LIB:${rrdtool}/lib/perl"
LC_ALL=C make -j1 test
'';
patches = [
# https://rt.cpan.org/Public/Bug/Display.html?id=75112
./dont_preserve_source_dir_permissions.patch
# https://github.com/munin-monitoring/munin/pull/134
./adding_servicedir_munin-node.patch
];
preBuild = ''
substituteInPlace "Makefile" \
--replace "/bin/pwd" "pwd" \
--replace "HTMLOld.3pm" "HTMLOld.3"
# munin checks at build time if user/group exists, unpure
sed -i '/CHECKUSER/d' Makefile
sed -i '/CHOWN/d' Makefile
sed -i '/CHECKGROUP/d' Makefile
# munin hardcodes PATH, we need it to obey $PATH
sed -i '/ENV{PATH}/d' node/lib/Munin/Node/Service.pm
'';
# DESTDIR shouldn't be needed (and shouldn't have worked), but munin
# developers have forgotten to use PREFIX everywhere, so we use DESTDIR to
# ensure that everything is installed in $out.
makeFlags = ''
PREFIX=$(out)
DESTDIR=$(out)
PERLLIB=$(out)/lib/perl5/site_perl
PERL=${perl}/bin/perl
PYTHON=${python}/bin/python
RUBY=${ruby}/bin/ruby
JAVARUN=${openjdk}/bin/java
PLUGINUSER=munin
'';
postFixup = ''
if test -e $out/nix-support/propagated-native-build-inputs; then
ln -s $out/nix-support/propagated-native-build-inputs $out/nix-support/propagated-user-env-packages
fi
for file in "$out"/bin/munindoc "$out"/sbin/munin-* "$out"/lib/munin-* "$out"/www/cgi/*; do
# don't wrap .jar files
case "$file" in
*.jar) continue;;
esac
wrapProgram "$file" \
--set PERL5LIB "$out/lib/perl5/site_perl:${rrdtool}/lib/perl:${with perlPackages; stdenv.lib.makePerlPath [
Log4Perl IOSocketInet6 Socket6 URI DBFile DateManip
HTMLTemplate FileCopyRecursive FCGI NetCIDR NetSNMP NetServer
ListMoreUtils TimeHiRes DBDPg LWPUserAgent
]}"
done
'';
meta = with stdenv.lib; {
description = "Networked resource monitoring tool";
longDescription = ''
Munin is a monitoring tool that surveys all your computers and remembers
what it saw. It presents all the information in graphs through a web
interface. Munin can help analyze resource trends and 'what just happened
to kill our performance?' problems.
'';
homepage = http://munin-monitoring.org/;
license = licenses.gpl2;
maintainers = [ maintainers.iElectric maintainers.bjornfor ];
platforms = platforms.linux;
};
}
|