Index: head/net/rabbitmq/Makefile =================================================================== --- head/net/rabbitmq/Makefile (revision 378218) +++ head/net/rabbitmq/Makefile (revision 378219) @@ -1,78 +1,79 @@ # Created by: Phillip Neumann # $FreeBSD$ PORTNAME= rabbitmq PORTVERSION= 3.4.3 +PORTREVISION= 1 CATEGORIES= net MASTER_SITES= http://www.rabbitmq.com/releases/rabbitmq-server/v${PORTVERSION}/ DISTNAME= ${PORTNAME}-server-${PORTVERSION} MAINTAINER= olgeni@FreeBSD.org COMMENT= RabbitMQ is an implementation of AMQP LICENSE= MPL BUILD_DEPENDS= erl:${PORTSDIR}/lang/erlang \ ${PYTHON_PKGNAMEPREFIX}simplejson>=2.0:${PORTSDIR}/devel/py-simplejson \ xmlto:${PORTSDIR}/textproc/xmlto \ unzip:${PORTSDIR}/archivers/unzip \ zip:${PORTSDIR}/archivers/zip RUN_DEPENDS= erl:${PORTSDIR}/lang/erlang OPTIONS_DEFINE= ADMIN OPTIONS_SUB= yes ADMIN_DESC= Install rabbitmqadmin script USES= gmake python:build shebangfix USE_RC_SUBR= rabbitmq SHEBANG_FILES= calculate-relative plugins-src/rabbitmq-amqp1.0/codegen.py python_OLD_CMD= .*python python_CMD= ${PYTHON_CMD} USERS= rabbitmq GROUPS= rabbitmq PLIST_SUB= VERSION=${PORTVERSION} SCRIPTS_DIR= ${WRKSRC}/scripts/ MAKE_ARGS+= PYTHON=${PYTHON_CMD} MAKE_ENV+= TARGET_DIR="${STAGEDIR}${PREFIX}/lib/erlang/lib/rabbitmq_server-${PORTVERSION}" \ SBIN_DIR="${STAGEDIR}${PREFIX}/sbin/" \ MAN_DIR="${STAGEDIR}${PREFIX}/man" \ DOC_INSTALL_DIR="${STAGEDIR}${EXAMPLESDIR}" MAKE_JOBS_UNSAFE= yes .include .if ${PORT_OPTIONS:MADMIN} USES+= python:run .endif post-patch: @${REINPLACE_CMD} -e 's|/etc/rabbitmq|${PREFIX}/etc/rabbitmq|g ; s|/var/lib|/var/db|g ; s|$${ERL_DIR}erl|${PREFIX}/bin/erl|g' \ ${SCRIPTS_DIR}/rabbitmq-server ${SCRIPTS_DIR}/rabbitmqctl \ ${SCRIPTS_DIR}/rabbitmq-env ${SCRIPTS_DIR}/rabbitmq-plugins \ ${SCRIPTS_DIR}/rabbitmq-defaults \ ${WRKSRC}/docs/rabbitmq-env.conf.5.xml @${REINPLACE_CMD} -e 's|VERSION=0.0.0|VERSION=${PORTVERSION}|g' \ ${WRKSRC}/plugins-src/rabbitmq-erlang-client/Makefile \ ${WRKSRC}/plugins-src/release.mk @${REINPLACE_CMD} -e 's|VERSION:=0.0.0|VERSION:=${PORTVERSION}|g' \ ${WRKSRC}/plugins-src/Makefile @${REINPLACE_CMD} -e 's|VERSION?=0.0.0|VERSION?=${PORTVERSION}|g' \ ${WRKSRC}/Makefile @${FIND} ${WRKSRC} -name "*.bak" -delete post-install: @${MKDIR} ${STAGEDIR}${PREFIX}/etc/rabbitmq @${MKDIR} ${STAGEDIR}/var/db/rabbitmq/mnesia @${MKDIR} ${STAGEDIR}/var/log/rabbitmq ${INSTALL_DATA} ${WRKSRC}/docs/rabbitmq.config.example \ ${STAGEDIR}${PREFIX}/etc/rabbitmq/rabbitmq.config.sample .if ${PORT_OPTIONS:MADMIN} ${INSTALL} ${WRKSRC}/plugins-src/rabbitmq-management/bin/rabbitmqadmin ${STAGEDIR}${PREFIX}/bin .endif .include Index: head/net/rabbitmq/files/rabbitmq.in =================================================================== --- head/net/rabbitmq/files/rabbitmq.in (revision 378218) +++ head/net/rabbitmq/files/rabbitmq.in (revision 378219) @@ -1,55 +1,80 @@ #!/bin/sh # # $FreeBSD$ # # PROVIDE: rabbitmq # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown # # Add the following line to /etc/rc.conf to enable RabbitMQ # # rabbitmq_enable="YES" . /etc/rc.subr name=rabbitmq rcvar=rabbitmq_enable load_rc_config $name # Set some defaults : ${rabbitmq_enable="NO"} : ${rabbitmq_user="rabbitmq"} rabbitmq_server="%%PREFIX%%/sbin/rabbitmq-server" rabbitmq_ctl="%%PREFIX%%/sbin/rabbitmqctl" -pidfile="/var/run/rabbitmq.pid" +pidfile="/var/run/${name}.pid" start_cmd="${name}_start" -stop_cmd="env HOME=/var/db/rabbitmq su -m ${rabbitmq_user} -c 'sh -c \"${rabbitmq_ctl} stop\"'" -stop_postcmd="wait_for_pids $rc_pid" -rotate_logs_cmd="env HOME=/var/db/rabbitmq su -m ${rabbitmq_user} -c 'sh -c \"${rabbitmq_ctl} rotate_logs\"'" -status_cmd="env HOME=/var/db/rabbitmq su -m ${rabbitmq_user} -c 'sh -c \"${rabbitmq_ctl} status\"'" -extra_commands="rotate_logs status wait" -wait_cmd=rabbitmq_wait +stop_cmd="${name}_stop" +rotate_logs_cmd="su -m ${rabbitmq_user} -c 'sh -c \"${rabbitmq_ctl} rotate_logs\"'" +status_cmd="su -m ${rabbitmq_user} -c 'sh -c \"${rabbitmq_ctl} status\"'" +extra_commands="rotate_logs status" +export HOME=/var/db/${name} + +# Prevent conflicts with amqp_client and rabbit_common applications that +# may be installed in ERL_LIBS. +unset ERL_LIBS + rabbitmq_start() { - export HOME=/var/db/rabbitmq - unset ERL_LIBS - su -m ${rabbitmq_user} \ - -c "sh -c \"${rabbitmq_server} -detached\"" -# Grab pid (it appears that parsing the output of -# status is the most reliable method) - su -m ${rabbitmq_user} \ - -c "sh -c \"${rabbitmq_ctl} status\"" \ - | sed -n 's/[^p]*pid,\([0-9]*\)[^0-9]*/\1/p' > ${pidfile} + echo "Starting ${name}." + + if [ -f ${HOME}/.erlang.cookie ]; then + chown ${rabbitmq_user}:${rabbitmq_user} ${HOME}/.erlang.cookie + fi + + daemon -c -f -u ${rabbitmq_user} -p ${pidfile} ${rabbitmq_server} + + local _attempt=10 + + while [ ${_attempt} -gt 0 ]; do + debug "Running: rabbitmqctl status (${_attempt})" + $rabbitmq_ctl status > /dev/null 2>&1 && break + _attempt=$((${_attempt} - 1)) + sleep 1 + done + + if [ ${_attempt} -gt 0 ]; then + debug "Running: rabbitmqctl wait ${pidfile}" + $rabbitmq_ctl wait ${pidfile} >/dev/null 2>&1 + fi } -rabbitmq_wait() +rabbitmq_stop() { - $rabbitmq_ctl wait ${pidfile} + echo "Stopping ${name}." + + debug "Running: ${rabbitmq_ctl} stop" + + su -m ${rabbitmq_user} -c "sh -c \"${rabbitmq_ctl} stop\"" >/dev/null 2>&1 + + if [ -f ${pidfile} ]; then + read rc_pid < ${pidfile} + wait_for_pids $rc_pid + fi } run_rc_command "$1"