Package: dmucs Version: 0.6.1-2.1 Severity: important I've been wondering for years why dmucs never worked in my network. Finally traced the start scripts:
if start_server && server_running ; then ... if start_loadavg && running ; then start_server and start_loadavg don't create a valid PID file for some indeterminate time after start-stop-daemon fork off a dmucs/loadavg process. + log_daemon_msg 'Starting dmucs distcc coordinator ' dmucs + '[' -z 'Starting dmucs distcc coordinator ' ']' + log_daemon_msg_pre 'Starting dmucs distcc coordinator ' dmucs + log_use_fancy_output + TPUT=/usr/bin/tput + EXPR=/usr/bin/expr + '[' -t 1 ']' + '[' xxterm '!=' x ']' + '[' xxterm '!=' xdumb ']' + '[' -x /usr/bin/tput ']' + '[' -x /usr/bin/expr ']' + /usr/bin/tput hpa 60 + /usr/bin/tput setaf 1 + '[' -z ']' + FANCYTTY=1 + case "$FANCYTTY" in + true + echo -n '[....] ' [....] + '[' -z dmucs ']' + echo -n 'Starting dmucs distcc coordinator : dmucs' Starting dmucs distcc coordinator : dmucs+ log_daemon_msg_post 'Starting dmucs distcc coordinator ' dmucs + : + server_running + '[' '!' -f /var/run/dmucs.pid ']' + return 1 + start_server + start-stop-daemon --background --make-pidfile --start --pidfile /var/run/dmucs.pid --exec /usr/sbin/dmucs -- + errcode=0 + return 0 + server_running + '[' '!' -f /var/run/dmucs.pid ']' + return 1 + log_end_msg 1 Bugger. Bails out with failure message instead of continuuing on to start loadavg. A quick "fix" is to: if start_server && sleep 5 && server_running ; then ... if start_loadavg && sleep 5 && running ; then but surely there's a better way (eg, remove the test entirely, since I've never seen any other init script do something like this). -- System Information: Debian Release: 7.8 APT prefers stable APT policy: (990, 'stable'), (500, 'stable-updates'), (5, 'testing'), (2, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.17.0-trunk-amd64 (SMP w/8 CPU cores) Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages dmucs depends on: ii libc6 2.19-18 ii libgcc1 1:4.9.2-10 ii libstdc++6 4.9.2-10 dmucs recommends no packages. dmucs suggests no packages. -- Configuration Files: /etc/default/dmucs changed: SERVER=yes USE_SERVER=dirac DIETIME=5 /etc/dmucs.conf changed: dirac 8 10 gamow 2 6 fs 4 3 maxwell 2 2 /etc/init.d/dmucs changed: PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=dmucs DAEMON=/usr/sbin/loadavg NAME2=loadavg DAEMON_WRAPPER=$DAEMON DESC="dmucs client daemon" PIDFILE=/var/run/dmucs_loadavg.pid SERVER_DAEMON=/usr/sbin/dmucs SERVER_DAEMON_WRAPPER=$SERVER_DAEMON SERVER_NAME2=dmucs SERVER_DESC="dmucs distcc coordinator" SERVER_PIDFILE=/var/run/dmucs.pid LOGDIR=/var/log/dmucs test -x $DAEMON || exit 0 test -x $DAEMON_WRAPPER || exit 0 test -x $SERVER_DAEMON || exit 0 test -x $SERVER_DAEMON_WRAPPER || exit 0 . /lib/lsb/init-functions DODTIME=10 # Time to wait for the server to die, in seconds # If this value is set too low you might not # let some servers to die gracefully and # 'restart' will not work LOGFILE=$LOGDIR/$NAME.log # Server logfile DAEMONUSER=nobody if [ -f /etc/default/$NAME ] ; then . /etc/default/$NAME fi if [ -z "$USE_SERVER" -a ! "$SERVER" = "yes" ]; then log_warning_msg "please edit /etc/default/$NAME to enable dmucs" exit 0 fi DAEMON_OPTS="-s $USE_SERVER" SERVER_DAEMON_OPTS="" set -e running_pid() { pid=$1 name=$2 [ -z "$pid" ] && return 1 [ ! -d /proc/$pid ] && return 1 cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` # Is this the expected server [ "$cmd" != "$name" ] && return 1 return 0 } running() { # Check if the process is running looking at /proc # (works for all users) # No pidfile, probably no daemon present [ ! -f "$PIDFILE" ] && return 1 pid=`cat $PIDFILE` running_pid $pid $DAEMON_WRAPPER || return 1 return 0 } server_running() { # Check if the process is running looking at /proc # (works for all users) # No pidfile, probably no daemon present [ ! -f "$SERVER_PIDFILE" ] && return 1 pid=`cat $SERVER_PIDFILE` running_pid $pid $SERVER_DAEMON_WRAPPER || return 1 return 0 } start_server() { start-stop-daemon --background --make-pidfile --start --pidfile $SERVER_PIDFILE --exec $SERVER_DAEMON -- $SERVER_DAEMON_OPTS errcode=$? return $errcode } start_loadavg() { start-stop-daemon --background --make-pidfile --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS errcode=$? return $errcode } stop_loadavg() { start-stop-daemon --make-pidfile --stop --pidfile $PIDFILE --exec $DAEMON errcode=$? return $errcode } stop_server() { start-stop-daemon --make-pidfile --stop --pidfile $SERVER_PIDFILE --exec $SERVER_DAEMON errcode=$? return $errcode } force_stop() { [ ! -e "$PIDFILE" ] && return if running ; then kill -15 $pid # Is it really dead? sleep "$DIETIME"s if running ; then kill -9 $pid sleep "$DIETIME"s if running ; then echo "Cannot kill $NAME (pid=$pid)!" exit 1 fi fi fi rm -f $PIDFILE } case "$1" in start) if [ "$SERVER" = "yes" ]; then log_daemon_msg "Starting $SERVER_DESC " "$SERVER_NAME2" # Check if it's running first if server_running ; then log_progress_msg "apparently already running" log_end_msg 0 exit 0 fi if start_server && sleep 5 && server_running ; then # It's ok, the server started and is running log_end_msg 0 else # Either we could not start it or it is not running # after we did # NOTE: Some servers might die some time after they start, # this code does not try to detect this and might give # a false positive (use 'status' for that) log_end_msg 1 fi fi if [ "$USE_SERVER" ]; then log_daemon_msg "Starting $DESC " "$NAME2" # Check if it's running first if running ; then log_progress_msg "apparently already running" log_end_msg 0 exit 0 fi if start_loadavg && sleep 5 && running ; then # It's ok, the server started and is running log_end_msg 0 else # Either we could not start it or it is not running # after we did # NOTE: Some servers might die some time after they start, # this code does not try to detect this and might give # a false positive (use 'status' for that) log_end_msg 1 fi fi ;; stop) if [ "$SERVER" = "yes" ]; then log_daemon_msg "Stopping $SERVER_DESC" "$SERVER_NAME2" if server_running ; then # Only stop the server if we see it running stop_server log_end_msg $? else # If it's not running don't do anything log_progress_msg "apparently not running" log_end_msg 0 exit 0 fi fi if [ "$USE_SERVER" ]; then log_daemon_msg "Stopping $DESC" "$NAME2" if running ; then # Only stop the server if we see it running stop_loadavg log_end_msg $? else # If it's not running don't do anything log_progress_msg "apparently not running" log_end_msg 0 exit 0 fi fi ;; force-stop) # First try to stop gracefully the program $0 stop if running; then # If it's still running try to kill it more forcefully log_daemon_msg "Stopping (force) $DESC" "$NAME2" force_stop log_end_msg $? fi ;; restart|force-reload) if [ "$SERVER" = "yes" ]; then log_daemon_msg "Restarting $SERVER_DESC" "$SERVER_NAME2" stop_server # Wait some sensible amount, some server need this [ -n "$DIETIME" ] && sleep $DIETIME start_server running log_end_msg $? fi if [ "$USE_SERVER" ]; then log_daemon_msg "Restarting $DESC" "$NAME2" stop_server # Wait some sensible amount, some server need this [ -n "$DIETIME" ] && sleep $DIETIME start_server running log_end_msg $? fi ;; status) log_daemon_msg "Checking status of $DESC" "$NAME2" if running ; then log_progress_msg "running" log_end_msg 0 else log_progress_msg "apparently not running" log_end_msg 1 exit 1 fi ;; # Use this if the daemon cannot reload reload) log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" log_warning_msg "cannot re-read the config file (use restart)." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0 -- no debconf information -- debsums errors found: sh: 1: /usr/sbin/dpkg-divert: not found