summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-11-03 19:13:55 +0100
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-11-03 19:13:55 +0100
commit1fb451090a2557f35a2800f9d04c476ff1ad6a22 (patch)
tree8161266fec3c260f9175eaf4ba339c2c4ddf1d63
parentd23b788326cb3bbe022962188654bc631e2176e5 (diff)
downloadrabbitmq-server-git-1fb451090a2557f35a2800f9d04c476ff1ad6a22.tar.gz
rabbitmq-env{,.bat}: Use Erlang to determine local hostname
This helps when Erlang and hostname(1) or %COMPUTERNAME% return different value. This happened on Travis CI and some Windows hosts so far.
-rw-r--r--scripts/rabbitmq-env16
-rw-r--r--scripts/rabbitmq-env.bat9
2 files changed, 20 insertions, 5 deletions
diff --git a/scripts/rabbitmq-env b/scripts/rabbitmq-env
index 0014643260..c46667097f 100644
--- a/scripts/rabbitmq-env
+++ b/scripts/rabbitmq-env
@@ -93,14 +93,22 @@ fi
[ "x" = "x$RABBITMQ_USE_LONGNAME" ] && RABBITMQ_USE_LONGNAME=${USE_LONGNAME}
if [ "xtrue" = "x$RABBITMQ_USE_LONGNAME" ] ; then
RABBITMQ_NAME_TYPE=-name
- [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname -f`
- [ "x" = "x$NODENAME" ] && NODENAME=rabbit@${HOSTNAME}
+ NAMETYPE=longnames
else
RABBITMQ_NAME_TYPE=-sname
- [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`
- [ "x" = "x$NODENAME" ] && NODENAME=rabbit@${HOSTNAME%%.*}
+ NAMETYPE=shortnames
fi
+# We use Erlang to query the local hostname because hostname(1) and
+# Erlang may return different results.
+[ "x" = "x$NODENAME" ] && NODENAME=rabbit@$( \
+ erl -A0 -noinput -boot start_clean -eval \
+ 'net_kernel:start([list_to_atom("rabbit-gethostname-" ++ os:getpid()), '$NAMETYPE']),
+ [_, H] = string:tokens(atom_to_list(node()), "@"),
+ io:format("~s~n", [H]),
+ halt().')
+unset NAMETYPE
+
##--- Set environment vars RABBITMQ_<var_name> to defaults if not set
rmq_normalize_path() {
diff --git a/scripts/rabbitmq-env.bat b/scripts/rabbitmq-env.bat
index 606cea1eb0..9edbb10674 100644
--- a/scripts/rabbitmq-env.bat
+++ b/scripts/rabbitmq-env.bat
@@ -55,12 +55,14 @@ REM Check for the short names here too
if "!RABBITMQ_USE_LONGNAME!"=="" (
if "!USE_LONGNAME!"=="" (
set RABBITMQ_NAME_TYPE="-sname"
+ set NAMETYPE=shortnames
)
)
if "!RABBITMQ_USE_LONGNAME!"=="true" (
if "!USE_LONGNAME!"=="true" (
set RABBITMQ_NAME_TYPE="-name"
+ set NAMETYPE=longnames
)
)
@@ -71,11 +73,16 @@ if "!COMPUTERNAME!"=="" (
REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME}
if "!RABBITMQ_NODENAME!"=="" (
if "!NODENAME!"=="" (
- set RABBITMQ_NODENAME=rabbit@!COMPUTERNAME!
+ REM We use Erlang to query the local hostname because
+ REM !COMPUTERNAME! and Erlang may return different results.
+ for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F
+ set RABBITMQ_NODENAME=rabbit@!HOSTNAME!
+ set HOSTNAME=
) else (
set RABBITMQ_NODENAME=!NODENAME!
)
)
+set NAMETYPE=
REM
REM ##--- Set environment vars RABBITMQ_<var_name> to defaults if not set