From 2a1acd674a1da8ce964924a6199ccaff560ffe10 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 14 Sep 2026 17:53:52 +0200 Subject: [PATCH] package/lldpd: rework start script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit check-package reports six warnings on S60lldpd: indentation with spaces, no DAEMON variable, and shellcheck complaints. The script also masks failures, the exit status of "[ $? = 0 ] && echo OK || echo FAIL" is the one of echo, so start and stop always return success. Stopping does not wait for the daemon to exit either, so a restart can race the instance on its way out. Rewrite it after package/busybox/S01syslogd, as the manual asks. lldpd daemonizes and writes the PID file itself, but does not remove it on exit, so pass the PID file to both start-stop-daemon and the daemon and drop the stale file once the process is gone. Also pick up arguments from /etc/default/lldpd and add the customary reload alias. Signed-off-by: Joachim Wiberg [Julien: remove .checkpackageignore entry to fix check-package error] Signed-off-by: Julien Olivain (cherry picked from commit 2fd1f6b629862f48e832d7e0379a7b48dc9eae42) Signed-off-by: Raphaël Mélotte --- .checkpackageignore | 1 - package/lldpd/S60lldpd | 80 ++++++++++++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 23 deletions(-) diff --git a/.checkpackageignore b/.checkpackageignore index c3ec943075..7c66dd52df 100644 --- a/.checkpackageignore +++ b/.checkpackageignore @@ -552,7 +552,6 @@ package/lirc-tools/0001-plugins-devinput.c-fix-build-with-musl-1.2.0.patch lib_p package/lirc-tools/0002-configure-add-disable-doc-option.patch lib_patch.Upstream package/lirc-tools/S25lircd lib_sysv.Indent lib_sysv.Variables package/live555/0001-Add-a-pkg-config-file-for-the-shared-libraries.patch lib_patch.Upstream -package/lldpd/S60lldpd Shellcheck lib_sysv.Indent lib_sysv.Variables package/lm-sensors/0001-no-host-ldconfig.patch lib_patch.Upstream package/lmbench/0001-scripts-build-use-bin-bash-as-shell.patch lib_patch.Upstream package/lmbench/0002-src-Makefile-add-lmbench-to-list-of-executables.patch lib_patch.Upstream diff --git a/package/lldpd/S60lldpd b/package/lldpd/S60lldpd index 3dfa6c1aa1..79605c2f02 100644 --- a/package/lldpd/S60lldpd +++ b/package/lldpd/S60lldpd @@ -1,25 +1,61 @@ #!/bin/sh -# -# Controls lldpd. -# -case $1 in - start) - printf "Starting lldpd: " - start-stop-daemon -S -q -p /var/run/lldpd.pid --exec /usr/sbin/lldpd - [ $? = 0 ] && echo "OK" || echo "FAIL" - ;; - stop) - printf "Stopping lldpd: " - start-stop-daemon -K -q -p /var/run/lldpd.pid - [ $? = 0 ] && echo "OK" || echo "FAIL" - ;; - restart) - $0 stop - $0 start - ;; - *) - echo "Usage: $0 {start|stop|restart}" - exit 1 - ;; +DAEMON="lldpd" +PIDFILE="/var/run/$DAEMON.pid" + +LLDPD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +# lldpd daemonizes and creates the PID file itself, so tell it where to +# put it, but it does not remove it on exit. +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon --start --pidfile "$PIDFILE" \ + --exec "/usr/sbin/$DAEMON" \ + -- -p "$PIDFILE" $LLDPD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon --stop --pidfile "$PIDFILE" \ + --exec "/usr/sbin/$DAEMON" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + return "$status" + fi + while start-stop-daemon --stop --test --quiet --pidfile "$PIDFILE" \ + --exec "/usr/sbin/$DAEMON"; do + sleep 0.1 + done + rm -f "$PIDFILE" + return "$status" +} + +restart() { + stop + start +} + +case "$1" in + start|stop|restart) + "$1";; + reload) + # Restart, since there is no true "reload" feature. + restart;; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 esac