diff --git a/rabbitmq-script-wrapper b/rabbitmq-script-wrapper index aa2a3ea..b6c6c1e 100644 --- a/rabbitmq-script-wrapper +++ b/rabbitmq-script-wrapper @@ -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}" diff --git a/rabbitmq-server.changes b/rabbitmq-server.changes index d661a5b..35b52e4 100644 --- a/rabbitmq-server.changes +++ b/rabbitmq-server.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +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 diff --git a/rabbitmq-server.init b/rabbitmq-server.init index 07f5b13..c2fcc96 100644 --- a/rabbitmq-server.init +++ b/rabbitmq-server.init @@ -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 diff --git a/rabbitmq-server.ocf b/rabbitmq-server.ocf new file mode 100644 index 0000000..48f3ad1 --- /dev/null +++ b/rabbitmq-server.ocf @@ -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 < + + +1.0 + + +Resource agent for RabbitMQ-server + + +Resource agent for RabbitMQ-server + + + + +The path to the rabbitmq-server script + +Path to rabbitmq-server + + + + + +The path to the rabbitmqctl script + +Path to rabbitmqctl + + + + + +The node name for rabbitmq-server + +Node name + + + + + +The IP address for rabbitmq-server to listen on + +IP Address + + + + + +The IP Port for rabbitmq-server to listen on + +IP Port + + + + + +Location of the config file (without the .config suffix) + +Config file path (without the .config suffix) + + + + + +Location of the directory under which logs will be created + +Log base path + + + + + +Location of the directory under which mnesia will store data + +Mnesia base path + + + + + +Additional arguments provided to the server on startup + +Server start arguments + + + + + +Location of the file in which the pid will be stored + +Pid file path + + + + + + + + + + + + + + +END +} + +rabbit_usage() { + cat < /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 $? diff --git a/rabbitmq-server.spec b/rabbitmq-server.spec index bcd4b99..f2f9e48 100644 --- a/rabbitmq-server.spec +++ b/rabbitmq-server.spec @@ -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 diff --git a/rabbitmq-server.sysconfig b/rabbitmq-server.sysconfig index 935717c..10549c4 100644 --- a/rabbitmq-server.sysconfig +++ b/rabbitmq-server.sysconfig @@ -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"