Permalink
Fetching contributors…
Cannot retrieve contributors at this time
256 lines (207 sloc) 6.04 KB
#! /usr/bin/env bash
#
# Copyright (c) 2010-2011, Couchbase, Inc.
# All rights reserved
#
# 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.
SOFTWARE_VERSION="@PRODUCT_VERSION@"
if [ x"${SOFTWARE_VERSION}" = "x" ]
then
SOFTWARE_VERSION="unsupported developer build"
fi
ENTERPRISE=`echo @BUILD_ENTERPRISE@ | tr '[:upper:]' '[:lower:]'`
if [ x"${ENTERPRISE}" = "xtrue" ]
then
SOFTWARE_VERSION="${SOFTWARE_VERSION} (EE)"
else
SOFTWARE_VERSION="${SOFTWARE_VERSION} (CE)"
fi
PATH="@PREFIX@/bin":$PATH
export PATH
ERL_LIBS="@PREFIX@/lib/ns_server/erlang/lib:@PREFIX@/lib/couchdb/erlang/lib:@PREFIX@/lib/couchdb/plugins"
export ERL_LIBS
DEFAULT_CONFIG_DIR="@PREFIX@/etc/couchdb/default.d"
DEFAULT_CONFIG_FILE="@PREFIX@/etc/couchdb/default.ini"
LOCAL_CONFIG_DIR="@PREFIX@/etc/couchdb/local.d"
LOCAL_CONFIG_FILE="@PREFIX@/etc/couchdb/local.ini"
PIDFILE="@PREFIX@/var/lib/couchbase/couchbase-server.pid"
COOKIEFILE="@PREFIX@/var/lib/couchbase/couchbase-server.babysitter.cookie"
NODEFILE="@PREFIX@/var/lib/couchbase/couchbase-server.babysitter.node"
couch_start_arguments=""
LD_LIBRARY_PATH="@PREFIX@/lib":"@PREFIX@/lib/memcached":$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
ERL_CRASH_DUMP_BASE=erl_crash.dump.$(date +%s).$$
ERL_CRASH_DUMP=$ERL_CRASH_DUMP_BASE.babysitter
export ERL_CRASH_DUMP_BASE
export ERL_CRASH_DUMP
ERL_FULLSWEEP_AFTER=512
export ERL_FULLSWEEP_AFTER
# For some obscure reason erl requires HOME environment variable to be set.
if [ -z "$HOME" ]
then
export HOME=/tmp
fi
_check_nofile () {
if [ `ulimit -n` -lt 40960 ]
then
cat <<EOF
The maximum number of open files for the couchbase user is set too low.
It must be at least 40960.
EOF
if [ -f /etc/security/limits.conf ]
then
cat <<EOF
Normally this can be increased by adding the following lines to
/etc/security/limits.conf:
couchbase soft nofile <value>
couchbase hard nofile <value>
Where <value> is greater than 40960. The procedure may be totally
different if you're running so called "non-root/non-sudo install" or
if you've built Couchbase Server from source.
EOF
fi
fi
}
_prepare_datadir () {
datadir="@PREFIX@/var/lib/couchbase"
test -d "$datadir" || mkdir -p "$datadir"
cd "$datadir"
}
_maybe_start_epmd () {
# Initialize distributed erlang on the system (i.e. epmd)
erl -noshell -setcookie nocookie -sname init -run init stop 2>&1 > /dev/null
if [ $? -ne 0 ]
then
exit 1
fi
}
_add_config_file () {
couch_start_arguments="$couch_start_arguments $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"
if [ "$COUCHDB_ADDITIONAL_CONFIG_FILE" != '' ]
then
_add_config_file "$COUCHDB_ADDITIONAL_CONFIG_FILE"
fi
}
_drop_old_crashdumps () {
KEEP="`ls -1 erl_crash.dump.* 2>/dev/null | sort | tail -n 10`"
for file in erl_crash.dump.*; do
if [[ "$KEEP" != *$file* ]]; then
rm -f $file
fi
done
}
_start() {
_check_nofile
_prepare_datadir
_maybe_start_epmd
_load_config
# note: we depend on pwd being $datadir from _prepare_datadir
_drop_old_crashdumps
umask 007
exec erl \
+A 16 \
-smp enable \
-kernel inet_dist_listen_min 21100 inet_dist_listen_max 21299 \
error_logger false \
global_enable_tracing true \
-sasl sasl_error_logger false \
-hidden \
-name 'babysitter_of_ns_1@127.0.0.1' \
-setcookie nocookie \
$* \
-run ns_babysitter_bootstrap -- \
-couch_ini $couch_start_arguments \
-ns_babysitter cookiefile "\"$COOKIEFILE\"" \
-ns_babysitter nodefile "\"$NODEFILE\"" \
-ns_server config_path "\"@PREFIX@/etc/couchbase/static_config\"" \
-ns_server pidfile "\"$PIDFILE\"" \
-ns_server enable_mlockall ${COUCHBASE_ENABLE_MLOCKALL:-false}
}
_stop() {
[ -f "$COOKIEFILE" -a -f "$NODEFILE" ] || return 1
cookie=`cat "$COOKIEFILE"`
node=`cat "$NODEFILE"`
erl \
-name executioner@executioner \
-noshell \
-hidden \
-setcookie "$cookie" \
-eval "ns_babysitter_bootstrap:remote_stop('$node')"
errcode=$?
if [ $errcode -eq 0 ]; then
rm "$COOKIEFILE" "$NODEFILE"
epmd -kill >/dev/null
fi
return $errcode
}
usage() {
cat <<EOF
couchbase-server is a script to start/stop the Couchbase server.
Usage: $0 [options]
Special options:
--help, -h Print this help text
--version, -v Print software Version
-k Stop couchbase Server
All other options and arguments will be passed to the Couchbase
server and should NOT be used unless you know what you're doing.
EOF
}
_parse_options () {
# the getopt lack support for longopts..
if [ "$1" == "--version" ]
then
echo "Couchbase Server ${SOFTWARE_VERSION}"
exit 0
fi
if [ "$1" == "--help" ]
then
usage
exit 0
fi
# set +e
while getopts "kvh" opt
do
case $opt in
k)
_stop
exit $?
;;
v)
echo "Couchbase Server ${SOFTWARE_VERSION}"
exit 0
;;
h)
usage
exit 0
;;
*)
break
;;
esac
done
_start $*
}
_parse_options $*