| #!/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 -r ' |
| s/.*-setcookie[ ]*['\''](.*)['\''].*/\1/ |
| s/.*-setcookie[ ]*["](.*)["].*/\1/ |
| s/.*-setcookie[ ]*([^ ]*).*/\1/ |
| ') |
| if test -f "$ARGS_FILE"; then |
| # else attempt to extract from vm.args |
| ARGS_FILE_COOKIE=$(awk '$1=="-setcookie"{st=index($0," "); print substr($0,st+1)}' "$ARGS_FILE" | tr -d \" | tr -d \') |
| COOKIE="${COOKIE:-$ARGS_FILE_COOKIE}" |
| fi |
| |
| printHelpAndExit() { |
| echo "Usage: ${PROGNAME} [OPTION]... [-- <additional Erlang cli options>]" |
| echo " -c cookie specify shared Erlang cookie" |
| 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 " -t path/to/conf enable TLS distribution (customize in vm.args)" |
| echo " -h this help message" |
| exit |
| } |
| |
| while getopts ":hn:c:l:mvt:" optionName; do |
| case "$optionName" in |
| h) |
| printHelpAndExit 0 |
| ;; |
| n) |
| NODE=$OPTARG |
| ;; |
| c) |
| COOKIE=$OPTARG |
| ;; |
| l) |
| LHOST=$OPTARG |
| ;; |
| m) |
| LHOST=$(hostname -f) |
| ;; |
| v) |
| VERBOSE=0 |
| ;; |
| t) |
| TLSCONF=$OPTARG |
| if [ ! -f "$TLSCONF" ]; then |
| echo "ERROR: Couldn't find the file \"$TLSCONF\"." >&2 |
| exit 1 |
| fi |
| ;; |
| \?) |
| 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 -r ' |
| s/-setcookie[ ]*['\''].*['\'']// |
| s/-setcookie[ ]*["].*["]// |
| s/-setcookie[ ]*[^ ]*// |
| s/-name[ ]*[^ ]*// |
| ') |
| |
| if [ -z "${COOKIE}" ]; then |
| echo "No Erlang cookie could be found, please specify with -c" >&2 |
| exit 1 |
| fi |
| |
| if [ -z "$TLSCONF" ]; then |
| exec env ERL_FLAGS="$ERL_FLAGS_CLEAN" "$BINDIR/erl" -boot "$ROOTDIR/releases/$APP_VSN/start_clean" \ |
| -name remsh$$@$LHOST -remsh $NODE -hidden -setcookie "$COOKIE" \ |
| "$@" |
| else |
| exec env ERL_FLAGS="$ERL_FLAGS_CLEAN" "$BINDIR/erl" -boot "$ROOTDIR/releases/$APP_VSN/start_clean" \ |
| -name remsh$$@$LHOST -remsh $NODE -hidden -setcookie "$COOKIE" \ |
| -proto_dist inet_tls -ssl_dist_optfile $TLSCONF \ |
| "$@" |
| fi |