Changeset c8395df5


Ignore:
Timestamp:
Sep 12, 2011 10:53:57 PM (8 years ago)
Author:
kytv <kytv@…>
Branches:
master
Children:
3fe50e1
Parents:
2307fed6
Message:

update of the i2prouter script based upon Tanuki's 3.5.9 script

With this check-in comes an update of our i2prouter script based upon the
script src/bin/sh.script.in from the 3.5.9 source tarball of the wrapper.

Some of the benefits of this newer version include:

  • logic to determine which wrapper binary to use (32bit VS 64bit) and falling back to alternate "bitness." This would be most useful for portable packages.
  • support for far more platforms and archs than the 3.1.1 based script (such as Solaris, risc, os/390, HP-UX, AIX, mips, ia64, etc.)
  • support for installing I2P as a daemon in most UNIX-based environments with the command "i2prouter install". The installed service can be removed with "i2prouter remove". With testing this option has been confirmed to work in OSX, Fedora, Slackware, Debian, Ubuntu, FreeBSD, and SuSE. It does not work in Arch Linux (yet).
File:
1 edited

Legend:

Unmodified
Added
Removed
  • installer/resources/i2prouter

    r2307fed6 rc8395df5  
    22
    33#
    4 # Skeleton sh script suitable for starting and stopping
    5 # "wrapped" Java apps.
     4# Copyright (c) 1999, 2011 Tanuki Software, Ltd.
     5# http://www.tanukisoftware.com
     6# All rights reserved.
    67#
    78# Make sure that PIDFILE points to the correct location,
     
    910# wrapper configuration file.
    1011#
    11 # Note that the wrapper only supports Windows, Mac, and
    12 # certain Linux architectures.
    13 # It may also fail on some 64-bit platforms.
    1412# If this script fails to successfully invoke i2psvc on your platform,
    1513# try the runplain.sh script instead.
    1614#
    17 
     15# This software is the proprietary information of Tanuki Software.
     16# You shall use it only in accordance with the terms of the
     17# license agreement you entered into with Tanuki Software.
     18# http://wrapper.tanukisoftware.com/doc/english/licenseOverview.html
     19#
     20# Java Service Wrapper sh script.  Suitable for starting and stopping
     21#  wrapped Java applications on UNIX platforms.
     22#
    1823#-----------------------------------------------------------------------------
    1924# These settings can be modified to fit the needs of your application
     25# Optimized for use with version 3.5.9 of the Wrapper.
    2026
    2127# Paths
     
    2935#I2PTEMP="%INSTALL_PATH"
    3036
    31 WRAPPER_URL="http://www.i2p2.de/manualwrapper"
    32 
    3337# Application
    3438APP_NAME="i2p"
    3539APP_LONG_NAME="I2P Service"
    3640
    37 # Wrapper
    38 WRAPPER_CMD="$I2P/i2psvc"
    39 WRAPPER_CONF="$I2P/wrapper.config"
    40 
    41 unsupported() {
    42     echo "The most likely reason is that a supported version of the java"
    43     echo "wrapper is not available in the I2P installation package for your"
    44     echo "platform. It may be possible to manually download and install"
    45     echo "a compatible wrapper for your system."
    46     echo "See ${WRAPPER_URL} for hints."
    47     echo
    48     echo "In the meantime, you may start I2P by running the script"
    49     echo "${I2P}/runplain.sh"
    50     echo
    51 }
    52 
    53 if [ ! -r ${WRAPPER_CMD} ]; then
    54     echo "Unable to locate i2psvc in ${I2P}!"
    55     echo
    56     unsupported
    57     echo
    58     exit 1
    59 fi
    60 
    61 # Priority at which to run the wrapper.  See "man nice" for valid priorities.
    62 #  nice is only used if a priority is specified.
    63 PRIORITY=
    64 
    65 # Location of the pid file.
    66 PIDDIR="$I2PTEMP"
    67 
    68 # If uncommented, causes the Wrapper to be shutdown using an anchor file.
    69 #  When launched with the 'start' command, it will also ignore all INT and
    70 #  TERM signals.
    71 #IGNORE_SIGNALS=true
    72 
    73 # If specified, the Wrapper will be run as the specified user when the 'start'
    74 #  command is passed to this script.  When running with the 'console' command
    75 #  the current user will be used.
     41# If specified, the Wrapper will be run as the specified user.
    7642# IMPORTANT - Make sure that the user has the required privileges to write
    7743#  the PID file and wrapper.log files.  Failure to be able to write the log
     
    8349#RUN_AS_USER=
    8450
     51# Wrapper
     52WRAPPER_CMD="$I2P/i2psvc"
     53WRAPPER_CONF="$I2P/wrapper.config"
     54
     55# Priority at which to run the wrapper.  See "man nice" for valid priorities.
     56#  nice is only used if a priority is specified.
     57PRIORITY=
     58
     59# Location of the pid file.
     60PIDDIR="$I2PTEMP"
     61
     62# FIXED_COMMAND tells the script to use a hard coded action rather than
     63# expecting the first parameter of the command line to be the command.
     64# By default the command will will be expected to be the first parameter.
     65#FIXED_COMMAND=console
     66
     67# PASS_THROUGH tells the script to pass all arguments through to the JVM
     68#  as is.  If FIXED_COMMAND is specified then all arguments will be passed.
     69#  If not set then all arguments starting with the second will be passed.
     70#PASS_THROUGH=true
     71
     72# If uncommented, causes the Wrapper to be shutdown using an anchor file.
     73#  When launched with the 'start' command, it will also ignore all INT and
     74#  TERM signals.
     75#IGNORE_SIGNALS=true
     76
     77# Wrapper will start the JVM asynchronously. Your application may have some
     78#  initialization tasks and it may be desirable to wait a few seconds
     79#  before returning.  For example, to delay the invocation of following
     80#  startup scripts.  Setting WAIT_AFTER_STARTUP to a positive number will
     81#  cause the start command to delay for the indicated period of time
     82#  (in seconds).
     83#
     84WAIT_AFTER_STARTUP=0
     85
     86# If set, wait for the wrapper to report that the daemon has started
     87WAIT_FOR_STARTED_STATUS=true
     88WAIT_FOR_STARTED_TIMEOUT=120
     89
     90# If set, the status, start_msg and stop_msg commands will print out detailed
     91#   state information on the Wrapper and Java processes.
     92#DETAIL_STATUS=true
     93
     94# If set, the 'pause' and 'resume' commands will be enabled.  These make it
     95#  possible to pause the JVM or Java application without completely stopping
     96#  the Wrapper.  See the wrapper.pausable and wrapper.pausable.stop_jvm
     97#  properties for more information.
     98#PAUSABLE=true
     99
     100# By default we show a detailed usage block.  Uncomment to show brief usage.
     101#BRIEF_USAGE=true
     102
     103# flag for using upstart when installing (rather than init.d rc.d)
     104USE_UPSTART=
     105
     106# When installing on On Mac OSX platforms, the following domain will be used to
     107#  prefix the plist file name.
     108PLIST_DOMAIN=org.tanukisoftware.wrapper
     109
     110# The following two lines are used by the chkconfig command. Change as is
     111#  appropriate for your application.  They should remain commented.
     112# chkconfig: 2345 20 80
     113# description: I2P Service
     114
     115# Initialization block for the install_initd and remove_initd scripts used by
     116#  SUSE linux distributions.
     117### BEGIN INIT INFO
     118# Provides: i2p
     119# Required-Start: $local_fs $network $syslog
     120# Should-Start:
     121# Required-Stop:
     122# Default-Start: 2 3 4 5
     123# Default-Stop: 0 1 6
     124# Short-Description: I2P Service
     125# Description: I2P is a load-balanced unspoofable packet switching network
     126### END INIT INFO
     127
    85128# Do not modify anything beyond this point
    86129#-----------------------------------------------------------------------------
     130WRAPPER_URL="http://www.i2p2.de/manualwrapper"
     131unsupported() {
     132    echo "The most likely reason is that a supported version of the java"
     133    echo "wrapper is not available in the I2P installation package for your"
     134    echo "platform. It may be possible to manually download and install"
     135    echo "a compatible wrapper for your system."
     136    echo "See ${WRAPPER_URL} for hints."
     137    echo
     138    echo "In the meantime, you may start I2P by running the script"
     139    echo "${I2P}/runplain.sh"
     140    echo
     141}
     142
     143failed() {
     144        echo "**Failed to load the wrapper**"
     145        case `uname -s` in
     146             FreeBSD)
     147                echo
     148                echo "In an attempt to ensure that I2P will run on as many systems"
     149                echo "as possible, included in the installation package is a"
     150                echo "version of the wrapper that was compiled for FreeBSD 6."
     151                echo "Necessary compatibility libraries may not be on your"
     152                echo "system. These libraries are included in the misc/compat6x port."
     153                echo
     154                echo "Additionally, the wrapper requires libiconv to be on your system."
     155                echo "It can be installed with pkg_add -r libiconv"
     156                echo
     157                echo "If you cannot (or choose not to) install these libraries,"
     158                echo "I2P may be started with the 'runplain.sh' script. Another"
     159                echo "option would be to compile the java wrapper for your system."
     160                echo "Hints to accomplish this can be found at"
     161                echo "${WRAPPER_URL}."
     162                echo
     163                exit 1
     164                ;;
     165             *)
     166                echo
     167                unsupported
     168                exit 1
     169                ;;
     170        esac
     171}
     172
     173if [ ! -r ${WRAPPER_CMD} ]; then
     174    echo "Unable to locate i2psvc in ${I2P}!"
     175    echo
     176    unsupported
     177    echo
     178    exit 1
     179fi
     180
     181if [ -n "$FIXED_COMMAND" ]
     182then
     183    COMMAND="$FIXED_COMMAND"
     184else
     185    COMMAND="$1"
     186fi
     187
     188
     189# Required for HP-UX Startup
     190if [ `uname -s` = "HP-UX" -o `uname -s` = "HP-UX64" ] ; then
     191        PATH=$PATH:/usr/bin
     192fi
     193
     194# Get the fully qualified path to the script
     195case $0 in
     196    /*)
     197        SCRIPT="$0"
     198        ;;
     199    *)
     200        PWD=`pwd`
     201        SCRIPT="$PWD/$0"
     202        ;;
     203esac
     204
     205# Resolve the true real path without any sym links.
     206CHANGED=true
     207while [ "X$CHANGED" != "X" ]
     208do
     209    # Change spaces to ":" so the tokens can be parsed.
     210    SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
     211    # Get the real path to this script, resolving any symbolic links
     212    TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'`
     213    REALPATH=
     214    for C in $TOKENS; do
     215        # Change any ":" in the token back to a space.
     216        C=`echo $C | sed -e 's;:; ;g'`
     217        REALPATH="$REALPATH/$C"
     218        # If REALPATH is a sym link, resolve it.  Loop for nested links.
     219        while [ -h "$REALPATH" ] ; do
     220            LS="`ls -ld "$REALPATH"`"
     221            LINK="`expr "$LS" : '.*-> \(.*\)$'`"
     222            if expr "$LINK" : '/.*' > /dev/null; then
     223                # LINK is absolute.
     224                REALPATH="$LINK"
     225            else
     226                # LINK is relative.
     227                REALPATH="`dirname "$REALPATH"`""/$LINK"
     228            fi
     229        done
     230    done
     231
     232    if [ "$REALPATH" = "$SCRIPT" ]
     233    then
     234        CHANGED=""
     235    else
     236        SCRIPT="$REALPATH"
     237    fi
     238done
     239
     240# Get the location of the script.
     241REALDIR=`dirname "$REALPATH"`
     242# Normalize the path
     243REALDIR=`cd ${REALDIR}; pwd`
     244
     245# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if
     246#  the working directory is later changed.
     247FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
     248if [ "$FIRST_CHAR" != "/" ]
     249then
     250    PIDDIR=$REALDIR/$PIDDIR
     251fi
     252# Same test for WRAPPER_CMD
     253FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`
     254if [ "$FIRST_CHAR" != "/" ]
     255then
     256    WRAPPER_CMD=$REALDIR/$WRAPPER_CMD
     257fi
     258# Same test for WRAPPER_CONF
     259FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`
     260if [ "$FIRST_CHAR" != "/" ]
     261then
     262    WRAPPER_CONF=$REALDIR/$WRAPPER_CONF
     263fi
    87264
    88265# Process ID
    89266ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
     267COMMANDFILE="$PIDDIR/$APP_NAME.command"
     268STATUSFILE="$PIDDIR/$APP_NAME.status"
     269JAVASTATUSFILE="$PIDDIR/$APP_NAME.java.status"
    90270PIDFILE="$PIDDIR/$APP_NAME.pid"
     271LOCKDIR="/var/lock/subsys"
     272LOCKFILE="$LOCKDIR/$APP_NAME"
    91273pid=""
    92274
    93275# Resolve the location of the 'ps' command
    94 PSEXE="/usr/bin/ps"
    95 if [ ! -x $PSEXE ]
     276PSEXE="/usr/ucb/ps"
     277    if [ ! -x "$PSEXE" ]
     278    then
     279        PSEXE="/usr/bin/ps"
     280        if [ ! -x "$PSEXE" ]
     281        then
     282            PSEXE="/bin/ps"
     283            if [ ! -x "$PSEXE" ]
     284            then
     285                eval echo `gettext 'Unable to locate "ps".'`
     286                eval echo `gettext 'Please report this message along with the location of the command on your system.'`
     287                exit 1
     288            fi
     289        fi
     290    fi
     291
     292# Resolve the os
     293DIST_OS=`uname -s | tr "[A-Z]" "[a-z]" | tr -d ' '`
     294case "$DIST_OS" in
     295    'sunos')
     296        DIST_OS="solaris"
     297        ;;
     298    'hp-ux' | 'hp-ux64')
     299        # HP-UX needs the XPG4 version of ps (for -o args)
     300        DIST_OS="hpux"
     301        UNIX95=""
     302        export UNIX95
     303        ;;
     304    'darwin')
     305        DIST_OS="macosx"
     306        ;;
     307    'unix_sv')
     308        DIST_OS="unixware"
     309        ;;
     310    'os/390')
     311        DIST_OS="zos"
     312        ;;
     313esac
     314
     315# Resolve the architecture
     316if [ "$DIST_OS" = "macosx" ]
    96317then
    97     PSEXE="/bin/ps"
    98     if [ ! -x $PSEXE ]
    99     then
    100         echo "Unable to locate 'ps'."
    101         echo "Please report this with the location on your system."
    102         exit 1
    103     fi
    104 fi
     318    OS_VER=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'`
     319    DIST_ARCH="universal"
     320    if [[ "$OS_VER" < "10.5.0" ]]
     321    then
     322        DIST_BITS="32"
     323    else
     324        DIST_BITS="64"
     325    fi
     326    APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME}
     327    APP_PLIST=${APP_PLIST_BASE}.plist
     328else
     329    DIST_ARCH=
     330    DIST_ARCH=`uname -p 2>/dev/null | tr "[A-Z]" "[a-z]" | tr -d ' '`
     331    if [ "X$DIST_ARCH" = "X" ]
     332    then
     333        DIST_ARCH="unknown"
     334    fi
     335    if [ "$DIST_ARCH" = "unknown" ]
     336    then
     337        DIST_ARCH=`uname -m 2>/dev/null | tr "[A-Z]" "[a-z]" | tr -d ' '`
     338    fi
     339    case "$DIST_ARCH" in
     340        'athlon' | 'i386' | 'i486' | 'i586' | 'i686')
     341            DIST_ARCH="x86"
     342            if [ "${DIST_OS}" = "solaris" ] ; then
     343                DIST_BITS=`isainfo -b`
     344            else
     345                DIST_BITS="32"
     346            fi
     347            ;;
     348        'amd64' | 'x86_64')
     349            DIST_ARCH="x86"
     350            DIST_BITS="64"
     351            ;;
     352        'ia32')
     353            DIST_ARCH="ia"
     354            DIST_BITS="32"
     355            ;;
     356        'ia64' | 'ia64n' | 'ia64w')
     357            DIST_ARCH="ia"
     358            DIST_BITS="64"
     359            ;;
     360        'ip27')
     361            DIST_ARCH="mips"
     362            DIST_BITS="32"
     363            ;;
     364        'power' | 'powerpc' | 'power_pc' | 'ppc64')
     365            if [ "${DIST_ARCH}" = "ppc64" ] ; then
     366                DIST_BITS="64"
     367            else
     368                DIST_BITS="32"
     369            fi
     370            DIST_ARCH="ppc"
     371            if [ "${DIST_OS}" = "aix" ] ; then
     372                if [ `getconf KERNEL_BITMODE` -eq 64 ]; then
     373                    DIST_BITS="64"
     374                else
     375                    DIST_BITS="32"
     376                fi
     377            fi
     378            ;;
     379        'pa_risc' | 'pa-risc')
     380            DIST_ARCH="parisc"
     381            if [ `getconf KERNEL_BITS` -eq 64 ]; then
     382                DIST_BITS="64"
     383            else
     384                DIST_BITS="32"
     385            fi
     386            ;;
     387        'sun4u' | 'sparcv9' | 'sparc')
     388            DIST_ARCH="sparc"
     389            DIST_BITS=`isainfo -b`
     390            ;;
     391        '9000/800' | '9000/785')
     392            DIST_ARCH="parisc"
     393            if [ `getconf KERNEL_BITS` -eq 64 ]; then
     394                DIST_BITS="64"
     395            else
     396                DIST_BITS="32"
     397            fi
     398            ;;
     399        '2064' | '2066' | '2084' | '2086' | '2094' | '2096' | '2097' | '2098' | '2817')
     400            DIST_ARCH="390"
     401            DIST_BITS="64"
     402            ;;
     403    esac
     404fi
     405
     406# OSX always places Java in the same location so we can reliably set JAVA_HOME
     407if [ "$DIST_OS" = "macosx" ]
     408then
     409    if [ -z "$JAVA_HOME" ]; then
     410        JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
     411    fi
     412fi
     413
     414# Test Echo
     415ECHOTEST=`echo -n "x"`
     416if [ "$ECHOTEST" = "x" ]
     417then
     418    ECHOOPT="-n "
     419else
     420    ECHOOPT=""
     421fi
     422
     423
     424gettext() {
     425    "$WRAPPER_CMD" --translate "$1" "$WRAPPER_CONF" 2>/dev/null
     426    if [ $? != 0 ] ; then
     427        echo "$1"
     428    fi
     429}
     430
     431outputFile() {
     432    if [ -f "$1" ]
     433    then
     434        eval echo `gettext '  $1  Found but not executable.'`;
     435    else
     436        echo "  $1"
     437    fi
     438}
     439
     440# Decide on the wrapper binary to use.
     441# If the bits of the OS could be detected, we will try to look for the
     442#  binary with the correct bits value.  If it doesn't exist, fall back
     443#  and look for the 32-bit binary.  If that doesn't exist either then
     444#  look for the default.
     445WRAPPER_TEST_CMD=""
     446if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" ]
     447then
     448    WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS"
     449    if [ ! -x "$WRAPPER_TEST_CMD" ]
     450    then
     451        chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null
     452    fi
     453    if [ -x "$WRAPPER_TEST_CMD" ]
     454    then
     455        WRAPPER_CMD="$WRAPPER_TEST_CMD"
     456    else
     457        outputFile "$WRAPPER_TEST_CMD"
     458        WRAPPER_TEST_CMD=""
     459    fi
     460fi
     461if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" -a -z "$WRAPPER_TEST_CMD" ]
     462then
     463    WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
     464    if [ ! -x "$WRAPPER_TEST_CMD" ]
     465    then
     466        chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null
     467    fi
     468    if [ -x "$WRAPPER_TEST_CMD" ]
     469    then
     470        WRAPPER_CMD="$WRAPPER_TEST_CMD"
     471    else
     472        outputFile "$WRAPPER_TEST_CMD"
     473        WRAPPER_TEST_CMD=""
     474    fi
     475fi
     476if [ -f "$WRAPPER_CMD" -a -z "$WRAPPER_TEST_CMD" ]
     477then
     478    WRAPPER_TEST_CMD="$WRAPPER_CMD"
     479    if [ ! -x "$WRAPPER_TEST_CMD" ]
     480    then
     481        chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null
     482    fi
     483    if [ -x "$WRAPPER_TEST_CMD" ]
     484    then
     485        WRAPPER_CMD="$WRAPPER_TEST_CMD"
     486    else
     487        outputFile "$WRAPPER_TEST_CMD"
     488        WRAPPER_TEST_CMD=""
     489    fi
     490fi
     491if [ -z "$WRAPPER_TEST_CMD" ]
     492then
     493    eval echo `gettext 'Unable to locate any of the following binaries:'`
     494    outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS"
     495    if [ ! "$DIST_BITS" = "32" ]
     496    then
     497        outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
     498    fi
     499    outputFile "$WRAPPER_CMD"
     500
     501    exit 1
     502fi
     503
    105504
    106505# Build the nice clause
     
    112511fi
    113512
    114 # Check the configured user
    115 if [ "X$RUN_AS_USER" != "X" ]
     513# Build the anchor file clause.
     514if [ "X$IGNORE_SIGNALS" = "X" ]
    116515then
    117     if [ "`id -u -n`" = "$RUN_AS_USER" ]
    118     then
    119         # Already running as the configured user.  Avoid password prompts by not calling su.
    120         RUN_AS_USER=""
    121     fi
    122 fi
     516   ANCHORPROP=
     517   IGNOREPROP=
     518else
     519   ANCHORPROP=wrapper.anchorfile=\"$ANCHORFILE\"
     520   IGNOREPROP=wrapper.ignore_signals=TRUE
     521fi
     522
     523# Build the status file clause.
     524if [ "X$DETAIL_STATUS$WAIT_FOR_STARTED_STATUS" = "X" ]
     525then
     526   STATUSPROP=
     527else
     528   STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\""
     529fi
     530
     531# Build the command file clause.
     532if [ -n "$PAUSABLE" ]
     533then
     534   COMMANDPROP="wrapper.commandfile=\"$COMMANDFILE\" wrapper.pausable=TRUE"
     535else
     536   COMMANDPROP=
     537fi
     538
     539if [ ! -n "$WAIT_FOR_STARTED_STATUS" ]
     540then
     541    WAIT_FOR_STARTED_STATUS=true
     542fi
     543
     544if [ $WAIT_FOR_STARTED_STATUS = true ] ; then
     545    DETAIL_STATUS=true
     546fi
     547
     548
     549# Build the lock file clause.  Only create a lock file if the lock directory exists on this platform.
     550LOCKPROP=
     551if [ -d $LOCKDIR ]
     552then
     553    if [ -w $LOCKDIR ]
     554    then
     555        LOCKPROP=wrapper.lockfile=\"$LOCKFILE\"
     556    fi
     557fi
     558
     559prepAdditionalParams() {
     560    ADDITIONAL_PARA=""
     561    if [ -n "$PASS_THROUGH" ] ; then
     562        ADDITIONAL_PARA="--"
     563    fi
     564    while [ -n "$1" ] ; do
     565        ADDITIONAL_PARA="$ADDITIONAL_PARA \"$1\""
     566        shift
     567    done
     568}
     569
     570checkUser() {
     571    # $1 touchLock flag
     572    # $2.. [command] args
     573
     574    # Check the configured user.  If necessary rerun this script as the desired user.
     575    if [ "X$RUN_AS_USER" != "X" ]
     576    then
     577        # Resolve the location of the 'id' command
     578        IDEXE="/usr/xpg4/bin/id"
     579        if [ ! -x "$IDEXE" ]
     580        then
     581            IDEXE="/usr/bin/id"
     582            if [ ! -x "$IDEXE" ]
     583            then
     584                eval echo `gettext 'Unable to locate "id".'`
     585                eval echo `gettext 'Please report this message along with the location of the command on your system.'`
     586                exit 1
     587            fi
     588        fi
     589
     590        if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
     591        then
     592            # Already running as the configured user.  Avoid password prompts by not calling su.
     593            RUN_AS_USER=""
     594        fi
     595    fi
     596    if [ "X$RUN_AS_USER" != "X" ]
     597    then
     598        # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be
     599        # able to create the lock file.  The Wrapper will be able to update this file once it
     600        # is created but will not be able to delete it on shutdown.  If $1 is set then
     601        # the lock file should be created for the current command
     602        if [ "X$LOCKPROP" != "X" ]
     603        then
     604            if [ "X$1" != "X" ]
     605            then
     606                # Resolve the primary group
     607                RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
     608                if [ "X$RUN_AS_GROUP" = "X" ]
     609                then
     610                    RUN_AS_GROUP=$RUN_AS_USER
     611                fi
     612                touch $LOCKFILE
     613                chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE
     614            fi
     615        fi
     616
     617        # Still want to change users, recurse.  This means that the user will only be
     618        #  prompted for a password once. Variables shifted by 1
     619        shift
     620
     621        # Wrap the parameters so they can be passed.
     622        ADDITIONAL_PARA=""
     623        while [ -n "$1" ] ; do
     624            ADDITIONAL_PARA="$ADDITIONAL_PARA \"$1\""
     625            shift
     626        done
     627
     628        # Use "runuser" if this exists.  runuser should be used on RedHat in preference to su.
     629        #
     630        if test -f "/sbin/runuser"
     631        then
     632            /sbin/runuser - $RUN_AS_USER -c "\"$REALPATH\" $ADDITIONAL_PARA"
     633        else
     634            su - $RUN_AS_USER -c "\"$REALPATH\" $ADDITIONAL_PARA"
     635        fi
     636        RUN_AS_USER_EXITCODE=$?
     637        # Now that we are the original user again, we may need to clean up the lock file.
     638        if [ "X$LOCKPROP" != "X" ]
     639        then
     640            getpid
     641            if [ "X$pid" = "X" ]
     642            then
     643                # Wrapper is not running so make sure the lock file is deleted.
     644                if [ -f "$LOCKFILE" ]
     645                then
     646                    rm "$LOCKFILE"
     647                fi
     648            fi
     649        fi
     650
     651        exit $RUN_AS_USER_EXITCODE
     652    fi
     653}
    123654
    124655getpid() {
    125     if [ -f $PIDFILE ]
    126     then
    127         if [ -r $PIDFILE ]
     656    pid=""
     657    if [ -f "$PIDFILE" ]
     658    then
     659        if [ -r "$PIDFILE" ]
    128660        then
    129             pid=`cat $PIDFILE`
     661            pid=`cat "$PIDFILE"`
    130662            if [ "X$pid" != "X" ]
    131663            then
    132                 # Verify that a process with this pid is still running.
    133                 pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -n 1`
    134                 if [ "X$pid" = "X" ]
     664                # It is possible that 'a' process with the pid exists but that it is not the
     665                #  correct process.  This can happen in a number of cases, but the most
     666                #  common is during system startup after an unclean shutdown.
     667                # The ps statement below looks for the specific wrapper command running as
     668                #  the pid.  If it is not found then the pid file is considered to be stale.
     669                case "$DIST_OS" in
     670                    'freebsd')
     671                        pidtest=`$PSEXE -p $pid -o args | tail -1`
     672                        if [ "X$pidtest" = "XCOMMAND" ]
     673                        then
     674                            pidtest=""
     675                        fi
     676                        ;;
     677                    'macosx')
     678                        pidtest=`$PSEXE -ww -p $pid -o command | grep -F "$WRAPPER_CMD" | tail -1`
     679                        ;;
     680                    'solaris')
     681                        if [ -f "/usr/bin/pargs" ]
     682                        then
     683                            pidtest=`pargs $pid | fgrep "$WRAPPER_CMD" | tail -1`
     684                        else
     685                            case "$PSEXE" in
     686                            '/usr/ucb/ps')
     687                                pidtest=`$PSEXE -auxww  $pid | fgrep "$WRAPPER_CMD" | tail -1`
     688                                ;;
     689                            '/usr/bin/ps')
     690                                TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1`
     691                                COUNT=`echo $TRUNCATED_CMD | wc -m`
     692                                COUNT=`echo ${COUNT}`
     693                                COUNT=`expr $COUNT - 1`
     694                                TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT`
     695                                pidtest=`$PSEXE -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
     696                                ;;
     697                            '/bin/ps')
     698                                TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1`
     699                                COUNT=`echo $TRUNCATED_CMD | wc -m`
     700                                COUNT=`echo ${COUNT}`
     701                                COUNT=`expr $COUNT - 1`
     702                                TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT`
     703                                pidtest=`$PSEXE -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
     704                                ;;
     705                            *)
     706                                echo "Unsupported ps command $PSEXE"
     707                                exit 1
     708                                ;;
     709                            esac
     710                        fi
     711                        ;;
     712                    'hpux')
     713                        pidtest=`$PSEXE -p $pid -x -o args | grep -F "$WRAPPER_CMD" | tail -1`
     714                        ;;
     715                    *)
     716                        pidtest=`$PSEXE -p $pid -o args | grep -F "$WRAPPER_CMD" | tail -1`
     717                        ;;
     718                esac
     719
     720                if [ "X$pidtest" = "X" ]
    135721                then
    136722                    # This is a stale pid file.
    137                     rm -f $PIDFILE
    138                     echo "Removed stale pid file: $PIDFILE"
     723                    rm -f "$PIDFILE"
     724                    eval echo `gettext 'Removed stale pid file: $PIDFILE'`
     725                    pid=""
    139726                fi
    140727            fi
    141728        else
    142             echo "Cannot read $PIDFILE."
     729            eval echo `gettext 'Cannot read $PIDFILE.'`
    143730            exit 1
    144731        fi
     
    146733}
    147734
     735getstatus() {
     736    STATUS=
     737    if [ -f "$STATUSFILE" ]
     738    then
     739        if [ -r "$STATUSFILE" ]
     740        then
     741            STATUS=`cat "$STATUSFILE"`
     742        fi
     743    fi
     744    if [ "X$STATUS" = "X" ]
     745    then
     746        STATUS="Unknown"
     747    fi
     748
     749    JAVASTATUS=
     750    if [ -f "$JAVASTATUSFILE" ]
     751    then
     752        if [ -r "$JAVASTATUSFILE" ]
     753        then
     754            JAVASTATUS=`cat "$JAVASTATUSFILE"`
     755        fi
     756    fi
     757    if [ "X$JAVASTATUS" = "X" ]
     758    then
     759        JAVASTATUS="Unknown"
     760    fi
     761}
     762
    148763testpid() {
    149     pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -n 1`
     764    case "$DIST_OS" in
     765     'solaris')
     766        case "$PSEXE" in
     767        '/usr/ucb/ps')
     768            pid=`$PSEXE  $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
     769            ;;
     770        '/usr/bin/ps')
     771            pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
     772            ;;
     773        '/bin/ps')
     774            pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
     775            ;;
     776        *)
     777            echo "Unsupported ps command $PSEXE"
     778            exit 1
     779            ;;
     780        esac
     781        ;;
     782    *)
     783        pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null
     784        ;;
     785    esac
    150786    if [ "X$pid" = "X" ]
    151787    then
    152788        # Process is gone so remove the pid file.
    153         rm -f $PIDFILE
     789        rm -f "$PIDFILE"
     790        pid=""
     791    fi
     792}
     793
     794launchdtrap() {
     795    stopit
     796    exit
     797}
     798
     799waitforwrapperstop() {
     800    getpid
     801    while [ "X$pid" != "X" ] ; do
     802        sleep 1
     803        getpid
     804    done
     805}
     806
     807launchdinternal() {
     808    getpid
     809    trap launchdtrap TERM
     810    if [ "X$pid" = "X" ]
     811    then
     812        prepAdditionalParams "$@"
     813
     814        # The string passed to eval must handles spaces in paths correctly.
     815        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $ADDITIONAL_PARA"
     816        eval $COMMAND_LINE
     817    else
     818        eval echo `gettext '$APP_LONG_NAME is already running.'`
     819        exit 1
     820    fi
     821    # launchd expects that this script stay up and running so we need to do our own monitoring of the Wrapper process.
     822    if [ $WAIT_FOR_STARTED_STATUS = true ]
     823    then
     824        waitforwrapperstop
    154825    fi
    155826}
    156827
    157828console() {
    158     echo -n "Running $APP_LONG_NAME..."
     829    eval echo `gettext 'Running $APP_LONG_NAME...'`
    159830    getpid
    160831    if [ "X$pid" = "X" ]
    161832    then
    162         if [ "X$IGNORE_SIGNALS" = "X" ]
     833        trap '' 3
     834
     835        prepAdditionalParams "$@"
     836
     837        # The string passed to eval must handles spaces in paths correctly.
     838        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP $ADDITIONAL_PARA"
     839        eval $COMMAND_LINE
     840        if [ "$?" -ne "0" ]; then
     841                failed
     842        fi
     843    else
     844        eval echo `gettext '$APP_LONG_NAME is already running.'`
     845        exit 1
     846    fi
     847}
     848
     849waitforjavastartup() {
     850    getstatus
     851    eval echo $ECHOOPT `gettext 'Waiting for $APP_LONG_NAME...'`
     852
     853    # Wait until the timeout or we have something besides Unknown.
     854    counter=15
     855    while [ "$JAVASTATUS" = "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do
     856        echo $ECHOOPT"."
     857        sleep 1
     858        getstatus
     859        counter=`expr $counter - 1`
     860    done
     861
     862    if [ -n "$WAIT_FOR_STARTED_TIMEOUT" ] ; then
     863        counter=$WAIT_FOR_STARTED_TIMEOUT
     864    else
     865        counter=120
     866    fi
     867    while [ "$JAVASTATUS" != "STARTED" -a "$JAVASTATUS" != "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do
     868        echo $ECHOOPT"."
     869        sleep 1
     870        getstatus
     871        counter=`expr $counter - 1`
     872    done
     873    if [ "X$ECHOOPT" != "X" ] ; then
     874        echo ""
     875    fi
     876}
     877
     878startwait() {
     879    if [ $WAIT_FOR_STARTED_STATUS = true ]
     880    then
     881        waitforjavastartup
     882    fi
     883    # Sleep for a few seconds to allow for intialization if required
     884    #  then test to make sure we're still running.
     885    #
     886    i=0
     887    while [ $i -lt $WAIT_AFTER_STARTUP ]
     888    do
     889        sleep 1
     890        echo $ECHOOPT"."
     891        i=`expr $i + 1`
     892    done
     893    if [ $WAIT_AFTER_STARTUP -gt 0 -o $WAIT_FOR_STARTED_STATUS = true ]
     894    then
     895        getpid
     896        if [ "X$pid" = "X" ]
    163897        then
    164              trap "exit 1" INT
    165              (exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE 2> /dev/null ) || failed
     898            eval echo `gettext ' WARNING: $APP_LONG_NAME may have failed to start.'`
     899            exit 1
    166900        else
    167              (exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.anchorfile=$ANCHORFILE 2> /dev/null) || failed
    168         fi
    169     else
    170         echo "$APP_LONG_NAME is already running."
     901            eval echo `gettext ' running: PID:$pid'`
     902        fi
     903    else
     904        echo ""
     905    fi
     906}
     907
     908macosxstart() {
     909    # The daemon has been installed.
     910    eval echo `gettext 'Starting $APP_LONG_NAME.  Detected Mac OSX and installed launchd daemon.'`
     911    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
     912        eval echo `gettext 'Must be root to perform this action.'`
    171913        exit 1
    172914    fi
     915
     916    getpid
     917    if [ "X$pid" != "X" ] ; then
     918        eval echo `gettext '$APP_LONG_NAME is already running.'`
     919        exit 1
     920    fi
     921
     922    # If the daemon was just installed, it may not be loaded.
     923    LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}`
     924    if [ "X${LOADED_PLIST}" = "X" ] ; then
     925        launchctl load /Library/LaunchDaemons/${APP_PLIST}
     926    fi
     927    # If launchd is set to run the daemon already at Load, we don't need to call start
     928    getpid
     929    if [ "X$pid" == "X" ] ; then
     930        launchctl start ${APP_PLIST_BASE}
     931    fi
     932
     933    startwait
     934}
     935
     936upstartstart() {
     937    # The daemon has been installed.
     938    eval echo `gettext 'Starting $APP_LONG_NAME.  Detected Linux and installed upstart.'`
     939    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
     940        eval echo `gettext 'Must be root to perform this action.'`
     941        exit 1
     942    fi
     943
     944    getpid
     945    if [ "X$pid" != "X" ] ; then
     946        eval echo `gettext '$APP_LONG_NAME is already running.'`
     947        exit 1
     948    fi
     949
     950    /sbin/start ${APP_NAME}
     951
     952    startwait
    173953}
    174954
    175955start() {
    176     echo -n "Starting $APP_LONG_NAME..."
     956    eval echo `gettext 'Starting $APP_LONG_NAME...'`
    177957    getpid
    178958    if [ "X$pid" = "X" ]
    179959    then
    180         if [ "X$IGNORE_SIGNALS" = "X" ]
    181         then
    182             if [ "X$RUN_AS_USER" = "X" ]
    183             then
    184                  (exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.daemonize=TRUE > /dev/null 2>&1) || failed
    185             else
    186                  (su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE \
    187                          wrapper.daemonize=TRUE" > /dev/null 2>&1) || failed
    188             fi
    189         else
    190             if [ "X$RUN_AS_USER" = "X" ]
    191             then
    192                  (exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.anchorfile=$ANCHORFILE \
    193                          wrapper.ignore_signals=TRUE wrapper.daemonize=TRUE > /dev/null 2>&1) || failed
    194             else
    195                  (su -m $RUN_AS_USER -c "exec $CMDNICE $WRAPPER_CMD $WRAPPER_CONF i2psvc.pidfile=$PIDFILE wrapper.anchorfile=$ANCHORFILE \
    196                          wrapper.ignore_signals=TRUE wrapper.daemonize=TRUE" > /dev/null 2>&1) || failed
    197             fi
    198         fi
    199     else
    200         echo "$APP_LONG_NAME is already running."
     960        prepAdditionalParams "$@"
     961
     962        # The string passed to eval must handles spaces in paths correctly.
     963        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $ADDITIONAL_PARA"
     964        eval $COMMAND_LINE
     965        if [ "$?" -ne "0" ]; then
     966                failed
     967        fi
     968    else
     969        eval echo `gettext '$APP_LONG_NAME is already running.'`
    201970        exit 1
    202971    fi
    203      echo "done."
     972
     973    startwait
    204974}
    205975
    206976stopit() {
    207     echo "Stopping $APP_LONG_NAME..."
     977    # $1 exit if down flag
     978
     979    eval echo `gettext 'Stopping $APP_LONG_NAME...'`
    208980    getpid
    209981    if [ "X$pid" = "X" ]
    210982    then
    211         echo "$APP_LONG_NAME was not running."
     983        eval echo `gettext '$APP_LONG_NAME was not running.'`
     984        if [ "X$1" = "X1" ]
     985        then
     986            exit 1
     987        fi
    212988    else
    213989        if [ "X$IGNORE_SIGNALS" = "X" ]
     
    218994            then
    219995                # An explanation for the failure should have been given
    220                 echo "Unable to stop $APP_LONG_NAME."
     996                eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
    221997                exit 1
    222998            fi
    223999        else
    224             rm -f $ANCHORFILE
    225             if [ -f $ANCHORFILE ]
     1000            rm -f "$ANCHORFILE"
     1001            if [ -f "$ANCHORFILE" ]
    2261002            then
    2271003                # An explanation for the failure should have been given
    228                 echo "Unable to stop $APP_LONG_NAME."
     1004                eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
    2291005                exit 1
    2301006            fi
     
    2391015        while [ "X$pid" != "X" ]
    2401016        do
    241             # Loop for up to 5 minutes
    242             if [ "$TOTCNT" -lt "300" ]
     1017            # Show a waiting message every 5 seconds.
     1018            if [ "$CNT" -lt "5" ]
    2431019            then
    244                 if [ "$CNT" -lt "5" ]
    245                 then
    246                     CNT=`expr $CNT + 1`
    247                 else
    248                     echo "Waiting for $APP_LONG_NAME to exit..."
    249                     CNT=0
    250                 fi
    251                 TOTCNT=`expr $TOTCNT + 1`
    252 
    253                 sleep 1
    254 
    255                 testpid
    256             else
    257                 pid=
    258             fi
     1020                CNT=`expr $CNT + 1`
     1021            else
     1022                eval echo `gettext 'Waiting for $APP_LONG_NAME to exit...'`
     1023                CNT=0
     1024            fi
     1025            TOTCNT=`expr $TOTCNT + 1`
     1026
     1027            sleep 1
     1028
     1029            testpid
    2591030        done
    2601031
     
    2631034        if [ "X$pid" != "X" ]
    2641035        then
    265             echo "Timed out waiting for $APP_LONG_NAME to exit."
    266             echo "  Attempting a forced exit..."
    267             kill -9 $pid
    268         fi
    269 
    270         pid=$savepid
    271         testpid
    272         if [ "X$pid" != "X" ]
    273         then
    274             echo "Failed to stop $APP_LONG_NAME."
     1036            eval echo `gettext 'Failed to stop $APP_LONG_NAME.'`
    2751037            exit 1
    2761038        else
    277             echo "Stopped $APP_LONG_NAME."
    278         fi
    279     fi
     1039            eval echo `gettext 'Stopped $APP_LONG_NAME.'`
     1040        fi
     1041    fi
     1042}
     1043
     1044pause() {
     1045    eval echo `gettext 'Pausing $APP_LONG_NAME.'`
     1046}
     1047
     1048resume() {
     1049    eval echo `gettext 'Resuming $APP_LONG_NAME.'`
    2801050}
    2811051
     
    2841054    if [ "X$pid" = "X" ]
    2851055    then
    286         echo "$APP_LONG_NAME is not running."
     1056        eval echo `gettext '$APP_LONG_NAME is not running.'`
    2871057        exit 1
    2881058    else
    289         echo "$APP_LONG_NAME is running ($pid)."
     1059        if [ "X$DETAIL_STATUS" = "X" ]
     1060        then
     1061            eval echo `gettext '$APP_LONG_NAME is running: PID:$pid'`
     1062        else
     1063            getstatus
     1064            eval echo `gettext '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS'`
     1065        fi
    2901066        exit 0
    2911067    fi
    2921068}
    2931069
     1070installUpstart() {
     1071    eval echo `gettext ' Installing the $APP_LONG_NAME daemon using upstart..'`
     1072    if [ -f "${APP_NAME}.conf" ] ; then
     1073        eval echo `gettext ' a custom upstart conf file ${APP_NAME}.conf found'`
     1074        cp "${REALDIR}/${APP_NAME}.install" "/etc/init/${APP_NAME}.conf"
     1075    else
     1076        eval echo `gettext ' creating default upstart conf file..'`
     1077        echo "# ${APP_NAME} - ${APP_LONG_NAME}" > "/etc/init/${APP_NAME}.conf"
     1078        echo "description \"${APP_LONG_NAME}\"" >> "/etc/init/${APP_NAME}.conf"
     1079        echo "author \"Tanuki Software Ltd. <info@tanukisoftware.com>\"" >> "/etc/init/${APP_NAME}.conf"
     1080        echo "start on runlevel [2345]" >> "/etc/init/${APP_NAME}.conf"
     1081        echo "stop on runlevel [!2345]" >> "/etc/init/${APP_NAME}.conf"
     1082        echo "env LANG=${LANG}" >> "/etc/init/${APP_NAME}.conf"
     1083       echo "exec \"${REALPATH}\" launchdinternal" >> "/etc/init/${APP_NAME}.conf"
     1084    fi
     1085}
     1086
     1087installdaemon() {
     1088    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
     1089        eval echo `gettext 'Must be root to perform this action.'`
     1090        exit 1
     1091    else
     1092        APP_NAME_LOWER=`echo "$APP_NAME" | tr "[A-Z]" "[a-z]"`
     1093        if [ "$DIST_OS" = "solaris" ] ; then
     1094            eval echo `gettext 'Detected Solaris:'`
     1095            if [ -f /etc/init.d/$APP_NAME ] ; then
     1096                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1097                exit 1
     1098            else
     1099                eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1100                ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
     1101                ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER"
     1102                ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER"
     1103            fi
     1104        elif [ "$DIST_OS" = "linux" ] ; then
     1105            if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ]  ; then
     1106                eval echo `gettext 'Detected RHEL or Fedora:'`
     1107                if [ -f "/etc/init.d/$APP_NAME" -o -f "/etc/init/${APP_NAME}.conf" ] ; then
     1108                    eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1109                    exit 1
     1110                else
     1111                    if [ -n "$USE_UPSTART" -a -d "/etc/init" ] ; then
     1112                        installUpstart
     1113                    else
     1114                        eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1115                        ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
     1116                        /sbin/chkconfig --add "$APP_NAME"
     1117                        /sbin/chkconfig "$APP_NAME" on
     1118                    fi
     1119                fi
     1120            elif [ -f /etc/SuSE-release ] ; then
     1121                eval echo `gettext 'Detected SuSE or SLES:'`
     1122                if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1123                    eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1124                    exit 1
     1125                else
     1126                    eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1127                    ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
     1128                    sed -i "s/Default-Start: 2 3 4 5/Default-Start: 5/" $0
     1129                    insserv "/etc/init.d/$APP_NAME"
     1130                fi
     1131            elif [ -f /etc/lsb-release ] ; then
     1132                eval echo `gettext 'Detected Ubuntu:'`
     1133                if [ -f "/etc/init.d/$APP_NAME" -o -f "/etc/init/${APP_NAME}.conf" ] ; then
     1134                    eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1135                    exit 1
     1136                else
     1137                    if [ -n "$USE_UPSTART" -a -d "/etc/init" ] ; then
     1138                        installUpstart
     1139                    else
     1140                        eval echo `gettext ' Installing the $APP_LONG_NAME daemon using init.d..'`
     1141                        ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
     1142                        update-rc.d "$APP_NAME" defaults
     1143                    fi
     1144                fi
     1145            else
     1146                eval echo `gettext 'Detected Linux:'`
     1147                if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1148                    eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1149                    exit 1
     1150                else
     1151                    eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1152                    ln -s "$REALPATH" /etc/init.d/$APP_NAME
     1153                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER"
     1154                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER"
     1155                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER"
     1156                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/K20$APP_NAME_LOWER"
     1157                fi
     1158            fi
     1159        elif [ "$DIST_OS" = "hpux" ] ; then
     1160            eval echo `gettext 'Detected HP-UX:'`
     1161            if [ -f "/sbin/init.d/$APP_NAME" ] ; then
     1162                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1163                exit 1
     1164            else
     1165                eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1166                ln -s "$REALPATH" "/sbin/init.d/$APP_NAME"
     1167                ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/K20$APP_NAME_LOWER"
     1168                ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/S20$APP_NAME_LOWER"
     1169            fi
     1170        elif [ "$DIST_OS" = "aix" ] ; then
     1171            eval echo `gettext 'Detected AIX:'`
     1172            if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then
     1173                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed as rc.d script.'`
     1174                exit 1
     1175            elif [ -n "`/usr/sbin/lsitab $APP_NAME`" -a -n "`/usr/bin/lssrc -S -s $APP_NAME`" ] ; then
     1176                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed as SRC service.'`
     1177                exit 1
     1178            else
     1179                eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1180                if [ -n "`/usr/sbin/lsitab install_assist`" ] ; then
     1181                    eval echo `gettext ' The task /usr/sbin/install_assist was found in the inittab, this might cause problems for all subsequent tasks to launch at this process is known to block the init task. Please make sure this task is not needed anymore and remove/deactivate it.'`
     1182                fi
     1183                /usr/bin/mkssys -s "$APP_NAME" -p "$REALPATH" -a "launchdinternal" -u 0 -f 9 -n 15 -S
     1184                /usr/sbin/mkitab "$APP_NAME":2:once:"/usr/bin/startsrc -s \"${APP_NAME}\" >/dev/console 2>&1"
     1185
     1186            fi
     1187        elif [ "$DIST_OS" = "freebsd" ] ; then
     1188            eval echo `gettext 'Detected FreeBSD:'`
     1189            if [ -f "/etc/rc.d/$APP_NAME" ] ; then
     1190                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1191                exit 1
     1192            else
     1193                eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1194                sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf
     1195                if [ -f "${REALDIR}/${APP_NAME}.install" ] ; then
     1196                    ln -s "${REALDIR}/${APP_NAME}.install" "/etc/rc.d/$APP_NAME"
     1197                else
     1198                    echo '#!/bin/sh' > "/etc/rc.d/$APP_NAME"
     1199                    echo "#" >> "/etc/rc.d/$APP_NAME"
     1200                    echo "# PROVIDE: $APP_NAME" >> "/etc/rc.d/$APP_NAME"
     1201                    echo "# REQUIRE: NETWORKING" >> "/etc/rc.d/$APP_NAME"
     1202                    echo "# KEYWORD: shutdown" >> "/etc/rc.d/$APP_NAME"
     1203                    echo ". /etc/rc.subr" >> "/etc/rc.d/$APP_NAME"
     1204                    echo "name=\"$APP_NAME\"" >> "/etc/rc.d/$APP_NAME"
     1205                    echo "rcvar=\`set_rcvar\`" >> "/etc/rc.d/$APP_NAME"
     1206                    echo "command=\"${REALDIR}/${APP_NAME}router\"" >> "/etc/rc.d/$APP_NAME"
     1207                    echo 'start_cmd="${name}_start"' >> "/etc/rc.d/$APP_NAME"
     1208                    echo 'load_rc_config $name' >> "/etc/rc.d/$APP_NAME"
     1209                    echo 'status_cmd="${name}_status"' >> "/etc/rc.d/$APP_NAME"
     1210                    echo 'stop_cmd="${name}_stop"' >> "/etc/rc.d/$APP_NAME"
     1211                    echo "${APP_NAME}_status() {" >> "/etc/rc.d/$APP_NAME"
     1212                    echo '${command} status' >> "/etc/rc.d/$APP_NAME"
     1213                    echo '}' >> "/etc/rc.d/$APP_NAME"
     1214                    echo "${APP_NAME}_stop() {" >> "/etc/rc.d/$APP_NAME"
     1215                    echo '${command} stop' >> "/etc/rc.d/$APP_NAME"
     1216                    echo '}' >> "/etc/rc.d/$APP_NAME"
     1217                    echo "${APP_NAME}_start() {" >> "/etc/rc.d/$APP_NAME"
     1218                    echo '${command} start' >> "/etc/rc.d/$APP_NAME"
     1219                    echo '}' >> "/etc/rc.d/$APP_NAME"
     1220                    echo 'run_rc_command "$1"' >> "/etc/rc.d/$APP_NAME"
     1221                fi
     1222                echo "${APP_NAME}_enable=\"YES\"" >> /etc/rc.conf
     1223                chmod 555 "/etc/rc.d/$APP_NAME"
     1224            fi
     1225        elif [ "$DIST_OS" = "macosx" ] ; then
     1226            eval echo `gettext 'Detected Mac OSX:'`
     1227            if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
     1228                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1229                exit 1
     1230            else
     1231                eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1232                if [ -f "${REALDIR}/${APP_PLIST}" ] ; then
     1233                    ln -s "${REALDIR}/${APP_PLIST}" "/Library/LaunchDaemons/${APP_PLIST}"
     1234                else
     1235                    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > "/Library/LaunchDaemons/${APP_PLIST}"
     1236                    echo "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1237                    echo "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1238                    echo "<plist version=\"1.0\">" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1239                    echo "    <dict>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1240                    echo "        <key>Label</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1241                    echo "        <string>${APP_PLIST_BASE}</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1242                    echo "        <key>ProgramArguments</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1243                    echo "        <array>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1244                    echo "            <string>${REALDIR}/${APP_NAME}router</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1245                    echo "            <string>launchdinternal</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1246                    echo "        </array>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1247                    echo "        <key>OnDemand</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1248                    echo "        <true/>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1249                    echo "        <key>RunAtLoad</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1250                    echo "        <true/>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1251                    if [ "X$RUN_AS_USER" != "X" ] ; then
     1252                        echo "        <key>UserName</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1253                        echo "        <string>${RUN_AS_USER}</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1254                    fi
     1255                    echo "    </dict>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1256                    echo "</plist>" >> "/Library/LaunchDaemons/${APP_PLIST}"
     1257                fi
     1258                chmod 555 "/Library/LaunchDaemons/${APP_PLIST}"
     1259            fi
     1260        elif [ "$DIST_OS" = "zos" ] ; then
     1261            eval echo `gettext 'Detected z/OS:'`
     1262            if [ -f /etc/rc.bak ] ; then
     1263                eval echo `gettext ' The $APP_LONG_NAME daemon is already installed.'`
     1264                exit 1
     1265            else
     1266                eval echo `gettext ' Installing the $APP_LONG_NAME daemon..'`
     1267                cp /etc/rc /etc/rc.bak
     1268                sed  "s:echo /etc/rc script executed, \`date\`::g" /etc/rc.bak > /etc/rc
     1269                echo "_BPX_JOBNAME='${APP_NAME}' \"${REALDIR}/${APP_NAME}router\" start" >>/etc/rc
     1270                echo '/etc/rc script executed, `date`' >>/etc/rc
     1271            fi
     1272        else
     1273            eval echo `gettext 'Install not currently supported for $DIST_OS'`
     1274            exit 1
     1275        fi
     1276    fi
     1277}
     1278
     1279removedaemon() {
     1280    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
     1281        eval echo `gettext 'Must be root to perform this action.'`
     1282        exit 1
     1283    else
     1284        stopit "0"
     1285        APP_NAME_LOWER=`echo "$APP_NAME" | tr "[A-Z]" "[a-z]"`
     1286        if [ "$DIST_OS" = "solaris" ] ; then
     1287            eval echo `gettext 'Detected Solaris:'`
     1288            if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1289                eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1290                for i in "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME"
     1291                do
     1292                    rm -f $i
     1293                done
     1294            else
     1295                eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1296                exit 1
     1297            fi
     1298        elif [ "$DIST_OS" = "linux" ] ; then
     1299            if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then
     1300                eval echo `gettext 'Detected RHEL or Fedora:'`
     1301                if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1302                    eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1303                    /sbin/chkconfig "$APP_NAME" off
     1304                    /sbin/chkconfig --del "$APP_NAME"
     1305                    rm -f "/etc/init.d/$APP_NAME"
     1306                elif [ -f "/etc/init/${APP_NAME}.conf" ] ; then
     1307                    eval echo `gettext ' Removing $APP_LONG_NAME daemon from upstart...'`
     1308                    rm "/etc/init/${APP_NAME}.conf"
     1309                else
     1310                    eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1311                    exit 1
     1312                fi
     1313            elif [ -f /etc/SuSE-release ] ; then
     1314                eval echo `gettext 'Detected SuSE or SLES:'`
     1315                if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1316                    eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1317                    insserv -r "/etc/init.d/$APP_NAME"
     1318                    rm -f "/etc/init.d/$APP_NAME"
     1319                else
     1320                    eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1321                    exit 1
     1322                fi
     1323            elif [ -f /etc/lsb-release ] ; then
     1324                eval echo `gettext 'Detected Ubuntu:'`
     1325                if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1326                    eval echo `gettext ' Removing $APP_LONG_NAME daemon from init.d...'`
     1327                    update-rc.d -f "$APP_NAME" remove
     1328                    rm -f "/etc/init.d/$APP_NAME"
     1329                elif [ -f "/etc/init/${APP_NAME}.conf" ] ; then
     1330                    eval echo `gettext ' Removing $APP_LONG_NAME daemon from upstart...'`
     1331                    rm "/etc/init/${APP_NAME}.conf"
     1332                else
     1333                    eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1334                    exit 1
     1335                fi
     1336            else
     1337                eval echo `gettext 'Detected Linux:'`
     1338                if [ -f "/etc/init.d/$APP_NAME" ] ; then
     1339                    eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1340                    for i in "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/rc5.d/K20$APP_NAME_LOWER" "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER"
     1341                    do
     1342                        rm -f $i
     1343                    done
     1344                else
     1345                    eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1346                    exit 1
     1347                fi
     1348            fi
     1349        elif [ "$DIST_OS" = "hpux" ] ; then
     1350            eval echo `gettext 'Detected HP-UX:'`
     1351            if [ -f "/sbin/init.d/$APP_NAME" ] ; then
     1352                eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1353                for i in "/sbin/rc3.d/K20$APP_NAME_LOWER" "/sbin/rc3.d/S20$APP_NAME_LOWER" "/sbin/init.d/$APP_NAME"
     1354                do
     1355                    rm -f $i
     1356                done
     1357            else
     1358                eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1359                exit 1
     1360            fi
     1361        elif [ "$DIST_OS" = "aix" ] ; then
     1362            eval echo `gettext 'Detected AIX:'`
     1363            if [ -f "/etc/rc.d/init.d/$APP_NAME" -o -n "`/usr/sbin/lsitab $APP_NAME`" -o -n "`/usr/bin/lssrc -S -s $APP_NAME`" ] ; then
     1364                eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1365                if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then
     1366                    for i in "/etc/rc.d/rc2.d/S20$APP_NAME_LOWER" "/etc/rc.d/rc2.d/K20$APP_NAME_LOWER" "/etc/rc.d/init.d/$APP_NAME"
     1367                    do
     1368                        rm -f $i
     1369                    done
     1370                fi
     1371                if [ -n "`/usr/sbin/lsitab $APP_NAME`" -o -n "`/usr/bin/lssrc -S -s $APP_NAME`" ] ; then
     1372                    /usr/sbin/rmitab $APP_NAME
     1373                    /usr/bin/rmssys -s $APP_NAME
     1374                fi
     1375            else
     1376                eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1377                exit 1
     1378            fi
     1379        elif [ "$DIST_OS" = "freebsd" ] ; then
     1380            eval echo `gettext 'Detected FreeBSD:'`
     1381            if [ -f "/etc/rc.d/$APP_NAME" ] ; then
     1382                eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1383                for i in "/etc/rc.d/$APP_NAME"
     1384                do
     1385                    rm -f $i
     1386                done
     1387                sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf
     1388            else
     1389                eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1390                exit 1
     1391            fi
     1392        elif [ "$DIST_OS" = "macosx" ] ; then
     1393            eval echo `gettext 'Detected Mac OSX:'`
     1394            if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
     1395                eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1396                # Make sure the plist is installed
     1397                LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}`
     1398                if [ "X${LOADED_PLIST}" != "X" ] ; then
     1399                    launchctl unload "/Library/LaunchDaemons/${APP_PLIST}"
     1400                fi
     1401                rm -f "/Library/LaunchDaemons/${APP_PLIST}"
     1402            else
     1403                eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1404                exit 1
     1405            fi
     1406        elif [ "$DIST_OS" = "zos" ] ; then
     1407            eval echo `gettext 'Detected z/OS:'`
     1408            if [ -f /etc/rc.bak ] ; then
     1409                eval echo `gettext ' Removing $APP_LONG_NAME daemon...'`
     1410                cp /etc/rc /etc/rc.bak
     1411                sed  "s/_BPX_JOBNAME=\'APP_NAME\'.*//g" /etc/rc.bak > /etc/rc
     1412                rm /etc/rc.bak
     1413            else
     1414                eval echo `gettext ' The $APP_LONG_NAME daemon is not currently installed.'`
     1415                exit 1
     1416            fi
     1417        else
     1418            eval echo `gettext 'Remove not currently supported for $DIST_OS'`
     1419            exit 1
     1420        fi
     1421    fi
     1422}
     1423
    2941424dump() {
    295     echo "Dumping $APP_LONG_NAME..."
     1425    eval echo `gettext 'Dumping $APP_LONG_NAME...'`
    2961426    getpid
    2971427    if [ "X$pid" = "X" ]
    2981428    then
    299         echo "$APP_LONG_NAME was not running."
    300 
     1429        eval echo `gettext '$APP_LONG_NAME was not running.'`
    3011430    else
    3021431        kill -3 $pid
     
    3041433        if [ $? -ne 0 ]
    3051434        then
    306             echo "Failed to dump $APP_LONG_NAME."
     1435            eval echo `gettext 'Failed to dump $APP_LONG_NAME.'`
    3071436            exit 1
    3081437        else
    309             echo "Dumped $APP_LONG_NAME."
    310         fi
    311     fi
    312 }
    313 
    314 failed() {
    315         echo "**Failed to load the wrapper**"
    316         case `uname -s` in
    317              FreeBSD)
    318                 echo
    319                 echo "In an attempt to ensure that I2P will run on as many systems as possible, included in the"
    320                 echo "installation package is a version of the wrapper that was compiled for FreeBSD 6."
    321                 echo "Necessary compatibility libraries may not be on your system."
    322                 echo
    323                 echo "Please install the misc/compat6x port and try running I2P again."
    324                 echo
    325                 echo "If you cannot (or choose not to) install these libraries, I2P may be started with the"
    326                 echo "'runplain.sh' script. Another option would be to compile the java wrapper for your system."
    327                 echo "Hints to accomplish this can be found at ${WRAPPER_URL}."
    328                 echo
    329                 exit 1
    330                 ;;
    331              *)
    332                 echo
    333                 unsupported
    334                 exit 1
    335                 ;;
    336         esac
    337 }
    338 case "$1" in
    339 
    340     'console')
    341         console
    342         ;;
    343 
    344     'start')
    345         start
    346         ;;
    347 
    348     'stop')
    349         stopit
    350         ;;
    351 
    352     'restart')
    353         stopit
    354         sleep 2
    355         start
    356         ;;
    357 
    358     'status')
    359         status
    360         ;;
    361 
    362     'dump')
    363         dump
    364         ;;
    365 
    366     *)
    367         echo "Usage: $0 { console | start | stop | restart | status | dump }"
    368         exit 1
    369         ;;
    370 esac
     1438            eval echo `gettext 'Dumped $APP_LONG_NAME.'`
     1439        fi
     1440    fi
     1441}
     1442
     1443# Used by HP-UX init scripts.
     1444startmsg() {
     1445    getpid
     1446    if [ "X$pid" = "X" ]
     1447    then
     1448        eval echo `gettext 'Starting $APP_LONG_NAME...  Wrapper:Stopped'`
     1449    else
     1450        if [ "X$DETAIL_STATUS" = "X" ]
     1451        then
     1452            eval echo `gettext 'Starting $APP_LONG_NAME...  Wrapper:Running'`
     1453        else
     1454            getstatus
     1455            eval echo `gettext 'Starting $APP_LONG_NAME...  Wrapper:$STATUS, Java:$JAVASTATUS'`
     1456        fi
     1457    fi
     1458}
     1459
     1460# Used by HP-UX init scripts.
     1461stopmsg() {
     1462    getpid
     1463    if [ "X$pid" = "X" ]
     1464    then
     1465        eval echo `gettext 'Stopping $APP_LONG_NAME...  Wrapper:Stopped'`
     1466    else
     1467        if [ "X$DETAIL_STATUS" = "X" ]
     1468        then
     1469            eval echo `gettext 'Stopping $APP_LONG_NAME...  Wrapper:Running'`
     1470        else
     1471            getstatus
     1472            eval echo `gettext 'Stopping $APP_LONG_NAME...  Wrapper:$STATUS, Java:$JAVASTATUS'`
     1473        fi
     1474    fi
     1475}
     1476
     1477showUsage() {
     1478    # $1 bad command
     1479
     1480    if [ -n "$1" ]
     1481    then
     1482        eval echo `gettext 'Unexpected command: $1'`
     1483        echo "";
     1484    fi
     1485
     1486    eval MSG=`gettext 'Usage: '`
     1487    if [ -n "$FIXED_COMMAND" ] ; then
     1488        if [ -n "$PASS_THROUGH" ] ; then
     1489            echo "${MSG} $0 {JavaAppArgs}"
     1490        else
     1491            echo "${MSG} $0"
     1492        fi
     1493    else
     1494        if [ -n "$PAUSABLE" ] ; then
     1495            if [ -n "$PASS_THROUGH" ] ; then
     1496                echo "${MSG} $0 [ console {JavaAppArgs} | start {JavaAppArgs} | stop | restart {JavaAppArgs} | condrestart {JavaAppArgs} | pause | resume | status | install | remove | dump ]"
     1497            else
     1498                echo "${MSG} $0 [ console | start | stop | restart | condrestart | pause | resume | status | install | remove | dump ]"
     1499            fi
     1500        else
     1501            if [ -n "$PASS_THROUGH" ] ; then
     1502                echo "${MSG} $0 [ console {JavaAppArgs} | start {JavaAppArgs} | stop | restart {JavaAppArgs} | condrestart {JavaAppArgs} | status | install | remove | dump ]"
     1503            else
     1504                echo "${MSG} $0 [ console | start | stop | restart | condrestart | status | install | remove | dump ]"
     1505            fi
     1506        fi
     1507    fi
     1508
     1509    if [ ! -n "$BRIEF_USAGE" ]
     1510    then
     1511        echo "";
     1512        if [ ! -n "$FIXED_COMMAND" ] ; then
     1513            echo "`gettext 'Commands:'`"
     1514            echo "`gettext '  console      Launch in the current console.'`"
     1515            echo "`gettext '  start        Start in the background as a daemon process.'`"
     1516            echo "`gettext '  stop         Stop if running as a daemon or in another console.'`"
     1517            echo "`gettext '  restart      Stop if running and then start.'`"
     1518            echo "`gettext '  condrestart  Restart only if already running.'`"
     1519            if [ -n "$PAUSABLE" ] ; then
     1520                echo "`gettext '  pause        Pause if running.'`"
     1521                echo "`gettext '  resume       Resume if paused.'`"
     1522            fi
     1523            echo "`gettext '  status       Query the current status.'`"
     1524            echo "`gettext '  install      Install to start automatically when system boots.'`"
     1525            echo "`gettext '  remove       Uninstall.'`"
     1526            echo "`gettext '  dump         Request a Java thread dump if running.'`"
     1527            echo "";
     1528        fi
     1529        if [ -n "$PASS_THROUGH" ] ; then
     1530            echo "`gettext 'JavaAppArgs: Zero or more arguments which will be passed to the Java application.'`"
     1531            echo "";
     1532        fi
     1533    fi
     1534
     1535    exit 1
     1536}
     1537
     1538docommand() {
     1539    case "$COMMAND" in
     1540        'console')
     1541            checkUser touchlock "$@"
     1542            if [ ! -n "$FIXED_COMMAND" ] ; then
     1543                shift
     1544            fi
     1545            console "$@"
     1546            ;;
     1547
     1548        'start')
     1549            if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
     1550                macosxstart
     1551            elif [ "$DIST_OS" = "linux" -a -f "/etc/init/${APP_NAME}.conf" ] ; then
     1552                checkUser touchlock "$@"
     1553                upstartstart
     1554            else
     1555                checkUser touchlock "$@"
     1556                if [ ! -n "$FIXED_COMMAND" ] ; then
     1557                    shift
     1558                fi
     1559                start "$@"
     1560            fi
     1561            ;;
     1562
     1563        'stop')
     1564            checkUser "" "$COMMAND"
     1565            stopit "0"
     1566            ;;
     1567
     1568        'restart')
     1569            checkUser touchlock "$COMMAND"
     1570            if [ ! -n "$FIXED_COMMAND" ] ; then
     1571                shift
     1572            fi
     1573            stopit "0"
     1574            start "$@"
     1575            ;;
     1576
     1577        'condrestart')
     1578            checkUser touchlock "$COMMAND"
     1579            if [ ! -n "$FIXED_COMMAND" ] ; then
     1580                shift
     1581            fi
     1582            stopit "1"
     1583            start "$@"
     1584            ;;
     1585
     1586        'pause')
     1587            if [ -n "$PAUSABLE" ]
     1588            then
     1589                pause
     1590            else
     1591                showUsage "$COMMAND"
     1592            fi
     1593            ;;
     1594
     1595        'resume')
     1596            if [ -n "$PAUSABLE" ]
     1597            then
     1598                resume
     1599            else
     1600                showUsage "$COMMAND"
     1601            fi
     1602            ;;
     1603
     1604        'status')
     1605            checkUser "" "$COMMAND"
     1606            status
     1607            ;;
     1608
     1609        'install')
     1610            installdaemon
     1611            ;;
     1612
     1613        'remove')
     1614            removedaemon
     1615            ;;
     1616
     1617        'dump')
     1618            checkUser "" "$COMMAND"
     1619            dump
     1620            ;;
     1621
     1622        'start_msg')
     1623            # Internal command called by launchd on HP-UX.
     1624            checkUser "" "$COMMAND"
     1625            startmsg
     1626            ;;
     1627
     1628        'stop_msg')
     1629            # Internal command called by launchd on HP-UX.
     1630            checkUser "" "$COMMAND"
     1631            stopmsg
     1632            ;;
     1633
     1634        'launchdinternal')
     1635            # Internal command called by launchd on Max OSX.
     1636            # We do not want to call checkUser here as it is handled in the launchd plist file.  Doing it here would confuse launchd.
     1637            if [ ! -n "$FIXED_COMMAND" ] ; then
     1638                shift
     1639            fi
     1640            launchdinternal "$@"
     1641            ;;
     1642
     1643        *)
     1644            showUsage "$COMMAND"
     1645            ;;
     1646    esac
     1647}
     1648
     1649docommand "$@"
    3711650
    3721651exit 0
Note: See TracChangeset for help on using the changeset viewer.