mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-20 16:15:59 +01:00
Support ERL_DIST_PORT option to work without epmd
Please note: - Erlang/OTP 23.1 or higher is required to use ERL_DIST_PORT - "make relive" doesn't support ERL_DIST_PORT, neither rebar3 nor elixir - "make install" doesn't work with Elixir since at least ejabberd 21.07 Reference: https://www.erlang.org/blog/otp-23-highlights/ https://blog.erlware.org/epmdlessless/
This commit is contained in:
parent
4664358176
commit
30f1e28468
@ -47,10 +47,28 @@
|
|||||||
#INET_DIST_INTERFACE=127.0.0.1
|
#INET_DIST_INTERFACE=127.0.0.1
|
||||||
|
|
||||||
#.
|
#.
|
||||||
#' ERL_EPMD_ADDRESS: IP addresses where epmd listens for connections
|
#' ERL_DIST_PORT: Port number for Erlang distribution
|
||||||
|
#
|
||||||
|
# For Erlang distribution, clustering and ejabberdctl usage, the
|
||||||
|
# Erlang VM listens in a random TCP port number, and the Erlang Port
|
||||||
|
# Mapper Daemon (EPMD) is spawned and used to determine this port
|
||||||
|
# number.
|
||||||
|
#
|
||||||
|
# ERL_DIST_PORT can define this port number. In that case, EPMD is
|
||||||
|
# not spawned during ejabberd startup, and ERL_EPMD_ADDRESS is
|
||||||
|
# ignored. ERL_DIST_PORT must be set to the same port number during
|
||||||
|
# ejabberd startup and when calling ejabberdctl. This feature
|
||||||
|
# requires at least Erlang/OTP 23.1.
|
||||||
|
#
|
||||||
|
# Default: not defined
|
||||||
|
#
|
||||||
|
#ERL_DIST_PORT=5210
|
||||||
|
|
||||||
|
#.
|
||||||
|
#' ERL_EPMD_ADDRESS: IP addresses where EPMD listens for connections
|
||||||
#
|
#
|
||||||
# This environment variable may be set to a comma-separated
|
# This environment variable may be set to a comma-separated
|
||||||
# list of IP addresses, in which case the epmd daemon
|
# list of IP addresses, in which case the EPMD daemon
|
||||||
# will listen only on the specified address(es) and on the
|
# will listen only on the specified address(es) and on the
|
||||||
# loopback address (which is implicitly added to the list if it
|
# loopback address (which is implicitly added to the list if it
|
||||||
# has not been specified). The default behaviour is to listen on
|
# has not been specified). The default behaviour is to listen on
|
||||||
|
@ -81,6 +81,7 @@ if [ -n "$INET_DIST_INTERFACE" ] ; then
|
|||||||
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
|
ERLANG_OPTS="$ERLANG_OPTS -kernel inet_dist_use_interface $INET_DIST_INTERFACE2"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -erl_epmd_port $ERL_DIST_PORT -start_epmd false"
|
||||||
# if vm.args file exists in config directory, pass it to Erlang VM
|
# if vm.args file exists in config directory, pass it to Erlang VM
|
||||||
[ -f "$VMARGS" ] && ERLANG_OPTS="$ERLANG_OPTS -args_file $VMARGS"
|
[ -f "$VMARGS" ] && ERLANG_OPTS="$ERLANG_OPTS -args_file $VMARGS"
|
||||||
ERL_LIBS='{{libdir}}'
|
ERL_LIBS='{{libdir}}'
|
||||||
@ -102,6 +103,7 @@ export EJABBERD_LOG_PATH
|
|||||||
export EJABBERD_PID_PATH
|
export EJABBERD_PID_PATH
|
||||||
export ERL_CRASH_DUMP
|
export ERL_CRASH_DUMP
|
||||||
export ERL_EPMD_ADDRESS
|
export ERL_EPMD_ADDRESS
|
||||||
|
export ERL_DIST_PORT
|
||||||
export ERL_INETRC
|
export ERL_INETRC
|
||||||
export ERL_MAX_PORTS
|
export ERL_MAX_PORTS
|
||||||
export ERL_MAX_ETS_TABLES
|
export ERL_MAX_ETS_TABLES
|
||||||
@ -110,6 +112,11 @@ export CONTRIB_MODULES_CONF_DIR
|
|||||||
export ERL_LIBS
|
export ERL_LIBS
|
||||||
export SCRIPT_DIR
|
export SCRIPT_DIR
|
||||||
|
|
||||||
|
set_dist_client()
|
||||||
|
{
|
||||||
|
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -dist_listen false"
|
||||||
|
}
|
||||||
|
|
||||||
# run command either directly or via su $INSTALLUSER
|
# run command either directly or via su $INSTALLUSER
|
||||||
exec_cmd()
|
exec_cmd()
|
||||||
{
|
{
|
||||||
@ -220,6 +227,7 @@ uid()
|
|||||||
# stop epmd if there is no other running node
|
# stop epmd if there is no other running node
|
||||||
stop_epmd()
|
stop_epmd()
|
||||||
{
|
{
|
||||||
|
[ -n "$ERL_DIST_PORT" ] && return
|
||||||
"$EPMD" -names 2>/dev/null | grep -q name || "$EPMD" -kill >/dev/null
|
"$EPMD" -names 2>/dev/null | grep -q name || "$EPMD" -kill >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +235,7 @@ stop_epmd()
|
|||||||
# if all ok, ensure runtime directory exists and make it current directory
|
# if all ok, ensure runtime directory exists and make it current directory
|
||||||
check_start()
|
check_start()
|
||||||
{
|
{
|
||||||
|
[ -n "$ERL_DIST_PORT" ] && return
|
||||||
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
|
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
|
||||||
pgrep -f "$ERLANG_NODE" >/dev/null && {
|
pgrep -f "$ERLANG_NODE" >/dev/null && {
|
||||||
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
|
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
|
||||||
@ -291,14 +300,17 @@ case $1 in
|
|||||||
;;
|
;;
|
||||||
debug)
|
debug)
|
||||||
debugwarning
|
debugwarning
|
||||||
|
set_dist_client
|
||||||
exec_erl "$(uid debug)" -hidden -remsh "$ERLANG_NODE"
|
exec_erl "$(uid debug)" -hidden -remsh "$ERLANG_NODE"
|
||||||
;;
|
;;
|
||||||
etop)
|
etop)
|
||||||
|
set_dist_client
|
||||||
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
|
exec_erl "$(uid top)" -hidden -node "$ERLANG_NODE" -s etop \
|
||||||
-s erlang halt -output text
|
-s erlang halt -output text
|
||||||
;;
|
;;
|
||||||
iexdebug)
|
iexdebug)
|
||||||
debugwarning
|
debugwarning
|
||||||
|
set_dist_client
|
||||||
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
|
exec_iex "$(uid debug)" --remsh "$ERLANG_NODE"
|
||||||
;;
|
;;
|
||||||
iexlive)
|
iexlive)
|
||||||
@ -308,17 +320,21 @@ case $1 in
|
|||||||
ping)
|
ping)
|
||||||
PEER=${2:-$ERLANG_NODE}
|
PEER=${2:-$ERLANG_NODE}
|
||||||
[ "$PEER" = "${PEER%.*}" ] && PS="-s"
|
[ "$PEER" = "${PEER%.*}" ] && PS="-s"
|
||||||
|
set_dist_client
|
||||||
exec_cmd "$ERL" ${PS:--}name "$(uid ping "$(hostname $PS)")" $ERLANG_OPTS \
|
exec_cmd "$ERL" ${PS:--}name "$(uid ping "$(hostname $PS)")" $ERLANG_OPTS \
|
||||||
-noinput -hidden -eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
-noinput -hidden -eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
||||||
-s erlang halt -output text
|
-s erlang halt -output text
|
||||||
;;
|
;;
|
||||||
started)
|
started)
|
||||||
|
set_dist_client
|
||||||
wait_status 0 30 2 # wait 30x2s before timeout
|
wait_status 0 30 2 # wait 30x2s before timeout
|
||||||
;;
|
;;
|
||||||
stopped)
|
stopped)
|
||||||
|
set_dist_client
|
||||||
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
|
wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
set_dist_client
|
||||||
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
exec_erl "$(uid ctl)" -hidden -noinput -s ejabberd_ctl \
|
||||||
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
|
-extra "$ERLANG_NODE" $NO_TIMEOUT "$@"
|
||||||
result=$?
|
result=$?
|
||||||
|
Loading…
Reference in New Issue
Block a user