diff --git a/bin/emqx b/bin/emqx index f921c4187..849045231 100755 --- a/bin/emqx +++ b/bin/emqx @@ -35,7 +35,7 @@ export ERTS_DIR="$RUNNER_ROOT_DIR/erts-$ERTS_VSN" export BINDIR="$ERTS_DIR/bin" export EMU="beam" export PROGNAME="erl" -export ERTS_LIB_DIR="$ERTS_DIR/../lib" +export ERTS_LIB_DIR="$RUNNER_ROOT_DIR/lib" DYNLIBS_DIR="$RUNNER_ROOT_DIR/dynlibs" # Echo to stderr on errors @@ -272,9 +272,8 @@ if [ "$ES" -ne 0 ]; then exit $ES fi -# EPMD_ARG="-start_epmd true $PROTO_DIST_ARG" NO_EPMD="-start_epmd false -epmd_module ekka_epmd -proto_dist ekka" -EPMD_ARG="${EPMD_ARG:-${NO_EPMD}}" +EPMD_ARGS="${EPMD_ARGS:-${NO_EPMD}}" # Warn the user if ulimit -n is less than 1024 ULIMIT_F=$(ulimit -n) @@ -312,26 +311,27 @@ relx_rem_sh() { # Get the node's ticktime so that we use the same thing. TICKTIME="$(relx_nodetool rpcterms net_kernel get_net_ticktime)" - # shellcheck disable=SC2086 # $EPMD_ARG is supposed to be split by whitespace + # shellcheck disable=SC2086 # Setup remote shell command to control node if [ "$IS_ELIXIR" = "yes" ] then - exec "$REL_DIR/iex" \ + set -- "$REL_DIR/iex" \ --remsh "$NAME" \ --boot-var RELEASE_LIB "$ERTS_LIB_DIR" \ --cookie "$COOKIE" \ --hidden \ --erl "-kernel net_ticktime $TICKTIME" \ - --erl "$EPMD_ARG" \ + --erl "$EPMD_ARGS" \ --erl "$NAME_TYPE $id" \ --boot "$REL_DIR/start_clean" else - exec "$BINDIR/erl" "$NAME_TYPE" "$id" \ + set -- "$BINDIR/erl" "$NAME_TYPE" "$id" \ -remsh "$NAME" -boot "$REL_DIR/start_clean" \ -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \ -setcookie "$COOKIE" -hidden -kernel net_ticktime "$TICKTIME" \ - $EPMD_ARG + $EPMD_ARGS fi + exec "$@" } # Generate a random id @@ -346,7 +346,7 @@ call_nodetool() { # Control a node relx_nodetool() { command="$1"; shift - ERL_FLAGS="${ERL_FLAGS:-} $EPMD_ARG" \ + ERL_FLAGS="${ERL_FLAGS:-} $EPMD_ARGS" \ call_nodetool "$NAME_TYPE" "$NAME" \ -setcookie "$COOKIE" "$command" "$@" } @@ -406,6 +406,7 @@ CONFIGS_DIR="$DATA_DIR/configs" mkdir -p "$CONFIGS_DIR" # Function to generate app.config and vm.args +# sets two environment variables CONF_FILE and ARGS_FILE generate_config() { local name_type="$1" local node_name="$2" @@ -424,16 +425,14 @@ generate_config() { call_hocon -v -t "$NOW_TIME" -s "$SCHEMA_MOD" -c "$EMQX_ETC_DIR"/emqx.conf -d "$DATA_DIR"/configs generate ## filenames are per-hocon convention - local CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config" - local HOCON_GEN_ARG_FILE="$CONFIGS_DIR/vm.$NOW_TIME.args" + CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config" + ARGS_FILE="$CONFIGS_DIR/vm.$NOW_TIME.args" # This is needed by the Elixir scripts. # Do NOT append `.config`. RELEASE_SYS_CONFIG="$CONFIGS_DIR/app.$NOW_TIME" export RELEASE_SYS_CONFIG - CONFIG_ARGS="-config $CONF_FILE -args_file $HOCON_GEN_ARG_FILE" - ## Merge hocon generated *.args into the vm.args TMP_ARG_FILE="$CONFIGS_DIR/vm.args.tmp" cp "$EMQX_ETC_DIR/vm.args" "$TMP_ARG_FILE" @@ -442,7 +441,7 @@ generate_config() { ## read lines from generated vm.