Packages
rabbit_common
3.7.11
4.2.1
4.2.0
retired
4.2.0-rc.1
retired
4.1.6
4.1.5
retired
4.1.5-rc.2
retired
4.1.5-rc.1
4.0.3
4.0.3-rc.1
4.0.2
4.0.2-rc.2
4.0.2-rc.1
4.0.1
4.0.0
4.0.0-rc.2
4.0.0-rc.1
3.13.7
3.13.6
3.13.5
3.13.4
3.13.3
3.13.2
3.13.2-rc.1
3.13.1
3.13.0
3.13.0-rc.6
3.13.0-rc.5
3.13.0-rc.4
3.13.0-rc.3
3.13.0-rc.2
3.13.0-rc.1
3.12.14
3.12.13
3.12.12
3.12.11
3.12.10
3.12.9
3.12.8
3.12.7
3.12.6
3.12.5
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.12.0-rc.4
3.12.0-rc.3
3.12.0-rc.2
3.12.0-rc.1
3.11.28
3.11.27
3.11.26
3.11.25
3.11.24
3.11.23
3.11.22
3.11.21
3.11.20
3.11.19
3.11.18
3.11.17
3.11.16
3.11.15
3.11.14
3.11.13
3.11.12
3.11.11
3.11.10
3.11.9
3.11.8
3.11.7
3.11.6
3.11.5
3.11.4
3.11.3
3.11.2
3.11.1
3.11.0
3.11.0-rc.2
3.11.0-rc.1
3.11.0-1
3.10.25
3.10.24
3.10.23
3.10.22
3.10.21
3.10.20
3.10.19
3.10.18
3.10.17
3.10.16
3.10.15
3.10.14
3.10.13
3.10.12
3.10.11
3.10.10
3.10.9
3.10.8
3.10.7
3.10.6
3.10.5
3.10.4
3.10.3
3.10.2
3.10.1
3.10.0
3.10.0-rc.6
3.10.0-rc.5
3.9.29
3.9.28
3.9.27
3.9.26
3.9.25
3.9.24
3.9.23
3.9.22
3.9.21
3.9.20
3.9.19
3.9.18
3.9.17
3.9.16
3.9.15
3.9.11
3.9.10
3.9.9
3.9.8
3.9.7
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.8.35
3.8.34
3.8.33
3.8.32
3.8.31
3.8.30
3.8.26
3.8.25
3.8.24
3.8.23
3.8.22
3.8.21
3.8.20
3.8.19
3.8.14
3.8.12-rc.3
3.8.12-rc.2
3.8.12-rc.1
3.8.11
3.8.10
3.8.10-rc.6
3.8.10-rc.5
3.8.10-rc.1
3.8.9
3.8.8
3.8.7
3.8.6
3.8.6-rc.2
3.8.6-rc.1
3.8.5
3.8.5-rc.2
3.8.5-rc.1
3.8.4
3.8.4-rc.3
3.8.4-rc.1
3.8.3
3.8.3-rc.2
3.8.3-rc.1
3.8.2
3.8.2-rc.1
3.8.1
3.8.1-rc.1
3.8.0
3.8.0-rc.3
3.8.0-rc.2
3.8.0-rc.1
3.7.28
3.7.27
3.7.27-rc.2
3.7.27-rc.1
3.7.26
3.7.25
3.7.25-rc.1
3.7.24
3.7.24-rc.2
3.7.24-rc.1
3.7.23
3.7.23-rc.1
3.7.22
3.7.22-rc.2
3.7.22-rc.1
3.7.21
3.7.20
3.7.20-rc.2
3.7.20-rc.1
3.7.19
3.7.18
3.7.18-rc.1
3.7.17
3.7.17-rc.3
3.7.17-rc.2
3.7.17-rc.1
retired
3.7.16
retired
3.7.16-rc.4
retired
3.7.16-rc.3
retired
3.7.16-rc.2
retired
3.7.16-rc.1
retired
3.7.16-beta.1
3.7.15
3.7.14
3.7.14-rc.2
3.7.14-rc.1
3.7.13
3.7.13-rc.2
3.7.13-rc.1
3.7.12
3.7.12-rc.2
3.7.12-rc.1
3.7.11
3.7.11-rc.2
3.7.11-rc.1
3.7.10-rc.4
3.7.10-rc.3
3.7.10-rc.2
3.7.10-rc.1
3.7.9
3.7.9-rc.3
3.7.9-rc.2
3.7.8
3.7.8-rc.4
3.7.8-rc.3
3.7.8-rc.2
3.7.8-rc.1
3.7.7
3.7.7-rc.2
3.7.7-rc.1
3.7.6
3.7.6-rc.2
3.7.6-rc.1
3.7.5
3.7.5-rc.1
3.7.4
3.7.4-rc.4
3.7.4-rc.3
3.7.4-rc.2
3.7.4-rc.1
3.7.3
3.7.3-rc.2
3.7.3-rc.1
3.7.2
3.7.1
3.7.0-rc.2
3.7.0-alpha.544
3.7.0-alpha.542
3.6.16
3.6.16-rc.1
3.6.15
3.6.15-rc.1
3.6.14
3.6.13
3.6.12
3.6.11
3.6.10
3.6.9
3.6.8
3.6.7
3.6.7-pre.1
3.5.6
3.5.0
3.4.0
3.3.5
3.0.2
0.0.0-rc.1
Modules shared by rabbitmq-server and rabbitmq-erlang-client
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
mk/rabbitmq-run.mk
.PHONY: run-broker run-background-broker run-node run-background-node \
start-background-node start-rabbit-on-node \
stop-rabbit-on-node set-resource-alarm clear-resource-alarm \
stop-node
ifeq ($(filter rabbitmq-dist.mk,$(notdir $(MAKEFILE_LIST))),)
include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-dist.mk
endif
exec_verbose_0 = @echo " EXEC " $@;
exec_verbose_2 = set -x;
exec_verbose = $(exec_verbose_$(V))
ifeq ($(PLATFORM),msys2)
TEST_TMPDIR ?= $(TEMP)/rabbitmq-test-instances
else
TMPDIR ?= /tmp
TEST_TMPDIR ?= $(TMPDIR)/rabbitmq-test-instances
endif
# Location of the scripts controlling the broker.
ifeq ($(PROJECT),rabbit)
RABBITMQ_BROKER_DIR ?= $(CURDIR)
else
RABBITMQ_BROKER_DIR ?= $(DEPS_DIR)/rabbit
endif
RABBITMQ_SCRIPTS_DIR ?= $(RABBITMQ_BROKER_DIR)/scripts
ifeq ($(PLATFORM),msys2)
RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins.bat
RABBITMQ_SERVER ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-server.bat
RABBITMQCTL ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmqctl.bat
else
RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins
RABBITMQ_SERVER ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-server
RABBITMQCTL ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmqctl
endif
export RABBITMQ_SCRIPTS_DIR RABBITMQCTL RABBITMQ_PLUGINS RABBITMQ_SERVER
# We export MAKE to be sure scripts and tests use the proper command.
export MAKE
# We need to pass the location of codegen to the Java client ant
# process.
CODEGEN_DIR = $(DEPS_DIR)/rabbitmq_codegen
PYTHONPATH = $(CODEGEN_DIR)
export PYTHONPATH
ANT ?= ant
ANT_FLAGS += -Dmake.bin=$(MAKE) \
-DUMBRELLA_AVAILABLE=true \
-Drabbitmqctl.bin=$(RABBITMQCTL) \
-Dsibling.codegen.dir=$(CODEGEN_DIR)
ifeq ($(PROJECT),rabbitmq_test)
ANT_FLAGS += -Dsibling.rabbitmq_test.dir=$(CURDIR)
else
ANT_FLAGS += -Dsibling.rabbitmq_test.dir=$(DEPS_DIR)/rabbitmq_test
endif
export ANT ANT_FLAGS
node_tmpdir = $(TEST_TMPDIR)/$(1)
node_pid_file = $(call node_tmpdir,$(1))/$(1).pid
node_log_base = $(call node_tmpdir,$(1))/log
node_mnesia_base = $(call node_tmpdir,$(1))/mnesia
node_mnesia_dir = $(call node_mnesia_base,$(1))/$(1)
node_schema_dir = $(call node_tmpdir,$(1))/schema
node_plugins_expand_dir = $(call node_tmpdir,$(1))/plugins
node_generated_config_dir = $(call node_tmpdir,$(1))/config
node_enabled_plugins_file = $(call node_tmpdir,$(1))/enabled_plugins
# Broker startup variables for the test environment.
RABBITMQ_NODENAME ?= rabbit
RABBITMQ_NODENAME_FOR_PATHS ?= $(RABBITMQ_NODENAME)
NODE_TMPDIR ?= $(call node_tmpdir,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_PID_FILE ?= $(call node_pid_file,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_LOG_BASE ?= $(call node_log_base,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_MNESIA_BASE ?= $(call node_mnesia_base,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_MNESIA_DIR ?= $(call node_mnesia_dir,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_SCHEMA_DIR ?= $(call node_schema_dir,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_PLUGINS_EXPAND_DIR ?= $(call node_plugins_expand_dir,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_GENERATED_CONFIG_DIR ?= $(call node_generated_config_dir,$(RABBITMQ_NODENAME_FOR_PATHS))
RABBITMQ_ENABLED_PLUGINS_FILE ?= $(call node_enabled_plugins_file,$(RABBITMQ_NODENAME_FOR_PATHS))
# erlang.mk adds dependencies' ebin directory to ERL_LIBS. This is
# a sane default, but we prefer to rely on the .ez archives in the
# `plugins` directory so the plugin code is executed. The `plugins`
# directory is added to ERL_LIBS by rabbitmq-env.
DIST_ERL_LIBS = $(shell echo "$(filter-out $(DEPS_DIR),$(subst :, ,$(ERL_LIBS)))" | tr ' ' :)
ifdef PLUGINS_FROM_DEPS_DIR
RMQ_PLUGINS_DIR=$(DEPS_DIR)
else
RMQ_PLUGINS_DIR=$(CURDIR)/$(DIST_DIR)
endif
define basic_script_env_settings
MAKE="$(MAKE)" \
ERL_LIBS="$(DIST_ERL_LIBS)" \
RABBITMQ_NODENAME="$(1)" \
RABBITMQ_NODE_IP_ADDRESS="$(RABBITMQ_NODE_IP_ADDRESS)" \
RABBITMQ_NODE_PORT="$(3)" \
RABBITMQ_PID_FILE="$(call node_pid_file,$(2))" \
RABBITMQ_LOG_BASE="$(call node_log_base,$(2))" \
RABBITMQ_MNESIA_BASE="$(call node_mnesia_base,$(2))" \
RABBITMQ_MNESIA_DIR="$(call node_mnesia_dir,$(2))" \
RABBITMQ_SCHEMA_DIR="$(call node_schema_dir,$(2))" \
RABBITMQ_GENERATED_CONFIG_DIR="$(call node_generated_config_dir,$(2))" \
RABBITMQ_PLUGINS_DIR="$(RMQ_PLUGINS_DIR)" \
RABBITMQ_PLUGINS_EXPAND_DIR="$(call node_plugins_expand_dir,$(2))" \
RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)"
endef
BASIC_SCRIPT_ENV_SETTINGS = \
$(call basic_script_env_settings,$(RABBITMQ_NODENAME),$(RABBITMQ_NODENAME_FOR_PATHS),$(RABBITMQ_NODE_PORT)) \
RABBITMQ_ENABLED_PLUGINS_FILE="$(RABBITMQ_ENABLED_PLUGINS_FILE)"
ERL_CALL := $(shell $(ERL) -eval 'io:format("~s~n", [filename:join(code:lib_dir(erl_interface, bin), case os:type() of {win32, _} -> "erl_call.exe"; _ -> "erl_call" end)]), halt().')
ERL_CALL_OPTS ?= -sname $(RABBITMQ_NODENAME) -e
test-tmpdir:
$(verbose) mkdir -p $(TEST_TMPDIR)
virgin-test-tmpdir:
$(gen_verbose) rm -rf $(TEST_TMPDIR)
$(verbose) mkdir -p $(TEST_TMPDIR)
node-tmpdir:
$(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \
$(RABBITMQ_MNESIA_BASE) \
$(RABBITMQ_SCHEMA_DIR) \
$(RABBITMQ_PLUGINS_EXPAND_DIR) \
$(RABBITMQ_GENERATED_CONFIG_DIR)
virgin-node-tmpdir:
$(gen_verbose) rm -rf $(NODE_TMPDIR)
$(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \
$(RABBITMQ_MNESIA_BASE) \
$(RABBITMQ_SCHEMA_DIR) \
$(RABBITMQ_PLUGINS_EXPAND_DIR) \
$(RABBITMQ_GENERATED_CONFIG_DIR)
.PHONY: test-tmpdir virgin-test-tmpdir node-tmpdir virgin-node-tmpdir
ifeq ($(wildcard ebin/test),)
$(RABBITMQ_ENABLED_PLUGINS_FILE): dist
endif
$(RABBITMQ_ENABLED_PLUGINS_FILE): node-tmpdir
$(verbose) rm -f $@
$(gen_verbose) $(BASIC_SCRIPT_ENV_SETTINGS) \
$(RABBITMQ_PLUGINS) enable --all --offline
# --------------------------------------------------------------------
# Run a full RabbitMQ.
# --------------------------------------------------------------------
COMMA = ,
define test_rabbitmq_config
%% vim:ft=erlang:
[
{rabbit, [
$(if $(RABBITMQ_NODE_PORT), {listeners$(COMMA) [$(RABBITMQ_NODE_PORT)]}$(COMMA),)
{loopback_users, []}
]},
{rabbitmq_management, [
$(if $(RABBITMQ_NODE_PORT), {listener$(COMMA) [{port$(COMMA) $(shell echo "$$(($(RABBITMQ_NODE_PORT) + 10000))")}]},)
]}
].
endef
define test_rabbitmq_config_with_tls
%% vim:ft=erlang:
[
{rabbit, [
{loopback_users, []},
{ssl_listeners, [5671]},
{ssl_options, [
{cacertfile, "$(TEST_TLS_CERTS_DIR_in_config)/testca/cacert.pem"},
{certfile, "$(TEST_TLS_CERTS_DIR_in_config)/server/cert.pem"},
{keyfile, "$(TEST_TLS_CERTS_DIR_in_config)/server/key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, false},
{honor_cipher_order, true}]}
]},
{rabbitmq_management, [
{listener, [
{port, 15671},
{ssl, true},
{ssl_opts, [
{cacertfile, "$(TEST_TLS_CERTS_DIR_in_config)/testca/cacert.pem"},
{certfile, "$(TEST_TLS_CERTS_DIR_in_config)/server/cert.pem"},
{keyfile, "$(TEST_TLS_CERTS_DIR_in_config)/server/key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, false},
{honor_cipher_order, true}]}
]}
]}
].
endef
TEST_CONFIG_FILE ?= $(TEST_TMPDIR)/test.config
TEST_TLS_CERTS_DIR = $(TEST_TMPDIR)/tls-certs
ifeq ($(PLATFORM),msys2)
TEST_TLS_CERTS_DIR_in_config = $(shell echo $(TEST_TLS_CERTS_DIR) | sed -E "s,^/([^/]+),\1:,")
else
TEST_TLS_CERTS_DIR_in_config = $(TEST_TLS_CERTS_DIR)
endif
.PHONY: $(TEST_CONFIG_FILE)
$(TEST_CONFIG_FILE): node-tmpdir
$(gen_verbose) printf "$(subst $(newline),\n,$(subst ",\",$(config)))" > $@
$(TEST_TLS_CERTS_DIR): node-tmpdir
$(gen_verbose) $(MAKE) -C $(DEPS_DIR)/rabbitmq_ct_helpers/tools/tls-certs \
DIR=$(TEST_TLS_CERTS_DIR) all
show-test-tls-certs-dir: $(TEST_TLS_CERTS_DIR)
@echo $(TEST_TLS_CERTS_DIR)
run-broker run-tls-broker: RABBITMQ_CONFIG_FILE = $(basename $(TEST_CONFIG_FILE))
run-broker: config := $(test_rabbitmq_config)
run-tls-broker: config := $(test_rabbitmq_config_with_tls)
run-tls-broker: $(TEST_TLS_CERTS_DIR)
run-broker run-tls-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) \
$(TEST_CONFIG_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_ALLOW_INPUT=true \
RABBITMQ_CONFIG_FILE=$(RABBITMQ_CONFIG_FILE) \
$(RABBITMQ_SERVER)
run-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
$(RABBITMQ_SERVER) -detached
# --------------------------------------------------------------------
# Run a bare Erlang node.
# --------------------------------------------------------------------
run-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_NODE_ONLY=true \
RABBITMQ_ALLOW_INPUT=true \
$(RABBITMQ_SERVER)
run-background-node: virgin-node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_NODE_ONLY=true \
$(RABBITMQ_SERVER) -detached
# --------------------------------------------------------------------
# Start RabbitMQ in the background.
# --------------------------------------------------------------------
ifneq ($(LOG_TO_STDIO),yes)
REDIRECT_STDIO = > $(RABBITMQ_LOG_BASE)/startup_log \
2> $(RABBITMQ_LOG_BASE)/startup_err
endif
start-background-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_NODE_ONLY=true \
$(RABBITMQ_SERVER) \
$(REDIRECT_STDIO) &
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_PID_FILE) kernel
start-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
$(RABBITMQ_SERVER) \
$(REDIRECT_STDIO) &
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_PID_FILE) && \
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) status >/dev/null
start-rabbit-on-node:
$(exec_verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) \
eval 'rabbit:start().' | \
sed -E -e '/^ completed with .* plugins\.$$/d' -e '/^ok$$/d'
$(verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_PID_FILE)
stop-rabbit-on-node:
$(exec_verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) \
eval 'rabbit:stop().' | \
sed -E -e '/^ok$$/d'
stop-node:
$(exec_verbose) ( \
pid=$$(test -f $(RABBITMQ_PID_FILE) && cat $(RABBITMQ_PID_FILE)) && \
$(ERL_CALL) $(ERL_CALL_OPTS) -q && \
while ps -p "$$pid" >/dev/null 2>&1; do sleep 1; done \
) || :
# " <-- To please Vim syntax hilighting.
# --------------------------------------------------------------------
# Start a RabbitMQ cluster in the background.
# --------------------------------------------------------------------
NODES ?= 2
start-brokers start-cluster:
@for n in $$(seq $(NODES)); do \
nodename="rabbit-$$n@$$(hostname -s)"; \
$(MAKE) start-background-broker \
RABBITMQ_NODENAME="$$nodename" \
RABBITMQ_NODE_PORT="$$((5672 + $$n - 1))" \
RABBITMQ_SERVER_START_ARGS=" \
-rabbit loopback_users [] \
-rabbitmq_management listener [{port,$$((15672 + $$n - 1))}] \
"; \
if test '$@' = 'start-cluster' && test "$$nodename1"; then \
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n "$$nodename" stop_app; \
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n "$$nodename" join_cluster "$$nodename1"; \
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n "$$nodename" start_app; \
else \
nodename1=$$nodename; \
fi; \
done
stop-brokers stop-cluster:
@for n in $$(seq $(NODES) -1 1); do \
nodename="rabbit-$$n@$$(hostname -s)"; \
$(MAKE) stop-node \
RABBITMQ_NODENAME="$$nodename"; \
done
# --------------------------------------------------------------------
# Used by testsuites.
# --------------------------------------------------------------------
set-resource-alarm:
$(exec_verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) \
eval 'rabbit_alarm:set_alarm({{resource_limit, $(SOURCE), node()}, []}).'
clear-resource-alarm:
$(exec_verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) \
eval 'rabbit_alarm:clear_alarm({resource_limit, $(SOURCE), node()}).'