From 3a4daca137acb06330c0840fe5480eb8db45edb57aa3f79d186644fc3cfe45e8 Mon Sep 17 00:00:00 2001 From: Wolfgang Rosenauer Date: Thu, 4 Jul 2024 07:58:29 +0000 Subject: [PATCH] Accepting request 1183575 from home:etamPL:branches:server:monitoring replace FCGI with CGI::Fast. Currently munin is broken and this fixes it. Before submitting to Factory, perl-CGI-Fast must be submitted as well. OBS-URL: https://build.opensuse.org/request/show/1183575 OBS-URL: https://build.opensuse.org/package/show/server:monitoring/munin?expand=0&rev=94 --- .gitattributes | 23 ++ .gitignore | 1 + Makefile.config | 165 ++++++++ gsa-munin.zip | 3 + munin-2.0.72.tar.gz | 3 + munin-cgi-graph.service | 24 ++ munin-cgi-html.service | 24 ++ munin-cron.service | 21 + munin-cron.timer | 9 + munin-node.logrotate | 9 + munin-node.rc | 94 +++++ munin-node.service | 22 ++ munin-node.tmpfiles | 1 + munin-node.xml | 7 + munin-remove-deprecated-INET6.patch | 150 +++++++ munin.changes | 578 +++++++++++++++++++++++++++ munin.cron.d | 8 + munin.keyring | 585 ++++++++++++++++++++++++++++ munin.logrotate | 14 + munin.spec | 462 ++++++++++++++++++++++ nginx-munin.zip | 3 + perl526.patch | 27 ++ plugins.conf | 55 +++ 23 files changed, 2288 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Makefile.config create mode 100644 gsa-munin.zip create mode 100644 munin-2.0.72.tar.gz create mode 100644 munin-cgi-graph.service create mode 100644 munin-cgi-html.service create mode 100644 munin-cron.service create mode 100644 munin-cron.timer create mode 100644 munin-node.logrotate create mode 100644 munin-node.rc create mode 100644 munin-node.service create mode 100644 munin-node.tmpfiles create mode 100644 munin-node.xml create mode 100644 munin-remove-deprecated-INET6.patch create mode 100644 munin.changes create mode 100644 munin.cron.d create mode 100644 munin.keyring create mode 100644 munin.logrotate create mode 100644 munin.spec create mode 100644 nginx-munin.zip create mode 100644 perl526.patch create mode 100644 plugins.conf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/Makefile.config b/Makefile.config new file mode 100644 index 0000000..9a29348 --- /dev/null +++ b/Makefile.config @@ -0,0 +1,165 @@ +# -*- makefile -*- +# +# This is the Makefile.config file to use for a "clean" distribution. +# +# This file specifies where Munin will look for things after you've +# run 'make' in the source directory. Modify it to suit your needs. + +# DESTDIR is meant only for use when making Munin packages. Unless +# you're doing packaging do NOT set it. +# DESTDIR is empty during building, and optionally set to point to +# a shadow tree during make install. + +# Note: There is a need for a VARDIR, with DBDIR, PLUGSTATE, HTMLDIR +# and LOGDIR as subdirectories. Today, DBDIR contains configured +# domains, as well as PLUGSTATE, and we risk collisions. + +# +# the base of the Munin installation. +# +PREFIX = $(DESTDIR)/usr + +# Where Munin keeps its configurations (server.conf, client.conf, ++) +CONFDIR = $(DESTDIR)/etc/munin + +# Server only - where to put munin-cron +BINDIR = $(PREFIX)/bin + +# Client only - where to put munin-node, munin-node-configure, and munin-run +SBINDIR = $(PREFIX)/sbin + +# Where to put text and html documentation +DOCDIR = $(PREFIX)/doc/packages + +# Where to put man pages +MANDIR = $(PREFIX)/share/man + +# Where to put internal binaries and plugin repository +LIBDIR = $(PREFIX)/lib/munin + +# Server only - Output directory +HTMLDIR = $(DESTDIR)/srv/www/htdocs/munin +CGIDIR = $(DESTDIR)/srv/www/cgi-bin + +# Server only - spool directory for data gathered from nodes by +# munin-gather - experimental. Place on ramdisk to make munin +# scale better. On many versions of Linux as well as on Solaris +# /tmp will be a ramdisk. + +SPOOLDIR = $(DESTDIR)/var/lib/spool/munin + +# Suggested directory name for a pulic ramdisk based tmp directory. +# SSPOOLDIR := /tmp/muninspool + +# Client only - Where to put RRD files and other intenal data +DBDIR = $(DESTDIR)/var/lib/munin + +# Client only - Where plugins should put their states. Must be writable by +# group "munin", and should be preserved between reboots +PLUGSTATE = $(DBDIR)/plugin-state + +# Where Munin should place its logs. +LOGDIR = $(DESTDIR)/var/log/munin + +# Location of PID files and other statefiles. On the server, must be +# writable by the user "munin". +STATEDIR = $(DESTDIR)/var/run/munin + +# The perl interpreter to use +PERL := $(shell which perl) + +# The python interpreter to use (used by some plugins) +PYTHON := /usr/bin/env python + +# The ruby interpreter to use (used by some plugins) +RUBY := /usr/bin/env ruby + +# The java runtime to use (used by some plugins) +JAVARUN := /usr/bin/java + +# The java library dir to use (used by some plugins) +# this is needed in order to be able to install +# java libraries in a custom location. Many distrubutions +# enforce a spesific location for java libraries. +JAVALIBDIR:= $(LIBDIR) + + +# A modern (posix) shell. We're not looking for arrays, but $() and +# other modern stuff is expected. On a posix-system the expression +# below will find the right shell. Most Unixes released the last 10 +# years are POSIX compliant enough for this to work (he said bravely). +# +# On Linux /bin/sh, SunOS/Solaris /usr/xpg4/bin/sh or /bin/ksh +# In general: bash or ksh will work +# +GOODSH := $(shell PATH=`getconf PATH` sh -c 'type sh | sed "s/.* //"') + +# Path of bash for bash specific plugins +BASH := /bin/bash + +# Server only - Where to install the perl libraries +PERLSITELIB := $(shell $(PERL) -V:sitelib | cut -d"'" -f2) +#PERLLIB = $(DESTDIR)$(PERLSITELIB) +PERLLIB = $(DESTDIR)$(shell ( $(PERL) -V:vendorlib | egrep -v "UNKNOWN|=''" || $(PERL) -V:sitelib) | cut -d\' -f 2) + +# Client only - Install plugins for this architecture +OSTYPE := $(shell uname | tr '[A-Z]' '[a-z]') + +# How to figure out the hostname. (Only used in default configuration +# files) +HOSTNAME := $(shell hostname) + +# What is the safest way to create a tempfile. +# Default is to figure it out by testing various methods. +# Replace this with a known platform-specific method +MKTEMP := $(shell ./test-mktemp) + +# Munin version number. +VERSION := $(shell ./getversion) + +# User to run munin as +USER := munin +GROUP := munin + +# Default user to run the plugins as +PLUGINUSER := nobody + +# Which command to use to check if the USER and GROUP to run Munin as, exists. +# These will work on most modern OSes: +# +GETENT := $(shell which getent || which true 2>/dev/null) +CHECKUSER:= true +CHECKGROUP:= true +#CHECKUSER := $(shell $(GETENT) passwd $(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2")) +#CHECKGROUP := $(shell $(GETENT) group $(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2")) + +# For OSX, comment out the previous two lines and comment in these +# +#CHECKUSER := $(shell nicl . -read /users/$(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2")) +#CHECKGROUP := $(shell nicl . -read /groups/$(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2")) + +# For OSX 10.5 (Leopard), use the following two lines instead of what's above +# +#CHECKUSER := $(shell dscl . -read /Users/$(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2")) +#CHECKGROUP := $(shell dscl . -read /Groups/$(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2")) + + +# For HP-UX, use these instead: +# +#CHECKUSER := $(shell pwget -n $(USER) >/dev/null 2>/dev/null || (echo "echo User $(USER) nonexistent. Create the user and retry; exit 2")) +#CHECKGROUP := $(shell grget -n $(GROUP) >/dev/null 2>/dev/null || (echo "echo Group $(GROUP) nonexistent. Create the group and retry; exit 2")) + +CHOWN := echo Not done: chown +CHMOD := echo Not done: chmod +CHGRP := echo Not done: chgrp + +# Java compiler stuff - only needed on the buildhost +JC := javac +JFLAGS := -g -source 1.5 -target 1.5 +JAR := jar + +# Check if the java compiler works +JCVALID := $(shell $(JC) -version >/dev/null 2>/dev/null && echo "yes") + +# Check whether setruid functionality can be used +HASSETR := $(shell perl -e 'use Config; my @vars=("d_setruid", "d_setreuid", "d_setresuid"); foreach my $$var (@vars) { if ($$Config{$$var} eq "define") { print "1\n"; exit 0; } } print "0\n"; exit 0;' ) diff --git a/gsa-munin.zip b/gsa-munin.zip new file mode 100644 index 0000000..cacbe52 --- /dev/null +++ b/gsa-munin.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff0ddbff6ba6f0bfbbafedb1554c6fce62f582be9410c3c438e2ed3394830477 +size 2988 diff --git a/munin-2.0.72.tar.gz b/munin-2.0.72.tar.gz new file mode 100644 index 0000000..d4ef326 --- /dev/null +++ b/munin-2.0.72.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cda0bbd1af142c000e5c1177ffe5b03c4771062e32324fcaf6e94e466fcf2876 +size 2258511 diff --git a/munin-cgi-graph.service b/munin-cgi-graph.service new file mode 100644 index 0000000..0b6c41a --- /dev/null +++ b/munin-cgi-graph.service @@ -0,0 +1,24 @@ +[Unit] +Description=Munin CGI Graph generator +Requires=network.target + +[Service] +# added automatically, for details please see +# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort +ProtectSystem=full +ProtectHome=true +PrivateDevices=true +ProtectHostname=true +ProtectClock=true +ProtectKernelTunables=true +ProtectKernelModules=true +ProtectKernelLogs=true +ProtectControlGroups=true +RestrictRealtime=true +# end of automatic additions +Type=forking +ExecStart=/usr/bin/spawn-fcgi -s /var/run/munin/munin-cgi-graph.sock -P /var/run/munin/munin-cgi-graph.pid -u munin -g munin -M 0770 -U munin -G www /srv/www/cgi-bin/munin-cgi-graph +PIDFile=/var/run/munin/munin-cgi-graph.pid + +[Install] +WantedBy=multi-user.target diff --git a/munin-cgi-html.service b/munin-cgi-html.service new file mode 100644 index 0000000..acc15da --- /dev/null +++ b/munin-cgi-html.service @@ -0,0 +1,24 @@ +[Unit] +Description=Munin CGI HTML generator +Requires=network.target + +[Service] +# added automatically, for details please see +# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort +ProtectSystem=full +ProtectHome=true +PrivateDevices=true +ProtectHostname=true +ProtectClock=true +ProtectKernelTunables=true +ProtectKernelModules=true +ProtectKernelLogs=true +ProtectControlGroups=true +RestrictRealtime=true +# end of automatic additions +Type=forking +ExecStart=/usr/bin/spawn-fcgi -s /var/run/munin/munin-cgi-html.sock -P /var/run/munin/munin-cgi-html.pid -u munin -g munin -M 0770 -U munin -G www /srv/www/cgi-bin/munin-cgi-html +PIDFile=/var/run/munin/munin-cgi-html.pid + +[Install] +WantedBy=multi-user.target diff --git a/munin-cron.service b/munin-cron.service new file mode 100644 index 0000000..bce0bd6 --- /dev/null +++ b/munin-cron.service @@ -0,0 +1,21 @@ +[Unit] +Description=Collect node data +Documentation=man:munin-cron(8) + +[Service] +# added automatically, for details please see +# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort +ProtectSystem=full +ProtectHome=true +PrivateDevices=true +ProtectHostname=true +ProtectClock=true +ProtectKernelTunables=true +ProtectKernelModules=true +ProtectKernelLogs=true +ProtectControlGroups=true +RestrictRealtime=true +# end of automatic additions +Type=oneshot +User=munin +ExecStart=/usr/bin/munin-cron diff --git a/munin-cron.timer b/munin-cron.timer new file mode 100644 index 0000000..3c25dea --- /dev/null +++ b/munin-cron.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Collect data from nodes +Documentation=man:munin-cron(8) man:munin(8) + +[Timer] +OnCalendar=*:0/5 + +[Install] +WantedBy=timers.target diff --git a/munin-node.logrotate b/munin-node.logrotate new file mode 100644 index 0000000..d34abcf --- /dev/null +++ b/munin-node.logrotate @@ -0,0 +1,9 @@ +/var/log/munin/munin-node.log { + daily + missingok + rotate 7 + compress + copytruncate + notifempty + create 640 root root +} diff --git a/munin-node.rc b/munin-node.rc new file mode 100644 index 0000000..3309ac5 --- /dev/null +++ b/munin-node.rc @@ -0,0 +1,94 @@ +#!/bin/sh +# +# munin-node Control the Munin Node Server (formerly Linpro RRD client) +# +# Author: Rune Nordbe Skillingstad +# +### BEGIN INIT INFO +# Provides: munin-node +# Required-Start: $network $remote_fs +# Required-Stop: $null +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Short-Description: Network-wide graphing framework (node) +# Description: Munin Node Agents +### END INIT INFO + +# Source SuSE config +. /etc/rc.status + +MUNIN_BIN=/usr/sbin/munin-node +test -x $MUNIN_BIN || exit 5 + +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v ditto but be verbose in local rc status +# rc_status -v -r ditto and clear the local rc status +# rc_failed set local and overall rc status to failed +# rc_reset clear local rc status (overall remains) +# rc_exit exit appropriate to overall rc status + +# First reset status of this service +rc_reset + +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - misc error +# 2 - invalid or excess args +# 3 - unimplemented feature (e.g. reload) +# 4 - insufficient privilege +# 5 - program not installed +# 6 - program not configured +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signalling is not supported) are +# considered a success. + +# See how we were called. +case "$1" in + start) + echo -n "Starting Munin Node: " + if [ ! -d /var/run/munin ]; then + mkdir -p /var/run/munin 2>/dev/null + chown munin /var/run/munin + fi + + ## Start daemon with startproc(8). If this fails + ## the echo return value is set appropriate. + startproc $MUNIN_BIN + + # Remember status and be verbose + rc_status -v + ;; + stop) + echo -n "Stopping Munin Node agents: " + ## Stop daemon with killproc(8) and if this fails + ## set echo the echo return value. + + killproc -TERM $MUNIN_BIN + + # Remember status and be verbose + rc_status -v + ;; + restart|reload) + ## Stop the service and regardless of whether it was + ## running or not, start it again. + $0 stop + $0 start + + # Remember status and be quiet + rc_status + ;; + status) + echo -n "Checking for Munin Node: " + checkproc $MUNIN_BIN + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|status|restart}" + exit 1 +esac +rc_exit + diff --git a/munin-node.service b/munin-node.service new file mode 100644 index 0000000..69c2b65 --- /dev/null +++ b/munin-node.service @@ -0,0 +1,22 @@ +[Unit] +Description=Munin Node +Requires=network.target + +[Service] +# added automatically, for details please see +# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort +ProtectSystem=full +ProtectHome=true +ProtectHostname=true +ProtectKernelTunables=true +ProtectKernelModules=true +ProtectKernelLogs=true +ProtectControlGroups=true +# end of automatic additions +Type=forking +ExecStart=/usr/sbin/munin-node +ExecStartPre=/usr/bin/mkdir -p /var/run/munin/ +PIDFile=/var/run/munin/munin-node.pid + +[Install] +WantedBy=multi-user.target diff --git a/munin-node.tmpfiles b/munin-node.tmpfiles new file mode 100644 index 0000000..9d5dfe1 --- /dev/null +++ b/munin-node.tmpfiles @@ -0,0 +1 @@ +d /run/munin 0755 munin munin - - diff --git a/munin-node.xml b/munin-node.xml new file mode 100644 index 0000000..8458dd3 --- /dev/null +++ b/munin-node.xml @@ -0,0 +1,7 @@ + + + munin-node + munin-node listens on that port for incoming queries from the munin monitoring instance. + + + diff --git a/munin-remove-deprecated-INET6.patch b/munin-remove-deprecated-INET6.patch new file mode 100644 index 0000000..3d8d8f4 --- /dev/null +++ b/munin-remove-deprecated-INET6.patch @@ -0,0 +1,150 @@ +From 012b33a702155ba7c96fd62028a3559364693c7e Mon Sep 17 00:00:00 2001 +From: Steve Schnepp +Date: Wed, 26 Feb 2020 21:50:47 +0100 +Subject: [PATCH] Use IO::Socket::IP instead of IO::Socket::INET[6] + +--- + Build.PL | 2 +- + Dockerfile | 2 +- + cpanfile | 2 +- + lib/Munin/Master/Node.pm | 4 ++-- + 4 files changed, 5 insertions(+), 5 deletions(-) + +Index: munin-2.0.72/cpanfile +=================================================================== +--- munin-2.0.72.orig/cpanfile ++++ munin-2.0.72/cpanfile +@@ -11,7 +11,7 @@ requires 'Getopt::Long'; + requires 'HTML::Template::Pro'; + requires 'HTTP::Server::Simple::CGI'; + requires 'IO::Scalar'; +-requires 'IO::Socket::INET6'; ++requires 'IO::Socket::IP'; + requires 'JSON'; + requires 'LWP::Simple'; + requires 'LWP::UserAgent'; +Index: munin-2.0.72/Announce-2.0 +=================================================================== +--- munin-2.0.72.orig/Announce-2.0 ++++ munin-2.0.72/Announce-2.0 +@@ -14,7 +14,7 @@ The most important features: + - Large performance improvements on almost all munin's components + + * Complete IPv6 integration. +- - The master only require a new perl module (IO::Socket::INET6) ++ - The master only require a new perl module (IO::Socket::IP) + - The node needs a IPv6-patched Net::Server + + * Native SSH transport +Index: munin-2.0.72/doc/installation/prerequisites.rst +=================================================================== +--- munin-2.0.72.orig/doc/installation/prerequisites.rst ++++ munin-2.0.72/doc/installation/prerequisites.rst +@@ -56,7 +56,7 @@ The munin master needs + * File\::Copy::Recursive + * Getopt::Long + * HTML::Template +- * IO::Socket::INET6 ++ * IO::Socket::IP + * Log::Log4perl 1.18 or later + * Net::SSLeay (Optional, if you want to use SSL/TLS) + * Params::Validate +Index: munin-2.0.72/master/lib/Munin/Master/Node.pm +=================================================================== +--- munin-2.0.72.orig/master/lib/Munin/Master/Node.pm ++++ munin-2.0.72/master/lib/Munin/Master/Node.pm +@@ -13,7 +13,7 @@ use Munin::Common::TLSClient; + use Data::Dumper; + use Log::Log4perl qw( :easy ); + use Time::HiRes qw( gettimeofday tv_interval ); +-use IO::Socket::INET6; ++use IO::Socket::IP; + + # Used as a timestamp value, this declares none was found + use constant NO_TIMESTAMP => -1; +@@ -82,7 +82,7 @@ sub _do_connect { + LOGCROAK("[FATAL] '$url' is not a valid address!") unless $uri->scheme; + + if ($uri->scheme eq "munin") { +- $self->{reader} = $self->{writer} = IO::Socket::INET6->new( ++ $self->{reader} = $self->{writer} = IO::Socket::IP->new( + PeerAddr => $uri->host, + PeerPort => $self->{port} || 4949, + LocalAddr => $self->_get_node_or_global_setting("local_address"), +Index: munin-2.0.72/master/t/munin_master_node.t +=================================================================== +--- munin-2.0.72.orig/master/t/munin_master_node.t ++++ munin-2.0.72/master/t/munin_master_node.t +@@ -45,7 +45,7 @@ sub setup { + }); + my $connected_socket = Test::MockObject->new(); + $connected_socket->set_true('connected'); +- my $inet = Test::MockModule->new('IO::Socket::INET6'); ++ my $inet = Test::MockModule->new('IO::Socket::IP'); + $inet->mock(new => sub { return $connected_socket }); + + $node->_do_connect(); +Index: munin-2.0.72/INSTALL +=================================================================== +--- munin-2.0.72.orig/INSTALL ++++ munin-2.0.72/INSTALL +@@ -40,7 +40,7 @@ Server: + - Getopt::Long + - File::Copy::Recursive + - CGI::Fast +- - IO::Socket::INET6 ++ - IO::Socket::IP + - Log::Log4perl 1.18 or later (which depends on + - IPC::Shareable + - Log::Dispatch +Index: munin-2.0.72/contrib/Net-Server.patch +=================================================================== +--- munin-2.0.72.orig/contrib/Net-Server.patch ++++ munin-2.0.72/contrib/Net-Server.patch +@@ -9,7 +9,7 @@ diff -ur lib.orig/Net/Server/Proto/SSLEA + use strict; + use vars qw($VERSION $AUTOLOAD @ISA); + -use IO::Socket::INET; +-+use IO::Socket::INET6; +++use IO::Socket::IP; + use Fcntl (); + use Errno (); + use Socket (); +@@ -18,7 +18,7 @@ diff -ur lib.orig/Net/Server/Proto/SSLEA + + $VERSION = $Net::Server::VERSION; # done until separated + -@ISA = qw(IO::Socket::INET); +-+@ISA = qw(IO::Socket::INET6); +++@ISA = qw(IO::Socket::IP); + + sub object { + my $type = shift; +@@ -63,11 +63,11 @@ diff -ur lib.orig/Net/Server/Proto/TCP.p + use strict; + use vars qw($VERSION $AUTOLOAD @ISA); + -use IO::Socket (); +-+use IO::Socket::INET6 (); +++use IO::Socket::IP (); + + $VERSION = $Net::Server::VERSION; # done until separated + -@ISA = qw(IO::Socket::INET); +-+@ISA = qw(IO::Socket::INET6); +++@ISA = qw(IO::Socket::IP); + + sub object { + my $type = shift; +@@ -156,12 +156,12 @@ diff -ur lib.orig/Net/Server.pm lib/Net/ + ### perform basic allow/deny service + sub allow_deny { + my $self = shift; +-@@ -1145,7 +1147,7 @@ ++@@ -1145,6 +1147,6 @@ + or $self->fatal("Can't dup socket [$!]"); + + ### hold on to the socket copy until exec + - $prop->{_HUP}->[$i] = IO::Socket::INET->new; +-+ $prop->{_HUP}->[$i] = IO::Socket::INET6->new(); +++ $prop->{_HUP}->[$i] = IO::Socket::IP->new(); + $prop->{_HUP}->[$i]->fdopen($fd, 'w') + or $self->fatal("Can't open to file descriptor [$!]"); + diff --git a/munin.changes b/munin.changes new file mode 100644 index 0000000..55e9cf8 --- /dev/null +++ b/munin.changes @@ -0,0 +1,578 @@ +------------------------------------------------------------------- +Thu Jun 27 12:31:46 UTC 2024 - Adam Mizerski + +- replace FCGI with CGI::Fast + +------------------------------------------------------------------- +Thu Jun 13 10:19:33 UTC 2024 - Dominique Leuenberger + +- Fix dependenices: the FastCGI perl module is called FCGI. + +------------------------------------------------------------------- +Wed Jun 12 08:21:32 UTC 2024 - Dirk Stoecker + +- remove package name based perl requires + +------------------------------------------------------------------- +Mon Mar 18 09:58:18 UTC 2024 - pgajdos@suse.com + +- remove dependency on /usr/bin/python3 using + %python3_fix_shebang_path macro, [bsc#1212476] + +------------------------------------------------------------------- +Thu Feb 22 12:03:55 UTC 2024 - pgajdos@suse.com + +- Use %patch -P N instead of deprecated %patchN. + +------------------------------------------------------------------- +Mon Jan 22 10:33:43 UTC 2024 - Dominique Leuenberger + +- Provide user(munin) and group(munin): the user and group are + created during in the pre script. + +------------------------------------------------------------------- +Mon Jan 15 11:41:47 UTC 2024 - Pedro Monreal + +- Use IO::Socket::IP instead of IO::Socket::INET[6] + * Remove the dependency on perl(IO::Socket::INET6) as it has been + deprecated by upstream, is no longer suitable for use and its not + being maintained. A compatible replacement for this package is + perl(IO::Socket::IP) which is shipped by the perl-base package. + * Upstream commit back-ported: + https://github.com/munin-monitoring/munin/commit/012b33a7 + * Add upstream munin-remove-deprecated-INET6.patch + +------------------------------------------------------------------- +Tue May 2 07:52:08 UTC 2023 - Bernhard Wiedemann + +- Drop manual requires for python (boo#1210588) + +------------------------------------------------------------------- +Fri Apr 21 08:13:58 UTC 2023 - Max Lin + +- Use python3 as the interpreter in ipmi_sensor_ and + smart_, boo#1210588 + +------------------------------------------------------------------- +Sun Mar 12 10:13:53 UTC 2023 - Carsten Ziepke + +- Update to 2.0.72 + * Import custom css file in style-new.css + +------------------------------------------------------------------- +Thu Jan 12 13:16:28 UTC 2023 - Bernhard Wiedemann + +- Drop harmful chown in %post scripts (boo#1155078) + +------------------------------------------------------------------- +Thu Dec 15 17:20:35 UTC 2022 - Carsten Ziepke + +- Update to 2.0.71 + * fix the fix for Date::Manip +- Changes in 2.0.70 + * plugins/http_loadtime: enable saving cookies between requests + * UpdateWorker: prevent use of uninitialized value $first_epoch + * fix html_strategy to point to munin-cgi-html + * plugin fail2ban: allow configuration of warning/critical + thresholds + * Plugin haproxy_: handle backends with special characters + * [snmp__df_ram] Update title to match the memory plugin + * [snmp__cpuload] Update title to match the cpu plugin + * Plugin df_inode : Exclude msdosfs on FreeBSD as there's no + concept of inode + * Plugin bind9: stabilize order of values in graph + * Plugin bind9: Author's blog has moved to .no TLD + * Plugin bind9: Move 'Other' to bottom of list + * Update munin-graph.in + * Update munin-cgi-graph.in +- Run spec-cleaner +- Fix rpmlint warning: This script uses 'env' as an interpreter. + +------------------------------------------------------------------- +Mon Oct 24 11:04:04 UTC 2022 - Ludwig Nussel + +- UsrMerge: move stuff from /sbin to /usr/sbin (boo#1191080) + +------------------------------------------------------------------- +Sun Feb 20 10:39:50 UTC 2022 - Wolfgang Rosenauer + +- update to 2.0.69 + * bugfixes + * Handle NVME drives in the Linux iostat plugin + * munin-run: allow to pass additional arguments to the plugin + * use dedicated munin SNMP plugin +- require the www group (boo#1195732) + +------------------------------------------------------------------- +Mon Nov 29 15:46:03 UTC 2021 - Johannes Segitz + +- Removed + * PrivateDevices=true + * ProtectClock=true + * RestrictRealtime=true + from munin-node.service (bsc#1193118) + +------------------------------------------------------------------- +Thu Oct 7 10:26:31 UTC 2021 - Johannes Segitz + +- Added hardening to systemd service(s) (bsc#1181400). Modified: + * munin-cgi-graph.service + * munin-cgi-html.service + * munin-cron.service + * munin-node.service + +------------------------------------------------------------------- +Fri Mar 5 09:49:51 UTC 2021 - Thorsten Kukuk + +- Run munin-update as user munin [bsc#1183078] + +------------------------------------------------------------------- +Tue Feb 23 11:12:14 UTC 2021 - Andreas Stieger + +- add upstream singing key and verify source signature + +------------------------------------------------------------------- +Mon Feb 8 22:09:56 UTC 2021 - Dirk Müller + +- update to 2.0.66: + * unknown_limit: do not misinterpret zero as one + * unknown_limit: fix handling of value "1" + * SpoolReader: process spooled content lines separately + * async: fetch spooled data in order of timestamps + * async: use name squashing rules when determining the names of spooled files + * async: clarify handling of timestamp + * doc: describe "timeout_fetch_all_nodes" and "timeout_fetch_one_node" + * Make sensors_ temperature plugin work on musl libc + * Symlink and custom name support for diskstat_ + * fix reporting on URL in the munin-update log (stable-2.0) + * make it possible to configure global munin-update timeouts + * Use configured plugin group as primary group + * plugins/memory: add per-cpu counter + * Munin thresholds support for http_loadtime + * adjust_threshold: strings indexes are 1 based in AWK + * Plugin apt_all: prevent ambiguity between slash and hyphen in release names + * Fix utf8 encoding in plugins + * Fix special character for author name (Kristian Lyngst370l) + * Plugin snmp__if_err_: clarify authors list + * Plugin nomadix_users_: clarify formatting of authors + * Plugin vserver_cpu_: clarify copyright statement + * Plugin snmp__uptime: clarify authors + * Unify spelling of author "Dagfinn Ilmari Manns345ker" + * Unify more author names + * Fix template error in case of an empty host list + +------------------------------------------------------------------- +Tue Sep 29 11:17:39 UTC 2020 - Thorsten Kukuk + +- pwdutils is long gone, use shadow +- Don't hard require systemd +- Update to 2.0.64 + * several bugfixes in minor releases + https://github.com/munin-monitoring/munin/blob/stable-2.0/ChangeLog + +------------------------------------------------------------------- +Wed Aug 19 10:11:07 UTC 2020 - Dominique Leuenberger + +- Stop abusing %{_libexecdir} for the firewalld service files. + +------------------------------------------------------------------- +Sat Mar 21 11:04:27 UTC 2020 - Wolfgang Rosenauer + +- add service definition for firewalld + +------------------------------------------------------------------- +Fri Feb 21 23:05:43 UTC 2020 - Wolfgang Rosenauer + +- update to 2.0.56 + * several bugfixes in minor releases + https://github.com/munin-monitoring/munin/blob/stable-2.0/ChangeLog + +------------------------------------------------------------------- +Tue Sep 10 10:11:38 UTC 2019 - Wolfgang Rosenauer + +- use systemd timer instead of cron for new distributions (boo#1115448) +- require perl-rrdtool (boo#1149880) +- removed old (non-systemd) conditionals from spec + +------------------------------------------------------------------- +Tue Aug 20 11:53:15 CEST 2019 - kukuk@suse.de + +- Package /etc/cron.d as this is now part of cron which we don't + want to require + +------------------------------------------------------------------- +Wed Jun 12 15:09:10 UTC 2019 - dimstar@opensuse.org + +- Allow OBS to pick better candidates to shorten rebuild queues + +------------------------------------------------------------------- +Thu May 9 05:31:28 UTC 2019 - Mathias Homann + +- update to 2.0.49 + * fixes and improvements + +------------------------------------------------------------------- +Mon May 6 14:33:17 UTC 2019 - Mathias Homann + +- update to 2.0.48 + * many fixes and improvements in plugins + +------------------------------------------------------------------- +Tue Sep 4 21:55:53 UTC 2018 - wr@rosenauer.org + +- update to 2.0.40 + * many fixes and improvements in plugins + * fixes and improvements of the build system +- removed obsolete patch + munin-plugin-quota_usage_warnings.patch + +------------------------------------------------------------------- +Mon May 28 08:22:36 UTC 2018 - wr@rosenauer.org + +- update to 2.0.37 + * Add support for IBM i + * Update lighttpd.rst + * Update nginx.rst + * ejabberd improvements + * add example plugin graphs + * Add support for MySQL 5.5/5.6 + * Added HP-UX support to processes plugin + * snmp__if_multi: Set warning to 75% of interface speed instead of 133% + * Add support for rndc options in bind9_rndc plugin + * Correcting mysql_queries plugin random hash ordering + * Add PostgreSQL 10 support to postgres_xlog + * mysql improvements + * Add IPv6 support + * many other improvements +- require also perl-rrdtool where it exists (boo#1094776) +- remove obsolete mysql55.patch + +------------------------------------------------------------------- +Fri Sep 29 04:56:09 UTC 2017 - coolo@suse.com + +- add perl526.patch to compile with perl 5.26 (no more . in @INC) + +------------------------------------------------------------------- +Fri Jun 2 15:43:10 UTC 2017 - suse-beta@cboltz.de + +- add Requires(pre): user(nobody) and group(nobody) to munin-node to fix + Tumbleweed build +- add %ghost /run/munin to munin and munin-node to fix a rpmlint warning + (Tumbleweed only, would cause build failures on SLE11) + +------------------------------------------------------------------- +Thu Mar 2 13:45:33 UTC 2017 - aj@ajaissle.de + +- fix source url +- update to 2.0.32 +- remove CVE-2017-6188-fix-parameter-injection.patch (applied upstream) + +------------------------------------------------------------------- +Thu Feb 23 12:33:21 UTC 2017 - wr@rosenauer.org + +- fix CVE-2017-6188: munin-cgi-graph local file write vulnerability + (boo#1026539, CVE-2017-6188-fix-parameter-injection.patch) + +------------------------------------------------------------------- +Sun Feb 19 16:08:24 UTC 2017 - wr@rosenauer.org + +- update to version 2.0.30 + Bugfix releases (closes the following issues since 2.0.25) + 2.0.26: Closes: D:761190, GH:426 + 2.0.27: Closes: D:767032, D:768553, D:825136, D:834194, GH:690, GH:714 + 2.0.29: Closes: D:847649, D:849383 + 2.0.30: Closes: GH:745, GH:771, GH:783 + +------------------------------------------------------------------- +Tue Jan 17 13:04:06 UTC 2017 - bwiedemann@suse.com + +- override build host's hostname to make build reproducible + +------------------------------------------------------------------- +Tue Nov 24 12:11:20 UTC 2015 - wr@rosenauer.org + +- apply upstream change to work correctly for MySQL >= 5.5 + (mysql55.patch + +------------------------------------------------------------------- +Tue Sep 1 11:54:04 UTC 2015 - dimstar@opensuse.org + +- Add perl(Module::Build) BuildRequires: Fix build with perl 5.22. + +------------------------------------------------------------------- +Sun Aug 2 05:52:38 UTC 2015 - bwiedemann@suse.com + +- fix munin-node start (bnc#940287) + +------------------------------------------------------------------- +Wed Jan 7 08:07:48 UTC 2015 - wr@rosenauer.org + +- update to version 2.0.25 + Bugfix release. + Closes: GH:304, D:769415, D:770745, D:770746, D:770826 + * p/irqstats: Improve generated labels + * ip/iostat_ios: also support /dev/xvdX devices + * p/iostat_ios: also support /dev/vdX devices + * plugins/df_abs: fix the naming for regular devices + * p/pgsql: Detect "rc" postgresql versions + * p/ping_: honor ping env variable +- cleanup sysvinit scriptlets to fix the issue which always + disabled the service on update + +------------------------------------------------------------------- +Sun Nov 2 22:26:03 UTC 2014 - wr@rosenauer.org + +- update to version 2.0.24 + * bugfix release + compatibility with perl 5.20 + +------------------------------------------------------------------- +Sat Sep 27 07:17:33 UTC 2014 - wr@rosenauer.org + +- update to version 2.0.21 + * bugfix release + It fixes the "start should be less than end" bug. + +------------------------------------------------------------------- +Fri Sep 12 12:58:09 UTC 2014 - darin@darins.net + +- remove conditions on Sources and include them regardless + +------------------------------------------------------------------- +Thu Jan 16 15:54:28 UTC 2014 - wr@rosenauer.org + +- require perl-libwww-perl to enable apache plugins (bnc#859046) + +------------------------------------------------------------------- +Sat Dec 21 16:11:58 UTC 2013 - wr@rosenauer.org + +- recommend logdigest to allow removal of it w/o breaking deps + (munin-node likes to have logtail which is part of logdigest + but the daily cronjob of logdigest is probably unwanted on some + systems) + +------------------------------------------------------------------- +Tue Dec 17 20:45:26 UTC 2013 - wr@rosenauer.org + +- update to version 2.0.19 (bnc#853570) + * CVE-2013-6048, a node could cause excessive memory consumption + on the Munin master + * CVE-2013-6359, a malicious plug-in could prevent data collection + for the node. + * more bugfixes + +------------------------------------------------------------------- +Tue Aug 20 05:20:31 UTC 2013 - opensuse@dstoecker.de + +- fix requires for main munin package + +------------------------------------------------------------------- +Mon May 27 02:00:38 CEST 2013 - draht@suse.de + +- update to version 2.0.14: + * fixes for computing of absolute values + * timeout code decoupled for global and plugin timeout. + * fixes for ntp + * TMPDIR reuse fixes +- do NOT autostart from %post + +------------------------------------------------------------------- +Tue May 21 17:09:14 UTC 2013 - vjt@openssl.it + +- Add missing perl-URI and perl-FastCGI dependencies +- Add systemd service units to start the HTML and Graph CGI servers + with the aid of spawn-fcgi + NOTE: the FastCGI server listens on an UNIX socket in /var/run/munin + and members of the "www" group can write to it. +- Add the missing [Install] section of the munin-node service unit + +------------------------------------------------------------------- +Mon Mar 25 16:23:53 UTC 2013 - vjt@openssl.it + +- Add an SNMP wildcard plugin to monitor the Google Search Appliance + https://github.com/ifad/munin-gsa + +------------------------------------------------------------------- +Wed Mar 13 18:46:16 UTC 2013 - vjt@openssl.it + +- Include an improved quota usage plugin that gets warning and + critical values from the configured soft and hard quotas. + Found in the wild on + https://svn.koumbit.net/koumbit/trunk/munin-plugins/quota-usage + tested and adapted. + +------------------------------------------------------------------- +Thu Mar 7 11:06:49 UTC 2013 - vjt@openssl.it + +- Update to 2.0.11.1 +- Add nginx plugins from http://github.com/ifad/nginx-munin + +------------------------------------------------------------------- +Tue Mar 5 19:42:45 UTC 2013 - vjt@openssl.it + +- BuildRequire perl-IO-Socket-INET6 + +------------------------------------------------------------------- +Thu May 3 15:09:14 UTC 2012 - wr@rosenauer.org + +- update to bugfix release 1.4.7 +- fixed CVE-2012-2147 (bnc#759910) + +------------------------------------------------------------------- +Wed Jun 9 00:00:00 UTC 2010 - detlef@links2linux.de + +- new upstream version <1.4.5> + * bugfix release + +------------------------------------------------------------------- +Sat Mar 6 00:00:00 UTC 2010 - detlef@links2linux.de + +- new upstream version <1.4.4> + +------------------------------------------------------------------- +Thu Dec 31 00:00:00 UTC 2009 - detlef@links2linux.de + +- new upstream release <1.4.3> + +------------------------------------------------------------------- +Mon Dec 21 00:00:00 UTC 2009 - detlef@links2linux.de + +- new upstream release <1.4.2> + +------------------------------------------------------------------- +Mon Dec 7 00:00:00 UTC 2009 - detlef@links2linux.de + +- new upstream release <1.4.1> + +------------------------------------------------------------------- +Sat Nov 28 00:00:00 UTC 2009 - detlef@links2linux.de + +- new upstream release <1.4.0> + +------------------------------------------------------------------- +Sat Dec 27 00:00:00 UTC 2008 - detlef@links2linux.de + +- add UTF8 patch + +------------------------------------------------------------------- +Sat Jul 19 00:00:00 UTC 2008 - detlef@links2linux.de + +- new upstream release <1.2.6> + +------------------------------------------------------------------- +Wed Aug 15 00:00:00 UTC 2007 - detlef@links2linux.de + +- new upstream release <1.2.5> + +------------------------------------------------------------------- +Mon Oct 17 00:00:00 UTC 2005 - detlef@links2linux.de + +- Fixed missing /sbin/rcmunin-node + +------------------------------------------------------------------- +Sun Oct 16 00:00:00 UTC 2005 - detlef@links2linux.de + +- First build for packman + +------------------------------------------------------------------- +Sun Apr 3 00:00:00 UTC 2005 - runesk@linpro.no + +- 1.2.3 release + +------------------------------------------------------------------- +Fri Apr 1 00:00:00 UTC 2005 - runesk@linpro.no + +- 1.2.2 release +- Fixed SF bug 1164481 (missing /srv/www/htdocs/munin) +- Fixed SF bug 1164477 (patch for Net::Domain on PPC64) + +------------------------------------------------------------------- +Fri Mar 11 00:00:00 UTC 2005 - runesk@linpro.no + +- 1.2.1 release + +------------------------------------------------------------------- +Wed Mar 9 00:00:00 UTC 2005 - runesk@linpro.no + +- Fixed erronumous path to web directory +- Added start of node if not running + +------------------------------------------------------------------- +Tue Mar 8 00:00:00 UTC 2005 - runesk@linpro.no + +- Fixed some build path problems + +------------------------------------------------------------------- +Thu Feb 24 00:00:00 UTC 2005 - runesk@linpro.no + +- New major release + +------------------------------------------------------------------- +Wed Feb 9 00:00:00 UTC 2005 - runesk@linpro.no + +- Updated to version 1.2.0rc2. +- Removed Nagios stuff +- Added noreplace for some central configuration files + +------------------------------------------------------------------- +Thu Nov 18 00:00:00 UTC 2004 - runesk@linpro.no + +- Updated to version 1.0.4 + +------------------------------------------------------------------- +Mon Nov 8 00:00:00 UTC 2004 - runesk@linpro.no + +- Updated version 1.0.3 / sync with redhat-build + +------------------------------------------------------------------- +Wed Aug 4 00:00:00 UTC 2004 - runesk@linpro.no + +- Initial SuSE build + +------------------------------------------------------------------- +Sun Feb 1 00:00:00 UTC 2004 - ingvar@linpro.no + +- Sync with CVS. Version 1.0.0pre2 + +------------------------------------------------------------------- +Sun Jan 18 00:00:00 UTC 2004 - ingvar@linpro.no + +- Sync with CVS. Change names to munin. + +------------------------------------------------------------------- +Fri Oct 31 00:00:00 UTC 2003 - ingvar@linpro.no + +- Lot of small fixes. Now builds on more RPM distros + +------------------------------------------------------------------- +Wed May 21 00:00:00 UTC 2003 - ingvar@linpro.no + +- Sync with CVS +- 0.9.5-1 + +------------------------------------------------------------------- +Tue Apr 1 00:00:00 UTC 2003 - ingvar@linpro.no + +- Sync with CVS +- Makefile-based install of core files +- Build doc (only pod2man) + +------------------------------------------------------------------- +Thu Jan 9 00:00:00 UTC 2003 - ingvar@linpro.no + +- Sync with CVS, auto rpmbuild + +------------------------------------------------------------------- +Thu Jan 2 00:00:00 UTC 2003 - ingvar@linpro.no + +- Fix spec file for RedHat 8.0 and new version of lrrd + +------------------------------------------------------------------- +Wed Sep 4 00:00:00 UTC 2002 - ingvar@linpro.no + +- Small bugfixes in the rpm package + +------------------------------------------------------------------- +Tue Jun 18 00:00:00 UTC 2002 - kjetilho@linpro.no + +- new package diff --git a/munin.cron.d b/munin.cron.d new file mode 100644 index 0000000..3ec4c26 --- /dev/null +++ b/munin.cron.d @@ -0,0 +1,8 @@ +# +# cron-jobs for munin +# + +MAILTO=root + +*/5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron + diff --git a/munin.keyring b/munin.keyring new file mode 100644 index 0000000..fbb8515 --- /dev/null +++ b/munin.keyring @@ -0,0 +1,585 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: SKS 1.1.6 +Comment: Hostname: sks.pod02.fleetstreetops.com + +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 +1Zcs1symOLXulLN7Xx0dXwO1FWB+y42KSv45 +=UZLg +-----END PGP PUBLIC KEY BLOCK----- diff --git a/munin.logrotate b/munin.logrotate new file mode 100644 index 0000000..096a297 --- /dev/null +++ b/munin.logrotate @@ -0,0 +1,14 @@ +/var/log/munin/munin-graph.log +/var/log/munin/munin-html.log +/var/log/munin/munin-nagios.log +/var/log/munin/munin-limits.log +/var/log/munin/munin-update.log { + daily + missingok + rotate 7 + compress + copytruncate + notifempty + create 640 munin munin + su munin munin +} diff --git a/munin.spec b/munin.spec new file mode 100644 index 0000000..1e0ba69 --- /dev/null +++ b/munin.spec @@ -0,0 +1,462 @@ +# +# spec file for package munin +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define htmldir /srv/www/htdocs/munin +%define cgidir /srv/www/cgi-bin +%define dbdir %{_localstatedir}/lib/munin +%define logdir %{_localstatedir}/log/munin +%define plugindir %{_prefix}/lib/munin/plugins +%define active_by_default 0 +Name: munin +Version: 2.0.72 +Release: 0 +Summary: Network-wide graphing framework (grapher/gatherer) +License: GPL-2.0-only +Group: System/Monitoring +URL: https://munin-monitoring.org/ +Source0: https://codeload.github.com/munin-monitoring/munin/tar.gz/refs/tags/%{version}#/%{name}-%{version}.tar.gz +Source1: Makefile.config +Source2: munin-node.rc +Source3: munin.cron.d +Source4: munin.logrotate +Source5: munin-node.logrotate +Source6: munin-node.xml +Source7: plugins.conf +Source8: munin-node.tmpfiles +Source9: munin-node.service +Source10: munin-cgi-graph.service +Source11: munin-cgi-html.service +# https://github.com/ifad/nginx-munin/archive/master.zip +Source12: nginx-munin.zip +# https://github.com/ifad/gsa-munin/archive/master.zip +Source13: gsa-munin.zip +Source14: munin-cron.timer +Source15: munin-cron.service +# Source16: http://downloads.munin-monitoring.org/%{name}/stable/%{version}/%{name}-%{version}.tar.gz.asc +# 0x910846ADEE4C5D67C19B3E6F0A24C05998BA4133 +Source17: munin.keyring +Patch1: perl526.patch +# PATCH-FIX-UPSTREAM Use IO::Socket::IP instead of IO::Socket::INET[6] +Patch2: munin-remove-deprecated-INET6.patch +BuildRequires: firewall-macros +BuildRequires: html2text +BuildRequires: htmldoc +BuildRequires: pkgconfig +BuildRequires: python-rpm-macros +BuildRequires: shadow +BuildRequires: unzip +BuildRequires: perl(HTML::Template) +BuildRequires: perl(Log::Log4perl) +BuildRequires: perl(Module::Build) +BuildRequires: perl(Net::SNMP) +BuildRequires: perl(Net::SSLeay) +BuildRequires: perl(Net::Server) +BuildRequires: pkgconfig(systemd) +Requires: perl-base = %{perl_version} +Requires: perl-rrdtool +Requires: rrdtool +Requires: shadow +Requires: spawn-fcgi +Requires: perl(CGI::Fast) +Requires: perl(Date::Manip) +Requires: perl(File::Copy::Recursive) +Requires: perl(HTML::Template) +Requires: perl(IO::Socket::IP) +Requires: perl(Log::Log4perl) +Requires: perl(Munin::Common::Defaults) +Requires: perl(Net::SNMP) +Requires: perl(Net::SSLeay) +Requires: perl(Net::Server) +Requires: perl(URI) +Recommends: logrotate +Provides: group(munin) +Provides: user(munin) +BuildArch: noarch +%{?systemd_ordering} +%if 0%{?suse_version} <= 1510 +Recommends: cron +%endif + +%description +Munin is a highly flexible and powerful solution used to create graphs of +virtually everything imaginable throughout your network, while still +maintaining a rattling ease of installation and configuration. + +This package contains the grapher/gatherer. You will only need one instance of +it in your network. It will periodically poll all the nodes in your network +it's aware of for data, which it in turn will use to create graphs and HTML +pages, suitable for viewing with your graphical web browser of choice. + +Munin is written in Perl, and relies heavily on Tobi Oetiker's excellent +RRDtool. + +%package node +Summary: Network-wide graphing framework (node) +# some scripts need logtail which is part of package logdigest in openSUSE +# problem with logdigest is that it installs a cronjob for itself which +# might be unwanted +Group: System/Monitoring +Requires: perl-HTML-Template +Requires: perl-Log-Log4perl +Requires: perl-Net-SNMP +Requires: perl-Net-SSLeay +Requires: perl-Net-Server +Requires: perl-base = %{perl_version} +Requires: perl-libwww-perl +Requires: ps +Requires: ruby +Requires: shadow +Requires: sysstat +Requires(pre): group(nobody) +Requires(pre): group(www) +Requires(pre): user(nobody) +Recommends: logdigest +Recommends: logrotate +BuildArch: noarch +%{?systemd_ordering} + +%description node +Munin is a highly flexible and powerful solution used to create graphs of +virtually everything imaginable throughout your network, while still +maintaining a rattling ease of installation and configuration. + +This package contains node software. You should install it on all the nodes +in your network. It will know how to extract all sorts of data from the +node it runs on, and will wait for the gatherer to request this data for +further processing. + +It includes a range of plugins capable of extracting common values such as +cpu usage, network usage, load average, and so on. Creating your own plugins +which are capable of extracting other system-specific values is very easy, +and is often done in a matter of minutes. You can also create plugins which +relay information from other devices in your network that can't run Munin, +such as a switch or a server running another operating system, by using +SNMP or similar technology. + +Munin is written in Perl, and relies heavily on Tobi Oetiker's excellent +RRDtool. To see a real example of Munin in action, take a peek at +. + +%prep +%setup -q +cp %{SOURCE1} . +unzip %{SOURCE12} +unzip %{SOURCE13} +%patch -P 1 -p1 +%patch -P 2 -p1 + +%build +%__make HOSTNAME=yourhostname + +%install +%makeinstall +%__mkdir_p %{buildroot}/%{_sysconfdir}/munin/plugins +%__mkdir_p %{buildroot}/%{_sysconfdir}/munin/munin-conf.d + +%__mkdir_p %{buildroot}%{_sysconfdir}/logrotate.d +%__install -m0644 %{SOURCE4} %{buildroot}/%{_sysconfdir}/logrotate.d/munin +%__install -m0644 %{SOURCE5} %{buildroot}/%{_sysconfdir}/logrotate.d/munin-node + +%__install -m0644 %{SOURCE7} %{buildroot}/%{_sysconfdir}/munin/plugin-conf.d/munin-node + +%__mkdir_p %{buildroot}%{_sbindir} +%__ln_s service %{buildroot}%{_sbindir}/rcmunin-node +%__ln_s service %{buildroot}%{_sbindir}/rcmunin-cgi-graph +%__ln_s service %{buildroot}%{_sbindir}/rcmunin-cgi-html + +%__mkdir_p %{buildroot}/%{_prefix}/lib/tmpfiles.d +%__install -m0644 %{SOURCE8} %{buildroot}/%{_prefix}/lib/tmpfiles.d/munin.conf +%__install -m0644 %{SOURCE8} %{buildroot}/%{_prefix}/lib/tmpfiles.d/munin-node.conf +%__mkdir_p %{buildroot}/%{_unitdir} +%__install -m0644 %{SOURCE9} %{buildroot}/%{_unitdir}/munin-node.service +%__install -m0644 %{SOURCE10} %{buildroot}/%{_unitdir}/munin-cgi-graph.service +%__install -m0644 %{SOURCE11} %{buildroot}/%{_unitdir}/munin-cgi-html.service +%if 0%{?suse_version} > 1510 +%__install -m0644 %{SOURCE14} %{buildroot}/%{_unitdir}/ +%__install -m0644 %{SOURCE15} %{buildroot}/%{_unitdir}/ +%else +%__mkdir_p %{buildroot}/%{_sysconfdir}/cron.d +%__install -m0644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/cron.d/munin +%endif + +%__mkdir_p %{buildroot}/%{logdir} +%__mkdir_p %{buildroot}/%{htmldir} +%__mkdir_p %{buildroot}/%{dbdir} +%__mkdir_p %{buildroot}/%{dbdir}/plugin-state + +%__install -m0755 nginx-munin-master/nginx_* %{buildroot}/%{plugindir} +ln nginx-munin-master/README.org README.nginx + +%__install -m0755 munin-gsa-master/snmp_* %{buildroot}/%{plugindir} +ln munin-gsa-master/README.md README.gsa + +%if %{suse_version} >= 1600 +%python3_fix_shebang_path %{buildroot}/%{plugindir}/* +%endif + +# Fix rpmlint warning: This script uses 'env' as an interpreter. +for F in \ + %{buildroot}/%{_prefix}/lib/munin/plugins/ipmi_sensor_ \ + %{buildroot}/%{_prefix}/lib/munin/plugins/smart_ \ + ; do + sed -i -e 's|^#!%{_bindir}/env python|#!%{_bindir}/python3|' $F +done +for F in \ + %{buildroot}/%{_prefix}/lib/munin/plugins/tomcat_ \ + ; do + sed -i -e 's|^#!%{_bindir}/env ruby|#!%{_bindir}/ruby|' $F +done + +# firewalld +install -D -m 644 %{SOURCE6} %{buildroot}%{_prefix}/lib/firewalld/services/munin-node.xml + +%pre +getent group munin >/dev/null || %{_sbindir}/groupadd -r munin +getent passwd munin > /dev/null || %{_sbindir}/useradd -r -c "munin monitoring" -d %{dbdir} -g munin munin +%service_add_pre munin-cgi-graph.service +%service_add_pre munin-cgi-html.service +%if 0%{?suse_version} > 1510 +%service_add_pre munin-cron.timer +%service_add_pre munin-cron.service +%endif + +%post +%tmpfiles_create munin.conf +%service_add_post munin-cgi-graph.service +%service_add_post munin-cgi-html.service +%if 0%{?suse_version} > 1510 +%service_add_post munin-cron.timer +%service_add_post munin-cron.service +# update from cron based release +if [ -f %{_sysconfdir}/cron.d/munin ]; then + systemctl enable munin-cron.timer || : + systemctl start munin-cron.timer || : +fi +%endif + +%preun +%service_del_preun munin-cgi-graph.service +%service_del_preun munin-cgi-html.service +%if 0%{?suse_version} > 1510 +%service_del_preun munin-cron.timer +%service_del_preun munin-cron.service +%endif + +%postun +%service_del_postun munin-cgi-graph.service +%service_del_postun munin-cgi-html.service +%if 0%{?suse_version} > 1510 +%service_del_postun munin-cron.timer +%service_del_postun munin-cron.service +%endif + +## Node +%pre node +getent group munin >/dev/null || %{_sbindir}/groupadd -r munin +getent passwd munin > /dev/null || %{_sbindir}/useradd -r -c "munin monitoring" -d %{dbdir} -g munin munin +%service_add_pre munin-node.service + +%post node +if [ $1 = 1 ]; then +%{_sbindir}/munin-node-configure --shell | sh +fi +%tmpfiles_create munin-node.conf +%service_add_post munin-node.service +%firewalld_reload + +%preun node +%service_del_preun munin-node.service + +%postun node +%service_del_postun munin-node.service + +%files +%license COPYING +%doc ChangeLog README UPGRADING +%{_bindir}/munin-check +%{_bindir}/munin-cron +%{_bindir}/munindoc +%dir %{_prefix}/lib/munin +%{_prefix}/lib/munin/munin-graph +%{_prefix}/lib/munin/munin-html +%{_prefix}/lib/munin/munin-datafile2storable +%{_prefix}/lib/munin/munin-storable2datafile +%{_prefix}/lib/munin/munin-limits +%{_prefix}/lib/munin/munin-update +%{_prefix}/lib/munin/DejaVuSans.ttf +%{_prefix}/lib/munin/DejaVuSansMono.ttf +%{cgidir}/munin-cgi-graph +%{cgidir}/munin-cgi-html +%{_prefix}/lib/tmpfiles.d/munin.conf +%{_unitdir}/munin-cgi-graph.service +%{_unitdir}/munin-cgi-html.service +%{_sbindir}/rcmunin-cgi-graph +%{_sbindir}/rcmunin-cgi-html +%if 0%{?suse_version} > 1510 +%{_unitdir}/munin-cron.* +%else +%dir %{_sysconfdir}/cron.d +%config %{_sysconfdir}/cron.d/munin +%endif +%attr(0755, munin, munin) %dir %{htmldir} +%attr(0444, munin, munin) %{htmldir}/.htaccess +%dir %{_sysconfdir}/munin +%dir %{_sysconfdir}/munin/munin-conf.d +%dir %{_sysconfdir}/munin/templates +%dir %{_sysconfdir}/munin/static +%config %{_sysconfdir}/munin/templates/* +%config %{_sysconfdir}/munin/static/* +%config(noreplace) %{_sysconfdir}/munin/munin.conf +%config %{_sysconfdir}/logrotate.d/munin +%dir %{perl_vendorlib}/Munin +%dir %{perl_vendorlib}/Munin/Master +%{perl_vendorlib}/Munin/Master/Config.pm +%{perl_vendorlib}/Munin/Master/GraphOld.pm +%{perl_vendorlib}/Munin/Master/Group.pm +%{perl_vendorlib}/Munin/Master/GroupRepository.pm +%{perl_vendorlib}/Munin/Master/HTMLConfig.pm +%{perl_vendorlib}/Munin/Master/HTMLOld.pm +%{perl_vendorlib}/Munin/Master/Host.pm +%{perl_vendorlib}/Munin/Master/LimitsOld.pm +%{perl_vendorlib}/Munin/Master/Logger.pm +%{perl_vendorlib}/Munin/Master/Node.pm +%{perl_vendorlib}/Munin/Master/ProcessManager.pm +%{perl_vendorlib}/Munin/Master/Update.pm +%{perl_vendorlib}/Munin/Master/UpdateWorker.pm +%{perl_vendorlib}/Munin/Master/Utils.pm +%{perl_vendorlib}/Munin/Master/Worker.pm +%{_mandir}/man3/Munin::Master::Config.3pm.gz +%{_mandir}/man3/Munin::Master::Group.3pm.gz +%{_mandir}/man3/Munin::Master::GroupRepository.3pm.gz +%{_mandir}/man3/Munin::Master::HTMLOld.3pm.gz +%{_mandir}/man3/Munin::Master::Host.3pm.gz +%{_mandir}/man3/Munin::Master::LimitsOld.3pm.gz +%{_mandir}/man3/Munin::Master::Logger.3pm.gz +%{_mandir}/man3/Munin::Master::Node.3pm.gz +%{_mandir}/man3/Munin::Master::ProcessManager.3pm.gz +%{_mandir}/man3/Munin::Master::Update.3pm.gz +%{_mandir}/man3/Munin::Master::UpdateWorker.3pm.gz +%{_mandir}/man3/Munin::Master::Utils.3pm.gz +%{_mandir}/man3/Munin::Master::Worker.3pm.gz +%{_mandir}/man5/munin-node.conf.5%{?ext_man} +%{_mandir}/man5/munin.conf.5%{?ext_man} +%{_mandir}/man8/munin-check.8%{?ext_man} +%{_mandir}/man8/munin-cron.8%{?ext_man} +%{_mandir}/man8/munin-graph.8%{?ext_man} +%{_mandir}/man8/munin-html.8%{?ext_man} +%{_mandir}/man8/munin-limits.8%{?ext_man} +%{_mandir}/man8/munin-update.8%{?ext_man} +%{_mandir}/man8/munin.8%{?ext_man} +%attr(0750, munin, munin) %dir %{logdir} +%attr(0755, munin, munin) %dir %{dbdir} +%ghost %attr(0644, munin, munin) %{logdir}/munin-graph.log +%ghost %attr(0644, munin, munin) %{logdir}/munin-html.log +%ghost %attr(0644, munin, munin) %{logdir}/munin-nagios.log +%ghost %attr(0644, munin, munin) %{logdir}/munin-limits.log +%ghost %attr(0644, munin, munin) %{logdir}/munin-update.log +%ghost /run/munin + +%files node +%doc README.nginx README.gsa +%{_sbindir}/munin-run +%{_sbindir}/munin-node +%{_sbindir}/munin-node-configure +%{_bindir}/munin-get +%{_prefix}/lib/tmpfiles.d/munin-node.conf +%{_unitdir}/munin-node.service +%dir %{_prefix}/lib/munin +%{_prefix}/lib/munin/munin-async +%{_prefix}/lib/munin/munin-asyncd +%{_prefix}/lib/munin/plugins/ +%{_sbindir}/rcmunin-node +%dir %{_sysconfdir}/munin/plugin-conf.d +%dir %{_sysconfdir}/munin/plugins +%config(noreplace) %{_sysconfdir}/munin/plugin-conf.d/munin-node +%config(noreplace) %{_sysconfdir}/munin/munin-node.conf +%config %{_sysconfdir}/logrotate.d/munin-node +%dir %{perl_vendorlib}/Munin/Common +%{perl_vendorlib}/Munin/Common/Config.pm +%{perl_vendorlib}/Munin/Common/Daemon.pm +%{perl_vendorlib}/Munin/Common/Defaults.pm +%{perl_vendorlib}/Munin/Common/TLS.pm +%{perl_vendorlib}/Munin/Common/TLSClient.pm +%{perl_vendorlib}/Munin/Common/TLSServer.pm +%{perl_vendorlib}/Munin/Common/Timeout.pm +%{perl_vendorlib}/Munin/Common/DictFile.pm +%{perl_vendorlib}/Munin/Common/SyncDictFile.pm +%dir %{perl_vendorlib}/Munin/Node +%{perl_vendorlib}/Munin/Node/Config.pm +%dir %{perl_vendorlib}/Munin/Node/Configure +%{perl_vendorlib}/Munin/Node/Configure/Debug.pm +%{perl_vendorlib}/Munin/Node/Configure/History.pm +%{perl_vendorlib}/Munin/Node/Configure/HostEnumeration.pm +%{perl_vendorlib}/Munin/Node/Configure/Plugin.pm +%{perl_vendorlib}/Munin/Node/Configure/PluginList.pm +%{perl_vendorlib}/Munin/Node/Logger.pm +%{perl_vendorlib}/Munin/Node/OS.pm +%{perl_vendorlib}/Munin/Node/SNMPConfig.pm +%{perl_vendorlib}/Munin/Node/Server.pm +%{perl_vendorlib}/Munin/Node/Service.pm +%{perl_vendorlib}/Munin/Node/Session.pm +%{perl_vendorlib}/Munin/Node/Utils.pm +%{perl_vendorlib}/Munin/Node/SpoolReader.pm +%{perl_vendorlib}/Munin/Node/SpoolWriter.pm +%{perl_vendorlib}/Munin/Plugin.pm +%dir %{perl_vendorlib}/Munin/Plugin +%{perl_vendorlib}/Munin/Plugin/Pgsql.pm +%{perl_vendorlib}/Munin/Plugin/SNMP.pm +%{_mandir}/man1/munin-node-configure.1%{?ext_man} +%{_mandir}/man1/munin-node.1%{?ext_man} +%{_mandir}/man1/munin-run.1%{?ext_man} +%{_mandir}/man1/munindoc.1%{?ext_man} +%{_mandir}/man1/munin-get.1%{?ext_man} +%{_mandir}/man3/Munin::Common::Config.3pm.gz +%{_mandir}/man3/Munin::Common::Daemon.3pm.gz +%{_mandir}/man3/Munin::Common::Defaults.3pm.gz +%{_mandir}/man3/Munin::Common::TLS.3pm.gz +%{_mandir}/man3/Munin::Common::TLSClient.3pm.gz +%{_mandir}/man3/Munin::Common::TLSServer.3pm.gz +%{_mandir}/man3/Munin::Common::Timeout.3pm.gz +%{_mandir}/man3/Munin::Node::Config.3pm.gz +%{_mandir}/man3/Munin::Node::Configure::Debug.3pm.gz +%{_mandir}/man3/Munin::Node::Configure::History.3pm.gz +%{_mandir}/man3/Munin::Node::Configure::HostEnumeration.3pm.gz +%{_mandir}/man3/Munin::Node::Configure::Plugin.3pm.gz +%{_mandir}/man3/Munin::Node::Configure::PluginList.3pm.gz +%{_mandir}/man3/Munin::Node::Logger.3pm.gz +%{_mandir}/man3/Munin::Node::OS.3pm.gz +%{_mandir}/man3/Munin::Node::SpoolReader.3pm.gz +%{_mandir}/man3/Munin::Node::SpoolWriter.3pm.gz +%{_mandir}/man3/Munin::Node::SNMPConfig.3pm.gz +%{_mandir}/man3/Munin::Node::Server.3pm.gz +%{_mandir}/man3/Munin::Node::Service.3pm.gz +%{_mandir}/man3/Munin::Node::Session.3pm.gz +%{_mandir}/man3/Munin::Node::Utils.3pm.gz +%{_mandir}/man3/Munin::Plugin.3pm.gz +%{_mandir}/man3/Munin::Plugin::Pgsql.3pm.gz +%{_mandir}/man3/Munin::Plugin::SNMP.3pm.gz +%attr(0750, munin, munin) %dir %{logdir} +%attr(0755, munin, munin) %dir %{dbdir} +%attr(0775, nobody, nobody) %dir %{dbdir}/plugin-state +%ghost %{logdir}/munin-node.log +%ghost /run/munin +%dir %{_prefix}/lib/firewalld +%dir %{_prefix}/lib/firewalld/services +%{_prefix}/lib/firewalld/services/munin-node.xml + +%changelog diff --git a/nginx-munin.zip b/nginx-munin.zip new file mode 100644 index 0000000..3be8790 --- /dev/null +++ b/nginx-munin.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ae0ef1144621c2507634adc20afc90c94ae90fa601284556d2168d10f2bb65d +size 9786 diff --git a/perl526.patch b/perl526.patch new file mode 100644 index 0000000..b64b322 --- /dev/null +++ b/perl526.patch @@ -0,0 +1,27 @@ +Index: munin-2.0.32/master/Build.PL +=================================================================== +--- munin-2.0.32.orig/master/Build.PL ++++ munin-2.0.32/master/Build.PL +@@ -1,3 +1,4 @@ ++use lib '.'; + use MasterBuilder; + + use warnings; +Index: munin-2.0.32/node/Build.PL +=================================================================== +--- munin-2.0.32.orig/node/Build.PL ++++ munin-2.0.32/node/Build.PL +@@ -1,3 +1,4 @@ ++use lib '.'; + use NodeBuilder; + + use warnings; +Index: munin-2.0.32/plugins/Build.PL +=================================================================== +--- munin-2.0.32.orig/plugins/Build.PL ++++ munin-2.0.32/plugins/Build.PL +@@ -1,3 +1,4 @@ ++use lib '.'; + use PluginsBuilder; + + use warnings; diff --git a/plugins.conf b/plugins.conf new file mode 100644 index 0000000..03035f4 --- /dev/null +++ b/plugins.conf @@ -0,0 +1,55 @@ +# +# This file contains configuration options for the plugins. Three +# options are understood by munin-node itself: +# +# user # Set the user to run the plugin as +# group # Set the group to run the plugin as +# command # Run instead of the plugin. %c +# expands to what would normally be run. +# env. # Sets in the plugin's environment, see the +# individual plugins to find out which variables they +# care about. +# +# + +[mysql*] +#env.mysqladmin /usr/bin/mysqladmin +#env.mysqluser +#env.mysqlpassword +#env.mysqlopts -u -p + +[exim*] +group mail + +[cps*] +user root + +[apt] +user root + +[vlan*] +user root + +[postfix*] +user root +env.logfile mail + +[dhcpd] +env.leasefile /var/lib/dhcp/db/dhcpd.leases + +[fail2ban] +user root + +[amavis] +user root +env.amavislog /var/log/mail + +[courier*] +env.logtail /usr/bin/logtail + +[perdition] +env.logtail /usr/bin/logtail + +[mailscanner] +env.logtail /usr/bin/logtail +