From 7a549d71efa9efa95dbda4b729f258bf911885eb Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Tue, 2 May 2023 10:01:17 +0200 Subject: [PATCH] chore: make it easier for IDE to connect 1. By default, start the node with regular EPMD, not ekka_epmd 2. Use user's Erlang cookie 3. Add a -r option to attach remsh --- bin/emqx | 6 +-- dev | 139 ++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 99 insertions(+), 46 deletions(-) diff --git a/bin/emqx b/bin/emqx index fc0124b96..6d4c5cd4e 100755 --- a/bin/emqx +++ b/bin/emqx @@ -396,7 +396,7 @@ relx_get_pid() { remsh() { # Generate a unique id used to allow multiple remsh to the same node # transparently - id="remsh$(relx_gen_id)-${NAME}" + id="remsh$(gen_node_id)-${NAME}" # shellcheck disable=SC2086 # Setup remote shell command to control node @@ -424,7 +424,7 @@ remsh() { } # Generate a random id -relx_gen_id() { +gen_node_id() { od -t u -N 4 /dev/urandom | head -n1 | awk '{print $2 % 1000}' } @@ -1273,7 +1273,7 @@ case "${COMMAND}" in then "$REL_DIR/elixir" \ --hidden \ - --name "rand-$(relx_gen_id)-$NAME" \ + --name "rand-$(gen_node_id)-$NAME" \ --cookie "$COOKIE" \ --boot "$REL_DIR/start_clean" \ --boot-var RELEASE_LIB "$ERTS_LIB_DIR" \ diff --git a/dev b/dev index 69706bf6d..39bdfbc41 100755 --- a/dev +++ b/dev @@ -2,22 +2,33 @@ set -euo pipefail +PROJ_ROOT="$(git rev-parse --show-toplevel)" +cd "$PROJ_ROOT" + usage() { cat <&2 - exit 1 + -e|--ekka-epmd) + EKKA_EPMD=1 ;; - :) - echo "Option -$OPTARG requires an argument." >&2 + *) + echo "Unknown argument $1" >&2 exit 1 ;; esac + shift 1; done -shift $((OPTIND-1)) case "${PROFILE}" in ce|emqx) @@ -77,15 +102,20 @@ case "${PROFILE}" in ;; esac -PROJ_ROOT="$(git rev-parse --show-toplevel)" -cd "$PROJ_ROOT" BASE_DIR="_build/dev-run/$PROFILE" export EMQX_ETC_DIR="$BASE_DIR/etc" export EMQX_DATA_DIR="$BASE_DIR/data" export EMQX_LOG_DIR="$BASE_DIR/log" CONFIGS_DIR="$EMQX_DATA_DIR/configs" -COOKIE='emqxsecretcookie' +# Use your cookie so your IDE can connect to it. +COOKIE="${EMQX_NODE__COOKIE:-${EMQX_NODE_COOKIE:-$(cat ~/.erlang.cookie || echo 'emqxsecretcookie')}}" mkdir -p "$EMQX_ETC_DIR" "$EMQX_DATA_DIR/patches" "$EMQX_LOG_DIR" "$CONFIGS_DIR" +if [ $EKKA_EPMD -eq 1 ]; then + EPMD_ARGS='-start_epmd false -epmd_module ekka_epmd' +else + EPMD_ARGS='' +fi + ## build compile the profile is it's not compiled yet prepare_erl_libs() { @@ -223,28 +253,51 @@ apps_to_load() { echo "$csl" } -## Make erl command aware where to load all the beams -## this should be done before every erl command -prepare_erl_libs "$PROFILE" -render_hocon_conf -generate_app_conf -append_args_file -copy_other_conf_files -APPS="$(apps_to_load)" +boot() { + ## Make erl command aware where to load all the beams + ## this should be done before every erl command + prepare_erl_libs "$PROFILE" + render_hocon_conf + generate_app_conf + append_args_file + copy_other_conf_files + APPS="$(apps_to_load)" -BOOT_SEQUENCE=" - Apps=[${APPS}], - ok=lists:foreach(fun application:load/1, Apps), - io:format(user, \"~nLoaded ~p apps~n\", [length(Apps)]), - application:ensure_all_started(emqx_machine). -" + BOOT_SEQUENCE=" + Apps=[${APPS}], + ok=lists:foreach(fun application:load/1, Apps), + io:format(user, \"~nLoaded ~p apps~n\", [length(Apps)]), + application:ensure_all_started(emqx_machine). + " -erl -name "$EMQX_NODE_NAME" \ - -start_epmd false \ - -epmd_module ekka_epmd \ - -proto_dist ekka \ - -args_file "$ARGS_FILE" \ - -config "$CONF_FILE" \ - -s emqx_restricted_shell set_prompt_func \ - -eval "$BOOT_SEQUENCE" + # shellcheck disable=SC2086 + erl -name "$EMQX_NODE_NAME" \ + $EPMD_ARGS \ + -proto_dist ekka \ + -args_file "$ARGS_FILE" \ + -config "$CONF_FILE" \ + -s emqx_restricted_shell set_prompt_func \ + -eval "$BOOT_SEQUENCE" +} + +# Generate a random id +gen_node_id() { + od -t u -N 4 /dev/urandom | head -n1 | awk '{print $2 % 1000}' +} + +remsh() { + id="remsh$(gen_node_id)-${EMQX_NODE_NAME}" + # shellcheck disable=SC2086 + erl -name "$id" \ + -setcookie "$COOKIE" \ + -hidden \ + -remsh "$EMQX_NODE_NAME" \ + $EPMD_ARGS +} + +if [ $REMSH -eq 0 ]; then + boot +else + remsh +fi