APP_NAME="Freenet"
APP_LONG_NAME="Freenet 0.7"
WRAPPER_CMD="/usr/bin/wrapper"
WRAPPER_CONF="/etc/freenet-wrapper.conf"
PRIORITY=10
PIDDIR="/var/freenet/"
IGNORE_SIGNALS=true
RUN_AS_USER=freenet
if [ "X`id -u`" = "X0" -a -z "$RUN_AS_USER" ]
then
echo "Do not run this script as root."
exit 1
fi
JAVA_IMPL=`java -version 2>&1 | head -n 1 | cut -f1 -d' '`
LDPROP=""
case $0 in
/*)
SCRIPT="$0"
;;
*)
PWD=`pwd`
SCRIPT="$PWD/$0"
;;
esac
CHANGED=true
while [ "X$CHANGED" != "X" ]
do
SCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
TOKENS=`echo $SCRIPT | sed -e 's;/; ;g'`
REALPATH=
for C in $TOKENS; do
REALPATH="$REALPATH/$C"
while [ -h "$REALPATH" ] ; do
LS="`ls -ld "$REALPATH"`"
LINK="`expr "$LS" : '.*-> \(.*\)$'`"
if expr "$LINK" : '/.*' > /dev/null; then
REALPATH="$LINK"
else
REALPATH="`dirname "$REALPATH"`""/$LINK"
fi
done
done
REALPATH="`echo $REALPATH | sed -e 's;:; ;g'`"
SCRIPT="`echo $SCRIPT | sed -e 's;:; ;g'`"
if [ "$REALPATH" = "$SCRIPT" ]
then
CHANGED=""
else
SCRIPT="$REALPATH"
fi
done
cd "`dirname \"$REALPATH\"`"
REALDIR="`pwd`"
FIRST_CHAR="`echo $PIDDIR | cut -c1,1`"
if [ "$FIRST_CHAR" != "/" ]
then
PIDDIR="$REALDIR/$PIDDIR"
fi
FIRST_CHAR="`echo $WRAPPER_CMD | cut -c1,1`"
if [ "$FIRST_CHAR" != "/" ]
then
WRAPPER_CMD="$REALDIR/$WRAPPER_CMD"
fi
FIRST_CHAR="`echo $WRAPPER_CONF | cut -c1,1`"
if [ "$FIRST_CHAR" != "/" ]
then
WRAPPER_CONF="$REALDIR/$WRAPPER_CONF"
fi
ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
PIDFILE="$PIDDIR/$APP_NAME.pid"
LOCKDIR="$REALDIR"
LOCKFILE="$LOCKDIR/$APP_NAME"
pid=""
DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]`
case "$DIST_OS" in
'sunos')
DIST_OS="solaris"
;;
'hp-ux' | 'hp-ux64')
DIST_OS="hpux"
;;
'darwin' | 'oarwin')
DIST_OS="macosx"
if [ -d /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/ ]
then
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home"
fi
;;
'unix_sv')
DIST_OS="unixware"
;;
esac
DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`
case "$DIST_ARCH" in
'amd64' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64')
DIST_ARCH="x86"
;;
'ip27' | 'mips')
DIST_ARCH="mips"
;;
'power' | 'powerpc' | 'power_pc' | 'ppc64')
DIST_ARCH="ppc"
;;
'pa_risc' | 'pa-risc')
DIST_ARCH="parisc"
;;
'sun4u' | 'sparcv9')
DIST_ARCH="sparc"
;;
'9000/800')
DIST_ARCH="parisc"
;;
esac
DIST_BIT=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`
case "$DIST_BIT" in
'amd64' | 'ia64' | 'x86_64' | 'ppc64')
DIST_BIT="64"
;;
'sun4u' | 'sparcv9')
DIST_BIT="64"
;;
*)
DIST_BIT="32"
;;
esac
WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BIT"
if [ -x "$WRAPPER_TEST_CMD" ]
then
WRAPPER_CMD="$WRAPPER_TEST_CMD"
else
if [ "$DIST_OS" = "macosx" ]
then
WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-$DIST_BIT"
if [ -x "$WRAPPER_TEST_CMD" ]
then
WRAPPER_CMD="$WRAPPER_TEST_CMD"
else
WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BIT"
if [ -x "$WRAPPER_TEST_CMD" ]
then
WRAPPER_CMD="$WRAPPER_TEST_CMD"
else
WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-$DIST_BIT"
if [ -x "$WRAPPER_TEST_CMD" ]
then
WRAPPER_CMD="$WRAPPER_TEST_CMD"
else
if [ ! -x "$WRAPPER_CMD" ]
then
echo "Unable to locate any of the following binaries:"
echo " $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BIT"
echo " $WRAPPER_CMD-$DIST_OS-universal-$DIST_BIT"
echo " $WRAPPER_CMD"
NO_WRAPPER="java -Djava.net.preferIPv4Stack=true -cp freenet-ext.jar:freenet.jar freenet.node.NodeStarter"
fi
fi
fi
fi
else
if [ ! -x "$WRAPPER_CMD" ]
then
echo "Unable to locate any of the following binaries:"
echo " $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BIT"
echo " $WRAPPER_CMD"
NO_WRAPPER="java -cp freenet-ext.jar:freenet.jar freenet.node.NodeStarter"
fi
fi
fi
if [ "X$PRIORITY" = "X" ]
then
CMDNICE=""
else
CMDNICE="nice -$PRIORITY"
fi
if [ "X$IGNORE_SIGNALS" = "X" ]
then
ANCHORPROP=
IGNOREPROP=
else
ANCHORPROP=wrapper.anchorfile=\"$ANCHORFILE\"
IGNOREPROP=wrapper.ignore_signals=TRUE
fi
if [ -d "$LOCKDIR" ]
then
LOCKPROP=wrapper.lockfile=\"$LOCKFILE\"
else
LOCKPROP=
fi
checkUser() {
if [ "X$RUN_AS_USER" != "X" ]
then
IDEXE="/usr/xpg4/bin/id"
if [ ! -x $IDEXE ]
then
IDEXE="/usr/bin/id"
if [ ! -x $IDEXE ]
then
echo "Unable to locate 'id'."
echo "Please report this message along with the location of the command on your system."
exit 1
fi
fi
if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
then
RUN_AS_USER=""
fi
fi
if [ "X$RUN_AS_USER" != "X" ]
then
if [ "X$LOCKPROP" != "X" ]
then
if [ "X$2" != "X" ]
then
RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
if [ "X$RUN_AS_GROUP" = "X" ]
then
RUN_AS_GROUP=$RUN_AS_USER
fi
touch "$LOCKFILE"
chown $RUN_AS_USER:$RUN_AS_GROUP "$LOCKFILE"
fi
fi
su -m $RUN_AS_USER -c "$REALPATH $1"
if [ "X$LOCKPROP" != "X" ]
then
getpid
if [ "X$pid" = "X" ]
then
if [ -f "$LOCKFILE" ]
then
rm "$LOCKFILE"
fi
fi
fi
exit 0
fi
}
getpid() {
if [ -f "$PIDFILE" ]
then
if [ -r "$PIDFILE" ]
then
pid="`cat \"$PIDFILE\"`"
if [ "X$pid" != "X" ]
then
if ! kill -0 $pid 2>/dev/null
then
rm -f "$PIDFILE"
echo "Removed stale pid file: $PIDFILE"
pid=""
fi
if ! test -f /proc/$pid/cwd/Freenet.pid
then
rm -f "$PIDFILE"
echo "Removed stale pid file2: $PIDFILE"
pid=""
fi
fi
else
echo "Cannot read $PIDFILE."
exit 1
fi
fi
}
testpid() {
if ! kill -0 $pid 2>/dev/null
then
rm -f "$PIDFILE"
pid=""
fi
}
console() {
echo "Running $APP_LONG_NAME..."
getpid
if [ "X$pid" = "X" ]
then
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" $LDPROP $ANCHORPROP $LOCKPROP"
eval $COMMAND_LINE
else
echo "$APP_LONG_NAME is already running."
exit 1
fi
}
start() {
echo "Starting $APP_LONG_NAME..."
getpid
if [ "X$pid" = "X" ]
then
if [ "$NO_WRAPPER" ]
then
echo ""
echo "Let's start the node without the wrapper, you'll have to daemonize it yourself."
eval $NO_WRAPPER
else
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" $LDPROP wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP"
eval $COMMAND_LINE
fi
else
echo "$APP_LONG_NAME is already running."
exit 1
fi
}
stopit() {
echo "Stopping $APP_LONG_NAME..."
getpid
if [ "X$pid" = "X" ]
then
echo "$APP_LONG_NAME was not running."
else
if [ "X$IGNORE_SIGNALS" = "X" ]
then
kill $pid
if [ $? -ne 0 ]
then
echo "Unable to stop $APP_LONG_NAME."
exit 1
fi
else
rm -f "$ANCHORFILE"
if [ -f "$ANCHORFILE" ]
then
echo "Unable to stop $APP_LONG_NAME."
exit 1
fi
fi
savepid=$pid
CNT=0
TOTCNT=0
while [ "X$pid" != "X" ]
do
if [ "$CNT" -lt "5" ]
then
CNT=`expr $CNT + 1`
else
echo "Waiting for $APP_LONG_NAME to exit..."
CNT=0
fi
TOTCNT=`expr $TOTCNT + 1`
sleep 1
testpid
done
pid=$savepid
testpid
if [ "X$pid" != "X" ]
then
echo "Failed to stop $APP_LONG_NAME."
exit 1
else
echo "Stopped $APP_LONG_NAME."
fi
fi
}
status() {
getpid
if [ "X$pid" = "X" ]
then
echo "$APP_LONG_NAME is not running."
exit 1
else
echo "$APP_LONG_NAME is running ($pid)."
exit 0
fi
}
dump() {
echo "Dumping $APP_LONG_NAME..."
getpid
if [ "X$pid" = "X" ]
then
echo "$APP_LONG_NAME was not running."
else
kill -QUIT $pid
if [ $? -ne 0 ]
then
echo "Failed to dump $APP_LONG_NAME."
exit 1
else
echo "Dumped $APP_LONG_NAME."
fi
fi
}
case "$1" in
'console')
checkUser $1 touchlock
console
;;
'start')
checkUser $1 touchlock
start
;;
'stop')
checkUser $1
stopit
;;
'restart')
checkUser $1 touchlock
stopit
start
;;
'status')
checkUser $1
status
;;
'dump')
checkUser $1
dump
;;
*)
echo "Usage: $0 { console | start | stop | restart | status | dump }"
exit 1
;;
esac
exit 0