[TriLUG] Debugging an init.d script
Robert Dale
robdale at gmail.com
Mon Nov 12 20:49:28 EST 2007
Add "set -x" after the line #! /bin/sh This will turn on line tracing.
#!/bin/sh
set -x
On Nov 12, 2007 7:25 PM, Andrew Perrin <clists at perrin.socsci.unc.edu> wrote:
> Gang,
>
> After a recent apt-get upgrade, my bluetooth isn't working right.
> Specifically, /etc/init.d/bluetooth has stopped loading dund and pand,
> which it used to start automatically. Nothing seems horribly wrong, but
> it just starts hcid and exits. If I start dund manually, everything works
> fine, so I'm sure that's the problem.
>
> How would you go about debugging an /etc/init.d/bluetooth script?
>
> FYI, the script is below, and the necessary binaries are there and
> executable:
>
> joehill:/etc/default# which dund
> /usr/bin/dund
> joehill:/etc/default# which pand
> /usr/bin/pand
> joehill:/etc/default# which hcid
> /usr/sbin/hcid
> joehill:/etc/default# ls -l /usr/bin/dund
> -rwxr-xr-x 1 root root 20072 2007-08-02 12:41 /usr/bin/dund
> joehill:/etc/default# ls -l /usr/bin/pand
> -rwxr-xr-x 1 root root 20072 2007-08-02 12:41 /usr/bin/pand
> joehill:/etc/default# ls -l /usr/sbin/hcid
> -rwxr-xr-x 1 root root 199148 2007-08-02 12:41 /usr/sbin/hcid
>
>
> ---/etc/init.d/bluetooth---
> #! /bin/sh
> ### BEGIN INIT INFO
> # Provides: bluetooth
> # Required-Start: $local_fs $syslog $remote_fs
> # Required-Stop: $local_fs $syslog $remote_fs
> # Default-Start: 2 3 4 5
> # Default-Stop: 0 1 6
> # Short-Description: Start bluetooth daemons
> ### END INIT INFO
> #
> # bluez-utils Bluetooth subsystem starting and stopping
> #
> # originally from bluez's scripts/bluetooth.init
> #
> # Edd Dumbill <ejad at debian.org>
> # LSB 3.0 compilance and enhancements by Filippo Giunchedi <filippo at debian.org>
> #
> # startup control over dund and pand can be changed by editing
> # /etc/default/bluetooth
>
> PATH=/sbin:/bin:/usr/sbin:/usr/bin
> DESC=bluetooth
>
> HCID=/usr/sbin/hcid
> HCIATTACH=/usr/sbin/hciattach
> HCID_NAME=hcid
> HCID_OPTIONS="-x -s"
>
> HID2HCI=/usr/sbin/hid2hci
> HID2HCI_ENABLED=1
>
> UART_CONF=/etc/bluetooth/uart
>
> RFCOMM=/usr/bin/rfcomm
> RFCOMM_NAME=rfcomm
> RFCOMM_CONF=/etc/bluetooth/rfcomm.conf
> SDPTOOL=/usr/bin/sdptool
>
>
> DUND_DAEMON=/usr/bin/dund
> DUND_NAME=dund
> PAND_DAEMON=/usr/bin/pand
> PAND_NAME=pand
> HIDD_DAEMON=/usr/bin/hidd
> HIDD_NAME=hidd
>
> DUND_ENABLED=1
> PAND_ENABLED=1
> HIDD_ENABLED=1
> DUND_OPTIONS=""
> PAND_OPTIONS=""
> HIDD_OPTIONS="--master --server"
>
> test -f /etc/default/bluetooth && . /etc/default/bluetooth
> test -f /etc/default/rcS && . /etc/default/rcS
>
> . /lib/lsb/init-functions
>
> # test for essential daemons
> test -x $HCID || exit 0
> test -x $HCIATTACH || exit 0
> test -x $RFCOMM || exit 0
>
> # disable nonessential daemons if not present
> if test "$DUND_ENABLED" != "0"; then
> if ! test -x $DUND_DAEMON; then
> DUND_ENABLED=0
> fi
> fi
>
> if test "$PAND_ENABLED" != "0"; then
> if ! test -x $PAND_DAEMON; then
> PAND_ENABLED=0
> fi
> fi
>
> if test "$HIDD_ENABLED" != "0"; then
> if ! test -x $HIDD_DAEMON; then
> HIDD_ENABLED=0
> fi
> fi
>
> set -e
>
> run_sdptool()
> {
> test -x $SDPTOOL || return 1
>
> if ! test -z "$SDPTOOL_OPTIONS" ; then
> oldifs="$IFS"
> IFS=";"
> for o in $SDPTOOL_OPTIONS ; do
> #echo "execing $SDPTOOL $o"
> IFS=" "
> if [ "$VERBOSE" != "no" ]; then
> $SDPTOOL $o
> else
> $SDPTOOL $o &>/dev/null 2>&1
> fi
> done
> IFS="$oldifs"
> fi
>
> }
>
> enable_hci_input()
> {
> if [ "$VERBOSE" != no ]; then
> log_progress_msg "hid_devices"
> $HID2HCI --tohci
> else
> $HID2HCI --tohci >/dev/null 2>&1
> fi
> }
>
> disable_hci_input()
> {
> if [ "$VERBOSE" != no ]; then
> log_progress_msg "hid_devices"
> $HID2HCI --tohid
> else
> $HID2HCI --tohid >/dev/null 2>&1
> fi
> }
>
> start_pan()
> {
> if test "$DUND_ENABLED" != "0"; then
> start-stop-daemon --start --quiet --exec $DUND_DAEMON -- $DUND_OPTIONS
> [ "$VERBOSE" != no ] && log_progress_msg "pand"
>
> fi
> if test "$PAND_ENABLED" != "0"; then
> start-stop-daemon --start --quiet --exec $PAND_DAEMON -- $PAND_OPTIONS
> [ "$VERBOSE" != no ] && log_progress_msg "pand"
> fi
> }
>
>
> stop_pan()
> {
> if test "$DUND_ENABLED" != "0"; then
> start-stop-daemon --stop --quiet --exec $DUND_DAEMON || true
> [ "$VERBOSE" != no ] && log_progress_msg "pand"
> fi
> if test "$PAND_ENABLED" != "0"; then
> start-stop-daemon --stop --quiet --exec $PAND_DAEMON || true
> [ "$VERBOSE" != no ] && log_progress_msg "pand"
> fi
> }
>
> start_hid()
> {
> if test "$HIDD_ENABLED" != "0"; then
> start-stop-daemon --start --quiet --exec $HIDD_DAEMON -- $HIDD_OPTIONS
> [ "$VERBOSE" != no ] && log_progress_msg "hidd"
> fi
> }
>
> stop_hid()
> {
> if test "$HIDD_ENABLED" != "0"; then
> $HIDD_DAEMON --killall
> start-stop-daemon --stop --quiet --exec $HIDD_DAEMON || true
> [ "$VERBOSE" != no ] && log_progress_msg "hidd"
> fi
> }
>
> start_uarts()
> {
> [ -f $HCIATTACH ] && [ -f $UART_CONF ] || return
> grep -v '^#' $UART_CONF | while read i; do
> if [ "$VERBOSE" != no ]; then
> $HCIATTACH $i
> else
> $HCIATTACH $i >/dev/null 2>&1
> fi
> done
> }
>
> stop_uarts()
> {
> killall hciattach > /dev/null 2>&1 || true
> }
>
> start_rfcomm()
> {
> if [ -x $RFCOMM ] && [ -f $RFCOMM_CONF ] ; then
> # rfcomm must always succeed for now: users
> # may not yet have an rfcomm-enabled kernel
> if [ "$VERBOSE" != no ]; then
> log_progress_msg "rfcomm"
> $RFCOMM -f $RFCOMM_CONF bind all || true
> else
> $RFCOMM -f $RFCOMM_CONF bind all >/dev/null 2>&1 || true
> fi
> fi
> }
>
> stop_rfcomm()
> {
> if [ -x $RFCOMM ] ; then
> if [ "$VERBOSE" != no ]; then
> log_progress_msg "rfcomm"
> $RFCOMM unbind all || true
> else
> $RFCOMM unbind all >/dev/null 2>&1 || true
> fi
> fi
> }
>
> restart_rfcomm()
> {
> if [ -x $RFCOMM ] && [ -f $RFCOMM_CONF ] ; then
> if [ "$VERBOSE" != no ]; then
> log_progress_msg "rfcomm"
> $RFCOMM unbind all || true
> $RFCOMM -f $RFCOMM_CONF bind all || true
> else
> $RFCOMM unbind all >/dev/null 2>&1|| true
> $RFCOMM -f $RFCOMM_CONF bind all >/dev/null 2>&1 || true
> fi
> fi
> }
>
> case "$1" in
> start)
> log_daemon_msg "Starting $DESC"
>
> if test "$BLUETOOTH_ENABLED" = "0"; then
> log_progress_msg "disabled. see /etc/default/bluetooth"
> log_end_msg 0
> exit 0
> fi
>
> start-stop-daemon --start --quiet --exec $HCID -- $HCID_OPTIONS || true
> log_progress_msg "hcid"
>
> run_sdptool || true
>
> start_uarts || true
>
> start_hid || true
> if test "$HID2HCI_ENABLED" = "1"; then
> enable_hci_input || true
> fi
> start_rfcomm || true
> start_pan || true
> log_end_msg 0
> ;;
> stop)
> log_daemon_msg "Stopping $DESC"
> if test "$BLUETOOTH_ENABLED" = "0"; then
> log_progress_msg "disabled."
> log_end_msg 0
> exit 0
> fi
> stop_pan || true
> stop_rfcomm || true
> if test "$HID2HCI_ENABLED" = "1"; then
> disable_hci_input || true
> fi
> stop_hid || true
> start-stop-daemon --stop --quiet --exec $HCID || true
> log_progress_msg "hcid"
> stop_uarts || true
> log_end_msg 0
> ;;
> restart|force-reload)
> log_daemon_msg "Restarting $DESC"
> stop_hid || true
> stop_pan || true
> start-stop-daemon --stop --quiet --exec $HCID || true
> sleep 1
> if test "$BLUETOOTH_ENABLED" = "0"; then
> log_progress_msg "disabled. see /etc/default/bluetooth"
> log_end_msg 0
> exit 0
> fi
> start-stop-daemon --start --quiet --exec $HCID -- $HCID_OPTIONS || true
> log_progress_msg "hcid"
> start_pan || true
> start_hid || true
> restart_rfcomm
> log_end_msg 0
> ;;
> *)
> N=/etc/init.d/bluetooth
> # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
> echo "Usage: $N {start|stop|restart|force-reload}" >&2
> exit 1
> ;;
> esac
>
> exit 0
>
> # vim:noet
>
>
>
>
>
> ----------------------------------------------------------------------
> Andrew J Perrin - andrew_perrin (at) unc.edu - http://perrin.socsci.unc.edu
> Associate Professor of Sociology; Book Review Editor, _Social Forces_
> University of North Carolina - CB#3210, Chapel Hill, NC 27599-3210 USA
>
>
> --
> TriLUG mailing list : http://www.trilug.org/mailman/listinfo/trilug
> TriLUG Organizational FAQ : http://trilug.org/faq/
> TriLUG Member Services FAQ : http://members.trilug.org/services_faq/
>
--
Robert Dale
More information about the TriLUG
mailing list