source: installer/resources/i2prouter @ 7429762

Last change on this file since 7429762 was 7429762, checked in by kytv <kytv@…>, 8 years ago

bump i2prouter-script version

  • Property mode set to 100644
File size: 67.2 KB
Line 
1#!/bin/sh
2
3#
4# Copyright (c) 1999, 2011 Tanuki Software, Ltd.
5# http://www.tanukisoftware.com
6# All rights reserved.
7#
8# Make sure that PIDFILE points to the correct location,
9# if you have changed the default location set in the
10# wrapper configuration file.
11#
12# If this script fails to successfully invoke i2psvc on your platform,
13# try the runplain.sh script instead.
14#
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#
23#-----------------------------------------------------------------------------
24# These settings can be modified to fit the needs of your application
25# Optimized for use with version 3.5.19 of the Wrapper.
26
27# Paths
28# Note that (percent)INSTALL_PATH, (percent)USER_HOME,  and (percent)SYSTEM_java_io_tmpdir
29# should have been replaced by the izpack installer.
30# If you did not run the installer, replace them with the appropriate paths.
31I2P="%INSTALL_PATH"
32if [ "`uname -s`" == "Darwin" ]; then
33   if [ -d "%USER_HOME/Library/Application Support" ]; then
34       I2P_CONFIG_DIR="%USER_HOME/Library/Application Support/i2p"
35   else
36       I2P_CONFIG_DIR="%USER_HOME/.i2p"
37   fi
38else
39    I2P_CONFIG_DIR="%USER_HOME/.i2p"
40fi
41I2PTEMP="%SYSTEM_java_io_tmpdir"
42# PORTABLE installation:
43# Use the following instead.
44#I2PTEMP="%INSTALL_PATH"
45
46# Application
47APP_NAME="i2p"
48APP_LONG_NAME="I2P Service"
49
50# gettext - we look for it in the path
51# fallback to echo is below, we can't set it to echo here.
52GETTEXT=$(which gettext > /dev/null 2>&1)
53
54# Where to install the systemd service
55SYSTEMD_SERVICE="/etc/systemd/system/${APP_NAME}.service"
56if grep -q systemd /proc/1/comm > /dev/null 2>&1 ; then
57    USE_SYSTEMD=1
58fi
59
60# If specified, the Wrapper will be run as the specified user.
61# IMPORTANT - Make sure that the user has the required privileges to write
62#  the PID file and wrapper.log files and that the directories exist.
63#  Failure to write the pid file will cause the Wrapper to exit.
64#  Failure to write the log file will cause the Wrapper to use CWD for the log file location.
65#
66# NOTE - This will set the user which is used to run the Wrapper as well as
67#  the JVM and is not useful in situations where a privileged resource or
68#  port needs to be allocated prior to the user being changed.
69#RUN_AS_USER=
70
71# Wrapper
72WRAPPER_CMD="$I2P/i2psvc"
73WRAPPER_CONF="$I2P/wrapper.config"
74
75# Priority at which to run the wrapper.  See "man nice" for valid priorities.
76#  nice is only used if a priority is specified.
77PRIORITY=
78
79# Location of the pid and status files.
80PIDDIR="$I2P_CONFIG_DIR"
81#PIDDIR="$I2PTEMP"
82
83# Location of the wrapper.log file
84LOGDIR="$I2P_CONFIG_DIR"
85#LOGDIR="$I2PTEMP"
86LOGFILE="$LOGDIR/wrapper.log"
87
88# If you'd like to run I2P as root (not recommended), uncomment the
89# following line
90#ALLOW_ROOT=true
91
92# FIXED_COMMAND tells the script to use a hard coded action rather than
93# expecting the first parameter of the command line to be the command.
94# By default the command will will be expected to be the first parameter.
95#FIXED_COMMAND=console
96
97# PASS_THROUGH tells the script to pass all arguments through to the JVM
98#  as is.  If FIXED_COMMAND is specified then all arguments will be passed.
99#  If not set then all arguments starting with the second will be passed.
100#PASS_THROUGH=true
101
102# If uncommented, causes the Wrapper to be shutdown using an anchor file.
103#  When launched with the 'start' command, it will also ignore all INT and
104#  TERM signals.
105#IGNORE_SIGNALS=true
106
107# Wrapper will start the JVM asynchronously. Your application may have some
108#  initialization tasks and it may be desirable to wait a few seconds
109#  before returning.  For example, to delay the invocation of following
110#  startup scripts.  Setting WAIT_AFTER_STARTUP to a positive number will
111#  cause the start command to delay for the indicated period of time
112#  (in seconds).
113#
114WAIT_AFTER_STARTUP=0
115
116# If set, wait for the wrapper to report that the daemon has started
117WAIT_FOR_STARTED_STATUS=true
118WAIT_FOR_STARTED_TIMEOUT=120
119
120# If set, the status, start_msg and stop_msg commands will print out detailed
121#   state information on the Wrapper and Java processes.
122#DETAIL_STATUS=true
123
124# By default we show a detailed usage block.  Uncomment to show brief usage.
125#BRIEF_USAGE=true
126
127# flag for using upstart when installing (rather than init.d rc.d)
128USE_UPSTART=
129
130# Source the environment variables for the locale if $LANG isn't set
131# If you want to set custom locale variables for I2P,
132# you may comment out this block and set them yourself here.
133
134if [ ! -n $LANG ]; then
135        for ENV_FILE in /etc/environment /etc/default/locale; do
136                [ -r "$ENV_FILE" ] || continue
137                [ -s "$ENV_FILE" ] || continue
138
139                for var in LANG LANGUAGE LC_ALL LC_CTYPE; do
140                        value=`egrep "^${var}=" "$ENV_FILE" | tail -n1 | cut -d= -f2`
141                        [ -n "$value" ] && eval export $var=$value
142                done
143        done
144fi
145
146# When installing on On Mac OSX platforms, the following domain will be used to
147#  prefix the plist file name.
148PLIST_DOMAIN=org.tanukisoftware.wrapper
149
150# The following two lines are used by the chkconfig command. Change as is
151#  appropriate for your application.  They should remain commented.
152# chkconfig: 2345 20 80
153# description: I2P Service
154
155# Initialization block for the install_initd and remove_initd scripts used by
156#  SUSE linux distributions.
157### BEGIN INIT INFO
158# Provides: i2p
159# Required-Start: $local_fs $network $syslog
160# Should-Start:
161# Required-Stop:
162# Default-Start: 2 3 4 5
163# Default-Stop: 0 1 6
164# Short-Description: I2P Service
165# Description: I2P is a load-balanced unspoofable packet switching network
166### END INIT INFO
167
168# Do not modify anything beyond this point
169#-----------------------------------------------------------------------------
170if [ ! -e "$WRAPPER_CONF" ]; then
171       echo "Starting I2P Failed: Unable to find $WRAPPER_CONF"
172       exit 1
173fi
174
175# Workaround for Gentoo
176JAVABINARY=$(awk -F'=' '/^ *wrapper\.java\.command/{print $2}' "$WRAPPER_CONF")
177
178if [ -e /etc/gentoo-release ]; then
179    if [ $JAVABINARY = java ]; then
180        if [ -x /etc/java-config-2/current-system-vm/bin/java ]; then
181            JAVABINARY="/etc/java-config-2/current-system-vm/bin/java"
182        else
183            echo "Please set wrapper.java.command in $WRAPPER_CONF"
184            exit 1
185        fi
186    fi
187fi
188
189WRAPPER_URL="http://www.i2p2.de/manualwrapper"
190unsupported() {
191    echo "The most likely reason is that a supported version of the java"
192    echo "wrapper is not available in the I2P installation package for your"
193    echo "platform. It may be possible to manually download and install"
194    echo "a compatible wrapper for your system."
195    echo "See ${WRAPPER_URL} for hints."
196    echo
197    echo "In the meantime, you may start I2P by running the script"
198    echo "${I2P}/runplain.sh"
199    echo
200}
201
202failed() {
203        echo "**`gettext 'Failed to load the wrapper'`**"
204        case `uname -s` in
205             FreeBSD)
206                echo
207                echo "The wrapper requires libiconv to be on your system."
208                echo "It can be installed with pkg_add -r libiconv"
209                echo
210                exit 1
211                ;;
212             *)
213                echo
214                unsupported
215                exit 1
216                ;;
217        esac
218}
219
220if [ -n "$FIXED_COMMAND" ]
221then
222    COMMAND="$FIXED_COMMAND"
223else
224    COMMAND="$1"
225fi
226
227
228# Required for HP-UX Startup
229if [ `uname -s` = "HP-UX" -o `uname -s` = "HP-UX64" ] ; then
230        PATH=$PATH:/usr/bin
231fi
232
233# Get the fully qualified path to the script
234case $0 in
235    /*)
236        SCRIPT="$0"
237        ;;
238    *)
239        PWD=`pwd`
240        SCRIPT="$PWD/$0"
241        ;;
242esac
243
244# Resolve the true real path without any sym links.
245CHANGED=true
246while [ "X$CHANGED" != "X" ]
247do
248    # Change spaces to ":" so the tokens can be parsed.
249    SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
250    # Get the real path to this script, resolving any symbolic links
251    TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'`
252    REALPATH=
253    for C in $TOKENS; do
254        # Change any ":" in the token back to a space.
255        C=`echo $C | sed -e 's;:; ;g'`
256        REALPATH="$REALPATH/$C"
257        # If REALPATH is a sym link, resolve it.  Loop for nested links.
258        while [ -h "$REALPATH" ] ; do
259            LS="`ls -ld "$REALPATH"`"
260            LINK="`expr "$LS" : '.*-> \(.*\)$'`"
261            if expr "$LINK" : '/.*' > /dev/null; then
262                # LINK is absolute.
263                REALPATH="$LINK"
264            else
265                # LINK is relative.
266                REALPATH="`dirname "$REALPATH"`""/$LINK"
267            fi
268        done
269    done
270
271    if [ "$REALPATH" = "$SCRIPT" ]
272    then
273        CHANGED=""
274    else
275        SCRIPT="$REALPATH"
276    fi
277done
278
279# Get the location of the script.
280REALDIR=`dirname "$REALPATH"`
281# Normalize the path
282REALDIR=`cd "${REALDIR}"; pwd`
283
284# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if
285#  the working directory is later changed.
286FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
287if [ "$FIRST_CHAR" != "/" ]
288then
289    PIDDIR=$REALDIR/$PIDDIR
290fi
291# Same test for WRAPPER_CMD
292FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`
293if [ "$FIRST_CHAR" != "/" ]
294then
295    WRAPPER_CMD=$REALDIR/$WRAPPER_CMD
296fi
297# Same test for WRAPPER_CONF
298FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`
299if [ "$FIRST_CHAR" != "/" ]
300then
301    WRAPPER_CONF=$REALDIR/$WRAPPER_CONF
302fi
303
304# Process ID
305ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
306COMMANDFILE="$PIDDIR/$APP_NAME.command"
307STATUSFILE="$PIDDIR/$APP_NAME.status"
308JAVASTATUSFILE="$PIDDIR/$APP_NAME.java.status"
309PIDFILE="$PIDDIR/$APP_NAME.pid"
310LOCKDIR="/var/lock/subsys"
311LOCKFILE="$LOCKDIR/$APP_NAME"
312pid=""
313
314# Resolve the location of the 'ps' command
315PSEXE="/usr/ucb/ps"
316    if [ ! -x "$PSEXE" ]
317    then
318        PSEXE="/usr/bin/ps"
319        if [ ! -x "$PSEXE" ]
320        then
321            PSEXE="/bin/ps"
322            if [ ! -x "$PSEXE" ]
323            then
324                echo 'Unable to locate "ps".'
325                echo 'Please report this message along with the location of the command on your system.'
326                exit 1
327            fi
328        fi
329    fi
330
331TREXE="/usr/bin/tr"
332if [ ! -x "$TREXE" ]
333then
334    TREXE="/bin/tr"
335    if [ ! -x "$TREXE" ]
336    then
337        echo 'Unable to locate "tr".'
338        echo 'Please report this message along with the location of the command on your system.'
339        exit 1
340    fi
341fi
342
343
344# Resolve the os
345DIST_OS=`uname -s | $TREXE "[A-Z]" "[a-z]" | $TREXE -d ' '`
346case "$DIST_OS" in
347    'sunos')
348        DIST_OS="solaris"
349        ;;
350    'hp-ux' | 'hp-ux64')
351        # HP-UX needs the XPG4 version of ps (for -o args)
352        DIST_OS="hpux"
353        UNIX95=""
354        export UNIX95
355        ;;
356    'darwin')
357        DIST_OS="macosx"
358        ;;
359    'unix_sv')
360        DIST_OS="unixware"
361        ;;
362    'gnu/kfreebsd')
363        DIST_OS="kfreebsd"
364        ;;
365    'os/390')
366        DIST_OS="zos"
367        ;;
368esac
369
370# Resolve the architecture
371if [ "$DIST_OS" = "macosx" ]
372then
373    OS_VER=`sw_vers | grep ProductVersion | cut -d: -f2 | sed -e 's/[^0-9]*//'`
374    DIST_ARCH="universal"
375    if [ $(sysctl -n hw.cpu64bit_capable) -eq 1 ]; then
376        DIST_BITS="64"
377    else
378        DIST_BITS="32"
379    fi
380    APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME}
381    APP_PLIST=${APP_PLIST_BASE}.plist
382else
383    DIST_ARCH=
384    DIST_ARCH=`uname -p 2>/dev/null | $TREXE "[A-Z]" "[a-z]" | $TREXE -d ' '`
385    if [ "X$DIST_ARCH" = "X" ]
386    then
387        DIST_ARCH="unknown"
388    fi
389    if [ "$DIST_ARCH" = "unknown" ]
390    then
391        DIST_ARCH=`uname -m 2>/dev/null | $TREXE "[A-Z]" "[a-z]" | $TREXE -d ' '`
392    fi
393    case "$DIST_ARCH" in
394        'athlon' | 'i386' | 'i486' | 'i586' | 'i686')
395            DIST_ARCH="x86"
396            if [ "${DIST_OS}" = "solaris" ] ; then
397                DIST_BITS=`isainfo -b`
398            else
399                DIST_BITS="32"
400            fi
401            ;;
402        'amd64' | 'x86_64')
403            DIST_ARCH="x86"
404            DIST_BITS="64"
405            ;;
406        'ia32')
407            DIST_ARCH="ia"
408            DIST_BITS="32"
409            ;;
410        'ia64' | 'ia64n' | 'ia64w')
411            DIST_ARCH="ia"
412            DIST_BITS="64"
413            ;;
414        'ip27')
415            DIST_ARCH="mips"
416            DIST_BITS="32"
417            ;;
418        'power' | 'powerpc' | 'power_pc' | 'ppc64')
419            if [ "${DIST_ARCH}" = "ppc64" ] ; then
420                DIST_BITS="64"
421            else
422                DIST_BITS="32"
423            fi
424            DIST_ARCH="ppc"
425            if [ "${DIST_OS}" = "aix" ] ; then
426                if [ `getconf KERNEL_BITMODE` -eq 64 ]; then
427                    DIST_BITS="64"
428                else
429                    DIST_BITS="32"
430                fi
431            fi
432            ;;
433        'pa_risc' | 'pa-risc')
434            DIST_ARCH="parisc"
435            if [ `getconf KERNEL_BITS` -eq 64 ]; then
436                DIST_BITS="64"
437            else
438                DIST_BITS="32"
439            fi
440            ;;
441        'sun4u' | 'sparcv9' | 'sparc')
442            DIST_ARCH="sparc"
443            DIST_BITS=`isainfo -b`
444            ;;
445        '9000/800' | '9000/785')
446            DIST_ARCH="parisc"
447            if [ `getconf KERNEL_BITS` -eq 64 ]; then
448                DIST_BITS="64"
449            else
450                DIST_BITS="32"
451            fi
452            ;;
453        '2064' | '2066' | '2084' | '2086' | '2094' | '2096' | '2097' | '2098' | '2817')
454            DIST_ARCH="390"
455            DIST_BITS="64"
456            ;;
457        armv*)
458            if [ -z "`readelf -A /proc/self/exe | grep Tag_ABI_VFP_args`" ] ; then
459                DIST_ARCH="armel"
460                DIST_BITS="32"
461            else
462                DIST_ARCH="armhf"
463                DIST_BITS="32"
464            fi
465            ;;
466    esac
467fi
468
469# OSX always places Java in the same location so we can reliably set JAVA_HOME
470if [ "$DIST_OS" = "macosx" ]
471then
472    if [ -z "$JAVA_HOME" ]; then
473        JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
474    fi
475fi
476
477# Test Echo
478ECHOTEST=`echo -n "x"`
479if [ "$ECHOTEST" = "x" ]
480then
481    ECHOOPT="-n "
482else
483    ECHOOPT=""
484fi
485
486
487gettext() {
488    # Call external gettext using our own translation files.
489    # Don't attempt to translate via the wrapper,
490    # it probably isn't supported in the community edition.
491    if [ "X${LANG#en}" = "X$LANG" ] && [ $(which $GETTEXT > /dev/null 2>&1) ] ; then
492            TEXTDOMAINDIR=$I2P/locale $GETTEXT -d i2prouter "$1"
493            if [ $? != 0 ] ; then
494                echo "$1"
495            fi
496        else
497            echo "$1"
498        fi
499}
500
501outputFile() {
502    if [ -f "$1" ]
503    then
504        echo "  $1  Found but not executable.";
505    else
506        echo "  $1"
507    fi
508}
509
510# Decide on the wrapper binary to use.
511# If the bits of the OS could be detected, we will try to look for the
512#  binary with the correct bits value.  If it doesn't exist, fall back
513#  and look for the 32-bit binary.  If that doesn't exist either then
514#  look for the default.
515WRAPPER_TEST_CMD=""
516if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS" ]
517then
518    WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS"
519    if [ ! -x "$WRAPPER_TEST_CMD" ]
520    then
521        chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null
522    fi
523    if [ -x "$WRAPPER_TEST_CMD" ]
524    then
525        WRAPPER_CMD="$WRAPPER_TEST_CMD"
526    else
527        outputFile "$WRAPPER_TEST_CMD"
528        WRAPPER_TEST_CMD=""
529    fi
530fi
531if [ -f "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32" -a -z "$WRAPPER_TEST_CMD" ]
532then
533    WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
534    if [ ! -x "$WRAPPER_TEST_CMD" ]
535    then
536        chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null
537    fi
538    if [ -x "$WRAPPER_TEST_CMD" ]
539    then
540        WRAPPER_CMD="$WRAPPER_TEST_CMD"
541    else
542        outputFile "$WRAPPER_TEST_CMD"
543        WRAPPER_TEST_CMD=""
544    fi
545fi
546if [ -f "$WRAPPER_CMD" -a -z "$WRAPPER_TEST_CMD" ]
547then
548    WRAPPER_TEST_CMD="$WRAPPER_CMD"
549    if [ ! -x "$WRAPPER_TEST_CMD" ]
550    then
551        chmod +x "$WRAPPER_TEST_CMD" 2>/dev/null
552    fi
553    if [ -x "$WRAPPER_TEST_CMD" ]
554    then
555        WRAPPER_CMD="$WRAPPER_TEST_CMD"
556    else
557        outputFile "$WRAPPER_TEST_CMD"
558        WRAPPER_TEST_CMD=""
559    fi
560fi
561if [ -z "$WRAPPER_TEST_CMD" ]
562then
563    echo 'Unable to locate any of the following binaries:'
564    outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-$DIST_BITS"
565    if [ ! "$DIST_BITS" = "32" ]
566    then
567        outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
568    fi
569    outputFile "$WRAPPER_CMD"
570
571    exit 1
572fi
573
574if [ ! -r "${WRAPPER_CMD}" ]; then
575    echo "Unable to locate ${WRAPPER_CMD} in ${I2P}!"
576    echo
577    unsupported
578    echo
579    exit 1
580fi
581
582# Build the nice clause
583if [ "X$PRIORITY" = "X" ]
584then
585    CMDNICE=""
586else
587    CMDNICE="nice -$PRIORITY"
588fi
589
590# Build the anchor file clause.
591if [ "X$IGNORE_SIGNALS" = "X" ]
592then
593   ANCHORPROP=
594   IGNOREPROP=
595else
596   ANCHORPROP=wrapper.anchorfile=\"$ANCHORFILE\"
597   IGNOREPROP=wrapper.ignore_signals=TRUE
598fi
599
600# Build the status file clause.
601if [ "X$DETAIL_STATUS$WAIT_FOR_STARTED_STATUS" = "X" ]
602then
603   STATUSPROP=
604else
605   STATUSPROP="wrapper.statusfile=\"$STATUSFILE\" wrapper.java.statusfile=\"$JAVASTATUSFILE\""
606fi
607
608# Build the command file clause.
609COMMANDPROP=
610
611# Build the log file clause.
612LOGPROP="wrapper.logfile=\"$LOGFILE\""
613
614if [ ! -n "$WAIT_FOR_STARTED_STATUS" ]
615then
616    WAIT_FOR_STARTED_STATUS=true
617fi
618
619if [ $WAIT_FOR_STARTED_STATUS = true ] ; then
620    DETAIL_STATUS=true
621fi
622
623
624# Build the lock file clause.  Only create a lock file if the lock directory exists on this platform.
625LOCKPROP=
626if [ -d $LOCKDIR ]
627then
628    if [ -w $LOCKDIR ]
629    then
630        LOCKPROP=wrapper.lockfile=\"$LOCKFILE\"
631    fi
632fi
633
634prepAdditionalParams() {
635    ADDITIONAL_PARA=""
636    if [ -n "$PASS_THROUGH" ] ; then
637        ADDITIONAL_PARA="--"
638    fi
639    while [ -n "$1" ] ; do
640        ADDITIONAL_PARA="$ADDITIONAL_PARA \"$1\""
641        shift
642    done
643}
644
645checkUser() {
646    # $1 touchLock flag
647    # $2.. [command] args
648
649    # Check the configured user.  If necessary rerun this script as the desired user.
650    if [ "X$RUN_AS_USER" != "X" ]
651    then
652
653        # Resolve the location of the 'id' command
654        IDEXE="/usr/xpg4/bin/id"
655        if [ ! -x "$IDEXE" ]
656        then
657            IDEXE="/usr/bin/id"
658            if [ ! -x "$IDEXE" ]
659            then
660                echo 'Unable to locate "id".'
661                echo 'Please report this message along with the location of the command on your system.'
662                exit 1
663            fi
664        fi
665        if [ "`$IDEXE -u -n "$RUN_AS_USER" 2>/dev/null`" != "$RUN_AS_USER" ]
666        then
667            echo "User $RUN_AS_USER does not exist."
668            exit 1
669        fi
670
671        if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
672        then
673            # Already running as the configured user.  Avoid password prompts by not calling su.
674            RUN_AS_USER=""
675        fi
676    fi
677    if [ "X$RUN_AS_USER" != "X" ]
678    then
679        # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be
680        # able to create the lock file.  The Wrapper will be able to update this file once it
681        # is created but will not be able to delete it on shutdown.  If $1 is set then
682        # the lock file should be created for the current command
683        if [ "X$LOCKPROP" != "X" ]
684        then
685            if [ "X$1" != "X" ]
686            then
687                # Resolve the primary group
688                RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
689                if [ "X$RUN_AS_GROUP" = "X" ]
690                then
691                    RUN_AS_GROUP=$RUN_AS_USER
692                fi
693                touch $LOCKFILE
694                chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE
695            fi
696        fi
697
698        # Still want to change users, recurse.  This means that the user will only be
699        #  prompted for a password once. Variables shifted by 1
700        shift
701
702        # Wrap the parameters so they can be passed.
703        ADDITIONAL_PARA=""
704        while [ -n "$1" ] ; do
705            ADDITIONAL_PARA="$ADDITIONAL_PARA \"$1\""
706            shift
707        done
708
709        # Use "runuser" if this exists.  runuser should be used on RedHat in preference to su.
710        #
711        if test -f "/sbin/runuser"
712        then
713            /sbin/runuser -s /bin/sh - $RUN_AS_USER -c "\"$REALPATH\" $ADDITIONAL_PARA"
714        else
715            su - $RUN_AS_USER -s /bin/sh -c "\"$REALPATH\" $ADDITIONAL_PARA"
716        fi
717        RUN_AS_USER_EXITCODE=$?
718        # Now that we are the original user again, we may need to clean up the lock file.
719        if [ "X$LOCKPROP" != "X" ]
720        then
721            getpid
722            if [ "X$pid" = "X" ]
723            then
724                # Wrapper is not running so make sure the lock file is deleted.
725                if [ -f "$LOCKFILE" ]
726                then
727                    rm "$LOCKFILE"
728                fi
729            fi
730        fi
731
732        exit $RUN_AS_USER_EXITCODE
733    fi
734}
735
736getpid() {
737    pid=""
738    if [ -f "$PIDFILE" ]
739    then
740        if [ -r "$PIDFILE" ]
741        then
742            pid=`cat "$PIDFILE"`
743            if [ "X$pid" != "X" ]
744            then
745                # It is possible that 'a' process with the pid exists but that it is not the
746                #  correct process.  This can happen in a number of cases, but the most
747                #  common is during system startup after an unclean shutdown.
748                # The ps statement below looks for the specific wrapper command running as
749                #  the pid.  If it is not found then the pid file is considered to be stale.
750                case "$DIST_OS" in
751                    'freebsd')
752                        pidtest=`$PSEXE -p $pid -o args | tail -1`
753                        if [ "X$pidtest" = "XCOMMAND" ]
754                        then
755                            pidtest=""
756                        fi
757                        ;;
758                    'macosx')
759                        pidtest=`$PSEXE -ww -p $pid -o command | grep -F "$WRAPPER_CMD" | tail -1`
760                        ;;
761                    'solaris')
762                        if [ -f "/usr/bin/pargs" ]
763                        then
764                            pidtest=`pargs $pid | fgrep "$WRAPPER_CMD" | tail -1`
765                        else
766                            case "$PSEXE" in
767                            '/usr/ucb/ps')
768                                pidtest=`$PSEXE -auxww  $pid | fgrep "$WRAPPER_CMD" | tail -1`
769                                ;;
770                            '/usr/bin/ps')
771                                TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1`
772                                COUNT=`echo $TRUNCATED_CMD | wc -m`
773                                COUNT=`echo ${COUNT}`
774                                COUNT=`expr $COUNT - 1`
775                                TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT`
776                                pidtest=`$PSEXE -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
777                                ;;
778                            '/bin/ps')
779                                TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1`
780                                COUNT=`echo $TRUNCATED_CMD | wc -m`
781                                COUNT=`echo ${COUNT}`
782                                COUNT=`expr $COUNT - 1`
783                                TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT`
784                                pidtest=`$PSEXE -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
785                                ;;
786                            *)
787                                echo "Unsupported ps command $PSEXE"
788                                exit 1
789                                ;;
790                            esac
791                        fi
792                        ;;
793                    'hpux')
794                        pidtest=`$PSEXE -p $pid -x -o args | grep -F "$WRAPPER_CMD" | tail -1`
795                        ;;
796                    *)
797                        pidtest=`$PSEXE -p $pid -o args | grep -F "$WRAPPER_CMD" | tail -1`
798                        ;;
799                esac
800
801                if [ "X$pidtest" = "X" ]
802                then
803                    # This is a stale pid file.
804                    rm -f "$PIDFILE"
805                    echo "Removed stale pid file: $PIDFILE"
806                    pid=""
807                fi
808            fi
809        else
810            echo "Cannot read $PIDFILE."
811            exit 1
812        fi
813    fi
814}
815
816getstatus() {
817    STATUS=
818    if [ -f "$STATUSFILE" ]
819    then
820        if [ -r "$STATUSFILE" ]
821        then
822            STATUS=`cat "$STATUSFILE"`
823        fi
824    fi
825    if [ "X$STATUS" = "X" ]
826    then
827        STATUS="Unknown"
828    fi
829
830    JAVASTATUS=
831    if [ -f "$JAVASTATUSFILE" ]
832    then
833        if [ -r "$JAVASTATUSFILE" ]
834        then
835            JAVASTATUS=`cat "$JAVASTATUSFILE"`
836        fi
837    fi
838    if [ "X$JAVASTATUS" = "X" ]
839    then
840        JAVASTATUS="Unknown"
841    fi
842}
843
844testpid() {
845    case "$DIST_OS" in
846     'solaris')
847        case "$PSEXE" in
848        '/usr/ucb/ps')
849            pid=`$PSEXE  $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
850            ;;
851        '/usr/bin/ps')
852            pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
853            ;;
854        '/bin/ps')
855            pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
856            ;;
857        *)
858            echo "Unsupported ps command $PSEXE"
859            exit 1
860            ;;
861        esac
862        ;;
863    *)
864        pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null
865        ;;
866    esac
867    if [ "X$pid" = "X" ]
868    then
869        # Process is gone so remove the pid file.
870        rm -f "$PIDFILE"
871        pid=""
872    fi
873}
874
875launchdtrap() {
876    stopit
877    exit
878}
879
880waitforwrapperstop() {
881    getpid
882    while [ "X$pid" != "X" ] ; do
883        sleep 1
884        getpid
885    done
886}
887
888create_config_dir() {
889    if ! mkdir -p "$I2P_CONFIG_DIR"; then
890        echo "Error creating $I2P_CONFIG_DIR! Edit $0 and set I2P_CONFIG_DIR" >&2
891        echo "to the correct location." >&2
892        exit 1
893    fi
894}
895
896launchdinternal() {
897    getpid
898    trap launchdtrap TERM
899    if [ "X$pid" = "X" ]
900    then
901        prepAdditionalParams "$@"
902        create_config_dir
903
904        # The string passed to eval must handles spaces in paths correctly.
905        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.19 $ADDITIONAL_PARA"
906        eval $COMMAND_LINE
907    else
908        eval echo `gettext '$APP_LONG_NAME is already running.'`
909        exit 1
910    fi
911    # launchd expects that this script stay up and running so we need to do our own monitoring of the Wrapper process.
912    if [ $WAIT_FOR_STARTED_STATUS = true ]
913    then
914        waitforwrapperstop
915    fi
916}
917
918console() {
919    eval echo "`gettext 'Running $APP_LONG_NAME'`..."
920    getpid
921    if [ "X$pid" = "X" ]
922    then
923        trap '' 3 2
924
925        prepAdditionalParams "$@"
926        create_config_dir
927
928        # The string passed to eval must handles spaces in paths correctly.
929        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.19 $ADDITIONAL_PARA"
930        eval $COMMAND_LINE
931        if [ "$?" -ne "0" ]; then
932                failed
933        fi
934    else
935        eval echo `gettext '$APP_LONG_NAME is already running.'`
936        exit 1
937    fi
938}
939
940waitforjavastartup() {
941    getstatus
942    eval echo $ECHOOPT "`gettext 'Waiting for $APP_LONG_NAME'`..."
943
944    # Wait until the timeout or we have something besides Unknown.
945    counter=15
946    while [ "$JAVASTATUS" = "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do
947        echo $ECHOOPT"."
948        sleep 1
949        getstatus
950        counter=`expr $counter - 1`
951    done
952
953    if [ -n "$WAIT_FOR_STARTED_TIMEOUT" ] ; then
954        counter=$WAIT_FOR_STARTED_TIMEOUT
955    else
956        counter=120
957    fi
958    while [ "$JAVASTATUS" != "STARTED" -a "$JAVASTATUS" != "Unknown" -a $counter -gt 0 -a -n "$JAVASTATUS" ] ; do
959        echo $ECHOOPT"."
960        sleep 1
961        getstatus
962        counter=`expr $counter - 1`
963    done
964    if [ "X$ECHOOPT" != "X" ] ; then
965        echo ""
966    fi
967}
968
969startwait() {
970    if [ $WAIT_FOR_STARTED_STATUS = true ]
971    then
972        waitforjavastartup
973    fi
974    # Sleep for a few seconds to allow for intialization if required
975    #  then test to make sure we're still running.
976    #
977    i=0
978    while [ $i -lt $WAIT_AFTER_STARTUP ]
979    do
980        sleep 1
981        echo $ECHOOPT"."
982        i=`expr $i + 1`
983    done
984    if [ $WAIT_AFTER_STARTUP -gt 0 -o $WAIT_FOR_STARTED_STATUS = true ]
985    then
986        getpid
987        if [ "X$pid" = "X" ]
988        then
989            eval echo " `gettext 'WARNING: $APP_LONG_NAME may have failed to start.'`"
990            exit 1
991        else
992            eval echo ' running: PID:$pid'
993        fi
994    else
995        echo ""
996    fi
997}
998
999macosxstart() {
1000    # The daemon has been installed.
1001    echo "Starting $APP_LONG_NAME.  Detected Mac OSX and installed launchd daemon."
1002    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
1003        eval echo `gettext 'Must be root to perform this action.'`
1004        exit 1
1005    fi
1006
1007    getpid
1008    if [ "X$pid" != "X" ] ; then
1009        eval echo `gettext '$APP_LONG_NAME is already running.'`
1010        exit 1
1011    fi
1012
1013    # If the daemon was just installed, it may not be loaded.
1014    LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}`
1015    if [ "X${LOADED_PLIST}" = "X" ] ; then
1016        launchctl load /Library/LaunchDaemons/${APP_PLIST}
1017    fi
1018    # If launchd is set to run the daemon already at Load, we don't need to call start
1019    getpid
1020    if [ "X$pid" = "X" ] ; then
1021        launchctl start ${APP_PLIST_BASE}
1022    fi
1023
1024    startwait
1025}
1026
1027upstartstart() {
1028    # The daemon has been installed.
1029    echo "Starting $APP_LONG_NAME.  Detected Linux and installed upstart."
1030    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
1031        eval echo `gettext 'Must be root to perform this action.'`
1032        exit 1
1033    fi
1034
1035    getpid
1036    if [ "X$pid" != "X" ] ; then
1037        eval echo `gettext '$APP_LONG_NAME is already running.'`
1038        exit 1
1039    fi
1040
1041    /sbin/start ${APP_NAME}
1042
1043    startwait
1044}
1045
1046start() {
1047    eval echo "`gettext 'Starting $APP_LONG_NAME'`..."
1048    getpid
1049    if [ "X$pid" = "X" ]
1050    then
1051        prepAdditionalParams "$@"
1052        create_config_dir
1053
1054        # The string passed to eval must handles spaces in paths correctly.
1055        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.19 $ADDITIONAL_PARA"
1056        eval $COMMAND_LINE
1057        if [ "$?" -ne "0" ]; then
1058                failed
1059        fi
1060    else
1061        eval echo `gettext '$APP_LONG_NAME is already running.'`
1062        exit 1
1063    fi
1064
1065    startwait
1066}
1067
1068
1069stopit() {
1070    # $1 exit if down flag
1071
1072    eval echo "`gettext 'Stopping $APP_LONG_NAME'`..."
1073    getpid
1074    if [ "X$pid" = "X" ]
1075    then
1076        eval echo `gettext '$APP_LONG_NAME was not running.'`
1077        if [ "X$1" = "X1" ]
1078        then
1079            exit 1
1080        fi
1081    else
1082        if [ "X$IGNORE_SIGNALS" = "X" ]
1083        then
1084            # Running so try to stop it.
1085            kill -TERM $pid
1086            if [ $? -ne 0 ]
1087            then
1088                # An explanation for the failure should have been given
1089                eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
1090                exit 1
1091            fi
1092        else
1093            rm -f "$ANCHORFILE"
1094            if [ -f "$ANCHORFILE" ]
1095            then
1096                # An explanation for the failure should have been given
1097                eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
1098                exit 1
1099            fi
1100        fi
1101
1102        # We can not predict how long it will take for the wrapper to
1103        #  actually stop as it depends on settings in wrapper.conf.
1104        #  Loop until it does.
1105        savepid=$pid
1106        CNT=0
1107        TOTCNT=0
1108        while [ "X$pid" != "X" ]
1109        do
1110            # Show a waiting message every 5 seconds.
1111            if [ "$CNT" -lt "5" ]
1112            then
1113                CNT=`expr $CNT + 1`
1114            else
1115                eval echo "`gettext 'Waiting for $APP_LONG_NAME to exit'`..."
1116                CNT=0
1117            fi
1118            TOTCNT=`expr $TOTCNT + 1`
1119
1120            sleep 1
1121
1122            testpid
1123        done
1124
1125        pid=$savepid
1126        testpid
1127        if [ "X$pid" != "X" ]
1128        then
1129            eval echo `gettext 'Failed to stop $APP_LONG_NAME.'`
1130            exit 1
1131        else
1132            eval echo `gettext 'Stopped $APP_LONG_NAME.'`
1133        fi
1134    fi
1135}
1136
1137graceful() {
1138    # $1 exit if down flag
1139
1140    eval echo "`gettext 'Stopping $APP_LONG_NAME gracefully'`..."
1141    getpid
1142    if [ "X$pid" = "X" ]
1143    then
1144        eval echo `gettext '$APP_LONG_NAME was not running.'`
1145        if [ "X$1" = "X1" ]
1146        then
1147            exit 1
1148        fi
1149    else
1150        if [ "X$IGNORE_SIGNALS" = "X" ]
1151        then
1152            # Running so try to stop it.
1153            # This sends HUP. router.gracefulHUP must be set in router.config,
1154            # or else this will do the same as stop.
1155            kill -HUP $pid
1156            if [ $? -ne 0 ]
1157            then
1158                # An explanation for the failure should have been given
1159                eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
1160                exit 1
1161            fi
1162        else
1163            rm -f "$ANCHORFILE"
1164            if [ -f "$ANCHORFILE" ]
1165            then
1166                # An explanation for the failure should have been given
1167                eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
1168                exit 1
1169            fi
1170        fi
1171    fi
1172}
1173
1174pause() {
1175    echo "Pausing $APP_LONG_NAME."
1176}
1177
1178resume() {
1179    echo "Resuming $APP_LONG_NAME."
1180}
1181
1182status() {
1183    getpid
1184    if [ "X$pid" = "X" ]
1185    then
1186        eval echo `gettext '$APP_LONG_NAME is not running.'`
1187        exit 1
1188    else
1189        if [ "X$DETAIL_STATUS" = "X" ]
1190        then
1191            eval echo `gettext '$APP_LONG_NAME is running: PID:$pid'`
1192        else
1193            getstatus
1194            eval echo `gettext '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS'`
1195        fi
1196        exit 0
1197    fi
1198}
1199
1200installUpstart() {
1201    echo " Installing the $APP_LONG_NAME daemon using upstart.."
1202    if [ -f "${APP_NAME}.conf" ] ; then
1203        echo " a custom upstart conf file ${APP_NAME}.conf found"
1204        cp "${REALDIR}/${APP_NAME}.install" "/etc/init/${APP_NAME}.conf"
1205    else
1206        echo ' creating default upstart conf file..'
1207        echo "# ${APP_NAME} - ${APP_LONG_NAME}" > "/etc/init/${APP_NAME}.conf"
1208        echo "description \"${APP_LONG_NAME}\"" >> "/etc/init/${APP_NAME}.conf"
1209        echo "author \"Tanuki Software Ltd. <info@tanukisoftware.com>\"" >> "/etc/init/${APP_NAME}.conf"
1210        echo "start on runlevel [2345]" >> "/etc/init/${APP_NAME}.conf"
1211        echo "stop on runlevel [!2345]" >> "/etc/init/${APP_NAME}.conf"
1212        echo "env LANG=${LANG}" >> "/etc/init/${APP_NAME}.conf"
1213       echo "exec \"${REALPATH}\" launchdinternal" >> "/etc/init/${APP_NAME}.conf"
1214    fi
1215}
1216
1217installsystemd() {
1218    if [ -d "/etc/systemd/system/" ]; then
1219        cat << EOF >> "$SYSTEMD_SERVICE"
1220[Unit]
1221Description=$APP_LONG_NAME
1222After= local-fs.target network.target
1223
1224[Service]
1225Type=forking
1226ExecStart=$I2P/i2prouter start
1227ExecReload=$I2P/i2prouter restart
1228ExecStop=$I2P/i2prouter stop
1229PIDFile=$I2P_CONFIG_DIR/i2p.pid
1230
1231[Install]
1232WantedBy=multi-user.target
1233EOF
1234    systemctl --system daemon-reload > /dev/null 2>&1
1235    fi
1236}
1237
1238installdaemon() {
1239    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
1240        eval echo `gettext 'Must be root to perform this action.'`
1241        exit 1
1242    else
1243        APP_NAME_LOWER=`echo "$APP_NAME" | $TREXE "[A-Z]" "[a-z]"`
1244        if [ "$DIST_OS" = "solaris" ] ; then
1245            echo 'Detected Solaris:'
1246            if [ -f /etc/init.d/$APP_NAME ] ; then
1247                eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1248                exit 1
1249            else
1250                eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1251                ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
1252                ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER"
1253                ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER"
1254            fi
1255        elif [ "$DIST_OS" = "linux" ] ; then
1256            if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ]  ; then
1257                echo 'Detected RHEL or Fedora:'
1258                if [ -f "/etc/init.d/$APP_NAME" -o -f "/etc/init/${APP_NAME}.conf" ] ; then
1259                    eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1260                    exit 1
1261                else
1262                    if [ -n "$USE_UPSTART" -a -d "/etc/init" ] ; then
1263                        installUpstart
1264                    else
1265                        eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1266                        ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
1267                        /sbin/chkconfig --add "$APP_NAME"
1268                        /sbin/chkconfig "$APP_NAME" on
1269                    fi
1270                fi
1271            elif [ -f /etc/slackware-version ]; then
1272                echo 'Detected Slackware Linux:'
1273                if [ -e "/etc/rc.d/rc.i2p" -o -f "/etc/rc.d/rc.i2p.new" ]; then
1274                    echo "Found initscript from I2P Slackpkg. Aborting." >&2
1275                    exit 1
1276                else
1277                    if grep -q ${APP_NAME}router /etc/rc.d/rc.local > /dev/null 2>&1; then
1278                        eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1279                        exit 1
1280                    else
1281                        echo "${REALDIR}/${APP_NAME}router start"  >> /etc/rc.d/rc.local
1282                        if [ ! -e /etc/rc.d/rc.local_shutdown ]; then
1283                            echo "#!/bin/sh" >> /etc/rc.d/rc.local_shutdown
1284                        fi
1285                        echo "${REALDIR}/${APP_NAME}router stop"  >> /etc/rc.d/rc.local_shutdown
1286                        chmod 755 /etc/rc.d/rc.local_shutdown
1287                    fi
1288                fi
1289            elif [ -f /etc/arch-release ]; then
1290            echo 'Detected Arch Linux:'
1291                if [ -f "/etc/rc.d/i2prouter" -o -f "/usr/lib/systemd/system/i2prouter.service" ]; then
1292                    echo 'AUR package found. Refusing to continue.'
1293                    exit 1
1294                elif [ -f /etc/rc.d/i2p -a ! "$USE_SYSTEMD" = "1" ] || [ -f "$SYSTEMD_SERVICE" -a "$USE_SYSTEMD" = "1" ]; then
1295                    eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1296                    exit 1
1297                else
1298                        if [ ! -f "/etc/init.d/i2p" ]; then
1299                            if [ "$USE_SYSTEMD" != "1" ]; then
1300                                echo "#!/bin/bash"  > /etc/rc.d/${APP_NAME}
1301                                echo   >> /etc/rc.d/${APP_NAME}
1302                                echo ". /etc/rc.conf"  >> /etc/rc.d/${APP_NAME}
1303                                echo ". /etc/rc.d/functions"  >> /etc/rc.d/${APP_NAME}
1304                                echo   >> /etc/rc.d/${APP_NAME}
1305                                echo "case "\$1" in"  >> /etc/rc.d/${APP_NAME}
1306                                echo "  start)"  >> /etc/rc.d/${APP_NAME}
1307                                echo "    stat_busy \"Starting i2p-Router\""  >> /etc/rc.d/${APP_NAME}
1308                                echo "    ${REALDIR}/${APP_NAME}router start >/dev/null 2>&1"  >> /etc/rc.d/${APP_NAME}
1309                                echo "    if [ \$? -gt 0 ]; then"  >> /etc/rc.d/${APP_NAME}
1310                                echo "      stat_fail"  >> /etc/rc.d/${APP_NAME}
1311                                echo "    else"  >> /etc/rc.d/${APP_NAME}
1312                                echo "      stat_done"  >> /etc/rc.d/${APP_NAME}
1313                                echo "      add_daemon i2prouter"  >> /etc/rc.d/${APP_NAME}
1314                                echo "    fi"  >> /etc/rc.d/${APP_NAME}
1315                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1316                                echo "  stop)"  >> /etc/rc.d/${APP_NAME}
1317                                echo "    stat_busy "Stopping i2p-Router""  >> /etc/rc.d/${APP_NAME}
1318                                echo "    ${REALDIR}/${APP_NAME}router stop > /dev/null 2>&1"  >> /etc/rc.d/${APP_NAME}
1319                                echo "    if [ \$? -gt 0 ]; then"  >> /etc/rc.d/${APP_NAME}
1320                                echo "      stat_fail"  >> /etc/rc.d/${APP_NAME}
1321                                echo "    else"  >> /etc/rc.d/${APP_NAME}
1322                                echo "      stat_done"  >> /etc/rc.d/${APP_NAME}
1323                                echo "      rm_daemon i2prouter"  >> /etc/rc.d/${APP_NAME}
1324                                echo "    fi"  >> /etc/rc.d/${APP_NAME}
1325                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1326                                echo "  restart)"  >> /etc/rc.d/${APP_NAME}
1327                                echo "    ${REALDIR}/${APP_NAME}router restart"  >> /etc/rc.d/${APP_NAME}
1328                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1329                                echo "  console)"  >> /etc/rc.d/${APP_NAME}
1330                                echo "    ${REALDIR}/${APP_NAME}router console"  >> /etc/rc.d/${APP_NAME}
1331                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1332                                echo "  status)"  >> /etc/rc.d/${APP_NAME}
1333                                echo "    ${REALDIR}/${APP_NAME}router status"  >> /etc/rc.d/${APP_NAME}
1334                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1335                                echo "  dump)"  >> /etc/rc.d/${APP_NAME}
1336                                echo "    ${REALDIR}/${APP_NAME}router dump"  >> /etc/rc.d/${APP_NAME}
1337                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1338                                echo "  graceful)"  >> /etc/rc.d/${APP_NAME}
1339                                echo "    ${REALDIR}/${APP_NAME}router graceful"  >> /etc/rc.d/${APP_NAME}
1340                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1341                                echo "  *)"  >> /etc/rc.d/${APP_NAME}
1342                                echo "    echo \"usage: \$0 {start|stop|restart|console|status|dump}\""  >> /etc/rc.d/${APP_NAME}
1343                                echo "    ;;"  >> /etc/rc.d/${APP_NAME}
1344                                echo "esac"  >> /etc/rc.d/${APP_NAME}
1345                                chmod 755 /etc/rc.d/${APP_NAME}
1346                                chown root:root /etc/rc.d/${APP_NAME}
1347                                echo " The $APP_LONG_NAME daemon has been installed."
1348                                echo ' Add \"i2p\" to the DAEMONS variable in /etc/rc.conf to enable.'
1349                            else
1350                                # We'll end up here if systemd is enabled.
1351                                # If systemd is enabled we don't need the initscript
1352                                rm -f /etc/rc.d/${APP_NAME}
1353                            fi
1354                        fi
1355                        if [ ! -f "${SYSTEMD_SERVICE}" ]; then
1356                            installsystemd
1357                        fi
1358                fi
1359            elif [ -f /etc/SuSE-release ] ; then
1360                echo 'Detected SuSE or SLES:'
1361                 if [ -f /etc/rc.d/${APP_NAME} -a ! "$USE_SYSTEMD" = "1" ] || [ -f "$SYSTEMD_SERVICE" -a "$USE_SYSTEMD" = "1" ]; then
1362                    eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1363                    exit 1
1364                else
1365                    if [ ! -f "/etc/init.d/$APP_NAME" ]; then
1366                        if [ "$USE_SYSTEMD" != "1" ]; then
1367                            eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1368                            ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
1369                            sed -i "s/Default-Start: 2 3 4 5/Default-Start: 5/" $0
1370                            insserv "/etc/init.d/$APP_NAME"
1371                        else
1372                            rm -f "/etc/init.d/$APP_NAME"
1373                        fi
1374                    fi
1375                    if [ ! -f "${SYSTEMD_SERVICE}" ]; then
1376                        installsystemd
1377                    fi
1378                fi
1379            elif [ -f /etc/lsb-release -o -f /etc/debian_version ] ; then
1380                echo 'Detected Debian-based distribution:'
1381                if [ -f "/etc/init.d/$APP_NAME" -o -f "/etc/init/${APP_NAME}.conf" ] ; then
1382                    eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1383                    exit 1
1384                else
1385                    if [ -n "$USE_UPSTART" -a -d "/etc/init" ] ; then
1386                        installUpstart
1387                    else
1388                        echo " Installing the $APP_LONG_NAME daemon using init.d.."
1389                        ln -s "$REALPATH" "/etc/init.d/$APP_NAME"
1390                        update-rc.d "$APP_NAME" defaults
1391                    fi
1392                fi
1393            else
1394                echo 'Detected Linux:'
1395                if [ -f "/etc/init.d/$APP_NAME" ] ; then
1396                    eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1397                    exit 1
1398                else
1399                    eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1400                    ln -s "$REALPATH" /etc/init.d/$APP_NAME
1401                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/K20$APP_NAME_LOWER"
1402                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc3.d/S20$APP_NAME_LOWER"
1403                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/S20$APP_NAME_LOWER"
1404                    ln -s "/etc/init.d/$APP_NAME" "/etc/rc5.d/K20$APP_NAME_LOWER"
1405                fi
1406            fi
1407        elif [ "$DIST_OS" = "hpux" ] ; then
1408            echo 'Detected HP-UX:'
1409            if [ -f "/sbin/init.d/$APP_NAME" ] ; then
1410                eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1411                exit 1
1412            else
1413                eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1414                ln -s "$REALPATH" "/sbin/init.d/$APP_NAME"
1415                ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/K20$APP_NAME_LOWER"
1416                ln -s "/sbin/init.d/$APP_NAME" "/sbin/rc3.d/S20$APP_NAME_LOWER"
1417            fi
1418        elif [ "$DIST_OS" = "aix" ] ; then
1419            echo 'Detected AIX:'
1420            if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then
1421                echo " The $APP_LONG_NAME daemon is already installed as rc.d script."
1422                exit 1
1423            elif [ -n "`/usr/sbin/lsitab $APP_NAME`" -a -n "`/usr/bin/lssrc -S -s $APP_NAME`" ] ; then
1424                echo " The $APP_LONG_NAME daemon is already installed as SRC service."
1425                exit 1
1426            else
1427                eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1428                if [ -n "`/usr/sbin/lsitab install_assist`" ] ; then
1429                    echo ' 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.'
1430                fi
1431                /usr/bin/mkssys -s "$APP_NAME" -p "$REALPATH" -a "launchdinternal" -u 0 -f 9 -n 15 -S
1432                /usr/sbin/mkitab "$APP_NAME":2:once:"/usr/bin/startsrc -s \"${APP_NAME}\" >/dev/console 2>&1"
1433
1434            fi
1435        elif [ "$DIST_OS" = "freebsd" ] ; then
1436            echo 'Detected FreeBSD:'
1437            if [ -f "/etc/rc.d/$APP_NAME" ] ; then
1438                eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1439                exit 1
1440            else
1441                eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1442                sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf
1443                if [ -f "${REALDIR}/${APP_NAME}.install" ] ; then
1444                    ln -s "${REALDIR}/${APP_NAME}.install" "/etc/rc.d/$APP_NAME"
1445                else
1446                    echo '#!/bin/sh' > "/etc/rc.d/$APP_NAME"
1447                    echo "#" >> "/etc/rc.d/$APP_NAME"
1448                    echo "# PROVIDE: $APP_NAME" >> "/etc/rc.d/$APP_NAME"
1449                    echo "# REQUIRE: NETWORKING" >> "/etc/rc.d/$APP_NAME"
1450                    echo "# KEYWORD: shutdown" >> "/etc/rc.d/$APP_NAME"
1451                    echo ". /etc/rc.subr" >> "/etc/rc.d/$APP_NAME"
1452                    echo "name=\"$APP_NAME\"" >> "/etc/rc.d/$APP_NAME"
1453                    echo "rcvar=\`set_rcvar\`" >> "/etc/rc.d/$APP_NAME"
1454                    echo "command=\"${REALDIR}/${APP_NAME}router\"" >> "/etc/rc.d/$APP_NAME"
1455                    echo 'start_cmd="${name}_start"' >> "/etc/rc.d/$APP_NAME"
1456                    echo 'load_rc_config $name' >> "/etc/rc.d/$APP_NAME"
1457                    echo 'status_cmd="${name}_status"' >> "/etc/rc.d/$APP_NAME"
1458                    echo 'stop_cmd="${name}_stop"' >> "/etc/rc.d/$APP_NAME"
1459                    echo "${APP_NAME}_status() {" >> "/etc/rc.d/$APP_NAME"
1460                    echo '${command} status' >> "/etc/rc.d/$APP_NAME"
1461                    echo '}' >> "/etc/rc.d/$APP_NAME"
1462                    echo "${APP_NAME}_stop() {" >> "/etc/rc.d/$APP_NAME"
1463                    echo '${command} stop' >> "/etc/rc.d/$APP_NAME"
1464                    echo '}' >> "/etc/rc.d/$APP_NAME"
1465                    echo "${APP_NAME}_start() {" >> "/etc/rc.d/$APP_NAME"
1466                    echo '${command} start' >> "/etc/rc.d/$APP_NAME"
1467                    echo '}' >> "/etc/rc.d/$APP_NAME"
1468                    echo 'run_rc_command "$1"' >> "/etc/rc.d/$APP_NAME"
1469                fi
1470                echo "${APP_NAME}_enable=\"YES\"" >> /etc/rc.conf
1471                chmod 555 "/etc/rc.d/$APP_NAME"
1472            fi
1473        elif [ "$DIST_OS" = "macosx" ] ; then
1474            echo 'Detected Mac OSX:'
1475            if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
1476                eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1477                exit 1
1478            else
1479                eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1480                if [ -f "${REALDIR}/${APP_PLIST}" ] ; then
1481                    ln -s "${REALDIR}/${APP_PLIST}" "/Library/LaunchDaemons/${APP_PLIST}"
1482                else
1483                    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > "/Library/LaunchDaemons/${APP_PLIST}"
1484                    echo "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"" >> "/Library/LaunchDaemons/${APP_PLIST}"
1485                    echo "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "/Library/LaunchDaemons/${APP_PLIST}"
1486                    echo "<plist version=\"1.0\">" >> "/Library/LaunchDaemons/${APP_PLIST}"
1487                    echo "    <dict>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1488                    echo "        <key>Label</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1489                    echo "        <string>${APP_PLIST_BASE}</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1490                    echo "        <key>ProgramArguments</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1491                    echo "        <array>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1492                    echo "            <string>${REALDIR}/${APP_NAME}router</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1493                    echo "            <string>launchdinternal</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1494                    echo "        </array>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1495                    echo "        <key>OnDemand</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1496                    echo "        <true/>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1497                    echo "        <key>RunAtLoad</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1498                    echo "        <true/>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1499                    if [ "X$RUN_AS_USER" != "X" ] ; then
1500                        echo "        <key>UserName</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1501                        echo "        <string>${RUN_AS_USER}</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1502                    fi
1503                    echo "    </dict>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1504                    echo "</plist>" >> "/Library/LaunchDaemons/${APP_PLIST}"
1505                fi
1506                chmod 555 "/Library/LaunchDaemons/${APP_PLIST}"
1507            fi
1508        elif [ "$DIST_OS" = "zos" ] ; then
1509            echo 'Detected z/OS:'
1510            if [ -f /etc/rc.bak ] ; then
1511                eval echo " `gettext 'The $APP_LONG_NAME daemon is already installed.'`"
1512                exit 1
1513            else
1514                eval echo " `gettext 'Installing the $APP_LONG_NAME daemon'`.."
1515                cp /etc/rc /etc/rc.bak
1516                sed  "s:echo /etc/rc script executed, \`date\`::g" /etc/rc.bak > /etc/rc
1517                echo "_BPX_JOBNAME='${APP_NAME}' \"${REALDIR}/${APP_NAME}router\" start" >>/etc/rc
1518                echo '/etc/rc script executed, `date`' >>/etc/rc
1519            fi
1520        else
1521            eval echo `gettext 'Install not currently supported for $DIST_OS'`
1522            exit 1
1523        fi
1524    fi
1525}
1526
1527removedaemon() {
1528    if [ `id | sed 's/^uid=//;s/(.*$//'` != "0" ] ; then
1529        eval echo `gettext 'Must be root to perform this action.'`
1530        exit 1
1531    else
1532        stopit "0"
1533        APP_NAME_LOWER=`echo "$APP_NAME" | $TREXE "[A-Z]" "[a-z]"`
1534        if [ "$DIST_OS" = "solaris" ] ; then
1535            echo 'Detected Solaris:'
1536            if [ -f "/etc/init.d/$APP_NAME" ] ; then
1537                eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1538                for i in "/etc/rc3.d/S20$APP_NAME_LOWER" "/etc/rc3.d/K20$APP_NAME_LOWER" "/etc/init.d/$APP_NAME"
1539                do
1540                    rm -f $i
1541                done
1542            else
1543                eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1544                exit 1
1545            fi
1546        elif [ "$DIST_OS" = "linux" ] ; then
1547            if [ -f /etc/redhat-release -o -f /etc/redhat_version -o -f /etc/fedora-release ] ; then
1548                echo 'Detected RHEL or Fedora:'
1549                if [ -f "/etc/init.d/$APP_NAME" ] ; then
1550                    eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1551                    /sbin/chkconfig "$APP_NAME" off
1552                    /sbin/chkconfig --del "$APP_NAME"
1553                    rm -f "/etc/init.d/$APP_NAME"
1554                elif [ -f "/etc/init/${APP_NAME}.conf" ] ; then
1555                    echo " Removing $APP_LONG_NAME daemon from upstart..."
1556                    rm "/etc/init/${APP_NAME}.conf"
1557                else
1558                    eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1559                    exit 1
1560                fi
1561            elif [ -f /etc/slackware-version ] ; then
1562                echo 'Detected Slackware Linux:'
1563                if grep -q ${APP_NAME}router /etc/rc.d/rc.local > /dev/null 2>&1 ; then
1564                    eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1565                    sed -i "/i2prouter/d" /etc/rc.d/rc.local /etc/rc.d/rc.local_shutdown
1566                else
1567                    eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1568                    exit 1
1569                fi
1570            elif [ -f /etc/arch-release ] ; then
1571                echo 'Detected Arch Linux:'
1572                if [ -f "/etc/rc.d/$APP_NAME" -o -f "$SYSTEMD_SERVICE" ] ; then
1573                    eval echo "`gettext 'Removing $APP_LONG_NAME daemon'`..."
1574                    rm -f "/etc/rc.d/$APP_NAME"
1575                    rm -f "$SYSTEMD_SERVICE"
1576                else
1577                    eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1578                    exit 1
1579                fi
1580            elif [ -f /etc/SuSE-release ] ; then
1581                echo 'Detected SuSE or SLES:'
1582                if [ -f "/etc/init.d/$APP_NAME" -o ${SYSTEMD_SERVICE} ] ; then
1583                    eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1584                    insserv -r "/etc/init.d/$APP_NAME"
1585                    rm -f "/etc/init.d/$APP_NAME"
1586                    rm -f "$SYSTEMD_SERVICE"
1587                else
1588                    eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1589                    exit 1
1590                fi
1591            elif [ -f /etc/lsb-release -o -f /etc/debian_version ] ; then
1592                echo 'Detected Debian-based distribution:'
1593                if [ -f "/etc/init.d/$APP_NAME" ] ; then
1594                    echo " Removing $APP_LONG_NAME daemon from init.d..."
1595                    update-rc.d -f "$APP_NAME" remove
1596                    rm -f "/etc/init.d/$APP_NAME"
1597                elif [ -f "/etc/init/${APP_NAME}.conf" ] ; then
1598                    echo " Removing $APP_LONG_NAME daemon from upstart..."
1599                    rm "/etc/init/${APP_NAME}.conf"
1600                else
1601                    eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1602                    exit 1
1603                fi
1604            else
1605                echo 'Detected Linux:'
1606                if [ -f "/etc/init.d/$APP_NAME" ] ; then
1607                    eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1608                    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"
1609                    do
1610                        rm -f $i
1611                    done
1612                else
1613                    eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1614                    exit 1
1615                fi
1616            fi
1617        elif [ "$DIST_OS" = "hpux" ] ; then
1618            echo 'Detected HP-UX:'
1619            if [ -f "/sbin/init.d/$APP_NAME" ] ; then
1620                eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1621                for i in "/sbin/rc3.d/K20$APP_NAME_LOWER" "/sbin/rc3.d/S20$APP_NAME_LOWER" "/sbin/init.d/$APP_NAME"
1622                do
1623                    rm -f $i
1624                done
1625            else
1626                eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1627                exit 1
1628            fi
1629        elif [ "$DIST_OS" = "aix" ] ; then
1630            echo 'Detected AIX:'
1631            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
1632                eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1633                if [ -f "/etc/rc.d/init.d/$APP_NAME" ] ; then
1634                    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"
1635                    do
1636                        rm -f $i
1637                    done
1638                fi
1639                if [ -n "`/usr/sbin/lsitab $APP_NAME`" -o -n "`/usr/bin/lssrc -S -s $APP_NAME`" ] ; then
1640                    /usr/sbin/rmitab $APP_NAME
1641                    /usr/bin/rmssys -s $APP_NAME
1642                fi
1643            else
1644                eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1645                exit 1
1646            fi
1647        elif [ "$DIST_OS" = "freebsd" ] ; then
1648            echo 'Detected FreeBSD:'
1649            if [ -f "/etc/rc.d/$APP_NAME" ] ; then
1650                eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1651                for i in "/etc/rc.d/$APP_NAME"
1652                do
1653                    rm -f $i
1654                done
1655                sed -i .bak "/${APP_NAME}_enable=\"YES\"/d" /etc/rc.conf
1656            else
1657                eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1658                exit 1
1659            fi
1660        elif [ "$DIST_OS" = "macosx" ] ; then
1661            echo 'Detected Mac OSX:'
1662            if [ -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
1663                eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1664                # Make sure the plist is installed
1665                LOADED_PLIST=`launchctl list | grep ${APP_PLIST_BASE}`
1666                if [ "X${LOADED_PLIST}" != "X" ] ; then
1667                    launchctl unload "/Library/LaunchDaemons/${APP_PLIST}"
1668                fi
1669                rm -f "/Library/LaunchDaemons/${APP_PLIST}"
1670            else
1671                eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1672                exit 1
1673            fi
1674        elif [ "$DIST_OS" = "zos" ] ; then
1675            echo 'Detected z/OS:'
1676            if [ -f /etc/rc.bak ] ; then
1677                eval echo " `gettext 'Removing $APP_LONG_NAME daemon'`..."
1678                cp /etc/rc /etc/rc.bak
1679                sed  "s/_BPX_JOBNAME=\'APP_NAME\'.*//g" /etc/rc.bak > /etc/rc
1680                rm /etc/rc.bak
1681            else
1682                eval echo " `gettext 'The $APP_LONG_NAME daemon is not currently installed.'`"
1683                exit 1
1684            fi
1685        else
1686            eval echo `gettext 'Remove not currently supported for $DIST_OS'`
1687            exit 1
1688        fi
1689    fi
1690}
1691
1692dump() {
1693    echo "Dumping $APP_LONG_NAME..."
1694    getpid
1695    if [ "X$pid" = "X" ]
1696    then
1697        eval echo `gettext '$APP_LONG_NAME was not running.'`
1698    else
1699        kill -3 $pid
1700
1701        if [ $? -ne 0 ]
1702        then
1703            echo "Failed to dump $APP_LONG_NAME."
1704            exit 1
1705        else
1706            echo "Dumped $APP_LONG_NAME."
1707        fi
1708    fi
1709}
1710
1711# Used by HP-UX init scripts.
1712startmsg() {
1713    getpid
1714    if [ "X$pid" = "X" ]
1715    then
1716        echo "Starting $APP_LONG_NAME...  Wrapper:Stopped"
1717    else
1718        if [ "X$DETAIL_STATUS" = "X" ]
1719        then
1720            echo "Starting $APP_LONG_NAME...  Wrapper:Running"
1721        else
1722            getstatus
1723            echo "Starting $APP_LONG_NAME...  Wrapper:$STATUS, Java:$JAVASTATUS"
1724        fi
1725    fi
1726}
1727
1728# Used by HP-UX init scripts.
1729stopmsg() {
1730    getpid
1731    if [ "X$pid" = "X" ]
1732    then
1733        echo "Stopping $APP_LONG_NAME...  Wrapper:Stopped"
1734    else
1735        if [ "X$DETAIL_STATUS" = "X" ]
1736        then
1737            echo "Stopping $APP_LONG_NAME...  Wrapper:Running"
1738        else
1739            getstatus
1740            echo "Stopping $APP_LONG_NAME...  Wrapper:$STATUS, Java:$JAVASTATUS"
1741        fi
1742    fi
1743}
1744
1745showUsage() {
1746    # $1 bad command
1747
1748    if [ -n "$1" ]
1749    then
1750        echo "Unexpected command: $1"
1751        echo "";
1752    fi
1753
1754    MSG='Usage: '
1755    if [ -n "$FIXED_COMMAND" ] ; then
1756        if [ -n "$PASS_THROUGH" ] ; then
1757            echo "${MSG} $0 {JavaAppArgs}"
1758        else
1759            echo "${MSG} $0"
1760        fi
1761    else
1762            if [ -n "$PASS_THROUGH" ] ; then
1763                echo "${MSG} $0 [ console {JavaAppArgs} | start {JavaAppArgs} | stop | restart {JavaAppArgs} | condrestart {JavaAppArgs} | status | install | remove | dump ]"
1764            else
1765                echo "${MSG} $0 [ console | start | stop | restart | condrestart | status | install | remove | dump ]"
1766        fi
1767    fi
1768
1769    if [ ! -n "$BRIEF_USAGE" ]
1770    then
1771        echo "";
1772        if [ ! -n "$FIXED_COMMAND" ] ; then
1773            echo "`gettext 'Commands:'`"
1774            echo "  console      `gettext 'Launch in the current console.'`"
1775            echo "  start        `gettext 'Start in the background as a daemon process.'`"
1776            echo "  stop         `gettext 'Stop if running as a daemon or in another console.'`"
1777            echo "  graceful     `gettext 'Stop gracefully, may take up to 11 minutes.'`"
1778            echo "  restart      `gettext 'Stop if running and then start.'`"
1779            echo "  condrestart  `gettext 'Restart only if already running.'`"
1780            echo "  status       `gettext 'Query the current status.'`"
1781            echo "  install      `gettext 'Install to start automatically when system boots.'`"
1782            echo "  remove       `gettext 'Uninstall.'`"
1783            echo "  dump         `gettext 'Request a Java thread dump if running.'`"
1784            echo "";
1785        fi
1786        if [ -n "$PASS_THROUGH" ] ; then
1787            echo "JavaAppArgs: Zero or more arguments which will be passed to the Java application."
1788            echo "";
1789        fi
1790    fi
1791
1792    exit 1
1793}
1794
1795showsetusermesg()  {
1796    echo "`gettext 'Please edit i2prouter and set the variable RUN_AS_USER'`."
1797}
1798
1799checkifstartingasroot() {
1800    if [ ! `grep ^RUN_AS_USER $0` ] && [ ! `grep ^ALLOW_ROOT $0` ] && [ `id -ur` = '0' ]; then
1801        echo "`gettext 'Running I2P as the root user is *not* recommended.'`"
1802        showsetusermesg
1803        echo
1804        echo "`gettext 'To run as root anyway, edit i2prouter and set ALLOW_ROOT=true.'`"
1805        exit 1
1806    fi
1807}
1808
1809docommand() {
1810    case "$COMMAND" in
1811        'console')
1812            checkifstartingasroot
1813            checkUser touchlock "$@"
1814            if [ ! -n "$FIXED_COMMAND" ] ; then
1815                shift
1816            fi
1817            console "$@"
1818            ;;
1819
1820        'start')
1821            checkifstartingasroot
1822            if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
1823                macosxstart
1824            elif [ "$DIST_OS" = "linux" -a -f "/etc/init/${APP_NAME}.conf" ] ; then
1825                checkUser touchlock "$@"
1826                upstartstart
1827            else
1828                checkUser touchlock "$@"
1829                if [ ! -n "$FIXED_COMMAND" ] ; then
1830                    shift
1831                fi
1832                start "$@"
1833            fi
1834            ;;
1835
1836        'stop')
1837            checkUser "" "$COMMAND"
1838            stopit "0"
1839            ;;
1840
1841        'graceful')
1842            checkUser "" "$COMMAND"
1843            graceful "0"
1844            ;;
1845
1846        'restart')
1847            checkUser touchlock "$COMMAND"
1848            if [ ! -n "$FIXED_COMMAND" ] ; then
1849                shift
1850            fi
1851            stopit "0"
1852            start "$@"
1853            ;;
1854
1855        'condrestart')
1856            checkUser touchlock "$COMMAND"
1857            if [ ! -n "$FIXED_COMMAND" ] ; then
1858                shift
1859            fi
1860            stopit "1"
1861            start "$@"
1862            ;;
1863
1864        'status')
1865            checkUser "" "$COMMAND"
1866            status
1867            ;;
1868
1869        'install')
1870            installdaemon
1871            if [ ! `grep ^RUN_AS_USER $0` ]; then
1872                 echo
1873                 showsetusermesg
1874            fi
1875            echo
1876            echo "You may want to disable the browser from launching at startup at"
1877            echo "http://127.0.0.1:7657/configclients"
1878            echo
1879            echo "I2P_CONFIG_DIR is currently set to $I2P_CONFIG_DIR."
1880            echo "Change the value in $0 if this is not"
1881            echo "appropriate for your configuration."
1882            ;;
1883
1884        'remove' | 'uninstall')
1885            removedaemon
1886            ;;
1887
1888        'dump')
1889            checkUser "" "$COMMAND"
1890            dump
1891            ;;
1892
1893        'start_msg')
1894            # Internal command called by launchd on HP-UX.
1895            checkUser "" "$COMMAND"
1896            startmsg
1897            ;;
1898
1899        'stop_msg')
1900            # Internal command called by launchd on HP-UX.
1901            checkUser "" "$COMMAND"
1902            stopmsg
1903            ;;
1904
1905        'launchdinternal')
1906            # Internal command called by launchd on Max OSX.
1907            # We do not want to call checkUser here as it is handled in the launchd plist file.  Doing it here would confuse launchd.
1908            if [ ! -n "$FIXED_COMMAND" ] ; then
1909                shift
1910            fi
1911            launchdinternal "$@"
1912            ;;
1913
1914        *)
1915            showUsage "$COMMAND"
1916            ;;
1917    esac
1918}
1919
1920docommand "$@"
1921
1922exit 0
Note: See TracBrowser for help on using the repository browser.