summaryrefslogtreecommitdiffstats
path: root/resources/com/google/gerrit/pgm/init/gerrit.sh
diff options
context:
space:
mode:
Diffstat (limited to 'resources/com/google/gerrit/pgm/init/gerrit.sh')
-rwxr-xr-xresources/com/google/gerrit/pgm/init/gerrit.sh583
1 files changed, 583 insertions, 0 deletions
diff --git a/resources/com/google/gerrit/pgm/init/gerrit.sh b/resources/com/google/gerrit/pgm/init/gerrit.sh
new file mode 100755
index 0000000000..c32a1818f4
--- /dev/null
+++ b/resources/com/google/gerrit/pgm/init/gerrit.sh
@@ -0,0 +1,583 @@
+#!/bin/sh
+#
+# Launch Gerrit Code Review as a daemon process.
+
+# To get the service to restart correctly on reboot, uncomment below (3 lines):
+# ========================
+# chkconfig: 3 99 99
+# description: Gerrit Code Review
+# processname: gerrit
+# ========================
+
+### BEGIN INIT INFO
+# Provides: gerrit
+# Required-Start: $named $remote_fs $syslog
+# Required-Stop: $named $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start/stop Gerrit Code Review
+# Description: Gerrit is a web based code review system, facilitating online code reviews
+# for projects using the Git version control system.
+### END INIT INFO
+
+# Configuration files:
+#
+# /etc/default/gerritcodereview
+# If it exists, sourced at the start of this script. It may perform any
+# sequence of shell commands, like setting relevant environment variables.
+#
+# The files will be checked for existence before being sourced.
+
+# Configuration variables. These may be set in /etc/default/gerritcodereview.
+#
+# GERRIT_SITE
+# Path of the Gerrit site to run. $GERRIT_SITE/etc/gerrit.config
+# will be used to configure the process.
+#
+# GERRIT_WAR
+# Location of the gerrit.war download that we will execute. Defaults to
+# container.war property in $GERRIT_SITE/etc/gerrit.config.
+#
+# NO_START
+# If set to "1" disables Gerrit from starting.
+#
+# START_STOP_DAEMON
+# If set to "0" disables using start-stop-daemon. This may need to
+# be set on SuSE systems.
+
+if test -f /lib/lsb/init-functions ; then
+ . /lib/lsb/init-functions
+fi
+
+usage() {
+ me=`basename "$0"`
+ echo >&2 "Usage: $me {start|stop|restart|check|status|run|supervise|threads} [-d site]"
+ exit 1
+}
+
+test $# -gt 0 || usage
+
+##################################################
+# Some utility functions
+##################################################
+running() {
+ test -f $1 || return 1
+ PID=`cat $1`
+ ps -p $PID >/dev/null 2>/dev/null || return 1
+ return 0
+}
+
+thread_dump() {
+ test -f $1 || return 1
+ PID=`cat $1`
+ $JSTACK $PID || return 1
+ return 0;
+}
+
+get_config() {
+ if test -f "$GERRIT_CONFIG" ; then
+ if test "x$1" = x--int ; then
+ # Git might not be able to expand "8g" properly. If it gives
+ # us 0 back retry for the raw string and expand ourselves.
+ #
+ n=`git config --file "$GERRIT_CONFIG" --int "$2"`
+ if test x0 = "x$n" ; then
+ n=`git config --file "$GERRIT_CONFIG" --get "$2"`
+ case "$n" in
+ *g) n=`expr ${n%%g} \* 1024`m ;;
+ *k) n=`expr ${n%%k} \* 1024` ;;
+ *) : ;;
+ esac
+ fi
+ echo "$n"
+ else
+ git config --file "$GERRIT_CONFIG" $1 "$2"
+ fi
+ fi
+}
+
+##################################################
+# Get the action and options
+##################################################
+
+ACTION=$1
+shift
+
+while test $# -gt 0 ; do
+ case "$1" in
+ -d|--site-path)
+ shift
+ GERRIT_SITE=$1
+ shift
+ ;;
+ -d=*)
+ GERRIT_SITE=${1##-d=}
+ shift
+ ;;
+ --site-path=*)
+ GERRIT_SITE=${1##--site-path=}
+ shift
+ ;;
+
+ *)
+ usage
+ esac
+done
+
+test -z "$NO_START" && NO_START=0
+test -z "$START_STOP_DAEMON" && START_STOP_DAEMON=1
+
+##################################################
+# See if there's a default configuration file
+##################################################
+if test -f /etc/default/gerritcodereview ; then
+ . /etc/default/gerritcodereview
+fi
+
+##################################################
+# Set tmp if not already set.
+##################################################
+if test -z "$TMP" ; then
+ TMP=/tmp
+fi
+TMPJ=$TMP/j$$
+
+##################################################
+# Reasonable guess marker for a Gerrit site path.
+##################################################
+GERRIT_INSTALL_TRACE_FILE=etc/gerrit.config
+
+##################################################
+# No git in PATH? Needed for gerrit.config parsing
+##################################################
+if type git >/dev/null 2>&1 ; then
+ : OK
+else
+ echo >&2 "** ERROR: Cannot find git in PATH"
+ exit 1
+fi
+
+##################################################
+# Try to determine GERRIT_SITE if not set
+##################################################
+if test -z "$GERRIT_SITE" ; then
+ GERRIT_SITE_1=`dirname "$0"`/..
+ if test -f "${GERRIT_SITE_1}/${GERRIT_INSTALL_TRACE_FILE}" ; then
+ GERRIT_SITE=${GERRIT_SITE_1}
+ fi
+fi
+
+##################################################
+# No GERRIT_SITE yet? We're out of luck!
+##################################################
+if test -z "$GERRIT_SITE" ; then
+ echo >&2 "** ERROR: GERRIT_SITE not set"
+ exit 1
+fi
+
+INITIAL_DIR=`pwd`
+if cd "$GERRIT_SITE" ; then
+ GERRIT_SITE=`pwd`
+else
+ echo >&2 "** ERROR: Gerrit site $GERRIT_SITE not found"
+ exit 1
+fi
+
+#####################################################
+# Check that Gerrit is where we think it is
+#####################################################
+GERRIT_CONFIG="$GERRIT_SITE/$GERRIT_INSTALL_TRACE_FILE"
+test -f "$GERRIT_CONFIG" || {
+ echo "** ERROR: Gerrit is not initialized in $GERRIT_SITE"
+ exit 1
+}
+test -r "$GERRIT_CONFIG" || {
+ echo "** ERROR: $GERRIT_CONFIG is not readable!"
+ exit 1
+}
+
+GERRIT_PID="$GERRIT_SITE/logs/gerrit.pid"
+GERRIT_RUN="$GERRIT_SITE/logs/gerrit.run"
+GERRIT_TMP="$GERRIT_SITE/tmp"
+export GERRIT_TMP
+
+##################################################
+# Check for JAVA_HOME
+##################################################
+JAVA_HOME_OLD="$JAVA_HOME"
+JAVA_HOME=`get_config --get container.javaHome`
+if test -z "$JAVA_HOME" ; then
+ JAVA_HOME="$JAVA_HOME_OLD"
+fi
+if test -z "$JAVA_HOME" ; then
+ # If a java runtime is not defined, search the following
+ # directories for a JVM and sort by version. Use the highest
+ # version number.
+
+ JAVA_LOCATIONS="\
+ /usr/java \
+ /usr/bin \
+ /usr/local/bin \
+ /usr/local/java \
+ /usr/local/jdk \
+ /usr/local/jre \
+ /usr/lib/jvm \
+ /opt/java \
+ /opt/jdk \
+ /opt/jre \
+ "
+ for N in java jdk jre ; do
+ for L in $JAVA_LOCATIONS ; do
+ test -d "$L" || continue
+ find $L -name "$N" ! -type d | grep -v threads | while read J ; do
+ test -x "$J" || continue
+ VERSION=`eval "$J" -version 2>&1`
+ test $? = 0 || continue
+ VERSION=`expr "$VERSION" : '.*"\(1.[0-9\.]*\)["_]'`
+ test -z "$VERSION" && continue
+ expr "$VERSION" \< 1.2 >/dev/null && continue
+ echo "$VERSION:$J"
+ done
+ done
+ done | sort | tail -1 >"$TMPJ"
+ JAVA=`cat "$TMPJ" | cut -d: -f2`
+ JVERSION=`cat "$TMPJ" | cut -d: -f1`
+ rm -f "$TMPJ"
+
+ JAVA_HOME=`dirname "$JAVA"`
+ while test -n "$JAVA_HOME" \
+ -a "$JAVA_HOME" != "/" \
+ -a ! -f "$JAVA_HOME/lib/tools.jar" ; do
+ JAVA_HOME=`dirname "$JAVA_HOME"`
+ done
+ test -z "$JAVA_HOME" && JAVA_HOME=
+
+ echo "** INFO: Using $JAVA"
+fi
+
+if test -z "$JAVA" \
+ -a -n "$JAVA_HOME" \
+ -a -x "$JAVA_HOME/bin/java" \
+ -a ! -d "$JAVA_HOME/bin/java" ; then
+ JAVA="$JAVA_HOME/bin/java"
+fi
+
+if test -z "$JAVA" ; then
+ echo >&2 "Cannot find a JRE or JDK. Please ensure that the JAVA_HOME environment"
+ echo >&2 "variable or container.javaHome in $GERRIT_SITE/etc/gerrit.config is"
+ echo >&2 "set to a valid >=1.7 JRE location"
+ exit 1
+fi
+
+if test -z "$JSTACK"; then
+ JSTACK="$JAVA_HOME/bin/jstack"
+fi
+
+#####################################################
+# Add Gerrit properties to Java VM options.
+#####################################################
+
+GERRIT_OPTIONS=`get_config --get-all container.javaOptions | tr '\n' ' '`
+if test -n "$GERRIT_OPTIONS" ; then
+ JAVA_OPTIONS="$JAVA_OPTIONS $GERRIT_OPTIONS"
+fi
+
+GERRIT_MEMORY=`get_config --get container.heapLimit`
+if test -n "$GERRIT_MEMORY" ; then
+ JAVA_OPTIONS="$JAVA_OPTIONS -Xmx$GERRIT_MEMORY"
+fi
+
+GERRIT_FDS=`get_config --int core.packedGitOpenFiles`
+test -z "$GERRIT_FDS" && GERRIT_FDS=128
+FDS_MULTIPLIER=2
+USE_LFS=`get_config --get lfs.plugin`
+test -n "$USE_LFS" && FDS_MULTIPLIER=3
+
+GERRIT_FDS=`expr $FDS_MULTIPLIER \* $GERRIT_FDS`
+test $GERRIT_FDS -lt 1024 && GERRIT_FDS=1024
+
+GERRIT_STARTUP_TIMEOUT=`get_config --get container.startupTimeout`
+test -z "$GERRIT_STARTUP_TIMEOUT" && GERRIT_STARTUP_TIMEOUT=90 # seconds
+
+GERRIT_USER=`get_config --get container.user`
+
+#####################################################
+# Configure sane ulimits for a daemon of our size.
+#####################################################
+
+ulimit -c 0 ; # core file size
+ulimit -d unlimited ; # data seg size
+ulimit -f unlimited ; # file size
+ulimit -m >/dev/null 2>&1 && ulimit -m unlimited ; # max memory size
+ulimit -n $GERRIT_FDS ; # open files
+ulimit -t unlimited ; # cpu time
+ulimit -v unlimited ; # virtual memory
+
+ulimit -x >/dev/null 2>&1 && ulimit -x unlimited ; # file locks
+
+#####################################################
+# This is how the Gerrit server will be started
+#####################################################
+
+if test -z "$GERRIT_WAR" ; then
+ GERRIT_WAR=`get_config --get container.war`
+fi
+if test -z "$GERRIT_WAR" ; then
+ GERRIT_WAR="$GERRIT_SITE/bin/gerrit.war"
+ test -f "$GERRIT_WAR" || GERRIT_WAR=
+fi
+if test -z "$GERRIT_WAR" -a -n "$GERRIT_USER" ; then
+ for homedirs in /home /Users ; do
+ if test -d "$homedirs/$GERRIT_USER" ; then
+ GERRIT_WAR="$homedirs/$GERRIT_USER/gerrit.war"
+ if test -f "$GERRIT_WAR" ; then
+ break
+ else
+ GERRIT_WAR=
+ fi
+ fi
+ done
+fi
+if test -z "$GERRIT_WAR" ; then
+ echo >&2 "** ERROR: Cannot find gerrit.war (try setting \$GERRIT_WAR)"
+ exit 1
+fi
+
+test -z "$GERRIT_USER" && GERRIT_USER=`whoami`
+RUN_ARGS="-jar $GERRIT_WAR daemon -d $GERRIT_SITE"
+if test "`get_config --bool container.slave`" = "true" ; then
+ RUN_ARGS="$RUN_ARGS --slave --enable-httpd --headless"
+fi
+DAEMON_OPTS=`get_config --get-all container.daemonOpt`
+if test -n "$DAEMON_OPTS" ; then
+ RUN_ARGS="$RUN_ARGS $DAEMON_OPTS"
+fi
+
+if test -n "$JAVA_OPTIONS" ; then
+ RUN_ARGS="$JAVA_OPTIONS $RUN_ARGS"
+fi
+
+if test -x /usr/bin/perl ; then
+ # If possible, use Perl to mask the name of the process so its
+ # something specific to us rather than the generic 'java' name.
+ #
+ export JAVA
+ RUN_EXEC=/usr/bin/perl
+ RUN_Arg1=-e
+ RUN_Arg2='$x=$ENV{JAVA};exec $x @ARGV;die $!'
+ RUN_Arg3='-- GerritCodeReview'
+else
+ RUN_EXEC=$JAVA
+ RUN_Arg1=
+ RUN_Arg2='-DGerritCodeReview=1'
+ RUN_Arg3=
+fi
+
+##################################################
+# Do the action
+##################################################
+case "$ACTION" in
+ start)
+ printf '%s' "Starting Gerrit Code Review: "
+
+ if test 1 = "$NO_START" ; then
+ echo "Not starting gerrit - NO_START=1 in /etc/default/gerritcodereview"
+ exit 0
+ fi
+
+ test -z "$UID" && UID=`id | sed -e 's/^[^=]*=\([0-9]*\).*/\1/'`
+
+ RUN_ID=`date +%s`.$$
+ RUN_ARGS="$RUN_ARGS --run-id=$RUN_ID"
+
+ if test 1 = "$START_STOP_DAEMON" && type start-stop-daemon >/dev/null 2>&1
+ then
+ test $UID = 0 && CH_USER="-c $GERRIT_USER"
+ if start-stop-daemon -S -b $CH_USER \
+ -p "$GERRIT_PID" -m \
+ -d "$GERRIT_SITE" \
+ -a "$RUN_EXEC" -- $RUN_Arg1 "$RUN_Arg2" $RUN_Arg3 $RUN_ARGS
+ then
+ : OK
+ else
+ rc=$?
+ if test $rc = 127; then
+ echo >&2 "fatal: start-stop-daemon failed"
+ rc=1
+ fi
+ exit $rc
+ fi
+ else
+ if test -f "$GERRIT_PID" ; then
+ if running "$GERRIT_PID" ; then
+ echo "Already Running!!"
+ exit 0
+ else
+ rm -f "$GERRIT_PID" "$GERRIT_RUN"
+ fi
+ fi
+
+ if test $UID = 0 -a -n "$GERRIT_USER" ; then
+ touch "$GERRIT_PID"
+ chown $GERRIT_USER "$GERRIT_PID"
+ su - $GERRIT_USER -s /bin/sh -c "
+ JAVA='$JAVA' ; export JAVA ;
+ $RUN_EXEC $RUN_Arg1 '$RUN_Arg2' $RUN_Arg3 $RUN_ARGS </dev/null >/dev/null 2>&1 &
+ PID=\$! ;
+ disown ;
+ echo \$PID >\"$GERRIT_PID\""
+ else
+ $RUN_EXEC $RUN_Arg1 "$RUN_Arg2" $RUN_Arg3 $RUN_ARGS </dev/null >/dev/null 2>&1 &
+ PID=$!
+ type disown >/dev/null 2>&1 && disown
+ echo $PID >"$GERRIT_PID"
+ fi
+ fi
+
+ if test $UID = 0; then
+ PID=`cat "$GERRIT_PID"`
+ if test -f "/proc/${PID}/oom_score_adj" ; then
+ echo -1000 > "/proc/${PID}/oom_score_adj"
+ else
+ if test -f "/proc/${PID}/oom_adj" ; then
+ echo -16 > "/proc/${PID}/oom_adj"
+ fi
+ fi
+ elif [ "$(uname -s)"=="Linux" ] && test -d "/proc/${PID}"; then
+ echo "WARNING: Could not adjust Gerrit's process for the kernel's out-of-memory killer."
+ echo " This may be caused by ${0} not being run as root."
+ echo " Consider changing the OOM score adjustment manually for Gerrit's PID=${PID} with e.g.:"
+ echo " echo '-1000' | sudo tee /proc/${PID}/oom_score_adj"
+ fi
+
+ TIMEOUT="$GERRIT_STARTUP_TIMEOUT"
+ sleep 1
+ while running "$GERRIT_PID" && test $TIMEOUT -gt 0 ; do
+ if test "x$RUN_ID" = "x`cat $GERRIT_RUN 2>/dev/null`" ; then
+ echo OK
+ exit 0
+ fi
+
+ sleep 2
+ TIMEOUT=`expr $TIMEOUT - 2`
+ done
+
+ echo FAILED
+ exit 1
+ ;;
+
+ stop)
+ printf '%s' "Stopping Gerrit Code Review: "
+
+ if test 1 = "$START_STOP_DAEMON" && type start-stop-daemon >/dev/null 2>&1
+ then
+ start-stop-daemon -K -p "$GERRIT_PID" -s HUP
+ sleep 1
+ if running "$GERRIT_PID" ; then
+ sleep 3
+ if running "$GERRIT_PID" ; then
+ sleep 30
+ if running "$GERRIT_PID" ; then
+ start-stop-daemon -K -p "$GERRIT_PID" -s KILL
+ fi
+ fi
+ fi
+ rm -f "$GERRIT_PID" "$GERRIT_RUN"
+ echo OK
+ else
+ PID=`cat "$GERRIT_PID" 2>/dev/null`
+ TIMEOUT=30
+ while running "$GERRIT_PID" && test $TIMEOUT -gt 0 ; do
+ kill $PID 2>/dev/null
+ sleep 1
+ TIMEOUT=`expr $TIMEOUT - 1`
+ done
+ test $TIMEOUT -gt 0 || kill -9 $PID 2>/dev/null
+ rm -f "$GERRIT_PID" "$GERRIT_RUN"
+ echo OK
+ fi
+ ;;
+
+ restart)
+ GERRIT_SH=$0
+ if test -f "$GERRIT_SH" ; then
+ : OK
+ else
+ GERRIT_SH="$INITIAL_DIR/$GERRIT_SH"
+ if test -f "$GERRIT_SH" ; then
+ : OK
+ else
+ echo >&2 "** ERROR: Cannot locate gerrit.sh"
+ exit 1
+ fi
+ fi
+ $GERRIT_SH stop $*
+ sleep 5
+ $GERRIT_SH start $*
+ exit $?
+ ;;
+
+ supervise)
+ #
+ # Under control of daemontools supervise monitor which
+ # handles restarts and shutdowns via the svc program.
+ #
+ exec "$RUN_EXEC" $RUN_Arg1 "$RUN_Arg2" $RUN_Arg3 $RUN_ARGS
+ ;;
+
+ run|daemon)
+ echo "Running Gerrit Code Review:"
+
+ if test -f "$GERRIT_PID" ; then
+ if running "$GERRIT_PID" ; then
+ echo "Already Running!!"
+ exit 0
+ else
+ rm -f "$GERRIT_PID"
+ fi
+ fi
+
+ exec "$RUN_EXEC" $RUN_Arg1 "$RUN_Arg2" $RUN_Arg3 $RUN_ARGS --console-log
+ ;;
+
+ check|status)
+ echo "Checking arguments to Gerrit Code Review:"
+ echo " GERRIT_SITE = $GERRIT_SITE"
+ echo " GERRIT_CONFIG = $GERRIT_CONFIG"
+ echo " GERRIT_PID = $GERRIT_PID"
+ echo " GERRIT_TMP = $GERRIT_TMP"
+ echo " GERRIT_WAR = $GERRIT_WAR"
+ echo " GERRIT_FDS = $GERRIT_FDS"
+ echo " GERRIT_USER = $GERRIT_USER"
+ echo " GERRIT_STARTUP_TIMEOUT = $GERRIT_STARTUP_TIMEOUT"
+ echo " JAVA = $JAVA"
+ echo " JAVA_OPTIONS = $JAVA_OPTIONS"
+ echo " RUN_EXEC = $RUN_EXEC $RUN_Arg1 '$RUN_Arg2' $RUN_Arg3"
+ echo " RUN_ARGS = $RUN_ARGS"
+ echo
+
+ if test -f "$GERRIT_PID" ; then
+ if running "$GERRIT_PID" ; then
+ echo "Gerrit running pid="`cat "$GERRIT_PID"`
+ exit 0
+ fi
+ fi
+ exit 3
+ ;;
+
+ threads)
+ if running "$GERRIT_PID" ; then
+ thread_dump "$GERRIT_PID"
+ exit 0
+ else
+ echo "Gerrit not running?"
+ fi
+ exit 3
+ ;;
+
+ *)
+ usage
+ ;;
+esac
+
+exit 0