1
0
forked from pool/boinc-client
boinc-client/boinc-rcscript.patch

207 lines
6.3 KiB
Diff

--- client/scripts/boinc-client.in.orig Wed Sep 03 13:08:27 2008
+++ client/scripts/boinc-client.in Wed Sep 03 13:21:19 2008
@@ -25,7 +25,7 @@
# Provides: boinc
# Required-Start: $network
# Required-Stop: $network
-# Default-Start: 3 4 5
+# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: This script monitors the BOINC client.
# Description: This script starts the local BOINC client as a daemon
@@ -54,12 +54,13 @@
########################################################################
# set the basic PATH
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/ucb/bin
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/ucb/bin
+export PATH
# Find the correct ps to use. On solaris /usr/ucb/ps is the one to use
# on everything else, we hope the first one in the path is the right one.
-if [ -x /usr/ucb/ps ] ; then
- PS=/usr/ucb/ps
+if [ -x /bin/ps ] ; then
+ PS=/bin/ps
else
PS=ps
fi
@@ -72,7 +73,7 @@
########################################################################
SHELLS="bash ksh zsh"
# count how many times we've tried to restart
-TRIES=$1
+TRIES=$2
if [ -z "$TRIES" ] ; then
TRIES=0
fi
@@ -92,7 +93,7 @@
for try in $SHELLS ; do
ex=`which $try`
if [ ! -z "${ex}" -a -x "${ex}" ] ; then
- if ${ex} $0 $TRIES ; then
+ if ${ex} $0 $1 $TRIES ; then
# it worked, we can exit
exit 0
else
@@ -114,7 +115,7 @@
# Name of user to run as:
#
-BOINCUSER=boinc
+BOINCUSER=root
# Working directory. Could be /home/boinc, /var/lib/boinc, etc..
# The reason I prefer /var/lib/boinc is that this works best for a
@@ -129,7 +130,7 @@
#
BOINCEXE_NAME=boinc_client
BOINCEXE=${bindir}/${BOINCEXE_NAME}
-BOINCCMD_NAME=boinccmd
+BOINCCMD_NAME=boinc_cmd
BOINCCMD=${bindir}/${BOINCCMD_NAME}
# Log files (you should rotate these occasionally)
@@ -161,9 +162,11 @@
# If there is the subsys directory, then use it ...
if [ -d /var/lock/subsys/ ]; then
- LOCKFILE=/var/lock/subsys/boinc-client
+ LOCKFILE=/var/lock/subsys/${BOINCEXE_NAME}
elif [ -d /var/lock ]; then
- LOCKFILE=/var/lock/boinc-client
+ LOCKFILE=/var/lock/${BOINCEXE_NAME}
+elif [ -d /var/run ]; then
+ LOCKFILE=/var/run/${BOINCEXE_NAME}.lock
fi
# su on Linux seems to need this to be set to work properly in a script
@@ -175,25 +178,26 @@
# but if the functions are not found we create our own simple replacements.
# (The idea for replacing the functions comes from OpenAFS. Thanks guys!)
-if [ -f /etc/rc.d/init.d/functions ] ; then
- . /etc/rc.d/init.d/functions
- if `printf "Hello" >/dev/null 2>/dev/null` ; then
+if [ -f /etc/init.d/functions ] ; then
+ . /etc/init.d/functions
+else
+ if printf "Hello" >/dev/null 2>/dev/null ; then
# printf works
printcol='printf \033[60G%s'
- if `echo -en "Hello" >/dev/null 2>/dev/null` ; then
+ elif echo -en "Hello" >/dev/null 2>/dev/null ; then
# echo -en works
printcol='echo -en \033[60G'
- else
+ else
# no printf make do with echo -n
printcol="echo -n .........."
- fi
- function echo_success () { $printcol "[OK]" ; }
- function echo_failure () { $printcol "[FAILED]" ; }
- function echo_warning () { $printcol "[WARNING]" ; }
- function killproc() {
+ fi
+ function echo_success () { $printcol "[OK]" ; }
+ function echo_failure () { $printcol "[FAILED]" ; }
+ function echo_warning () { $printcol "[WARNING]" ; }
+ function killproc() {
PID=`local_pidof $1`
[ $PID ] && kill $PID
- }
+ }
fi
# check if we have pidof. If not use ps and grep for the same job.
@@ -212,7 +216,9 @@
# If we don't have it, use su for the same job.
#
if [ ! -x /sbin/runuser ] ; then
- alias runuser=su
+ RUNUSER=su
+else
+ RUNUSER=runuser
fi
# Some additional places to look for executables
@@ -226,16 +232,16 @@
./boinc-client.conf
./boinc.conf
/etc/sysconfig/boinc-client
-/etc/default/boinc-client
-/etc/boinc-client.conf
-${sysconfdir}/sysconfig/boinc-client
-${sysconfdir}/default/boinc-client
-${sysconfdir}/boinc-client.conf
/etc/sysconfig/boinc
+/etc/default/boinc-client
/etc/default/boinc
+/etc/boinc-client.conf
/etc/boinc.conf
+${sysconfdir}/sysconfig/boinc-client
${sysconfdir}/sysconfig/boinc
+${sysconfdir}/default/boinc-client
${sysconfdir}/default/boinc
+${sysconfdir}/boinc-client.conf
${sysconfdir}/boinc.conf
none
"
@@ -264,6 +270,9 @@
. ${config_file}
fi
+## Get group-id for user $BOINCUSER in stringformat
+BOINCGROUP=`id -gn $BOINCUSER`
+
## Add ${BOINCDIR} to the path, just in case the executables are stored there.
export PATH=${PATH}:${BOINCDIR}
@@ -272,7 +281,7 @@
echo -n "Creating $BOINCDIR "
if mkdir -p $BOINCDIR 2>/dev/null ; then
if [ -n "$BOINCUSER" ] ; then
- if chown $BOINCUSER $BOINCDIR ; then
+ if chown $BOINCUSER:$BOINCGROUP $BOINCDIR ; then
echo_success
else
echo_failure
@@ -288,7 +297,8 @@
fi
## Check what user we are running as:
-USERNOW=`whoami`
+# we can't rely on the existence of "whoami" or "logname", so we'll use ps.
+USERNOW=`${PS} u $$ | tail -1 | awk '{print $1}'`
if [ -z "$BOINCUSER" ] ; then
BOINCUSER="${USERNOW}"
fi
@@ -321,7 +331,8 @@
exit 8
fi
elif [ "${USERNOW}" = "root" ] ; then
- if [ -z `su -s /bin/sh $BOINCUSER -c "if test -O ${BOINCDIR} ; then echo success ; fi"` ]; then
+ cmd="if test -O ${BOINCDIR} ; then echo success ; fi"
+ if [ -z `su $BOINCUSER -c "$cmd"` ]; then
echo -n ERROR: $BOINCDIR is not owned by $BOINCUSER.
echo_failure
echo
@@ -389,6 +400,7 @@
echo
fi
+ touch ${LOGFILE} ${ERRORLOG}
NOCORE="ulimit -c 0 2>&1 >/dev/null"
echo -n "Starting BOINC client as a daemon: "
if [ "${BOINCUSER}" = "${USERNOW}" ] ; then
@@ -396,7 +408,8 @@
$NOCORE
$BOINCEXE $BOINCOPTS >>$LOGFILE 2>>$ERRORLOG &
else
- runuser - $BOINCUSER -c "$NOCORE ; $BOINCEXE $BOINCOPTS >>$LOGFILE 2>>$ERRORLOG"
+ chown ${BOINCUSER}:$BOINCGROUP ${LOGFILE} ${ERRORLOG}
+ ${RUNUSER} - $BOINCUSER -c "$NOCORE ; $BOINCEXE $BOINCOPTS >>$LOGFILE 2>>$ERRORLOG" 2>/dev/null > /dev/null &
fi
sleep 3
PID=`local_pidof $BOINCEXE_NAME`