summaryrefslogtreecommitdiffstats
path: root/system/smokeping
diff options
context:
space:
mode:
Diffstat (limited to 'system/smokeping')
-rw-r--r--system/smokeping/README92
-rwxr-xr-xsystem/smokeping/rc.smokeping145
-rwxr-xr-xsystem/smokeping/rc.smokeping-slave125
-rw-r--r--system/smokeping/slack-desc19
-rw-r--r--system/smokeping/smokeping-2.8.2-no-3rd-party.patch26
-rw-r--r--system/smokeping/smokeping-2.8.2-paths.patch93
-rw-r--r--system/smokeping/smokeping-config.patch135
-rw-r--r--system/smokeping/smokeping.SlackBuild185
-rw-r--r--system/smokeping/smokeping.info10
9 files changed, 830 insertions, 0 deletions
diff --git a/system/smokeping/README b/system/smokeping/README
new file mode 100644
index 0000000000..ce743b71e6
--- /dev/null
+++ b/system/smokeping/README
@@ -0,0 +1,92 @@
+SmokePing is a deluxe latency measurement tool.
+
+It can measure, store and display latency, latency distribution and
+packet loss. SmokePing uses RRDtool to maintain a longterm data-store
+and to draw pretty graphs, giving up to the minute information on the
+state of each network connection.
+
+1. Measures latency as well as latency variation.
+2. Wide variety of probes, ranging from simple ping to web requests and
+ custom protocols.
+3. Advanced alarm system, triggering on configurable 'latency patterns'.
+4. Master/slave deployment model to run measurments from multiple
+ sources in parallel.
+5. Ajax based graph navigation.
+6. Chart mode, to show the most interesting graphs first
+7. Plug-able probes, alarms (matchers) and charting function.
+
+As Smokeping is a web application, installing it is more involved
+than ordinary slackbuilds.
+
+0. smokeping needs to run under its own user/group. This has been
+ assigned to
+the following by SlackBuilds.org, but feel free to change it on your
+system for consistency with local assignments.
+ User: smokeping UID: 383 GID: 383
+ group: smokeping GID: 383
+You can change pass alternate values for the user and group using
+SB_USER, SB_GROUP, SB_UID, SB_GID variables when running the build
+ script.
+
+1. Most of smokeping is installed into normal system directories.
+2. The web part is installed into /var/www/htdocs/smokeping/
+3. You need to configure a web server to serve the web part. This is
+ a reference nginx setup:
+ location /smokeping/ {
+ client_max_body_size 200M;
+ index smokeping.fcgi;
+ chunked_transfer_encoding off;
+ gzip off;
+ location ~ \.fcgi$ {
+ client_max_body_size 200M;
+ fastcgi_intercept_errors on;
+ include /etc/nginx/fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME /srv/http/smokeping/smokeping.fcgi;
+ gzip off;
+ fastcgi_buffering off;
+ chunked_transfer_encoding off;
+ fastcgi_pass unix:/run/smokeping-fcgi.sock;
+
+ }
+ }
+4. The above setup relies on the fact that smokeping.fcgi is started as
+ a fastcgi service by spawn-fcgi, rc.smokeping does this for you.
+ Nginx, or whatever webserver you are using, must be in the
+ "smokeping" group to
+ access the /run/smokeping-fcgi.sock socket.
+
+5. Smokeping uses /ect/smokeping/config" as its
+ configuration file.
+
+6. This build ships a Slackware-style init file /etc/rc.d/rc.smokeping
+ , which
+ is not coming from the package itself. So patches welcome. It is,
+ therefore,
+ shipped as a .new file, because you might want to adjust it.
+
+7. This build does not ship a slave init file for distributed setups.
+ Patches welcome.
+
+8. Smokeping has a lot of configuration files, which might tweak its
+ behaviour. Most of these files are installed as .dist, and will be
+ overwritten on update. Ready-to use .conf files are not provided, the
+ user is expected to copy them as needed.
+
+ The list is:
+ /etc/smokeping/basepage.html.dist -- webpage template
+ /etc/smokeping/tmail.dist -- mail report template
+ /etc/smokeping/smokemail.dist -- some other mail template
+ /etc/smokeping/config.dist -- main configuration file
+ /var/www/htdocs/smokeping/smokeping.fcgi.dist -- fcgi template
+
+9. Smokeping service, _and_ smokeping fcgi service both need access to
+ data files, which are by default in /var/lib/smokeping/.
+ So they both run as the user smokeping.
+ Your webserver should be able to read images from
+ /var/lib/smokeping/images,
+ so you might want to add apache (or whichever user your webserver
+ uses) to the group smokeping.
+
+10. Verify that fcgi works by
+/usr/bin/spawn-fcgi -n -u smokeping -s /run/smokeping-fcgi.sock -M 660\
+-U smokeping -- /var/www/htdocs/smokeping/smokeping.fcgi
diff --git a/system/smokeping/rc.smokeping b/system/smokeping/rc.smokeping
new file mode 100755
index 0000000000..3ed71d2128
--- /dev/null
+++ b/system/smokeping/rc.smokeping
@@ -0,0 +1,145 @@
+#!/bin/bash
+
+#SMOKEPING_VERSION="2.8.3"
+SMOKEPING_PIDFILE="/run/smokeping/smokeping.pid"
+SMOKEPING_USER=@SMOKEPING_USER@
+SMOKEPING_PATH=@SMOKEPING_PATH@
+SMOKEPING_CONFIG_PATH=@SMOKEPING_CONFIG_PATH@
+SMOKEPING_LOG_PATH="/var/log/smokeping.nosyslog.log"
+
+get_child_pids() {
+ if [[ -z "$1" ]]; then echo "get_child_pids:error: \$1 is empty " 1>&2 ; exit 1 ; fi
+ local parent_pid=$1
+ ps -o pid --no-headers --ppid $parent_pid
+}
+
+# Function to recursively get all descendant PIDs
+get_descendant_pids() {
+ if [[ -z "$1" ]]; then echo "get_descendant_pids:error: \$1 is empty " 1>&2 ; exit 1 ; fi
+ local parent_pid=$1
+ local child_pids=$(get_child_pids $parent_pid)
+ for pid in $child_pids; do
+ echo $pid
+ get_descendant_pids $pid
+ done
+}
+
+function start
+{
+ export LC_ALL=C
+ # no idea why this is required
+ # https://github.com/oetiker/SmokePing/issues/29
+ cd /var/lib/smokeping
+
+ mkdir -p /run/smokeping/
+ chown $SMOKEPING_USER /run/smokeping/
+
+ touch "$SMOKEPING_LOG_PATH"
+ chown $SMOKEPING_USER "$SMOKEPING_LOG_PATH"
+
+ if [[ -e $SMOKEPING_PIDFILE && ( "" == "$(cat $SMOKEPING_PIDFILE)" ) ]]
+ then
+ printf "Pid file is empty: %s\n" "$SMOKEPING_PIDFILE" 1>&2
+ elif [[ -e $SMOKEPING_PIDFILE && ( "" != "$(cat $SMOKEPING_PIDFILE)" ) ]]
+ then
+ PID=$(cat "$SMOKEPING_PIDFILE")
+ printf "PID=%s\n" "$PID"
+ if ps --pid "$PID"
+ then
+ printf "Smokeping already running with pid %d.\n" "$PID" 1>&2
+ return 1
+ else
+ printf "You have bogus pid file!\n" 1>&2
+ rm "$SMOKEPING_PIDFILE"
+ fi
+ fi
+
+ /sbin/setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/fping
+ if ! su smokeping -s/bin/sh -c "$SMOKEPING_PATH --config=$SMOKEPING_CONFIG_PATH --logfile=$SMOKEPING_LOG_PATH"
+ then
+ printf "Smokeping failed to start!\n" 1>&2
+ return 2
+ fi
+
+ if [[ ! -e $SMOKEPING_PIDFILE ]]
+ then
+ printf "Smokeping pidfile missing!\n" 1>&2
+ return 3
+ elif [[ "" == $(cat $SMOKEPING_PIDFILE | tr -d '\n' ) ]]
+ then
+ printf "Pid file %s empty.\n" $(cat $SMOKEPING_PIDFILE) 1>&2
+ else
+ PID=$(cat "$SMOKEPING_PIDFILE")
+ if ps --pid "$PID"
+ then
+ :
+ else
+ printf "Smokeping created pidfile, but is not running!\n" 1>&2
+ return 4
+ fi
+ fi
+ rm -f /run/smokeping-fcgi.sock
+ /usr/bin/spawn-fcgi -u $SMOKEPING_USER -s /run/smokeping-fcgi.sock -M 660 -U $SMOKEPING_USER -- /var/www/htdocs/smokeping/smokeping.fcgi
+ return 0
+}
+
+function stop()
+{
+ if [[ ! -e "$SMOKEPING_PIDFILE" ]]; then
+ printf "Pid file %s does not exist!\n" "$SMOKEPING_PIDFILE"
+ return 6
+ elif [[ "" == "$(cat "$SMOKEPING_PIDFILE")" ]] ; then
+ printf "Pid file %s empty!\n" "$SMOKEPING_PIDFILE"
+ return 6
+ fi
+ child_pids=$(get_descendant_pids $(cat "$SMOKEPING_PIDFILE"))
+ printf "Full pid list (smokeping+children):%s\n" "$(cat "$SMOKEPING_PIDFILE") $child_pids"
+ /bin/kill --timeout 3000 TERM --timeout 1000 KILL --signal QUIT $(cat "$SMOKEPING_PIDFILE") $child_pids
+
+ rm -f "$SMOKEPING_PIDFILE"
+
+ if pgrep -f 'bin/smokeping ' -la >/dev/null 2>&1 # the space is important
+ then
+ printf "Killing smokeping failed!\n" 1>&2
+ pgrep -f 'bin/smokeping' -la
+ fi
+ /bin/kill --timeout 3000 TERM --timeout 1000 KILL --signal QUIT $(/usr/sbin/ss -f unix -l -p | grep /run/smokeping-fcgi.sock | sed -E 's/.*pid=([[:digit:]]+),.*/\1/g')
+ rm /run/smokeping-fcgi.sock
+}
+
+case "$1" in
+ start)
+ printf "case up\n"
+ start
+ exit "$?"
+ ;;
+ stop)
+ printf "case down\n"
+ stop
+ exit "$?"
+ ;;
+ status)
+ if [[ -e "$SMOKEPING_PIDFILE" && "" != $(cat "$SMOKEPING_PIDFILE") ]] ; then
+ pstree -s -p $(cat "$SMOKEPING_PIDFILE")
+ else
+ printf "smokeping is not running or not running from this service.\n"
+ fi
+ cgi_pid=$(/usr/sbin/ss -f unix -l -p | grep /run/smokeping-fcgi.sock | sed -E 's/.*pid=([[:digit:]]+),.*/\1/g' 2>/dev/null)
+ if [[ "" == "$cgi_pid" ]] ; then
+ printf "smokeping_cgi is not running or not running from this service.\n"
+ else
+ pstree -s -p "$cgi_pid"
+ fi
+ ;;
+ restart)
+ if ! stop
+ then
+ exit "$?"
+ fi
+ if ! start
+ then
+ exit "$?"
+ fi
+ ;;
+ *) printf "usage: {up,down,restart,status}\n"
+esac
diff --git a/system/smokeping/rc.smokeping-slave b/system/smokeping/rc.smokeping-slave
new file mode 100755
index 0000000000..423bafc259
--- /dev/null
+++ b/system/smokeping/rc.smokeping-slave
@@ -0,0 +1,125 @@
+#!/usr/bin/env bash
+
+
+get_child_pids() {
+ if [[ -z "$1" ]]; then echo "get_child_pids:error: \$1 is empty " 1>&2 ; exit 1 ; fi
+ local parent_pid=$1
+ ps -o pid --no-headers --ppid $parent_pid
+}
+
+# Function to recursively get all descendant PIDs
+get_descendant_pids() {
+ if [[ -z "$1" ]]; then echo "get_descendant_pids:error: \$1 is empty " 1>&2 ; exit 1 ; fi
+ local parent_pid=$1
+ local child_pids=$(get_child_pids $parent_pid)
+ for pid in $child_pids; do
+ echo $pid
+ get_descendant_pids $pid
+ done
+}
+
+export LC_ALL=C
+function qnd_waitpid()
+(
+ while ps -p $1 &> /dev/null
+ do
+ sleep 5
+ done
+)
+cd /tmp
+
+source /etc/smokeping/slave_config.conf || { printf "/etc/smokeping/slave_config.conf not found\n" ; exit 1; }
+LOGFILE=${LOGFILE:-/var/log/smokeping-slave.log}
+CACHEDIR=${CACHEDIR:-/var/lib/smokeping/slave-cache}
+SLAVE_SECRET_PATH=${SLAVE_SECRET_PATH:-/etc/smokeping/slave_secret.conf}
+SMOKEPING_USER=${SMOKEPING_USER:-smokeping}
+if [[ "$MASTER_URL" == "" ]] ; then
+ printf "Set MASTER_URL= in /etc/smokeping/slave_config.conf\n"
+ exit 1
+fi
+if [[ ! -e "$SLAVE_SECRET_PATH" ]] ; then
+ printf "set SLAVE_SECRET_PATH in /etc/smokeping/slave_config.conf\n"
+fi
+chmod a-rwx "$SLAVE_SECRET_PATH"
+SMOKEPING_PIDFILE=/run/smokeping-slave.pid
+
+
+start()
+{
+ cd /var/lib/smokeping/
+
+ mkdir -p "$CACHEDIR"
+ chown $SMOKEPING_USER $CACHEDIR
+
+ touch "$LOGFILE"
+ chown $SMOKEPING_USER "$LOGFILE"
+
+ while true
+ do
+ /sbin/setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/fping
+ printf "\nStarting smokeping: %s\n" "$(date +'%Y-%m-%dT%H:%M:%S')" >> "$LOGFILE"
+ unset LC_ALL
+ unset LC_COLLATE
+ rm -rf "$CACHEDIR"/*.cache
+ printf '\nMONITOR:%s New process\n' $(date +'%Y-%m-%dT%H:%M:%S') >> $LOGFILE
+
+ /bin/su $SMOKEPING_USER -s/bin/bash -c "\
+ /usr/bin/smokeping \
+ --nodaemon \
+ --master-url=$MASTER_URL\
+ --cache-dir=$CACHEDIR \
+ --shared-secret=$SLAVE_SECRET_PATH \
+ --logfile=$LOGFILE &>> $LOGFILE"
+ sync
+ sleep 1
+# qnd_waitpid $(cat "$CACHEDIR"/smokeping.pid)
+ printf "MONITOR:Smokeping died: %s\n" "$(date +'%Y-%m-%dT%H:%M:%S')" | tee "$LOGFILE"
+ sleep 5
+ done & >/dev/null 2>&1
+ WRAPPER_PID=$!
+ echo "$WRAPPER_PID" > /run/smokeping-slave.pid
+}
+
+stop()
+{
+ printf "Killing smokeping slave.\n"
+
+ child_pids=$(get_descendant_pids $(cat "$SMOKEPING_PIDFILE"))
+
+ printf "PIDS=%s" "$(cat "$SMOKEPING_PIDFILE") $child_pids"
+ /bin/kill --timeout 3000 TERM --timeout 1000 KILL --signal QUIT $(cat "$SMOKEPING_PIDFILE") $child_pids
+
+}
+
+
+case "$1" in
+ start)
+ printf "case up\n"
+ start
+ exit "$?"
+ ;;
+ stop)
+ printf "case down\n"
+ stop
+ exit "$?"
+ ;;
+ status)
+ if [[ -e "$SMOKEPING_PIDFILE" && "" != $(cat "$SMOKEPING_PIDFILE") ]] ; then
+ pstree -s -p $(cat "$SMOKEPING_PIDFILE")
+ else
+ printf "smokeping slave is not running or not running from this service.\n"
+ fi
+ ;;
+ restart)
+ if ! stop
+ then
+ exit "$?"
+ fi
+ if ! start
+ then
+ exit "$?"
+ fi
+ ;;
+ *) printf "usage: {up,down,restart,status}\n"
+esac
+
diff --git a/system/smokeping/slack-desc b/system/smokeping/slack-desc
new file mode 100644
index 0000000000..8823c7aa95
--- /dev/null
+++ b/system/smokeping/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+smokeping: smokeping (the father of all monitoring systems)
+smokeping:
+smokeping: Smokeping is the first available systems and network monitoring
+smokeping: system. Its logic is very simple: ping a machine from the list, and
+smokeping: record response time into a database. Display the graphs on a
+smokeping: webpage.
+smokeping: Most modern monitoring systems, such as Prometheus, learned from
+smokeping: smokeping's experience, and many reuse its components, such as fping
+smokeping: and rrdtool.
+smokeping:
+smokeping:
diff --git a/system/smokeping/smokeping-2.8.2-no-3rd-party.patch b/system/smokeping/smokeping-2.8.2-no-3rd-party.patch
new file mode 100644
index 0000000000..bd4734cb4e
--- /dev/null
+++ b/system/smokeping/smokeping-2.8.2-no-3rd-party.patch
@@ -0,0 +1,26 @@
+diff --git a/Makefile.am b/Makefile.am
+index 1dc34c7..8c00ec5 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -16,7 +16,7 @@
+
+ AUTOMAKE_OPTIONS = foreign
+
+-SUBDIRS = lib thirdparty bin doc etc htdocs
++SUBDIRS = lib bin doc etc htdocs
+
+ EXTRA_DIST = COPYRIGHT CHANGES CONTRIBUTORS LICENSE cpanfile VERSION README.md
+
+diff --git a/configure.ac b/configure.ac
+index 33b75c5..4ce4a12 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -140,7 +140,7 @@ NOTES
+ exit 1
+ fi
+
+-AC_CONFIG_FILES([Makefile bin/Makefile doc/Makefile htdocs/Makefile etc/Makefile lib/Makefile thirdparty/Makefile etc/config.dist])
++AC_CONFIG_FILES([Makefile bin/Makefile doc/Makefile htdocs/Makefile etc/Makefile lib/Makefile etc/config.dist])
+
+ AC_SUBST(VERSION)
+
diff --git a/system/smokeping/smokeping-2.8.2-paths.patch b/system/smokeping/smokeping-2.8.2-paths.patch
new file mode 100644
index 0000000000..1989ed061a
--- /dev/null
+++ b/system/smokeping/smokeping-2.8.2-paths.patch
@@ -0,0 +1,93 @@
+diff --git a/bin/smokeinfo b/bin/smokeinfo
+index 2b38b86..ff96674 100755
+--- a/bin/smokeinfo
++++ b/bin/smokeinfo
+@@ -2,8 +2,7 @@
+ use strict;
+ use warnings;
+
+-use lib (split /:/, q{}); # PERL5LIB
+-use FindBin;use lib "$FindBin::RealBin/../lib";use lib "$FindBin::RealBin/../thirdparty/lib/perl5"; # LIBDIR
++use lib qw(/usr/share/perl5);
+
+ use Smokeping::Info;
+ use Getopt::Long 2.25 qw(:config no_ignore_case);
+diff --git a/bin/smokeping b/bin/smokeping
+index 1dae42a..550beb5 100755
+--- a/bin/smokeping
++++ b/bin/smokeping
+@@ -4,13 +4,10 @@
+ use strict;
+ use warnings;
+
+-use FindBin;
+-use lib (split /:/, q{}); # PERL5LIB
+-use lib "$FindBin::RealBin/../lib";use lib "$FindBin::RealBin/../thirdparty/lib/perl5"; # LIBDIR
+-
++use lib qw(/usr/share/perl5);
+ use Smokeping;
+
+-Smokeping::main("$FindBin::RealBin/../etc/config");
++Smokeping::main("/etc/smokeping/config");
+
+ =head1 NAME
+
+diff --git a/bin/smokeping_cgi b/bin/smokeping_cgi
+index 610118c..9a995c1 100755
+--- a/bin/smokeping_cgi
++++ b/bin/smokeping_cgi
+@@ -4,9 +4,7 @@
+ use strict;
+ use warnings;
+
+-use FindBin;
+-use lib (split /:/, q{}); # PERL5LIB
+-use lib "$FindBin::RealBin/../lib";use lib "$FindBin::RealBin/../thirdparty/lib/perl5"; # LIBDIR
++use lib qw(/usr/share/perl5);
+
+ # don't bother with zombies
+ $SIG{CHLD} = 'IGNORE';
+@@ -17,7 +15,7 @@ use Smokeping;
+
+ use CGI::Fast;
+
+-my $cfg = (shift @ARGV) || "$FindBin::Bin/../etc/config";
++my $cfg = (shift @ARGV) || "/etc/smokeping/config";
+
+
+ while (my $q = new CGI::Fast) {
+diff --git a/bin/tSmoke b/bin/tSmoke
+index 6b56479..db9ef92 100755
+--- a/bin/tSmoke
++++ b/bin/tSmoke
+@@ -52,9 +52,7 @@ use warnings;
+ #
+ # Point the lib variables to your implementation
+
+-use lib (split /:/, q{}); # PERL5LIB
+-use FindBin;use lib "$FindBin::RealBin/../lib";use lib "$FindBin::RealBin/../thirdparty/lib/perl5"; # LIBDIR
+-
++use lib qw(/usr/share/perl5);
+
+ use Smokeping;
+ use Net::SMTP;
+@@ -63,7 +61,7 @@ use Pod::Usage;
+ use RRDs;
+
+ # Point to your Smokeping config file
+-my $cfgfile = (shift @ARGV) || "$FindBin::Bin/../etc/config";
++my $cfgfile = "/etc/smokeping/config";
+
+ # global variables
+ my $cfg;
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 2209134..ab09330 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -31,5 +31,5 @@ MATCH := $(wildcard Smokeping/matchers/*.pm)
+
+ EXTRA_DIST = $(PM) $(SP) $(SORT) $(PROBE) $(MATCH)
+
+-perllibdir = $(prefix)/lib
++perllibdir = $(prefix)/share/perl5
+ nobase_perllib_DATA = $(EXTRA_DIST)
diff --git a/system/smokeping/smokeping-config.patch b/system/smokeping/smokeping-config.patch
new file mode 100644
index 0000000000..724798b67c
--- /dev/null
+++ b/system/smokeping/smokeping-config.patch
@@ -0,0 +1,135 @@
+diff --git a/etc/config.dist.in b/etc/config.dist.in
+index 8b9fdf3..b6f6180 100644
+--- a/etc/config.dist.in
++++ b/etc/config.dist.in
+@@ -1,19 +1,19 @@
+ *** General ***
+
+-owner = Peter Random
+-contact = some@address.nowhere
++owner = Super User
++contact = root@localhost
+ mailhost = my.mail.host
+-sendmail = @SENDMAIL@
++sendmail = /usr/sbin/sendmail
+ # NOTE: do not put the Image Cache below cgi-bin
+ # since all files under cgi-bin will be executed ... this is not
+ # good for images.
+-imgcache = @prefix@/cache
+-imgurl = cache
+-datadir = @prefix@/data
+-piddir = @prefix@/var
+-cgiurl = http://some.url/smokeping.cgi
+-smokemail = @prefix@/etc/smokemail.dist
+-tmail = @prefix@/etc/tmail.dist
++imgcache = /var/lib/smokeping/imgcache
++imgurl = /smokeping/images
++datadir = /var/lib/smokeping
++piddir = /run/smokeping/
++cgiurl = http://localhost/smokeping/sm.cgi
++smokemail = /etc/smokeping/smokemail
++tmail = /etc/smokeping/tmail
+ # specify this to get syslog logging
+ syslogfacility = local0
+ # each probe is now run in its own process
+@@ -21,8 +21,8 @@ syslogfacility = local0
+ # concurrentprobes = no
+
+ *** Alerts ***
+-to = alertee@address.somewhere
+-from = smokealert@company.xy
++to = root@localhost
++from = root@localhost
+
+ +someloss
+ type = loss
+@@ -47,7 +47,7 @@ AVERAGE 0.5 144 720
+
+ *** Presentation ***
+
+-template = @prefix@/etc/basepage.html.dist
++template = /etc/smokeping/basepage.html
+ htmltitle = yes
+ graphborders = no
+
+@@ -110,7 +110,7 @@ unison_tolerance = 2
+ binary = /usr/sbin/fping
+
+ *** Slaves ***
+-secrets=@prefix@/etc/smokeping_secrets.dist
++secrets=/etc/smokeping/smokeping_secrets
+ +boomer
+ display_name=boomer
+ color=0000ff
+@@ -121,28 +121,57 @@ color=00ff00
+
+ *** Targets ***
+
++#menuextra = <a target='_blank' href='/smokeping/tr.html{HOST}' class='{CLASS}' \
++# onclick="window.open(this.href,this.target, \
++# 'width=800,height=500,toolbar=no,location=no,status=no,scrollbars=no'); \
++# return false;">*</a>
++#
+ probe = FPing
+
+ menu = Top
+ title = Network Latency Grapher
+-remark = Welcome to the SmokePing website of xxx Company. \
++remark = Welcome to the SmokePing website of <b>Insert Company Name Here</b>. \
+ Here you will learn all about the latency of our network.
+
+-+ Test
+-menu= Targets
+-#parents = owner:/Test/James location:/
+++ Ping
+
+-++ James
++menu = Alpine
++title = Alpine Pings
+
+-menu = James
+-title =James
+-alerts = someloss
+-slaves = boomer slave2
+-host = james.address
++++ AlpinelinuxOrg
+
+-++ MultiHost
++menu = alpinelinux.org
++title = Alpine Linux Webserver
++host = alpinelinux.org
+
+-menu = Multihost
+-title = James and James as seen from Boomer
+-host = /Test/James /Test/James~boomer
++++ DocsAlpinelinuxOrg
++
++menu = docs.alpinelinux.org
++title = Alpine Linux Docs Webserver
++host = docs.alpinelinux.org
++
++++ PkgsAlpinelinuxOrg
++
++menu = pkgs.alpinelinux.org
++title = Alpine Linux Packages
++host = pkgs.alpinelinux.org
++
++#
++# Lots of more options are available, please have a look in the included documentation.
++#
++
++
++#++ James
++
++#menu = James
++#title =James
++#alerts = someloss
++#slaves = boomer slave2
++#host = james.address
++
++#++ MultiHost
++
++#menu = Multihost
++#title = James and James as seen from Boomer
++#host = /Test/James /Test/James~boomer
+
diff --git a/system/smokeping/smokeping.SlackBuild b/system/smokeping/smokeping.SlackBuild
new file mode 100644
index 0000000000..74b7b3bc4c
--- /dev/null
+++ b/system/smokeping/smokeping.SlackBuild
@@ -0,0 +1,185 @@
+#!/bin/bash
+
+# Copyright Lockywolf, lockywolf gmail.com
+# Based on the work of Patrick J. Volkerding
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=smokeping
+VERSION=${VERSION:-2.8.2}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+PKGTYPE=${PKGTYPE:-tgz}
+
+ARCH=${ARCH:-}
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) export ARCH=i586 ;;
+ arm*) export ARCH=arm ;;
+ *) export ARCH=$( uname -m ) ;;
+ esac
+fi
+
+PRINT_PACKAGE_NAME=${PRINT_PACKAGE_NAME:-}
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O0 -fPIC -ggdb"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+SB_UID=${MUID:-383}
+SB_GID=${MGID:-383}
+SB_USER=${NTOPUSER:-smokeping}
+SB_GROUP=${NTOPGROUP:-smokeping}
+
+if ! getent group $SB_GROUP 2>&1 > /dev/null; then
+ echo " You must have an $SB_GROUP group to run this script."
+ echo " # groupadd -g $SB_GID $PRGNAM"
+ exit 1
+elif ! getent passwd $SB_USER 2>&1 > /dev/null; then
+ echo " You must have a $SB_USER user to run this script."
+ echo " # useradd -u $SB_UID -g $SB_GID -d /var/lib/$PRGNAM $SB_USER"
+ exit 1
+fi
+
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+
+cd $TMP
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.?z* || exit 1
+cd $PRGNAM-$VERSION || exit 1
+
+
+chown -R root:root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \;
+
+
+
+mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}
+
+
+patch -p1 < $CWD/smokeping-2.8.2-no-3rd-party.patch
+patch -p1 < $CWD/smokeping-2.8.2-paths.patch
+patch -p1 < $CWD/smokeping-config.patch
+
+rm -rf configure
+sed -i "s|\$(distdir)/lib|\$(distdir)/lib${LIBDIRSUFFIX}|g" Makefile.am
+sed -i "s|perllibdir = \$(prefix)/lib|perllibdir = \$(prefix)/share/perl5|g" ./lib/Makefile.am
+autoreconf -i
+
+export LC_ALL=C
+
+#PERL5LIB=/usr/share/perl5/ \
+CFLAGS="$SLKCFLAGS" \
+ ./configure \
+ --prefix=/usr \
+ --with-htdocs-dir=/var/www/htdocs/smokeping \
+ --mandir=/usr/man \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc/$PRGNAM \
+ --localstatedir=/var/ \
+ --docdir=/usr/doc/$PRGNAM-$VERSION
+#mkdir -p thirdparty/lib/perl5/removeme
+rm -rf thirdparty/CPAN
+mkdir thirdparty/CPAN
+touch cpanfile "thirdparty/cpanfile-$(perl -MConfig -e 'my $v =$Config{version}; $v =~ s/.\d+$//;print $v;').snapshot"
+touch thirdparty/touch thirdparty/CPAN/touch
+
+DESTDIR=$PKG gmake || exit 1
+gmake DESTDIR=$PKG install || exit 1
+
+#rmdir $PKG/usr/lib${LIBDIRSUFFIX}/removeme/
+
+mkdir -p $PKG/etc/rc.d/
+
+cat $CWD/rc.smokeping > $PKG/etc/rc.d/rc.smokeping.template
+sed -i "s/@SMOKEPING_USER@/$SB_USER/g" $PKG/etc/rc.d/rc.smokeping.template
+sed -i "s|@SMOKEPING_PATH@|/usr/bin/smokeping|g" $PKG/etc/rc.d/rc.smokeping.template
+sed -i "s|@SMOKEPING_GROUP@|$SB_GROUP|g" $PKG/etc/rc.d/rc.smokeping.template
+sed -i "s|@SMOKEPING_CONFIG_PATH@|/etc/smokeping/config|g" $PKG/etc/rc.d/rc.smokeping.template
+#mv $CWD/rc.smokeping.template > $PKG/etc/rc.d/rc.smokeping.new
+mv $PKG/etc/rc.d/rc.smokeping.template $PKG/etc/rc.d/rc.smokeping
+chmod +x $PKG/etc/rc.d/rc.smokeping
+cat $CWD/rc.smokeping-slave > $PKG/etc/rc.d/rc.smokeping-slave
+chmod +x $PKG/etc/rc.d/rc.smokeping-slave
+
+install -d -m 755 -o smokeping -g smokeping $PKG/var/lib/$PRGNAM
+install -d -m 755 -o smokeping -g smokeping $PKG/var/lib/$PRGNAM/data
+install -d -m 755 -o smokeping -g smokeping $PKG/var/lib/$PRGNAM/imgcache
+ln -sf /var/lib/$PRGNAM/imgcache ${PKG}/var/www/htdocs/${PRGNAM}/images
+
+
+#mkdir -p $PKG/opt/${PRGNAM}-${VERSION}/data
+#mkdir -p $PKG/opt/${PRGNAM}-${VERSION}/var
+#mkdir -p $PKG/opt/${PRGNAM}-${VERSION}/imgcache
+
+#chown -R apache:apache $PKG/opt/${PRGNAM}-${VERSION}/{data,var,imgcache}
+
+#ln -s smokeping.fcgi.dist ${PKG}/var/www/htdocs/${PRGNAM}/smokeping.fcgi
+#ln -s /opt/${PRGNAM}-${VERSION}/imgcache ${PKG}/var/www/htdocs/${PRGNAM}/imgcache
+
+find $PKG/usr/man -type f -exec gzip -9 {} \;
+for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
+
+mkdir -p $PKG/usr/doc/${PRGNAM}-$VERSION
+cp -a \
+ CHANGES COPYRIGHT README.md VERSION \
+ CONTRIBUTORS LICENSE TODO \
+ $PKG/usr/doc/${PRGNAM}-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+cat "$CWD"/README > $PKG/usr/doc/$PRGNAM-$VERSION/README.sbo
+
+cat > $PKG/usr/doc/${PRGNAM}-$VERSION/dothtaccess <<"END"
+Options +ExecCGI
+Options +FollowSymlinks
+AddHandler cgi-script .fcgi
+AddHandler cgi-script .dist
+DirectoryIndex smokeping.fcgi
+END
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/system/smokeping/smokeping.info b/system/smokeping/smokeping.info
new file mode 100644
index 0000000000..14fff24d58
--- /dev/null
+++ b/system/smokeping/smokeping.info
@@ -0,0 +1,10 @@
+PRGNAM="smokeping"
+VERSION="2.8.2"
+HOMEPAGE="https://oss.oetiker.ch/smokeping/"
+DOWNLOAD="https://oss.oetiker.ch/smokeping/pub/smokeping-2.8.2.tar.gz"
+MD5SUM="cce2bf3f59736ecf77e59d64db60e3fb"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="rrdtool fping spawn-fcgi perl-CGI perl-CGI-Fast perl-Config-Grammar perl-digest-hmac libwww-perl"
+MAINTAINER="Lockywolf"
+EMAIL="for_sbo.smokeping_2023-11-24@lockywolf.net"