#!/bin/bash
system=unknown
if [ -f /etc/debian_version ]; then
system=debian
elif [ -f /etc/redhat-release ]; then
system=redhat
else
echo "$0: Unknown system, please port and contact distcc-admin@google.com" 1>&2
exit 1
fi
OPTIONS="--daemon --stats --job-lifetime=1200"
USER=distcc
PROG="distccd"
PIDFILE=/var/run/$PROG.pid
EXEC="/usr/bin/distccd"
if [ -f /etc/sitename.install ]; then
DOMAIN=`cat /etc/sitename.install`
if [ -d /etc/site/current/distcc ]; then
CONFIGDIR=/etc/site/current/distcc
else
CONFIGDIR=/etc/distcc
fi
NORESTART=$CONFIGDIR/no-restart
else
DOMAIN=`/bin/dnsdomainname`
CONFIGDIR=/etc/distcc
NORESTART=$CONFIGDIR/no-restart
fi
if [ $system = redhat ]; then
. /etc/init.d/functions
. /etc/sysconfig/network
[ ${NETWORKING} = "no" ] && exit 0
fi
if [ $system = debian ]; then
. /lib/lsb/init-functions
. /etc/default/distcc
thisscript="$0"
if [ ! -f "$thisscript" ]; then
echo "$0: Cannot find myself" 1>&2
exit 1
fi
if [ "$STARTDISTCC" != "true" ] ; then
echo "STARTDISTCC is set to false in /etc/default/distcc"
echo "$something is not starting"
exit 0
fi
touch $PIDFILE
chown $USER $PIDFILE
fi
TMPDIR=/var/tmp/distcc
export TMPDIR
mkdir -p $TMPDIR
chown $USER $TMPDIR/.
rm -rf $TMPDIR/* || :
chmod 700 $TMPDIR
RETVAL=0
[ -x /usr/bin/distccd ] || exit 0
ALLOWFILE=""
if test -f $CONFIGDIR/$DOMAIN/clients.allow; then
ALLOWFILE=$CONFIGDIR/$DOMAIN/clients.allow
elif test -f $CONFIGDIR/clients.allow; then
ALLOWFILE=$CONFIGDIR/clients.allow
else
echo "$0: no clients allowed"
exit 1
fi
if test "$ALLOWFILE"x != x; then
ALLOW_OPTIONS=$(sed -e 's/ OPTIONS="$OPTIONS $ALLOW_OPTIONS"
fi
COMMANDFILE=""
if test -f $CONFIGDIR/$DOMAIN/commands.allow.sh; then
COMMANDFILE=$CONFIGDIR/$DOMAIN/commands.allow.sh
elif test -f $CONFIGDIR/commands.allow.sh; then
COMMANDFILE=$CONFIGDIR/commands.allow.sh
fi
mkdir -p /var/state/distcc
CMDLIST=/var/state/distcc/commands.allow
rh_start() {
echo -n "Starting $PROG"
if [ -f $NORESTART ]
then
echo "failed -- $NORESTART present"
return 1
fi
env="TMPDIR=$TMPDIR"
if [ -n "$COMMANDFILE" ]; then
: > $CMDLIST
. $COMMANDFILE
if [ "$DISTCC_CMDLIST" ]; then
env="$env DISTCC_CMDLIST=$DISTCC_CMDLIST"
fi
if [ "$DISTCC_CMDLIST_NUMWORDS" ]; then
env="$env DISTCC_CMDLIST_NUMWORDS=$DISTCC_CMDLIST_NUMWORDS"
fi
fi
daemon --user $USER $env $PROG $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$PROG
return $RETVAL
}
rh_stop() {
echo -n "Shutting down $PROG"
killproc $PROG
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
return $RETVAL
}
redhat() {
case "$1" in
start)
rh_start
;;
stop)
rh_stop
;;
status)
status $PROG
RETVAL=$?
;;
restart|reload)
rh_stop
rh_start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$PROG ]; then
rh_stop
rh_start
RETVAL=$?
fi
;;
*)
echo $"Usage $0 {start|stop|restart|condrestart|status}"
exit 1
esac
}
deb_start() {
log_begin_msg "Starting $PROG..."
if [ -f $NORESTART ]
then
log_end_msg 1
echo "distcc start failed -- $NORESTART present"
return 1
fi
if [ -n "$COMMANDFILE" ]; then
: > $CMDLIST
. $COMMANDFILE
export DISTCC_CMDLIST
export DISTCC_CMDLIST_NUMWORDS
fi
export TMPDIR=$TMPDIR
start-stop-daemon --start --name distccd --pidfile $PIDFILE -m --chuid $USER --exec $EXEC -- $OPTIONS
RETVAL=$?
log_end_msg $RETVAL
return $RETVAL
}
deb_stop() {
log_begin_msg "Shutting down $PROG..."
start-stop-daemon --stop --name distccd --retry 30
RETVAL=$?
[ $RETVAL -eq 0 ] || log_success_msg "$PROG not running?"
log_end_msg $RETVAL
[ $RETVAL -eq 0 ] && rm -f $PIDFILE
return $RETVAL
}
debian() {
case "$1" in
start)
deb_start
;;
stop)
deb_stop
;;
restart|reload)
deb_stop
deb_start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$PROG ]; then
deb_stop
deb_start
RETVAL=$?
fi
;;
*)
echo $"Usage $0 {start|stop|restart|condrestart}"
exit 1
esac
}
RETVAL=0
if [ $system = debian ]; then
debian "$@"
elif [ $system = redhat ]; then
redhat "$@"
fi
exit $RETVAL