blob: d1fcdd95f87d89151c9788aac4d3fe79f0bf2224 [file] [log] [blame]
#!/bin/sh
# 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.
canonical_readlink ()
{
FILE=$(dirname "$1")/$(basename "$1");
if [ -h "$FILE" ]; then
cd $(dirname "$1")
canonical_readlink $(readlink "$FILE");
else
cd "${1%/*}" && pwd -P;
fi
}
COUCHDB_BIN_DIR=$(canonical_readlink "$0")
ERTS_BIN_DIR=$COUCHDB_BIN_DIR/../
ROOTDIR=${ERTS_BIN_DIR%/*}
START_ERL=$(cat "$ROOTDIR/releases/start_erl.data")
ERTS_VSN=${START_ERL% *}
APP_VSN=${START_ERL#* }
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
PROGNAME=${0##*/}
VERBOSE=""
DEFAULT_NODE="couchdb@127.0.0.1"
LHOST=127.0.0.1
ARGS_FILE="${COUCHDB_ARGS_FILE:-$ROOTDIR/etc/vm.args}"
# If present, extract cookie from ERL_FLAGS
# This is used by the CouchDB Dockerfile and Helm chart
NODE=$(echo "$ERL_FLAGS" | sed 's/^.*name \([^ ][^ ]*\).*$/\1/g')
if test -f "$ARGS_FILE"; then
# else attempt to extract from vm.args
ARGS_FILE_COOKIE=$(awk '$1=="-name"{print $2}' "$ARGS_FILE")
NODE="${NODE:-$ARGS_FILE_COOKIE}"
fi
NODE="${NODE:-$DEFAULT_NODE}"
# If present, extract cookie from ERL_FLAGS
# This is used by the CouchDB Dockerfile and Helm chart
COOKIE=$(echo "$ERL_FLAGS" | sed 's/^.*setcookie \([^ ][^ ]*\).*$/\1/g')
if test -f "$ARGS_FILE"; then
# else attempt to extract from vm.args
ARGS_FILE_COOKIE=$(awk '$1=="-setcookie"{print $2}' "$ARGS_FILE")
COOKIE="${COOKIE:-$ARGS_FILE_COOKIE}"
fi
COOKIE="${COOKIE:-monster}"
printHelpAndExit() {
echo "Usage: ${PROGNAME} [OPTION]... [-- <additional Erlang cli options>]"
echo " -c cookie specify shared Erlang cookie (default: monster)"
echo " -l HOST specify remsh's host name (default: 127.0.0.1)"
echo " -m use output of \`hostname -f\` as remsh's host name"
echo " -n NAME@HOST specify couchdb's Erlang node name (-name in vm.args)"
echo " -v verbose; print invocation line"
echo " -h this help message"
exit
}
while getopts ":hn:c:l:mv" optionName; do
case "$optionName" in
h)
printHelpAndExit 0
;;
n)
NODE=$OPTARG
;;
c)
COOKIE=$OPTARG
;;
l)
LHOST=$OPTARG
;;
m)
LHOST=$(hostname -f)
;;
v)
VERBOSE=0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
printHelpAndExit 0
;;
esac
done
shift $((OPTIND - 1))
if [ ! -z "$VERBOSE" ]; then
# cheap but it works
set -x
fi
# If present, strip -name or -setcookie from ERL_FLAGS
# to avoid conflicts with the cli parameters
ERL_FLAGS_CLEAN=$(echo "$ERL_FLAGS" | sed 's/-setcookie \([^ ][^ ]*\)//g' | sed 's/-name \([^ ][^ ]*\)//g')
exec env ERL_FLAGS="$ERL_FLAGS_CLEAN" "$BINDIR/erl" -boot "$ROOTDIR/releases/$APP_VSN/start_clean" \
-name remsh$$@$LHOST -remsh $NODE -hidden -setcookie $COOKIE \
"$@"