+diff -urN munin-2.0.17/dists/tarball/plugins.conf munin-2.0.17-plugins/dists/tarball/plugins.conf
+--- munin-2.0.17/dists/tarball/plugins.conf 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/dists/tarball/plugins.conf 2013-08-17 13:18:51.817585940 +0200
+@@ -14,6 +14,9 @@
+ #
+ #
+
++[*]
++env.logtail /usr/bin/logtail
++
+ [mysql*]
+ #env.mysqlopts -u someuser
+
+@@ -31,3 +34,128 @@
+
+ [postfix*]
+ user root
++env.logdir /var/log
++env.logfile maillog
++
++[netstat]
++group proc
++
++[amavis*]
++user root
++env.amavislog /var/log/maillog
++env.logfile /var/log/maillog
++
++[courier*]
++user root
++env.logfile /var/log/maillog
++
++[mailman]
++user mailman
++group (mailman)
++
++[bind9_rndc]
++group (named)
++env.querystats /var/lib/named/named.stats
++
++[squid*]
++group (squid)
++#env.squidport 3128
++#env.squiduser manager
++#env.squidpasswd <SECRET>
++
++[fw*]
++group proc
++
++[if*]
++group proc
++
++[dhcpd3]
++user root
++env.leasefile /var/lib/dhcpd/dhcpd.leases
++env.configfile /etc/dhcpd.conf
++
++[ip_*]
++user root
++
++[munin*]
++user munin
++
++[ping_*]
++group adm
++
++[port_*]
++group proc
++
++[processes]
++group proc
++
++[ps_*]
++group proc
++
++[psu_*]
++group proc
++
++[nfs*]
++group proc
++
++[entropy]
++group proc
++
++[open_*]
++group proc
++
++[nut*]
++env.upsname SmartUPS
++env.upshost 127.0.0.1
++
++[df*]
++#user root # if you have mode 0000 /vservers dir
++group proc
++
++# Sane defaults for plugins from MuninExchange
++
++[apache_smaps]
++#user root # if you have kernel with grsecurity
++group proc
++env.pname httpd.prefork
++env.puser http
++
++[dovecot]
++user root
++env.logfile /var/log/maillog
++
++[php_eaccelerator]
++env.user admin
++env.password eAccelerator
++env.url http://127.0.0.1/eaccelerator/control.php
++
++[proftpd*]
++user root
++env.logfile /var/log/xferlog
++
++[vsftpd*]
++user root
++env.logfile /var/log/vsftpd.log
++
++[postgrey*]
++user root
++env.logfile /var/log/maillog
++
++[nagiosstatus]
++user root
++env.statuslog /var/lib/nagios/status.dat
++
++[freeradius]
++user root
++env.radius_log /var/log/freeradius/radius.log
++
++[ipmitool_sensor*]
++user root
++timeout 20
++
++[openvpn_clients]
++user root
++env.logfile /var/log/openvpn/status.log
++
++[cupsys_pages]
++user root
+diff -urN munin-2.0.17/plugins/node.d/amavis.in munin-2.0.17-plugins/plugins/node.d/amavis.in
+--- munin-2.0.17/plugins/node.d/amavis.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/amavis.in 2013-08-17 13:18:51.820919315 +0200
+@@ -77,13 +77,12 @@
+ =cut
+
+ mktempfile () {
+- cmd=`echo $MUNIN_MKTEMP | sed s/\\$1/$1/`
+- $cmd
++ mktemp -p /tmp/ $1
+ }
+
+ AMAVIS_LOG=${amavislog:-/var/log/mail/mail.info}
+ LOGTAIL=${logtail:-logtail}
+-STATEFILE=$MUNIN_PLUGSTATE/amavis.offset
++STATEFILE=@@PLUGSTATE@@/amavis.offset
+
+ if [ "$1" = "autoconf" ]; then
+ if [ -f "${AMAVIS_LOG}" -a -n "${LOGTAIL}" -a -x "${LOGTAIL}" ] ; then
+@@ -106,7 +105,7 @@
+
+ if [ "$1" = "config" ]; then
+ echo 'graph_title Amavis filter statistics'
+- echo 'graph_vlabel \#'
++ echo 'graph_vlabel mails'
+ echo 'graph_category antivirus'
+ echo 'virus.label virus'
+ echo 'virus.info Number of viruses caught in email'
+@@ -124,7 +123,7 @@
+ spamm=U
+ spams=U
+
+-TEMP_FILE=$(mktempfile munin-amavis.XXXXXX)
++TEMP_FILE=$(mktempfile munin-amavis.XXXXXXXXXX)
+
+ if [ -n "$TEMP_FILE" -a -f "$TEMP_FILE" ]
+ then
+diff -urN munin-2.0.17/plugins/node.d/apache_accesses.in munin-2.0.17-plugins/plugins/node.d/apache_accesses.in
+--- munin-2.0.17/plugins/node.d/apache_accesses.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/apache_accesses.in 2013-08-17 13:18:51.817585940 +0200
+@@ -89,6 +89,7 @@
+
+ my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto";
+ my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80);
++my $HOST = exists $ENV{'host'} ? $ENV{'host'} : undef;
+
+ if ( defined $ARGV[0] and $ARGV[0] eq "autoconf" )
+ {
+@@ -129,7 +130,11 @@
+
+ if ( defined $ARGV[0] and $ARGV[0] eq "config" )
+ {
+- print "graph_title Apache accesses\n";
++ print "graph_title Apache accesses";
++ if ( $HOST ) {
++ print " for $HOST";
++ }
++ print "\n";
+ print "graph_args --base 1000\n";
+ print "graph_vlabel accesses / \${graph_period}\n";
+ print "graph_category apache\n";
+diff -urN munin-2.0.17/plugins/node.d/apache_processes.in munin-2.0.17-plugins/plugins/node.d/apache_processes.in
+--- munin-2.0.17/plugins/node.d/apache_processes.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/apache_processes.in 2013-08-17 13:18:51.817585940 +0200
+@@ -96,6 +96,7 @@
+
+ my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto";
+ my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80);
++my $HOST = exists $ENV{'host'} ? $ENV{'host'} : undef;
+ my $SHOWFREE = !exists $ENV{'showfree'} || $ENV{'showfree'};
+
+ if ( defined $ARGV[0] and $ARGV[0] eq "autoconf" )
+@@ -136,7 +137,11 @@
+
+ if ( defined $ARGV[0] and $ARGV[0] eq "config" )
+ {
+- print "graph_title Apache processes\n";
++ print "graph_title Apache processes";
++ if ( $HOST ) {
++ print " for $HOST";
++ }
++ print "\n";
+ print "graph_args --base 1000 -l 0\n";
+ print "graph_category apache\n";
+ print "graph_order ";
+diff -urN munin-2.0.17/plugins/node.d/apache_volume.in munin-2.0.17-plugins/plugins/node.d/apache_volume.in
+--- munin-2.0.17/plugins/node.d/apache_volume.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/apache_volume.in 2013-08-17 13:18:51.817585940 +0200
+@@ -89,6 +89,7 @@
+
+ my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto";
+ my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80);
++my $HOST = exists $ENV{'host'} ? $ENV{'host'} : undef;
+
+ if ( defined $ARGV[0] and $ARGV[0] eq "autoconf" )
+ {
+@@ -129,7 +130,11 @@
+
+ if ( defined $ARGV[0] and $ARGV[0] eq "config" )
+ {
+- print "graph_title Apache volume\n";
++ print "graph_title Apache volume";
++ if ( $HOST ) {
++ print " for $HOST";
++ }
++ print "\n";
+ print "graph_args --base 1000\n";
+ print "graph_vlabel bytes per \${graph_period}\n";
+ print "graph_category apache\n";
+diff -urN munin-2.0.17/plugins/node.d/bind9.in munin-2.0.17-plugins/plugins/node.d/bind9.in
+--- munin-2.0.17/plugins/node.d/bind9.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/bind9.in 2013-08-17 13:18:51.820919315 +0200
+@@ -53,7 +53,7 @@
+ use strict;
+
+ my $QUERYLOG = $ENV{logfile} || '/var/log/bind9/query.log';
+-my $STATEFILE= "$ENV{MUNIN_PLUGSTATE}/bind9.state";
++my $STATEFILE= "@@PLUGSTATE@@/bind9.state";
+
+ my $OTHER=0;
+ my %IN;
+@@ -63,7 +63,7 @@
+ open(Q, ">", $STATEFILE);
+ close(Q);
+ }
+- open(Q,"< $STATEFILE") or die ("Cannot open state file");
++ open(Q,"< $STATEFILE") or return ("Cannot open state file");
+ while (<Q>) {
+ chomp;
+ my ($q,$n) = split(/\s+/,$_,2);
+diff -urN munin-2.0.17/plugins/node.d/courier_.in munin-2.0.17-plugins/plugins/node.d/courier_.in
+--- munin-2.0.17/plugins/node.d/courier_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/courier_.in 2013-08-17 13:18:51.817585940 +0200
+@@ -55,7 +55,7 @@
+ COURIER_LOG=${logfile:-/var/log/mail.log}
+ SERVICE=${service:-`basename $0 | sed 's/^courier_//g'`}
+ OFFSET_FILE=${MUNIN_PLUGSTATE}/courier_${SERVICE}.offset
+-LOGTAIL=${logtail:-/usr/sbin/logtail}
++LOGTAIL=${logtail:-`which logtail`}
+
+ mktempfile () {
+ @@MKTEMP@@
+diff -urN munin-2.0.17/plugins/node.d/courier_mta_mailstats.in munin-2.0.17-plugins/plugins/node.d/courier_mta_mailstats.in
+--- munin-2.0.17/plugins/node.d/courier_mta_mailstats.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/courier_mta_mailstats.in 2013-08-17 13:18:51.817585940 +0200
+@@ -108,7 +108,9 @@
+
+ if($startsize < $pos) {
+ # Log rotated
+- parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ if (-f $rotlogfile) {
++ parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ }
+ $pos = 0;
+ }
+
+diff -urN munin-2.0.17/plugins/node.d/courier_mta_mailvolume.in munin-2.0.17-plugins/plugins/node.d/courier_mta_mailvolume.in
+--- munin-2.0.17/plugins/node.d/courier_mta_mailvolume.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/courier_mta_mailvolume.in 2013-08-17 13:18:51.817585940 +0200
+@@ -98,7 +98,9 @@
+
+ if($startsize < $pos) {
+ # Log rotated
+- parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ if (-f $rotlogfile) {
++ parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ }
+ $pos = 0;
+ }
+
+diff -urN munin-2.0.17/plugins/node.d/cupsys_pages.in munin-2.0.17-plugins/plugins/node.d/cupsys_pages.in
+--- munin-2.0.17/plugins/node.d/cupsys_pages.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/cupsys_pages.in 2013-08-17 13:18:51.817585940 +0200
+@@ -100,7 +100,9 @@
+ }
+ if ($startsize < $pos) {
+ # Log rotated
+- parselogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ if (-f $rotlogfile) {
++ parselogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ }
+ $pos = 0;
+ }
+
+@@ -146,7 +148,7 @@
+ while (tell(LOGFILE) < $stop) {
+ my $line = <LOGFILE>;
+ chomp ($line);
+- if ($line =~ /^(\S+)\s+\S+\s+\d+\s+\[[^\]]+\]\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)/) {
++ if ($line =~ /^(\S+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+(\d+)\s+(\d+)\s+(.+)$/) {
+ if(!defined($printers{$1}) && keys(%printers) < $MAXLABEL) {
+ $printers{$1} += int($2)*int($3);
+ } elsif(defined($printers{$1})) {
+diff -urN munin-2.0.17/plugins/node.d/foldingathome_rank.in munin-2.0.17-plugins/plugins/node.d/foldingathome_rank.in
+--- munin-2.0.17/plugins/node.d/foldingathome_rank.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/foldingathome_rank.in 2013-08-17 13:18:51.820919315 +0200
+@@ -13,7 +13,7 @@
+ #%# family=contrib
+ #%# capabilities=autoconf
+
+-statefile=$MUNIN_PLUGSTATE/plugin-fah_rank.state
++statefile=@@PLUGSTATE@@/plugin-fah_rank.state
+
+ if [ "$1" = "autoconf" ]; then
+ # No real check of anything
+diff -urN munin-2.0.17/plugins/node.d/mailman.in munin-2.0.17-plugins/plugins/node.d/mailman.in
+--- munin-2.0.17/plugins/node.d/mailman.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/mailman.in 2013-08-17 13:18:51.817585940 +0200
+@@ -38,7 +38,13 @@
+ # System paths
+ $logfile = $ENV{'logfile'} || "/var/log/mailman/post";
+ $libdir = $ENV{'libdir'} || "/var/lib/mailman";
+-$lister = $ENV{'lister'} || "/usr/lib/mailman/bin/list_members";
++$lister = $ENV{'lister'} || {
++ if (-f "/usr/lib64/mailman/bin/list_members") {
++ $lister = "/usr/lib64/mailman/bin/list_members";
++ } else {
++ $lister = "/usr/lib/mailman/bin/list_members";
++ }
++}
+
+ if (-f "$logfile.0")
+ {
+@@ -94,7 +100,9 @@
+ $startsize = 0;
+ } elsif($startsize < $pos) {
+ # Log rotated
+- parseMailmanLog($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ if (-f $rotlogfile) {
++ parseMailmanLog($rotlogfile, $pos, (stat $rotlogfile)[7]);
++ }
+ $pos = 0;
+ }
+
+diff -urN munin-2.0.17/plugins/node.d/mysql_.in munin-2.0.17-plugins/plugins/node.d/mysql_.in
+--- munin-2.0.17/plugins/node.d/mysql_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/mysql_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -39,6 +39,7 @@
+ env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
+ env.mysqluser root
+ env.mysqlpassword geheim
++ env.mysqlnosuperpriv 1
+ env.cachenamespace munin_mysql_pri
+ [mysql2_*]
+ env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=13306
+@@ -156,6 +157,7 @@
+ 'user' => $ENV{'mysqluser'} || 'root',
+ 'password' => $ENV{'mysqlpassword'} || '',
+ 'cache_namespace' => $ENV{'cachenamespace'} || 'munin_mysql',
++ 'nosuper' => $ENV{'mysqlnosuperpriv'} || 0,
+ );
+
+
+@@ -927,8 +929,10 @@
+
+ update_variables($dbh);
+ update_innodb($dbh);
+- update_master($dbh);
+- update_slave($dbh);
++ if (!$config{nosuper}) {
++ update_master($dbh);
++ update_slave($dbh);
++ }
+
+ $shared_memory_cache->set('data', $data);
+ }
+diff -urN munin-2.0.17/plugins/node.d/mysql_innodb.in munin-2.0.17-plugins/plugins/node.d/mysql_innodb.in
+--- munin-2.0.17/plugins/node.d/mysql_innodb.in 2013-08-17 13:19:03.501062149 +0200
++++ munin-2.0.17-plugins/plugins/node.d/mysql_innodb.in 2013-08-17 13:18:51.994254767 +0200
+@@ -1,4 +1,4 @@
+-#!@@GOODSH@@
++#!@@BASH@@
+
+ : << =cut
+
+diff -urN munin-2.0.17/plugins/node.d/mysql_slowqueries.in munin-2.0.17-plugins/plugins/node.d/mysql_slowqueries.in
+--- munin-2.0.17/plugins/node.d/mysql_slowqueries.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/mysql_slowqueries.in 2013-08-17 13:18:51.817585940 +0200
+@@ -64,5 +64,5 @@
+ exit 0
+ fi
+
+-/usr/bin/printf "queries.value "
++/bin/printf "queries.value "
+ ($MYSQLADMIN $MYSQLOPTS status 2>/dev/null || echo a a a a a a a a U) | awk '{print $9}'
+diff -urN munin-2.0.17/plugins/node.d/mysql_threads.in munin-2.0.17-plugins/plugins/node.d/mysql_threads.in
+--- munin-2.0.17/plugins/node.d/mysql_threads.in 2013-08-17 13:19:03.501062149 +0200
++++ munin-2.0.17-plugins/plugins/node.d/mysql_threads.in 2013-08-17 13:18:51.994254767 +0200
+@@ -74,5 +74,5 @@
+ exit 0
+ fi
+
+-/usr/bin/printf "threads.value "
++/bin/printf "threads.value "
+ ($MYSQLADMIN $MYSQLOPTS status 2>/dev/null || echo 'a a a U') | awk '{print $4}'
+diff -urN munin-2.0.17/plugins/node.d/ntp_.in munin-2.0.17-plugins/plugins/node.d/ntp_.in
+--- munin-2.0.17/plugins/node.d/ntp_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/ntp_.in 2013-08-17 13:18:51.817585940 +0200
+@@ -57,26 +57,26 @@
+ use Net::IP;
+
+ if ($ARGV[0] and $ARGV[0] eq "autoconf") {
+- `ntpq -c help >/dev/null 2>/dev/null`;
++ `/usr/sbin/ntpq -c help >/dev/null 2>/dev/null`;
+ if ($CHILD_ERROR eq "0") {
+- if (`ntpq -n -c peers | wc -l` > 0) {
++ if (`/usr/sbin/ntpq -n -c peers | wc -l` > 0) {
+ print "yes\n";
+ exit 0;
+ } else {
+- print "no (ntpq -p returned no peers)\n";
++ print "no (/usr/sbin/ntpq -p returned no peers)\n";
+ exit 0;
+ }
+ } else {
+- print "no (ntpq not found)\n";
++ print "no (/usr/sbin/ntpq not found)\n";
+ exit 0;
+ }
+ }
+
+ if ($ARGV[0] and $ARGV[0] eq "suggest") {
+- foreach my $line (`ntpq -c associations`) {
++ foreach my $line (`/usr/sbin/ntpq -c associations`) {
+ if ($line =~ m/^\s*\d+/) {
+ my (undef, undef, $assid, undef, undef, undef, undef, undef, undef, undef) = split(/\s+/, $line);
+- chomp(my $peerinfo = `ntpq -n -c "readvar $assid srcadr"`);
++ chomp(my $peerinfo = `/usr/sbin/ntpq -n -c "readvar $assid srcadr"`);
+ $peerinfo =~ s/\R/ /g;
+ my ($peer_addr) = ($peerinfo =~ m/srcadr=(.*)/);
+ print $peer_addr, "\n" unless $peer_addr eq "0.0.0.0";
+@@ -108,7 +108,7 @@
+ my $delay;
+ my $offset;
+ my $jitter;
+-my @associations = `ntpq -c associations`;
++my @associations = `/usr/sbin/ntpq -c associations`;
+
+ foreach my $line (@associations) {
+ if ($line =~ m/^\s*\d+/) {
+diff -urN munin-2.0.17/plugins/node.d/ntp_kernel_err.in munin-2.0.17-plugins/plugins/node.d/ntp_kernel_err.in
+--- munin-2.0.17/plugins/node.d/ntp_kernel_err.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/ntp_kernel_err.in 2013-08-17 13:18:51.820919315 +0200
+@@ -32,7 +32,7 @@
+ export PATH=/usr/local/sbin:$PATH
+
+ if [ "$1" = "autoconf" ]; then
+- { ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null |
++ { /usr/sbin/ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null |
+ awk 'BEGIN { ev=1; }
+ /^estimated error:/ { ev=0; }
+ END { if (ev == 0) { print "yes";} else { print "no"; } exit ev; }'
+@@ -51,11 +51,11 @@
+
+ printf 'ntp_err.value '
+
+-if [ $(ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]' | tr -d '.') -ge 427 ]
++if [ $(/usr/sbin/ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]' | tr -d '.') -ge 427 ]
+ then
+- cmd=ntpq
++ cmd=/usr/sbin/ntpq
+ else
+- cmd=ntpdc
++ cmd=/usr/sbin/ntpdc
+ fi
+
+ $cmd -c kerninfo | awk '/^estimated error:/ { print $3 }'
+diff -urN munin-2.0.17/plugins/node.d/ntp_kernel_pll_freq.in munin-2.0.17-plugins/plugins/node.d/ntp_kernel_pll_freq.in
+--- munin-2.0.17/plugins/node.d/ntp_kernel_pll_freq.in 2013-08-17 13:19:03.501062149 +0200
++++ munin-2.0.17-plugins/plugins/node.d/ntp_kernel_pll_freq.in 2013-08-17 13:18:51.994254767 +0200
+@@ -39,7 +39,7 @@
+ export PATH=/usr/local/sbin:$PATH
+
+ if [ "$1" = "autoconf" ]; then
+- { ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null |
++ { /usr/sbin/ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null |
+ awk 'BEGIN { ev=1; }
+ /^pll frequency:/ { ev=0; }
+ END { if (ev == 0) { print "yes";} else { print "no"; } exit ev; }'
+@@ -65,11 +65,11 @@
+
+ printf 'ntp_pll_freq.value '
+
+-if [ $(ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]' | tr -d '.') -ge 427 ]
++if [ $(/usr/sbin/ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]' | tr -d '.') -ge 427 ]
+ then
+- cmd=ntpq
++ cmd=/usr/sbin/ntpq
+ else
+- cmd=ntpdc
++ cmd=/usr/sbin/ntpdc
+ fi
+
+ $cmd -c kerninfo | awk -v fcomp=$fcomp '/^pll frequency:/ { print $3 + fcomp }'
+diff -urN munin-2.0.17/plugins/node.d/ntp_kernel_pll_off.in munin-2.0.17-plugins/plugins/node.d/ntp_kernel_pll_off.in
+--- munin-2.0.17/plugins/node.d/ntp_kernel_pll_off.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/ntp_kernel_pll_off.in 2013-08-17 13:18:51.820919315 +0200
+@@ -32,7 +32,7 @@
+ export PATH=/usr/local/sbin:$PATH
+
+ if [ "$1" = "autoconf" ]; then
+- { ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null |
++ { /usr/sbin/ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null |
+ awk 'BEGIN { ev=1; }
+ /^pll offset:/ { ev=0; }
+ END { if (ev == 0) { print "yes";} else { print "no"; } exit ev; }'
+@@ -51,11 +51,11 @@
+
+ printf 'ntp_pll_off.value '
+
+-if [ $(ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]' | tr -d '.') -ge 427 ]
++if [ $(/usr/sbin/ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]' | tr -d '.') -ge 427 ]
+ then
+- cmd=ntpq
++ cmd=/usr/sbin/ntpq
+ else
+- cmd=ntpdc
++ cmd=/usr/sbin/ntpdc
+ fi
+
+ $cmd -c kerninfo | awk '/^pll offset:/ { print $3 }'
+diff -urN munin-2.0.17/plugins/node.d/ntp_offset.in munin-2.0.17-plugins/plugins/node.d/ntp_offset.in
+--- munin-2.0.17/plugins/node.d/ntp_offset.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/ntp_offset.in 2013-08-17 13:18:51.820919315 +0200
+@@ -38,9 +38,9 @@
+ =cut
+
+ do_autoconf () {
+- ntpq -c help >/dev/null 2>&1 || { echo 'no (no ntpq program)'; exit 0; }
++ /usr/sbin/ntpq -c help >/dev/null 2>&1 || { echo 'no (no ntpq program)'; exit 0; }
+
+- case "$(ntpq -n -p 2>/dev/null | wc -l)" in
++ case "$(/usr/sbin/ntpq -n -p 2>/dev/null | wc -l)" in
+ 0)
+ echo 'no (unable to list peers)'
+ exit 0
+@@ -57,7 +57,7 @@
+ }
+
+ do_config () {
+- syspeer="$(ntpq -n -p | grep '^[*o]')"
++ syspeer="$(/usr/sbin/ntpq -n -p | grep '^[*o]')"
+
+ set - $syspeer
+
+@@ -86,7 +86,7 @@
+
+ do_ () {
+ # Fetch operation
+- syspeer="$(ntpq -n -p | grep '^[*o]')"
++ syspeer="$(/usr/sbin/ntpq -n -p | grep '^[*o]')"
+
+ set - $syspeer
+
+diff -urN munin-2.0.17/plugins/node.d/ntp_states.in munin-2.0.17-plugins/plugins/node.d/ntp_states.in
+--- munin-2.0.17/plugins/node.d/ntp_states.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/ntp_states.in 2013-08-17 13:18:51.820919315 +0200
+@@ -72,10 +72,10 @@
+ # 1 63933 931a yes yes none outlyer sys_peer 1
+ # 2 63934 943a yes yes none candidate sys_peer 3
+
+- foreach my $line (`ntpq -c associations`) {
++ foreach my $line (`/usr/sbin/ntpq -c associations`) {
+ if ($line =~ m/^\s*\d+/) {
+ my (undef, undef, $assid, undef, undef, undef, undef, $condition_str, undef, undef) = split(/\s+/, $line);
+- chomp(my $peerinfo = `ntpq -n -c "readvar $assid srcadr"`);
++ chomp(my $peerinfo = `/usr/sbin/ntpq -n -c "readvar $assid srcadr"`);
+ $peerinfo =~ s/\s//g;
+ my ($peer_addr) = ($peerinfo =~ m/srcadr=(.*)/);
+
+@@ -125,17 +125,17 @@
+ }
+
+ if ($ARGV[0] and $ARGV[0] eq "autoconf") {
+- `ntpq -c help >/dev/null 2>/dev/null`;
++ `/usr/sbin/ntpq -c help >/dev/null 2>/dev/null`;
+ if ($CHILD_ERROR eq "0") {
+- if (`ntpq -n -c peers | wc -l` > 0) {
++ if (`/usr/sbin/ntpq -n -c peers | wc -l` > 0) {
+ print "yes\n";
+ exit 0;
+ } else {
+- print "no (ntpq -p returned no peers)\n";
++ print "no (/usr/sbin/ntpq -p returned no peers)\n";
+ exit 0;
+ }
+ } else {
+- print "no (ntpq not found)\n";
++ print "no (/usr/sbin/ntpq not found)\n";
+ exit 0;
+ }
+ }
+diff -urN munin-2.0.17/plugins/node.d/nut_misc.in munin-2.0.17-plugins/plugins/node.d/nut_misc.in
+--- munin-2.0.17/plugins/node.d/nut_misc.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/nut_misc.in 2013-08-17 13:18:51.820919315 +0200
+@@ -38,7 +38,8 @@
+ my %status;
+
+ my %config = (
+- upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha@127.0.0.1',
++ upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha',
++ upshost => $ENV{"upshost"} ? $ENV{"upshost"} : '127.0.0.1',
+ upsc => $ENV{"upsc"} ? $ENV{"upsc"} : 'upsc'
+ );
+
+@@ -48,11 +49,6 @@
+ type => 'GAUGE',
+ draw => 'LINE2'
+ },
+- 'battery_voltage' => {
+- label => 'batt voltage - V',
+- type => 'GAUGE',
+- draw => 'LINE2'
+- },
+ 'battery_runtime' => {
+ label => 'runtime - min',
+ type => 'GAUGE',
+@@ -76,7 +72,12 @@
+ );
+
+ if ( defined $ARGV[0] and $ARGV[0] eq 'config' ) {
+- print "graph_title UPS Misc - $config{upsname}\n";
++ my $s = $config{upsname};
++ $s =~ s/_/ /g;
++ if ($config{upshost} ne "127.0.0.1" && $config{upshost} ne "localhost") {
++ $s .= " at $config{upshost}";
++ }
++ print "graph_title UPS Misc - $s\n";
+ #print "graph_args -l 110\n";
+ #print "graph_vlabel Misc\n";
+ foreach my $key (keys %graph) {
+@@ -89,7 +90,7 @@
+ }
+
+ sub fetch_values {
+- my $data = `$config{upsc} $config{upsname}`;
++ my $data = `$config{upsc} $config{upsname}\@$config{upshost}`;
+ while ($data =~ /([a-z.]+): (.+)\b/g) {
+ my $label = $1;
+ my $value = $2;
+diff -urN munin-2.0.17/plugins/node.d/nut_volts.in munin-2.0.17-plugins/plugins/node.d/nut_volts.in
+--- munin-2.0.17/plugins/node.d/nut_volts.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/nut_volts.in 2013-08-17 13:18:51.820919315 +0200
+@@ -14,7 +14,8 @@
+ my %status;
+
+ my %config = (
+- upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha@127.0.0.1',
++ upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha',
++ upshost => $ENV{"upshost"} ? $ENV{"upshost"} : '127.0.0.1',
+ upsc => $ENV{"upsc"} ? $ENV{"upsc"} : 'upsc'
+ );
+
+@@ -24,16 +25,6 @@
+ type => 'GAUGE',
+ draw => 'LINE2'
+ },
+- 'input_voltage_maximum' => {
+- label => 'max input seen',
+- type => 'GAUGE',
+- draw => 'LINE1'
+- },
+- 'input_voltage_minimum' => {
+- label => 'min input seen',
+- type => 'GAUGE',
+- draw => 'LINE1'
+- },
+ 'output_voltage' => {
+ label => 'output',
+ type => 'GAUGE',
+@@ -42,7 +33,12 @@
+ );
+
+ if ( defined $ARGV[0] and $ARGV[0] eq 'config' ) {
+- print "graph_title UPS Voltages - $config{upsname}\n";
++ my $s = $config{upsname};
++ $s =~ s/_/ /g;
++ if ($config{upshost} ne "127.0.0.1" && $config{upshost} ne "localhost") {
++ $s .= " at $config{upshost}";
++ }
++ print "graph_title UPS Voltages - $s\n";
+ print "graph_args -l 115\n";
+ print "graph_vlabel Volts\n";
+ foreach my $key (keys %graph) {
+@@ -55,7 +51,7 @@
+ }
+
+ sub fetch_values {
+- my $data = `$config{upsc} $config{upsname}`;
++ my $data = `$config{upsc} $config{upsname}\@$config{upshost}`;
+ while ($data =~ /([a-z.]+): (.+)\b/g) {
+ my $label = $1;
+ my $value = $2;
+diff -urN munin-2.0.17/plugins/node.d/perdition.in munin-2.0.17-plugins/plugins/node.d/perdition.in
+--- munin-2.0.17/plugins/node.d/perdition.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/perdition.in 2013-08-17 13:18:51.820919315 +0200
+@@ -56,7 +56,7 @@
+ # Set the location of the perdition logs
+ PERDITION_LOG=${logfile:-/var/log/perdition.log}
+ OFFSET_FILE=${MUNIN_PLUGSTATE}/perdition.offset
+-LOGTAIL=${logtail:-/usr/sbin/logtail}
++LOGTAIL=${logtail:-`which logtail`}
+
+ case $1 in
+ autoconf|detect)
+diff -urN munin-2.0.17/plugins/node.d/pop_stats.in munin-2.0.17-plugins/plugins/node.d/pop_stats.in
+--- munin-2.0.17/plugins/node.d/pop_stats.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/pop_stats.in 2013-08-17 13:18:51.820919315 +0200
+@@ -68,7 +68,9 @@
+ if ($startsize < $pos)
+ {
+ # Log rotated
+- parseEximfile ($pop{'rotlogfile'}, $pos, (stat $pop{'rotlogfile'})[7]);
++ if (-f $pop{'rotlogfile'}) {
++ parseEximfile ($pop{'rotlogfile'}, $pos, (stat $pop{'rotlogfile'})[7]);
++ }
+ $pos = 0;
+ }
+
+diff -urN munin-2.0.17/plugins/node.d/postgres_scans_.in munin-2.0.17-plugins/plugins/node.d/postgres_scans_.in
+--- munin-2.0.17/plugins/node.d/postgres_scans_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/postgres_scans_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -65,7 +65,6 @@
+ vlabel => 'Scans / sec',
+ basequery =>
+ "SELECT COALESCE(sum(seq_scan),0) AS sequential, COALESCE(sum(idx_scan),0) AS index FROM pg_stat_user_tables",
+- paramdatabase => 1,
+ pivotquery => 1,
+ configquery =>
+ "VALUES ('sequential','Sequential scans'), ('index','Index scans')",
+diff -urN munin-2.0.17/plugins/node.d/postgres_tuples_.in munin-2.0.17-plugins/plugins/node.d/postgres_tuples_.in
+--- munin-2.0.17/plugins/node.d/postgres_tuples_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/postgres_tuples_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -74,7 +74,6 @@
+ . " COALESCE(sum(n_tup_del),0) AS deleted FROM pg_stat_user_tables",
+ ],
+ ],
+- paramdatabase => 1,
+ pivotquery => 1,
+ configquery => [
+ "VALUES ('seqread','Tuples sequentally read'), ('idxfetch','Tuples index fetched'), ('inserted','Tuples inserted'),"
+diff -urN munin-2.0.17/plugins/node.d/slapd_.in munin-2.0.17-plugins/plugins/node.d/slapd_.in
+--- munin-2.0.17/plugins/node.d/slapd_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d/slapd_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -37,7 +37,7 @@
+
+ # Change these to reflect your LDAP ACL. The given DN must have
+ # read access to the Monitor branch.
+-my $basedn = "cn=Monitor";
++my $basedn = ($ENV{'basedn'} || "cn=Monitor");
+ my $server = ($ENV{'server'} || 'localhost');
+ my $userdn = ($ENV{'binddn'} || '');
+ my $userpw = ($ENV{'bindpw'} || '');
+diff -urN munin-2.0.17/plugins/node.d.linux/files_.in munin-2.0.17-plugins/plugins/node.d.linux/files_.in
+--- munin-2.0.17/plugins/node.d.linux/files_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/files_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -14,7 +14,7 @@
+ #%# capabilities=autoconf
+
+ PROC=${0##*/files_}
+-TMPFILE="$MUNIN_PLUGSTATE/munin-files_${PROC}.state"
++TMPFILE="@@PLUGSTATE@@/munin-files_${PROC}.state"
+
+ if [ "$1" = "autoconf" ]; then
+ if [ -x /usr/sbin/lsof ]; then
+diff -urN munin-2.0.17/plugins/node.d.linux/iostat.in munin-2.0.17-plugins/plugins/node.d.linux/iostat.in
+--- munin-2.0.17/plugins/node.d.linux/iostat.in 2013-08-17 13:19:03.504395523 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/iostat.in 2013-08-17 13:18:51.994254767 +0200
+@@ -173,7 +173,7 @@
+ if ($tmpnam =~ /\d+$/ and !$include_numbered) {
+ # Special case for devices like cXdXpX,
+ # like the cciss driver
+- next unless $tmpnam =~ /\/c\d+d\d+$/
++ next unless $tmpnam =~ /\/.*d\d+$/
+ }
+ next unless grep { $_ } @fields;
+
+diff -urN munin-2.0.17/plugins/node.d.linux/ip_.in munin-2.0.17-plugins/plugins/node.d.linux/ip_.in
+--- munin-2.0.17/plugins/node.d.linux/ip_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/ip_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -127,14 +127,18 @@
+ # This is a fun hack to make the plugin ip6 compatible.
+ # Suggested in ticket #439 by "jodal".
+ eval 'iptables() {
+- ip6tables "$@"
++ /usr/sbin/ip6tables "$@"
++ }'
++ ;;
++ *) eval 'iptables() {
++ /usr/sbin/iptables "$@"
+ }'
+ ;;
+ esac
+
+ if [[ "$1" == "autoconf" ]]; then
+ if [[ -r /proc/net/dev ]]; then
+- if ! iptables -L ${INPUT} -v -n -x >/dev/null 2>/dev/null; then
++ if ! /usr/sbin/iptables -L ${INPUT} -v -n -x >/dev/null 2>/dev/null; then
+ echo "no (could not run iptables as user $(whoami))"
+ exit 0
+ else
+@@ -147,10 +151,10 @@
+ fi
+ fi
+
+-if [[ "$1" == "suggest" ]]; then
+- iptables -L ${INPUT} -v -n -x 2>/dev/null | awk --posix '$8 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ { if (done[$8]!=1) {print $8; done[$8]=1;}}'
+- if [[ -x /sbin/ip6tables ]]; then
+- ip6tables -L ${INPUT} -v -n -x 2>/dev/null | awk --posix '$7 ~ /\/128$/ { if (done[$7]!=1) {a=$7;gsub(/\/128$/, "", a); print a; done[$7]=1;}}'
++if [ "$1" = "suggest" ]; then
++ /usr/sbin/iptables -L ${INPUT} -v -n -x 2>/dev/null | awk --posix '$8 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ { if (done[$8]!=1) {print $8; done[$8]=1;}}'
++ if [[ -x /usr/sbin/ip6tables ]]; then
++ /usr/sbin/ip6tables -L ${INPUT} -v -n -x 2>/dev/null | awk --posix '$7 ~ /\/128$/ { if (done[$7]!=1) {a=$7;gsub(/\/128$/, "", a); print a; done[$7]=1;}}'
+ fi
+ exit 0
+ fi
+@@ -183,5 +187,5 @@
+
+ # Escape .'s so they don't match _everything_?
+ IP=$(echo $IP | sed 's~\.~\\.~g')
+-iptables -L ${INPUT} -v -n -x | awk "/$IP"'[ /]/ { print "in.value " $2; exit 0; }'
+-iptables -L ${OUTPUT} -v -n -x | awk "/$IP"'[ /]/ { print "out.value " $2; exit 0; }'
++/usr/sbin/iptables -L ${INPUT} -v -n -x | awk "/$IP"'[ \/]/ { print "in.value " $2; exit 0; }'
++/usr/sbin/iptables -L ${OUTPUT} -v -n -x | awk "/$IP"'[ \/]/ { print "out.value " $2; exit 0; }'
+diff -urN munin-2.0.17/plugins/node.d.linux/load.in munin-2.0.17-plugins/plugins/node.d.linux/load.in
+--- munin-2.0.17/plugins/node.d.linux/load.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/load.in 2013-08-17 13:18:51.820919315 +0200
+@@ -59,20 +59,20 @@
+ # one machine answer for several)
+
+ # The title of the graph
+- echo 'graph_title Load average'
++ echo "graph_title Load average"
+ # Arguments to "rrdtool graph". In this case, tell it that the
+ # lower limit of the graph is '0', and that 1k=1000 (not 1024)
+- echo 'graph_args --base 1000 -l 0'
++ echo "graph_args --base 1000 -l 0"
+ # The Y-axis label
+- echo 'graph_vlabel load'
++ echo "graph_vlabel load"
+ # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of
+ # 420 milliload)
+- echo 'graph_scale no'
++ echo "graph_scale no"
+ # Graph category. Defaults to 'other'
+- echo 'graph_category system'
++ echo "graph_category system"
+ # The fields. "label" is used in the legend. "label" is the only
+ # required subfield.
+- echo 'load.label load'
++ echo "load.label load"
+ # These two read the environment for warning values for the field
+ # "load". If "load_warning" or "warning" aren't set in the
+ # environment, no warning levels are set. Likewise for "load_critical"
+@@ -82,8 +82,8 @@
+ # This one is purely to add an explanation to the web page. The first
+ # one is for the graph itself, while the second one is for the field
+ # "load".
+- echo 'graph_info The load average of the machine describes how many processes are in the run-queue (scheduled to run "immediately").'
+- echo 'load.info 5 minute load average'
++ echo "graph_info The load average of the machine describes how many processes are in the run-queue (scheduled to run \"immediately\")."
++ echo "load.info 5 minute load average"
+
+ # Last, if run with the "config"-parameter, quit here (don't
+ # display any data)
+diff -urN munin-2.0.17/plugins/node.d.linux/nfs_client.in munin-2.0.17-plugins/plugins/node.d.linux/nfs_client.in
+--- munin-2.0.17/plugins/node.d.linux/nfs_client.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/nfs_client.in 2013-08-17 13:18:51.820919315 +0200
+@@ -31,7 +31,7 @@
+ proc="getattr setattr lookup access readlink read write create mkdir symlink mknod remove rmdir rename link readdir readdirplus fsstat fsinfo pathconf commit"
+
+ if [ "$1" = "autoconf" ]; then
+- if [ -f "$NFS" ]; then
++ if [ -r "$NFS" ]; then
+ echo yes
+ exit 0
+ else
+@@ -51,11 +51,66 @@
+ exit 0
+ fi
+
+-awk '/proc3/ {
+- split("'"$proc"'", names)
+- split($0,values)
+- for (e in names) {
+- printf("%s.value %d\n", names[++i], values[i+3]);
+- }
++awk '/proc2/ {
++ nfs_getattr+=$4
++ nfs_setattr+=$5
++ nfs_lookup+=$6
++ nfs_readlink+=$7
++ nfs_read+=$8
++ nfs_write+=$9
++ nfs_create+=$10
++ nfs_mkdir+=$11
++ nfs_symlink+=$12
++ nfs_remove+=$13
++ nfs_rmdir+=$14
++ nfs_rename+=$15
++ nfs_link+=$16
++ nfs_readdir+=$17
++ nfs_fsstat+=$18
++}
++/proc[34]/ {
++ nfs_getattr+=$4
++ nfs_setattr+=$5
++ nfs_lookup+=$6
++ nfs_access+=$7
++ nfs_readlink+=$8
++ nfs_read+=$9
++ nfs_write+=$10
++ nfs_create+=$11
++ nfs_mkdir+=$12
++ nfs_symlink+=$13
++ nfs_mknod+=$14
++ nfs_remove+=$15
++ nfs_rmdir+=$16
++ nfs_rename+=$17
++ nfs_link+=$18
++ nfs_readdir+=$19
++ nfs_readdirplus+=$20
++ nfs_fsstat+=$21
++ nfs_fsinfo+=$22
++ nfs_pathconf+=$23
++ nfs_commit+=$24
++}
++END {
++ print "getattr.value " nfs_getattr
++ print "setattr.value " nfs_setattr
++ print "lookup.value " nfs_lookup
++ print "access.value " nfs_access
++ print "readlink.value " nfs_readlink
++ print "read.value " nfs_read
++ print "write.value " nfs_write
++ print "create.value " nfs_create
++ print "mkdir.value " nfs_mkdir
++ print "symlink.value " nfs_symlink
++ print "mknod.value " nfs_mknod
++ print "remove.value " nfs_remove
++ print "rmdir.value " nfs_rmdir
++ print "rename.value " nfs_rename
++ print "link.value " nfs_link
++ print "readdir.value " nfs_readdir
++ print "readdirplus.value " nfs_readdirplus
++ print "fsstat.value " nfs_fsstat
++ print "fsinfo.value " nfs_fsinfo
++ print "pathconf.value " nfs_pathconf
++ print "commit.value " nfs_commit
+ }' $NFS
+-
+diff -urN munin-2.0.17/plugins/node.d.linux/nfsd.in munin-2.0.17-plugins/plugins/node.d.linux/nfsd.in
+--- munin-2.0.17/plugins/node.d.linux/nfsd.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/nfsd.in 2013-08-17 13:18:51.820919315 +0200
+@@ -31,7 +31,7 @@
+ proc="getattr setattr lookup access readlink read write create mkdir symlink mknod remove rmdir rename link readdir readdirplus fsstat fsinfo pathconf commit"
+
+ if [ "$1" = "autoconf" ]; then
+- if [ -f "$NFSD" ]; then
++ if [ -r "$NFSD" ]; then
+ echo yes
+ exit 0
+ else
+@@ -51,9 +51,66 @@
+ exit 0
+ fi
+
+-awk '/proc3/ {
+- split("'"$proc"'", names)
+- split($0,values)
+- for (e in names)
+- printf("%s.value %d\n", names[++i], values[i+3]);
+- }' $NFSD
++awk '/proc2/ {
++ nfs_getattr+=$4
++ nfs_setattr+=$5
++ nfs_lookup+=$6
++ nfs_readlink+=$7
++ nfs_read+=$8
++ nfs_write+=$9
++ nfs_create+=$10
++ nfs_mkdir+=$11
++ nfs_symlink+=$12
++ nfs_remove+=$13
++ nfs_rmdir+=$14
++ nfs_rename+=$15
++ nfs_link+=$16
++ nfs_readdir+=$17
++ nfs_fsstat+=$18
++}
++/proc[34]/ {
++ nfs_getattr+=$4
++ nfs_setattr+=$5
++ nfs_lookup+=$6
++ nfs_access+=$7
++ nfs_readlink+=$8
++ nfs_read+=$9
++ nfs_write+=$10
++ nfs_create+=$11
++ nfs_mkdir+=$12
++ nfs_symlink+=$13
++ nfs_mknod+=$14
++ nfs_remove+=$15
++ nfs_rmdir+=$16
++ nfs_rename+=$17
++ nfs_link+=$18
++ nfs_readdir+=$19
++ nfs_readdirplus+=$20
++ nfs_fsstat+=$21
++ nfs_fsinfo+=$22
++ nfs_pathconf+=$23
++ nfs_commit+=$24
++}
++END {
++ print "getattr.value " nfs_getattr
++ print "setattr.value " nfs_setattr
++ print "lookup.value " nfs_lookup
++ print "access.value " nfs_access
++ print "readlink.value " nfs_readlink
++ print "read.value " nfs_read
++ print "write.value " nfs_write
++ print "create.value " nfs_create
++ print "mkdir.value " nfs_mkdir
++ print "symlink.value " nfs_symlink
++ print "mknod.value " nfs_mknod
++ print "remove.value " nfs_remove
++ print "rmdir.value " nfs_rmdir
++ print "rename.value " nfs_rename
++ print "link.value " nfs_link
++ print "readdir.value " nfs_readdir
++ print "readdirplus.value " nfs_readdirplus
++ print "fsstat.value " nfs_fsstat
++ print "fsinfo.value " nfs_fsinfo
++ print "pathconf.value " nfs_pathconf
++ print "commit.value " nfs_commit
++}' $NFSD
+diff -urN munin-2.0.17/plugins/node.d.linux/vlan_inetuse_.in munin-2.0.17-plugins/plugins/node.d.linux/vlan_inetuse_.in
+--- munin-2.0.17/plugins/node.d.linux/vlan_inetuse_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/vlan_inetuse_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -37,8 +37,8 @@
+ my %in_octets = ();
+ my %out_octets = ();
+
+-open (IN, "/sbin/iptables -v -x -L $INTERFACE-in |") or
+- die "Could not run iptables: $!\n";
++open (IN, "/usr/sbin/iptables -v -x -L $INTERFACE-in |") or
++ die "Could not run /usr/sbin/iptables: $!\n";
+ while (<IN>)
+ {
+ if (/^\s*\d+\s+(\d+) +([a-z]+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+(?:\s+|)(.+|)$/)
+@@ -49,10 +49,10 @@
+ }
+ }
+ close IN;
+-die "Error running iptables. Dying\n" if $?;
++die "Error running /usr/sbin/iptables. Dying\n" if $?;
+
+-open (IN, "/sbin/iptables -v -x -L $INTERFACE-out |") or
+- die "Could not run iptables: $!\n";
++open (IN, "/usr/sbin/iptables -v -x -L $INTERFACE-out |") or
++ die "Could not run /usr/sbin/iptables: $!\n";
+ while (<IN>)
+ {
+ if (/^\s*\d+\s+(\d+) +([a-z]+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+(?:\s+|)(.+|)$/)
+@@ -67,7 +67,7 @@
+ }
+ }
+ close IN;
+-die "Error running iptables. Dying\n" if $?;
++die "Error running /usr/sbin/iptables. Dying\n" if $?;
+
+ if ($ARGV[0] and $ARGV[0] eq "config")
+ {
+diff -urN munin-2.0.17/plugins/node.d.linux/vlan_linkuse_.in munin-2.0.17-plugins/plugins/node.d.linux/vlan_linkuse_.in
+--- munin-2.0.17/plugins/node.d.linux/vlan_linkuse_.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/vlan_linkuse_.in 2013-08-17 13:18:51.820919315 +0200
+@@ -29,8 +29,8 @@
+ my %in_octets = ();
+ my %out_octets = ();
+
+-open (IN, "/sbin/iptables -v -x -L $INTERFACE-in |") or
+- die "Could not run iptables: $!\n";
++open (IN, "/usr/sbin/iptables -v -x -L $INTERFACE-in |") or
++ die "Could not run /usr/sbin/iptables: $!\n";
+ while (<IN>)
+ {
+ if (/^\s*\d+\s+(\d+) +([a-z]+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+(?:\s+|)(.+|)$/)
+@@ -58,10 +58,10 @@
+ }
+ }
+ close IN;
+-die "Error running iptables. Dying\n" if $?;
++die "Error running /usr/sbin/iptables. Dying\n" if $?;
+
+-open (IN, "/sbin/iptables -v -x -L $INTERFACE-out |") or
+- die "Could not run iptables: $!\n";
++open (IN, "/usr/sbin/iptables -v -x -L $INTERFACE-out |") or
++ die "Could not run /usr/sbin/iptables: $!\n";
+ while (<IN>)
+ {
+ if (/^\s*\d+\s+(\d+) +([a-z]+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+(?:\s+|)(.+|)$/)
+@@ -84,5 +84,5 @@
+ }
+ }
+ close IN;
+-die "Error running iptables. Dying\n" if $?;
++die "Error running /usr/sbin/iptables. Dying\n" if $?;
+ # vim:syntax=perl
+diff -urN munin-2.0.17/plugins/node.d.linux/vserver_resources.in munin-2.0.17-plugins/plugins/node.d.linux/vserver_resources.in
+--- munin-2.0.17/plugins/node.d.linux/vserver_resources.in 2013-07-19 18:30:03.000000000 +0200
++++ munin-2.0.17-plugins/plugins/node.d.linux/vserver_resources.in 2013-08-17 13:18:51.820919315 +0200
+@@ -245,6 +245,12 @@
+ echo 'graph_vlabel ANON pages'
+ echo 'graph_info Shows anonymous memory (human readable) used by each vserver.'
+ ;;
++ RMAP)
++ echo 'graph_title Mapped memory used by vserver'
++ echo 'graph_args --base 1024k -l 0'
++ echo 'graph_vlabel RMAP pages'
++ echo 'graph_info Shows mapped memory (human readable) used by each vserver.'
++ ;;
+ FILES)
+ echo 'graph_title Files used by vserver'
+ echo 'graph_args --base 1024k -l 0'
+@@ -281,6 +287,30 @@
+ echo 'graph_vlabel SHM pages'
+ echo 'graph_info Shows shared memory (human readable) used by each vserver.'
+ ;;
++ SEMA)
++ echo 'graph_title Semaphore arrays used by vserver'
++ echo 'graph_args --base 1024k -l 0'
++ echo 'graph_vlabel Semaphore arrays'
++ echo 'graph_info Shows semaphore arrays used by each vserver.'
++ ;;
++ SEMS)
++ echo 'graph_title Semaphores used by vserver'
++ echo 'graph_args --base 1024k -l 0'
++ echo 'graph_vlabel Semaphores'
++ echo 'graph_info Shows semaphores used by each vserver.'
++ ;;
++ DENT)
++ echo 'graph_title dentry structs used by vserver'
++ echo 'graph_args --base 1024k -l 0'
++ echo 'graph_vlabel dentry structs'
++ echo 'graph_info Shows dentry structs used by each vserver.'
++ ;;
++ ALL)
++ echo 'graph_title Resources used by vserver'
++ echo 'graph_args --base 1024k -l 0'
++ echo 'graph_vlabel Resources'
++ echo 'graph_info Shows rsources used by each vserver.'
++ ;;
+ *)
+ echo "$RESOURCE not defined."
+ exit 1
+@@ -299,53 +329,108 @@
+
+ case "$RESOURCE" in
+ PROC)
+- echo "$NAME.label $LABEL: processes"
+- echo "$NAME.info Number of processes used by $LABEL."
++ echo "${NAME}_PROC.label $LABEL: processes"
++ echo "${NAME}_PROC.info Number of processes used by $LABEL."
+ ;;
+ VM)
+- echo "$NAME.label $LABEL: Virtual memory"
+- echo "$NAME.info Size of virtual memory used by $LABEL. (Number multipled by $pagesize to make it human readable)"
+- echo "$NAME.cdef $NAME,$pagesize,*"
++ echo "${NAME}_VM.label $LABEL: Virtual memory"
++ echo "${NAME}_VM.info Size of virtual memory used by $LABEL. (Number multipled by $pagesize to make it human readable)"
++ echo "${NAME}_VM.cdef ${NAME}_VM,$pagesize,*"
+ ;;
+ VML)
+- echo "$NAME.label $LABEL: Locked memory"
+- echo "$NAME.info Size of locked memory used by $LABEL. (Number multipled by $pagesize to make it human readable)"
+- echo "$NAME.cdef $NAME,$pagesize,*"
++ echo "${NAME}_VML.label $LABEL: Locked memory"
++ echo "${NAME}_VML.info Size of locked memory used by $LABEL. (Number multipled by $pagesize to make it human readable)"
++ echo "${NAME}_VML.cdef ${NAME}_VML,$pagesize,*"
+ ;;
+ RSS)
+- echo "$NAME.label $LABEL: Resident set size"
+- echo "$NAME.info Size of resident set size used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
+- echo "$NAME.cdef $NAME,$pagesize,*"
++ echo "${NAME}_RSS.label $LABEL: Resident set size"
++ echo "${NAME}_RSS.info Size of resident set size used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_RSS.cdef ${NAME}_RSS,$pagesize,*"
+ ;;
+ ANON)
+- echo "$NAME.label $LABEL: Anonymous memory"
+- echo "$NAME.info Size of anonymous memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
+- echo "$NAME.cdef $NAME,$pagesize,*"
++ echo "${NAME}_ANON.label $LABEL: Anonymous memory"
++ echo "${NAME}_ANON.info Size of anonymous memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_ANON.cdef ${NAME}_ANON,$pagesize,*"
++ ;;
++ RMAP)
++ echo "${NAME}_RMAP.label $LABEL: Mapped memory"
++ echo "${NAME}_RMAP.info Size of mapped memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_RMAP.cdef ${NAME}_RMAP,$pagesize,*"
+ ;;
+ FILES)
+- echo "$NAME.label $LABEL: Files"
+- echo "$NAME.info Number of files used by $LABEL."
++ echo "${NAME}_FILES.label $LABEL: Files"
++ echo "${NAME}_FILES.info Number of files used by $LABEL."
+ ;;
+ OFD)
+- echo "$NAME.label $LABEL: Open filedescriptors"
+- echo "$NAME.info Number of open filedescriptors used by $LABEL."
++ echo "${NAME}_OFD.label $LABEL: Open filedescriptors"
++ echo "${NAME}_OFD.info Number of open filedescriptors used by $LABEL."
+ ;;
+ LOCKS)
+- echo "$NAME.label $LABEL: Locks"
+- echo "$NAME.info Number of locks used by $LABEL."
++ echo "${NAME}_LOCKS.label $LABEL: Locks"
++ echo "${NAME}_LOCKS.info Number of locks used by $LABEL."
+ ;;
+ SOCK)
+- echo "$NAME.label $LABEL: Sockets"
+- echo "$NAME.info Number of sockets used by $LABEL."
++ echo "${NAME}_SOCK.label $LABEL: Sockets"
++ echo "${NAME}_SOCK.info Number of sockets used by $LABEL."
+ ;;
+ MSGQ)
+- echo "$NAME.label $LABEL: Message queues"
+- echo "$NAME.info Number of message queues used by $LABEL."
++ echo "${NAME}_MSGQ.label $LABEL: Message queues"
++ echo "${NAME}_MSGQ.info Number of message queues used by $LABEL."
+ ;;
+ SHM)
+- echo "$NAME.label $LABEL: Shared memory"
+- echo "$NAME.info Size of shared memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
+- echo "$NAME.cdef $1,$pagesize,*"
++ echo "${NAME}_SHM.label $LABEL: Shared memory"
++ echo "${NAME}_SHM.info Size of shared memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_SHM.cdef ${NAME}_SHM,$pagesize,*"
++ ;;
++ SEMA)
++ echo "${NAME}_SEMA.label $LABEL: Semaphore arrays"
++ echo "${NAME}_SEMA.info Number of semaphore arrays used by $LABEL."
++ ;;
++ SEMS)
++ echo "${NAME}_SEMS.label $LABEL: Semaphores"
++ echo "${NAME}_SEMS.info Number of semaphores used by $LABEL."
++ ;;
++ DENT)
++ echo "${NAME}_DENT.label $LABEL: dentry structs"
++ echo "${NAME}_DENT.info Number of dentries used by $LABEL."
++ ;;
++ ALL)
++ echo "${NAME}_PROC.label $LABEL: processes"
++ echo "${NAME}_PROC.info Number of processes used by $LABEL."
++ echo "${NAME}_VM.label $LABEL: Virtual memory"
++ echo "${NAME}_VM.info Size of virtual memory used by $LABEL. (Number multipled by $pagesize to make it human readable)"
++ echo "${NAME}_VM.cdef ${NAME}_VM,$pagesize,*"
++ echo "${NAME}_VML.label $LABEL: Locked memory"
++ echo "${NAME}_VML.info Size of locked memory used by $LABEL. (Number multipled by $pagesize to make it human readable)"
++ echo "${NAME}_VML.cdef ${NAME}_VML,$pagesize,*"
++ echo "${NAME}_RSS.label $LABEL: Resident set size"
++ echo "${NAME}_RSS.info Size of resident set size used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_RSS.cdef ${NAME}_RSS,$pagesize,*"
++ echo "${NAME}_ANON.label $LABEL: Anonymous memory"
++ echo "${NAME}_ANON.info Size of anonymous memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_ANON.cdef ${NAME}_ANON,$pagesize,*"
++ echo "${NAME}_RMAP.label $LABEL: Mapped memory"
++ echo "${NAME}_RMAP.info Size of mapped memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_RMAP.cdef ${NAME}_RMAP,$pagesize,*"
++ echo "${NAME}_FILES.label $LABEL: Files"
++ echo "${NAME}_FILES.info Number of files used by $LABEL."
++ echo "${NAME}_OFD.label $LABEL: Open filedescriptors"
++ echo "${NAME}_OFD.info Number of open filedescriptors used by $LABEL."
++ echo "${NAME}_LOCKS.label $LABEL: Locks"
++ echo "${NAME}_LOCKS.info Number of locks used by $LABEL."
++ echo "${NAME}_SOCK.label $LABEL: Sockets"
++ echo "${NAME}_SOCK.info Number of sockets used by $LABEL."
++ echo "${NAME}_MSGQ.label $LABEL: Message queues"
++ echo "${NAME}_MSGQ.info Number of message queues used by $LABEL."
++ echo "${NAME}_SHM.label $LABEL: Shared memory"
++ echo "${NAME}_SHM.info Size of shared memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)"
++ echo "${NAME}_SHM.cdef ${NAME}_SHM,$pagesize,*"
++ echo "${NAME}_SEMA.label $LABEL: Semaphore arrays"
++ echo "${NAME}_SEMA.info Number of semaphore arrays used by $LABEL."
++ echo "${NAME}_SEMS.label $LABEL: Semaphores"
++ echo "${NAME}_SEMS.info Number of semaphores used by $LABEL."
++ echo "${NAME}_DENT.label $LABEL: dentry structs"
++ echo "${NAME}_DENT.info Number of dentries used by $LABEL."
+ ;;
+ *)
+ echo "$RESOURCE not defined."
+@@ -356,7 +441,7 @@
+ if [ ! -z "$LIMITS" -a "$LIMITS" = 1 ]; then
+ LIMIT=`cat /proc/virtual/$xid/limit | grep $RESOURCE | cut -f4`
+ if [ ${LIMIT:-0} -gt 0 ]; then
+- echo "$NAME.critical $LIMIT"
++ echo "${NAME}_${RESOURCE}.critical $LIMIT"
+ fi
+ fi
+ done
+@@ -367,8 +452,15 @@
+ for xid in $XIDS ; do
+ LABEL=`cat /proc/virtual/$xid/$NAMELOC |grep NodeName |cut -f2`
+ NAME=`echo $LABEL | cut -d. -f1 | tr '-' '_'`
+- cat /proc/virtual/$xid/limit | awk -v name="${NAME}" -v resource="${RESOURCE}:" \
+- '{ if ( $1 == resource )
+- printf "%s.value %d\n", name, $2 }'
++ if [ $RESOURCE = "ALL" ]; then
++ cat /proc/virtual/$xid/limit | awk -v name="${NAME}" \
++ '{ if ( $1 ~ /[A-Z]*:/ ) {
++ resource = $1 ; gsub(/:/, "", resource);
++ printf "%s_%s.value %d\n", name, resource, $2
++ }}'
++ else
++ cat /proc/virtual/$xid/limit | awk -v name="${NAME}" -v resource="${RESOURCE}" \
++ '{ if ( $1 ~ resource )
++ printf "%s_%s.value %d\n", name, resource, $2 }'
++ fi
+ done
+-