Accepting request 145498 from network:messaging:amqp

some init script and sysconfig cleanup, add OCF RA for use with pacemaker (forwarded request 145495 from rhafer)

OBS-URL: https://build.opensuse.org/request/show/145498
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rabbitmq-server?expand=0&rev=5
This commit is contained in:
Stephan Kulow 2012-12-17 08:37:19 +00:00 committed by Git OBS Bridge
commit 8ab0825159
8 changed files with 456 additions and 105 deletions

View File

@ -29,7 +29,9 @@ cd /var/lib/rabbitmq
SCRIPT=`basename $0`
if [ `id -u` = `id -u rabbitmq` -o "$SCRIPT" = "rabbitmq-plugins" ] ; then
if [ `id -u` = `id -u rabbitmq` -a "$SCRIPT" = "rabbitmq-server" ] ; then
/usr/lib/rabbitmq/bin/rabbitmq-server "$@" @STDOUT_STDERR_REDIRECTION@
elif [ `id -u` = `id -u rabbitmq` -o "$SCRIPT" = "rabbitmq-plugins" ] ; then
/usr/lib/rabbitmq/bin/${SCRIPT} "$@"
elif [ `id -u` = 0 ] ; then
@SU_RABBITMQ_SH_C@ "/usr/lib/rabbitmq/bin/${SCRIPT} ${CMDLINE}"

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f8fe9a5d9f9cb0e301f89e26a259aa57c8731e3210d7b8b364ebb5c29f5f6796
size 2643667

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0726e126896abbe30d9fd491d13eb16afa15327a548a3de9c3a31d41adcaccfc
size 2792978

View File

@ -1,3 +1,39 @@
-------------------------------------------------------------------
Fri Dec 14 13:11:56 UTC 2012 - rhafer@suse.com
- sysconfig file cleanup
* remove unused Variables
* removed variables which can also be set in rabbitmq-env.conf
to avoid sysconfig settings overriding settings from the env
file (bnc#771151)
- Use rc.status functions in init script for prettier startup
- Remove "set -e" from init script (bnc#768175)
- Include OCF RA for use with Pacemaker
- Updated script-wrapper to the latest upstream code
-------------------------------------------------------------------
Fri Dec 14 12:25:37 UTC 2012 - saschpe@suse.de
- Don't use download_files service, or at least only in mode="localonly"
or mode="disabled". But why using it at all, it makes no sense.
-------------------------------------------------------------------
Mon Dec 10 16:47:53 UTC 2012 - rhafer@suse.com
- Update to 2.8.7 changes since:
* 2.8.6: This release fixes a number of bugs in the broker,
Erlang client and STOMP and management plugins.
* 2.8.5: This release fixes a number of bugs, including one
introduced in 2.8.5 that could cause an error during shutdown
of mirrored queues.
* 2.8.4: This is primarily a bugfix release, with several
improvements to HA queues.
-------------------------------------------------------------------
Mon Jul 16 15:52:52 UTC 2012 - matwey.kornilov@gmail.com
- Updated to 2.8.4
-------------------------------------------------------------------
Wed May 09 07:27:17 UTC 2012 - matwey.kornilov@gmail.com

View File

@ -16,6 +16,11 @@
# Short-Description: Enable AMQP service provided by RabbitMQ broker
### END INIT INFO
# Source function library
. /etc/rc.status
rc_reset
PATH=/sbin:/usr/sbin:/bin:/usr/bin
NAME=rabbitmq-server
DAEMON=/usr/sbin/${NAME}
@ -43,24 +48,17 @@ fi
mkdir -p /var/run/rabbitmq
chown rabbitmq. /var/run/rabbitmq
RETVAL=0
set -e
start_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
echo RabbitMQ is currently running
if [ $? -eq 0 ] ; then
return 0
else
RETVAL=0
set +e
setsid sh -c "RABBITMQ_PID_FILE=$PID_FILE $DAEMON > \
${INIT_LOG_DIR}/startup_log 2> ${INIT_LOG_DIR}/startup_err" &
$CONTROL wait $PID_FILE >/dev/null 2>&1
RETVAL=$?
set -e
case "$RETVAL" in
rc=$?
case "$rc" in
0)
echo SUCCESS
if [ -n "$LOCK_FILE" ] ; then
touch $LOCK_FILE
fi
@ -68,20 +66,19 @@ start_rabbitmq () {
*)
rm -f $PID_FILE
echo FAILED - check ${INIT_LOG_DIR}/startup_\{log, _err\}
RETVAL=1
rc=1
;;
esac
fi
return $rc
}
stop_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
set +e
if [ $? -eq 0 ] ; then
$CONTROL stop > ${INIT_LOG_DIR}/shutdown_log 2> ${INIT_LOG_DIR}/shutdown_err
RETVAL=$?
set -e
if [ $RETVAL = 0 ] ; then
rc=$?
if [ $rc -eq 0 ] ; then
rm -f $PID_FILE
if [ -n "$LOCK_FILE" ] ; then
rm -f $LOCK_FILE
@ -90,80 +87,79 @@ stop_rabbitmq () {
echo FAILED - check ${INIT_LOG_DIR}/shutdown_log, _err
fi
else
echo RabbitMQ is not running
RETVAL=0
rc=0
fi
return $rc
}
status_rabbitmq() {
set +e
rc=0
if [ "$1" != "quiet" ] ; then
$CONTROL status 2>&1
else
$CONTROL status > /dev/null 2>&1
fi
if [ $? != 0 ] ; then
RETVAL=3
if [ $? -ne 0 ] ; then
rc=3
fi
set -e
return $rc
}
rotate_logs_rabbitmq() {
set +e
rc=0
$CONTROL rotate_logs ${ROTATE_SUFFIX}
if [ $? != 0 ] ; then
RETVAL=1
rc=1
fi
set -e
return $rc
}
restart_running_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
if [ $? -eq 0 ] ; then
restart_rabbitmq
else
echo RabbitMQ is not runnning
RETVAL=0
fi
}
restart_rabbitmq() {
stop_rabbitmq
start_rabbitmq
$0 stop
$0 start
}
case "$1" in
start)
echo -n "Starting $DESC: "
start_rabbitmq
echo "$NAME."
rc_status -v
;;
stop)
echo -n "Stopping $DESC: "
stop_rabbitmq
echo "$NAME."
rc_status -v
;;
status)
status_rabbitmq
rc_status # no verbose here -- status function already prints status out
;;
rotate-logs)
echo -n "Rotating log files for $DESC: "
rotate_logs_rabbitmq
rc_status
;;
force-reload|reload|restart)
echo -n "Restarting $DESC: "
restart_rabbitmq
echo "$NAME."
rc_status
;;
condrestart|try-restart)
echo -n "Restarting $DESC: "
restart_running_rabbitmq
echo "$NAME."
rc_status
;;
*)
echo "Usage: $0 {start|stop|status|rotate-logs|restart|condrestart|try-restart|reload|force-reload}" >&2
RETVAL=1
exit 1
;;
esac
exit $RETVAL
rc_exit

371
rabbitmq-server.ocf Normal file
View File

@ -0,0 +1,371 @@
#!/bin/sh
## The contents of this file are subject to the Mozilla Public License
## Version 1.1 (the "License"); you may not use this file except in
## compliance with the License. You may obtain a copy of the License
## at http://www.mozilla.org/MPL/
##
## Software distributed under the License is distributed on an "AS IS"
## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
## the License for the specific language governing rights and
## limitations under the License.
##
## The Original Code is RabbitMQ.
##
## The Initial Developer of the Original Code is VMware, Inc.
## Copyright (c) 2007-2012 VMware, Inc. All rights reserved.
##
##
## OCF Resource Agent compliant rabbitmq-server resource script.
##
## OCF instance parameters
## OCF_RESKEY_server
## OCF_RESKEY_ctl
## OCF_RESKEY_nodename
## OCF_RESKEY_ip
## OCF_RESKEY_port
## OCF_RESKEY_config_file
## OCF_RESKEY_log_base
## OCF_RESKEY_mnesia_base
## OCF_RESKEY_server_start_args
## OCF_RESKEY_pid_file
#######################################################################
# Initialization:
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat}
. ${OCF_FUNCTIONS_DIR}/.ocf-shellfuncs
#######################################################################
OCF_RESKEY_server_default="/usr/sbin/rabbitmq-server"
OCF_RESKEY_ctl_default="/usr/sbin/rabbitmqctl"
OCF_RESKEY_nodename_default="rabbit@localhost"
OCF_RESKEY_log_base_default="/var/log/rabbitmq"
OCF_RESKEY_pid_file_default="/var/run/rabbitmq/pid"
: ${OCF_RESKEY_server=${OCF_RESKEY_server_default}}
: ${OCF_RESKEY_ctl=${OCF_RESKEY_ctl_default}}
: ${OCF_RESKEY_nodename=${OCF_RESKEY_nodename_default}}
: ${OCF_RESKEY_log_base=${OCF_RESKEY_log_base_default}}
: ${OCF_RESKEY_pid_file=${OCF_RESKEY_pid_file_default}}
meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="rabbitmq-server">
<version>1.0</version>
<longdesc lang="en">
Resource agent for RabbitMQ-server
</longdesc>
<shortdesc lang="en">Resource agent for RabbitMQ-server</shortdesc>
<parameters>
<parameter name="server" unique="0" required="0">
<longdesc lang="en">
The path to the rabbitmq-server script
</longdesc>
<shortdesc lang="en">Path to rabbitmq-server</shortdesc>
<content type="string" default="${OCF_RESKEY_server_default}" />
</parameter>
<parameter name="ctl" unique="0" required="0">
<longdesc lang="en">
The path to the rabbitmqctl script
</longdesc>
<shortdesc lang="en">Path to rabbitmqctl</shortdesc>
<content type="string" default="${OCF_RESKEY_ctl_default}" />
</parameter>
<parameter name="nodename" unique="0" required="0">
<longdesc lang="en">
The node name for rabbitmq-server
</longdesc>
<shortdesc lang="en">Node name</shortdesc>
<content type="string" default="${OCF_RESKEY_nodename_default}" />
</parameter>
<parameter name="ip" unique="0" required="0">
<longdesc lang="en">
The IP address for rabbitmq-server to listen on
</longdesc>
<shortdesc lang="en">IP Address</shortdesc>
<content type="string" default="" />
</parameter>
<parameter name="port" unique="0" required="0">
<longdesc lang="en">
The IP Port for rabbitmq-server to listen on
</longdesc>
<shortdesc lang="en">IP Port</shortdesc>
<content type="integer" default="" />
</parameter>
<parameter name="config_file" unique="0" required="0">
<longdesc lang="en">
Location of the config file (without the .config suffix)
</longdesc>
<shortdesc lang="en">Config file path (without the .config suffix)</shortdesc>
<content type="string" default="" />
</parameter>
<parameter name="log_base" unique="0" required="0">
<longdesc lang="en">
Location of the directory under which logs will be created
</longdesc>
<shortdesc lang="en">Log base path</shortdesc>
<content type="string" default="${OCF_RESKEY_log_base_default}" />
</parameter>
<parameter name="mnesia_base" unique="0" required="0">
<longdesc lang="en">
Location of the directory under which mnesia will store data
</longdesc>
<shortdesc lang="en">Mnesia base path</shortdesc>
<content type="string" default="" />
</parameter>
<parameter name="server_start_args" unique="0" required="0">
<longdesc lang="en">
Additional arguments provided to the server on startup
</longdesc>
<shortdesc lang="en">Server start arguments</shortdesc>
<content type="string" default="" />
</parameter>
<parameter name="pid_file" unique="0" required="0">
<longdesc lang="en">
Location of the file in which the pid will be stored
</longdesc>
<shortdesc lang="en">Pid file path</shortdesc>
<content type="string" default="${OCF_RESKEY_pid_file_default}" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="600" />
<action name="stop" timeout="120" />
<action name="status" timeout="20" interval="10" />
<action name="monitor" timeout="20" interval="10" />
<action name="validate-all" timeout="30" />
<action name="meta-data" timeout="5" />
</actions>
</resource-agent>
END
}
rabbit_usage() {
cat <<END
usage: $0 {start|stop|status|monitor|validate-all|meta-data}
Expects to have a fully populated OCF RA-compliant environment set.
END
}
RABBITMQ_SERVER=$OCF_RESKEY_server
RABBITMQ_CTL=$OCF_RESKEY_ctl
RABBITMQ_NODENAME=$OCF_RESKEY_nodename
RABBITMQ_NODE_IP_ADDRESS=$OCF_RESKEY_ip
RABBITMQ_NODE_PORT=$OCF_RESKEY_port
RABBITMQ_CONFIG_FILE=$OCF_RESKEY_config_file
RABBITMQ_LOG_BASE=$OCF_RESKEY_log_base
RABBITMQ_MNESIA_BASE=$OCF_RESKEY_mnesia_base
RABBITMQ_SERVER_START_ARGS=$OCF_RESKEY_server_start_args
RABBITMQ_PID_FILE=$OCF_RESKEY_pid_file
[ ! -z $RABBITMQ_NODENAME ] && NODENAME_ARG="-n $RABBITMQ_NODENAME"
[ ! -z $RABBITMQ_NODENAME ] && export RABBITMQ_NODENAME
ensure_pid_dir () {
PID_DIR=`dirname ${RABBITMQ_PID_FILE}`
if [ ! -d ${PID_DIR} ] ; then
mkdir -p ${PID_DIR}
chown -R rabbitmq:rabbitmq ${PID_DIR}
chmod 755 ${PID_DIR}
fi
return $OCF_SUCCESS
}
remove_pid () {
rm -f ${RABBITMQ_PID_FILE}
rmdir `dirname ${RABBITMQ_PID_FILE}` || :
}
export_vars() {
[ ! -z $RABBITMQ_NODE_IP_ADDRESS ] && export RABBITMQ_NODE_IP_ADDRESS
[ ! -z $RABBITMQ_NODE_PORT ] && export RABBITMQ_NODE_PORT
[ ! -z $RABBITMQ_CONFIG_FILE ] && export RABBITMQ_CONFIG_FILE
[ ! -z $RABBITMQ_LOG_BASE ] && export RABBITMQ_LOG_BASE
[ ! -z $RABBITMQ_MNESIA_BASE ] && export RABBITMQ_MNESIA_BASE
[ ! -z $RABBITMQ_SERVER_START_ARGS ] && export RABBITMQ_SERVER_START_ARGS
[ ! -z $RABBITMQ_PID_FILE ] && ensure_pid_dir && export RABBITMQ_PID_FILE
}
rabbit_validate_partial() {
if [ ! -x $RABBITMQ_SERVER ]; then
ocf_log err "rabbitmq-server server $RABBITMQ_SERVER does not exist or is not executable";
exit $OCF_ERR_INSTALLED;
fi
if [ ! -x $RABBITMQ_CTL ]; then
ocf_log err "rabbitmq-server ctl $RABBITMQ_CTL does not exist or is not executable";
exit $OCF_ERR_INSTALLED;
fi
}
rabbit_validate_full() {
if [ ! -z $RABBITMQ_CONFIG_FILE ] && [ ! -e "${RABBITMQ_CONFIG_FILE}.config" ]; then
ocf_log err "rabbitmq-server config_file ${RABBITMQ_CONFIG_FILE}.config does not exist or is not a file";
exit $OCF_ERR_INSTALLED;
fi
if [ ! -z $RABBITMQ_LOG_BASE ] && [ ! -d $RABBITMQ_LOG_BASE ]; then
ocf_log err "rabbitmq-server log_base $RABBITMQ_LOG_BASE does not exist or is not a directory";
exit $OCF_ERR_INSTALLED;
fi
if [ ! -z $RABBITMQ_MNESIA_BASE ] && [ ! -d $RABBITMQ_MNESIA_BASE ]; then
ocf_log err "rabbitmq-server mnesia_base $RABBITMQ_MNESIA_BASE does not exist or is not a directory";
exit $OCF_ERR_INSTALLED;
fi
rabbit_validate_partial
return $OCF_SUCCESS
}
rabbit_status() {
rabbitmqctl_action "status"
}
rabbit_wait() {
rabbitmqctl_action "wait" $1
}
rabbitmqctl_action() {
local rc
local action
action=$@
$RABBITMQ_CTL $NODENAME_ARG $action > /dev/null 2> /dev/null
rc=$?
case "$rc" in
0)
ocf_log debug "RabbitMQ server is running normally"
return $OCF_SUCCESS
;;
2)
ocf_log debug "RabbitMQ server is not running"
return $OCF_NOT_RUNNING
;;
*)
ocf_log err "Unexpected return from rabbitmqctl $NODENAME_ARG $action: $rc"
exit $OCF_ERR_GENERIC
esac
}
rabbit_start() {
local rc
if rabbit_status; then
ocf_log info "Resource already running."
return $OCF_SUCCESS
fi
export_vars
setsid sh -c "$RABBITMQ_SERVER > ${RABBITMQ_LOG_BASE}/startup_log 2> ${RABBITMQ_LOG_BASE}/startup_err" &
# Wait for the server to come up.
# Let the CRM/LRM time us out if required
rabbit_wait $RABBITMQ_PID_FILE
rc=$?
if [ "$rc" != $OCF_SUCCESS ]; then
remove_pid
ocf_log info "rabbitmq-server start failed: $rc"
exit $OCF_ERR_GENERIC
fi
return $OCF_SUCCESS
}
rabbit_stop() {
local rc
if ! rabbit_status; then
ocf_log info "Resource not running."
return $OCF_SUCCESS
fi
$RABBITMQ_CTL stop
rc=$?
if [ "$rc" != 0 ]; then
ocf_log err "rabbitmq-server stop command failed: $RABBITMQ_CTL stop, $rc"
return $rc
fi
# Spin waiting for the server to shut down.
# Let the CRM/LRM time us out if required
stop_wait=1
while [ $stop_wait = 1 ]; do
rabbit_status
rc=$?
if [ "$rc" = $OCF_NOT_RUNNING ]; then
remove_pid
stop_wait=0
break
elif [ "$rc" != $OCF_SUCCESS ]; then
ocf_log info "rabbitmq-server stop failed: $rc"
exit $OCF_ERR_GENERIC
fi
sleep 1
done
return $OCF_SUCCESS
}
rabbit_monitor() {
rabbit_status
return $?
}
case $__OCF_ACTION in
meta-data)
meta_data
exit $OCF_SUCCESS
;;
usage|help)
rabbit_usage
exit $OCF_SUCCESS
;;
esac
if ocf_is_probe; then
rabbit_validate_partial
else
rabbit_validate_full
fi
case $__OCF_ACTION in
start)
rabbit_start
;;
stop)
rabbit_stop
;;
status|monitor)
rabbit_monitor
;;
validate-all)
exit $OCF_SUCCESS
;;
*)
rabbit_usage
exit $OCF_ERR_UNIMPLEMENTED
;;
esac
exit $?

View File

@ -24,7 +24,7 @@
%endif
Name: rabbitmq-server
Version: 2.8.2
Version: 2.8.7
Release: 0
Summary: The RabbitMQ Server
License: MPL-1.1
@ -32,8 +32,10 @@ Group: System/Daemons
Url: http://www.rabbitmq.com/
Source: http://www.rabbitmq.com/releases/rabbitmq-server/v%{version}/%{name}-%{version}.tar.gz
Source1: rabbitmq-server.init
# This comes from: http://hg.rabbitmq.com/rabbitmq-server/raw-file/2da625c0a436/packaging/common/rabbitmq-script-wrapper
Source2: rabbitmq-script-wrapper
Source3: rabbitmq-server.logrotate
Source4: rabbitmq-server.ocf
Source5: rabbitmq-server.sysconfig
Patch0: no-nmap.patch
Patch1: no-remove-common.patch
@ -112,12 +114,15 @@ install -p -D -m 644 %{SOURCE5} %{buildroot}%{_localstatedir}/adm/fillup-templat
# Install wrapper scripts
%define _rabbit_wrapper %{_builddir}/`basename %{SOURCE2}`
%define _rabbit_server_ocf %{_builddir}/`basename %{SOURCE4}`
cp %{SOURCE2} %{_rabbit_wrapper}
sed -i 's|@SU_RABBITMQ_SH_C@|su rabbitmq -s /bin/sh -c|' %{_rabbit_wrapper}
sed -i 's|/usr/lib/|%{_libdir}/|' %{_rabbit_wrapper}
cp %{SOURCE4} %{_rabbit_server_ocf}
install -p -D -m 0755 %{_rabbit_wrapper} %{buildroot}%{_sbindir}/rabbitmqctl
install -p -D -m 0755 %{_rabbit_wrapper} %{buildroot}%{_sbindir}/rabbitmq-server
install -p -D -m 0755 %{_rabbit_wrapper} %{buildroot}%{_sbindir}/rabbitmq-plugins
install -p -D -m 0755 %{_rabbit_server_ocf} %{buildroot}%{_exec_prefix}/lib/ocf/resource.d/rabbitmq/rabbitmq-server
# Copy all necessary lib files etc.
install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/logrotate.d/rabbitmq-server
@ -173,6 +178,9 @@ exit 0
%{_rabbit_erllibdir}
%{_initddir}/rabbitmq-server
%{_sbindir}/rcrabbitmq-server
%dir /usr/lib/ocf
%dir /usr/lib/ocf/resource.d
%dir /usr/lib/ocf/resource.d/rabbitmq
%config(noreplace) %{_sysconfdir}/logrotate.d/rabbitmq-server
%doc LICENSE* README
%dir %{_rabbit_erllibdir}/plugins

View File

@ -1,10 +1,3 @@
## Type: integer
## Default: 1
#
# Defines how many rabbitmq nodes to start
#
NODE_COUNT="1"
## Type: string
## Default: ""
#
@ -18,58 +11,3 @@ ROTATE_SUFFIX=""
# Defines the location of the log files
#
INIT_LOG_DIR="/var/log/rabbitmq"
## Type: string
## Default: "/var/lib/rabbitmq/mnesia"
#
# Set this to the directory where Mnesia database files should be placed.
#
RABBITMQ_MNESIA_BASE="/var/lib/rabbitmq/mnesia"
## Type: string
## Default: "/var/log/rabbitmq"
#
# Log files generated by the server will be placed in this directory.
#
RABBITMQ_LOG_BASE="/var/log/rabbitmq"
## Type: string
## Default: "rabbit"
#
# This can be useful if you want to run more than one node per machine -
# RABBITMQ_NODENAME should be unique per erlang-node-and-machine
# combination. See clustering on a single machine for more.
#
RABBITMQ_NODENAME="rabbit"
## Type: string
## Default: "0.0.0.0"
#
# This can be changed if you only want to bind to one network interface.
#
RABBITMQ_NODE_IP_ADDRESS="0.0.0.0"
## Type: integer
## Default: 5672
#
# This can be changed if you want to listen on a non-standard port.
#
RABBITMQ_NODE_PORT="5672"
## Type: string
## Default: "/etc/rabbitmq/rabbitmq_cluster.config"
#
# If this file is present it is used by the server to auto-configure a
# RabbitMQ cluster. See the clustering guide for details.
#
RABBITMQ_CLUSTER_CONFIG_FILE="/etc/rabbitmq/rabbitmq_cluster.config"
## Type: string
## Default: "/etc/rabbitmq/rabbitmq"
#
# If this file is present it is used by the server to configure RabbitMQ
# application components. Note that the .config extension is automatically
# appended by the Erlang runtime. See the section on the configuration file
# for details.
#
RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbitmq"