Subject: bug#699: smokeping: Init script fails to stop smokeping

From: TS Lura <[email-masked]>
Date: Mon, 8 Aug 2022 22:11:27 +0200

Package: smokeping
Version: 2.7.3-3
Severity: normal

Dear Maintainer,

I wanted to restart my smokeping daemon after a change of my config files.
I wanted to run the command /etc/init.d/smokeping stop
But the smokeping process did not terminate.
I wanted the smokeping process to terminate.

I have supplied a patch.

If you change the line 131 in /etc/init.d/smokeping from:
    start-stop-daemon --oknodo --stop --retry 3 --quiet --pidfile
$PIDFILE --exec $DAEMON --signal 15
to
    start-stop-daemon --oknodo --stop --retry 3 --quiet --pidfile
$PIDFILE --user $DAEMON_USER --signal 15

The command /etc/init.d/smokeping stop , works. e.g. The smokeping
daemon is killed.

-- System Information:
Distributor ID:	Devuan
Description:	Devuan GNU/Linux 4 (chimaera)
Release:	4
Codename:	chimaera
Architecture: x86_64

Kernel: Linux 5.10.0-16-amd64 (SMP w/4 CPU threads)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8),
LANGUAGE=en_GB:en
Shell: /bin/sh linked to /bin/dash
Init: sysvinit (via /sbin/init)
LSM: AppArmor: enabled

Versions of packages smokeping depends on:
ii  adduser                                    3.118
ii  debianutils                                4.11.2
ii  exim4-daemon-light [mail-transport-agent]  4.94.2-7
ii  fping                                      5.0-1
ii  libcgi-fast-perl                           1:2.15-1
ii  libconfig-grammar-perl                     1.13-3
ii  libdigest-hmac-perl                        1.03+dfsg-2.1
ii  libjs-cropper                              1.2.2-1.1
ii  libjs-prototype                            1.7.1-3.1
ii  libjs-scriptaculous                        1.9.0-2.1
ii  librrds-perl                               1.7.2-3+b7
ii  libsnmp-session-perl                       1.14~git20201002.0dedded-1
ii  liburi-perl                                5.08-1
ii  libwww-perl                                6.52-1
ii  lsb-base                                   11.1.0
ii  perl                                       5.32.1-4+deb11u2
ii  ucf                                        3.0043

Versions of packages smokeping recommends:
ii  apache2 [httpd-cgi]        2.4.54-1~deb11u1
ii  bind9-dnsutils [dnsutils]  1:9.16.27-1~deb11u1
pn  echoping                   <none>
ii  libsocket6-perl            0.29-1+b3

Versions of packages smokeping suggests:
ii  curl                   7.74.0-1.3+deb11u1
pn  libauthen-radius-perl  <none>
ii  libio-socket-ssl-perl  2.069-1
pn  libnet-dns-perl        <none>
pn  libnet-ldap-perl       <none>
pn  libnet-telnet-perl     <none>
ii  openssh-client         1:8.4p1-5+deb11u1

-- Configuration Files:
/etc/init.d/smokeping changed:
set -e
. /lib/lsb/init-functions
DAEMON=/usr/sbin/smokeping
NAME=smokeping
DESC="latency logger daemon"
CONFIG=/etc/smokeping/config
PIDFILE=/var/run/smokeping/$NAME.pid
DAEMON_USER=smokeping
DEFAULTS=/etc/default/smokeping
MODE=master
DAEMON_ARGS="--config=$CONFIG"
unset LC_ALL
test -f "$DAEMON" || exit 0
if [ -f "$DEFAULTS" ]
then
    . "$DEFAULTS"
fi
check_slave() {
    if [ "$MODE" != "slave" ]
    then
        return
    fi
    if [ -z "$SHARED_SECRET" ]
    then
        log_progress_msg "(missing \$SHARED_SECRET setting)"
        log_end_msg 6 # program is not configured
        exit 6
    fi
    if [ ! -r "$SHARED_SECRET" ]
    then
        log_progress_msg "(invalid \$SHARED_SECRET setting)"
        log_end_msg 2 # invalid or excess argument(s)
        exit 2
    fi
    if [ -z "$MASTER_URL" ]
    then
        log_progress_msg "(missing \$MASTER_URL setting)"
        log_end_msg 6 # program is not configured
        exit 6
    fi
    DAEMON_ARGS="$DAEMON_ARGS --master-url $MASTER_URL --shared-secret
$SHARED_SECRET"
    if [ -n "$SLAVE_NAME" ]
    then
        DAEMON_ARGS="$DAEMON_ARGS --slave-name $SLAVE_NAME"
    fi
    DAEMON_ARGS="$DAEMON_ARGS --cache-dir /var/lib/smokeping"
    DAEMON_ARGS="$DAEMON_ARGS --pid-dir /var/run/smokeping"
}
check_config () {
    echo "Checking smokeping configuration file syntax..."
    # Check whether the configuration file is available
    if [ ! -r "$CONFIG" ] && [ "$MODE" = "master" ]
    then
        log_progress_msg "($CONFIG does not exist)"
        log_end_msg 6 # program is not configured
        exit 6
    fi
    if [ ! -d /var/run/smokeping ]; then
        mkdir /var/run/smokeping
        chown ${DAEMON_USER}.root /var/run/smokeping
        chmod 0755 /var/run/smokeping
    fi
    ${DAEMON} --config=${CONFIG} --check || exit 6
}
case "$1" in
    start)
        check_config
        log_daemon_msg "Starting $DESC" $NAME
        check_slave
        set +e
        pidofproc -p "$PIDFILE" "$DAEMON" > /dev/null
        STATUS=$?
        set -e
        if [ "$STATUS" = 0 ]
        then
            log_progress_msg "already running"
            log_end_msg $STATUS
            exit $STATUS
        fi
        set +e
        start-stop-daemon --start --quiet --exec $DAEMON --oknodo \
            --chuid $DAEMON_USER --pidfile $PIDFILE \
            -- $DAEMON_ARGS \
            | logger -p daemon.notice -t $NAME
        STATUS=$?
        set -e
        log_end_msg $STATUS
        exit $STATUS
        ;;
    stop)
        log_daemon_msg "Shutting down $DESC" $NAME
        set +e
        start-stop-daemon --oknodo --stop --retry 3 --quiet --pidfile
$PIDFILE --user $DAEMON_USER --signal 15
        STATUS=$?
        set -e
        log_end_msg $STATUS
        exit $STATUS
        ;;
    restart)
        # Restart service (if running) or start service
        $0 stop
        $0 start
        ;;
    reload|force-reload)
        check_config
        log_action_begin_msg "Reloading $DESC configuration"
        set +e
        $DAEMON --reload $DAEMON_ARGS | logger -p daemon.notice -t smokeping
        STATUS=$?
        set -e
        if [ "$STATUS" = 0 ]
        then
            log_action_end_msg 0 "If the CGI has problems reloading,
see README.Debian."
        else
            log_action_end_msg $STATUS
        fi
        exit $STATUS
        ;;
    check)
	check_config
	;;
    status)
        log_daemon_msg "Checking $DESC status" $NAME
        # Use pidofproc to check the status of the service,
        # pidofproc returns the exit status code of 0 when it the process is
        # running.
        # LSB defined exit status codes for status:
        # 0    program is running or service is OK
        # 1    program is dead and /var/run pid file exists
        # 2    program is dead and /var/lock lock file exists
        # 3    program is not running
        # 4    program or service status is unknown
        # 5-199    reserved (5-99 LSB, 100-149 distribution, 150-199
applications)
        set +e
        pidofproc -p "$PIDFILE" "$DAEMON" > /dev/null
        STATUS=$?
        log_progress_msg "(status $STATUS)"
        log_end_msg 0
        set -e
        exit $STATUS
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart|force-reload|reload}"
        exit 1
        ;;
esac

/etc/smokeping/config.d/Probes changed:
 *** Probes ***
 + FPing
 binary = /usr/bin/fping

/etc/smokeping/config.d/Targets changed:
*** Targets ***
probe = FPing
menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of xxx Company. \
         Here you will learn all about the latency of our network.
+ Local
menu = Local
title = Local Network
++ LocalMachine
menu = Local Machine
title = This host
host = localhost

-- no debconf information

---

From: Mark Hindley <[email-masked]>
Date: Tue, 9 Aug 2022 07:33:23 +0100

Control: tags -1 debian

> Severity: normal

Thanks for this. SMokeping is not a forked package and Devuan uses Debian's
packages directly without recompilation. Please report this directly to Debian's
BTS to be addressed.

Thanks

Mark