diff options
Diffstat (limited to 'bin')
-rw-r--r-- | bin/couchdb.bat.tpl.in | 26 | ||||
-rw-r--r-- | bin/couchdb.tpl.in | 330 | ||||
-rw-r--r-- | bin/couchjs.tpl.in | 92 |
3 files changed, 448 insertions, 0 deletions
diff --git a/bin/couchdb.bat.tpl.in b/bin/couchdb.bat.tpl.in new file mode 100644 index 00000000..48d78513 --- /dev/null +++ b/bin/couchdb.bat.tpl.in @@ -0,0 +1,26 @@ +@echo off +rem Licensed under the Apache License, Version 2.0 (the "License"); you may not +rem use this file except in compliance with the License. You may obtain a copy +rem of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +rem WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +rem License for the specific language governing permissions and limitations +rem under the License. + +setlocal +rem First change to the drive with the erlang bin directory +%~d0 +rem then change to the erlang bin directory +cd %~dp0 + +rem Allow a different erlang executable (eg, erl) to be used. +rem When using erl instead of werl, server restarts during test runs can fail +rem intermittently. But using erl should be fine for production use. +if "%ERL%x" == "x" set ERL=werl.exe + +echo CouchDB %version% - prepare to relax... +%ERL% -sasl errlog_type error -s couch diff --git a/bin/couchdb.tpl.in b/bin/couchdb.tpl.in new file mode 100644 index 00000000..94d47439 --- /dev/null +++ b/bin/couchdb.tpl.in @@ -0,0 +1,330 @@ +#! /bin/sh -e + +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +BACKGROUND=false +DEFAULT_CONFIG_DIR=%localconfdir%/default.d +DEFAULT_CONFIG_FILE=%localconfdir%/%defaultini% +ERL_START_OPTIONS="-sasl errlog_type error +K true +A 4" +HEART_BEAT_TIMEOUT=11 +HEART_COMMAND="%bindir%/%couchdb_command_name% -k" +INTERACTIVE=false +KILL=false +LOCAL_CONFIG_DIR=%localconfdir%/local.d +LOCAL_CONFIG_FILE=%localconfdir%/%localini% +PID_FILE=%localstatedir%/run/couchdb/couchdb.pid +RECURSED=false +RESET_CONFIG=true +RESPAWN_TIMEOUT=0 +SCRIPT_ERROR=1 +SCRIPT_OK=0 +SHUTDOWN=false +STDERR_FILE=couchdb.stderr +STDOUT_FILE=couchdb.stdout + +print_arguments="" +start_arguments="" +background_start_arguments="" + +basename=`basename $0` + +display_version () { + cat << EOF +$basename - %package_name% %version% + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +EOF +} + +display_help () { + cat << EOF +Usage: $basename [OPTION] + +The $basename command runs the %package_name% server. + +Erlang is called with: + + $ERL_START_OPTIONS + +Erlang inherits the environment of this command. + +You can override these options using the environment: + + ERL_AFLAGS, ERL_FLAGS, ERL_ZFLAGS + +See erl(1) for more information about the environment variables. + +The exit status is 0 for success or 1 for failure. + +Options: + + -h display a short help message and exit + -V display version information and exit + -a FILE add configuration FILE to chain + -A DIR add configuration DIR to chain + -n reset configuration file chain (including system default) + -c print configuration file chain and exit + -i use the interactive Erlang shell + -b spawn as a background process + -p FILE set the background PID FILE (overrides system default) + -r SECONDS respawn background process after SECONDS (defaults to no respawn) + -o FILE redirect background stdout to FILE (defaults to $STDOUT_FILE) + -e FILE redirect background stderr to FILE (defaults to $STDERR_FILE) + -s display the status of the background process + -k kill the background process, will respawn if needed + -d shutdown the background process + +Report bugs at <%bug_uri%>. +EOF +} + +display_error () { + if test -n "$1"; then + echo $1 >&2 + fi + echo >&2 + echo "Try \`"$basename" -h' for more information." >&2 + false +} + +_get_pid () { + if test -f $PID_FILE; then + PID=`cat $PID_FILE` + fi + echo $PID +} + +_add_config_file () { + if test -z "$print_arguments"; then + print_arguments="$1" + else + print_arguments="`cat <<EOF +$print_arguments +$1 +EOF +`" + fi + start_arguments="$start_arguments $1" + background_start_arguments="$background_start_arguments -a $1" +} + +_add_config_dir () { + for file in "$1"/*.ini; do + if [ -r "$file" ]; then + _add_config_file "$file" + fi + done +} + +_load_config () { + _add_config_file "$DEFAULT_CONFIG_FILE" + _add_config_dir "$DEFAULT_CONFIG_DIR" + _add_config_file "$LOCAL_CONFIG_FILE" + _add_config_dir "$LOCAL_CONFIG_DIR" +} + +_reset_config () { + print_arguments="" + start_arguments="" + background_start_arguments="-n" +} + +_print_config () { + cat <<EOF +$print_arguments +EOF +} + +check_status () { + PID=`_get_pid` + if test -n "$PID"; then + if kill -0 $PID 2> /dev/null; then + echo "Apache CouchDB is running as process $PID, time to relax." + return $SCRIPT_OK + else + echo >&2 << EOF +Apache CouchDB is not running but a stale PID file exists: $PID_FILE" +EOF + fi + else + echo "Apache CouchDB is not running." >&2 + fi + return $SCRIPT_ERROR +} + +check_environment () { + if test "$BACKGROUND" != "true"; then + return + fi + touch $PID_FILE 2> /dev/null || true + touch $STDOUT_FILE 2> /dev/null || true + touch $STDERR_FILE 2> /dev/null || true + message_prefix="Apache CouchDB needs write permission on the" + if test ! -w $PID_FILE; then + echo "$message_prefix PID file: $PID_FILE" >&2 + false + fi + if test ! -w $STDOUT_FILE; then + echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2 + false + fi + if test ! -w $STDERR_FILE; then + echo "$message_prefix STDERR file: $STDERR_FILE" >&2 + false + fi + message_prefix="Apache CouchDB needs a regular" + if test `echo 2> /dev/null >> $PID_FILE; echo $?` -gt 0; then + echo "$message_prefix PID file: $PID_FILE" >&2 + false + fi + if test `echo 2> /dev/null >> $STDOUT_FILE; echo $?` -gt 0; then + echo "$message_prefix STDOUT file: $STDOUT_FILE" >&2 + false + fi + if test `echo 2> /dev/null >> $STDERR_FILE; echo $?` -gt 0; then + echo "$message_prefix STDERR file: $STDERR_FILE" >&2 + false + fi +} + +start_couchdb () { + if test ! "$RECURSED" = "true"; then + if check_status 2> /dev/null; then + exit + fi + check_environment + fi + interactive_option="+Bd -noinput" + if test "$INTERACTIVE" = "true"; then + interactive_option="" + fi + if test "$BACKGROUND" = "true"; then + touch $PID_FILE + interactive_option="+Bd -noinput" + fi + command="%ERL% $interactive_option $ERL_START_OPTIONS \ + -env ERL_LIBS %localerlanglibdir% -couch_ini $start_arguments -s couch" + if test "$BACKGROUND" = "true" -a "$RECURSED" = "false"; then + $0 $background_start_arguments -b -r $RESPAWN_TIMEOUT -p $PID_FILE \ + -o $STDOUT_FILE -e $STDERR_FILE -R & + echo "Apache CouchDB has started, time to relax." + else + if test "$RECURSED" = "true"; then + while true; do + export HEART_COMMAND + export HEART_BEAT_TIMEOUT + `eval $command -pidfile $PID_FILE -heart \ + >> $STDOUT_FILE 2>> $STDERR_FILE` || true + PID=`_get_pid` + if test -n "$PID"; then + if kill -0 $PID 2> /dev/null; then + return $SCRIPT_ERROR + fi + else + return $SCRIPT_OK + fi + if test "$RESPAWN_TIMEOUT" = "0"; then + return $SCRIPT_OK + fi + if test "$RESPAWN_TIMEOUT" != "1"; then + plural_ending="s" + fi + cat << EOF +Apache CouchDB crashed, restarting in $RESPAWN_TIMEOUT second$plural_ending. +EOF + sleep $RESPAWN_TIMEOUT + done + else + eval exec $command + fi + fi +} + +stop_couchdb () { + PID=`_get_pid` + if test -n "$PID"; then + if test "$1" = "false"; then + echo > $PID_FILE + fi + if kill -0 $PID 2> /dev/null; then + if kill -1 $PID 2> /dev/null; then + if test "$1" = "false"; then + echo "Apache CouchDB has been shutdown." + else + echo "Apache CouchDB has been killed." + fi + return $SCRIPT_OK + else + echo "Apache CouchDB could not be killed." >&2 + return $SCRIPT_ERROR + fi + if test "$1" = "false"; then + echo "Stale PID file exists but Apache CouchDB is not running." + else + echo "Stale PID file existed but Apache CouchDB is not running." + fi + fi + else + echo "Apache CouchDB is not running." + fi +} + +parse_script_option_list () { + _load_config + set +e + options=`getopt hVa:A:ncibp:r:Ro:e:skd $@` + if test ! $? -eq 0; then + display_error + fi + set -e + eval set -- $options + while [ $# -gt 0 ]; do + case "$1" in + -h) shift; display_help; exit;; + -V) shift; display_version; exit;; + -a) shift; _add_config_file "$1"; shift;; + -A) shift; _add_config_dir "$1"; shift;; + -n) shift; _reset_config;; + -c) shift; _print_config; exit;; + -i) shift; INTERACTIVE=true;; + -b) shift; BACKGROUND=true;; + -r) shift; RESPAWN_TIMEOUT=$1; shift;; + -R) shift; RECURSED=true;; + -p) shift; PID_FILE=$1; shift;; + -o) shift; STDOUT_FILE=$1; shift;; + -e) shift; STDERR_FILE=$1; shift;; + -s) shift; check_status; exit;; + -k) shift; KILL=true;; + -d) shift; SHUTDOWN=true;; + --) shift; break;; + *) display_error "Unknown option: $1" >&2;; + esac + done + if test "$KILL" = "true" -o "$SHUTDOWN" = "true"; then + stop_couchdb $KILL + else + start_couchdb + fi +} + +parse_script_option_list $@ diff --git a/bin/couchjs.tpl.in b/bin/couchjs.tpl.in new file mode 100644 index 00000000..6927a0d4 --- /dev/null +++ b/bin/couchjs.tpl.in @@ -0,0 +1,92 @@ +#! /bin/sh -e + +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +SCRIPT_OK=0 +SCRIPT_ERROR=1 + +DEFAULT_VERSION=170 + +basename=`basename $0` + +display_version () { + cat << EOF +$basename - %package_name% %version% + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. +EOF +} + +display_help () { + cat << EOF +Usage: $basename [FILE] + +The $basename command runs the %package_name% JavaScript interpreter. + +The exit status is 0 for success or 1 for failure. + +Options: + + -h display a short help message and exit + -V display version information and exit + +Report bugs at <%bug_uri%>. +EOF +} + +display_error () { + if test -n "$1"; then + echo $1 >&2 + fi + echo >&2 + echo "Try \`"$basename" -h' for more information." >&2 + exit $SCRIPT_ERROR +} + +run_couchjs () { + exec %locallibbindir%/%couchjs_command_name% $@ +} + +parse_script_option_list () { + set +e + options=`getopt hV $@` + if test ! $? -eq 0; then + display_error + fi + set -e + eval set -- $options + while [ $# -gt 0 ]; do + case "$1" in + -h) shift; display_help; exit $SCRIPT_OK;; + -V) shift; display_version; exit $SCRIPT_OK;; + --) shift; break;; + *) break;; + esac + done + option_list=`echo $@ | sed 's/--//'` + if test -z "$option_list"; then + display_error "You must specify a FILE." + fi + run_couchjs $option_list +} + +parse_script_option_list $@ |