Package: release.debian.org Severity: normal Tags: trixie X-Debbugs-Cc: [email protected] Control: affects -1 + src:rabbitmq-server User: [email protected] Usertags: pu
Hi, [ Reason ] I'd like to upgrade rabbitmq-server to 4.0.5-6+deb13u1 to add the patch included in this BTS entry: https://bugs.debian.org/1110519 which fixes rabbitmq-server version reporting. [ Impact ] Without this patch, rabbitmqctl version reports 0.0.0, as well as for all plugins listed with "rabbitmq-plugins list". [ Tests ] Manually tested it worked. [ Risks ] No much risk, it does work now... [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in (old)stable [x] the issue is verified as fixed in unstable [ Changes ] The debdiff also contains new autopkgtest, which were added to Sid earlier. That's not really relevant, though I think it is a good thing to add to the Stable release. If you need only the diff to the change I need to add, it's there: https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=1110519;filename=0001-Fix-plugin-versions-by-exporting-PROJECT_VERSION.patch;msg=5 Please allow me to upload rabbitmq-server 4.0.5-6+deb13u1 to p-u. Cheers, Thomas Goirand (zigo)
diff -Nru rabbitmq-server-4.0.5/debian/changelog rabbitmq-server-4.0.5/debian/changelog --- rabbitmq-server-4.0.5/debian/changelog 2025-06-26 10:36:03.000000000 +0200 +++ rabbitmq-server-4.0.5/debian/changelog 2025-08-11 14:31:10.000000000 +0200 @@ -1,3 +1,14 @@ +rabbitmq-server (4.0.5-6+deb13u1) trixie; urgency=medium + + * Fix rabbitmq-server broken plugin versions by applying patch from the BTS. + Thanks to Stefan Bühler <[email protected]> for it + (Closes: #1110519). + + [ Andreas Hasenack ] + * Add many autopkgtest. + + -- Thomas Goirand <[email protected]> Mon, 11 Aug 2025 14:31:10 +0200 + rabbitmq-server (4.0.5-6) unstable; urgency=medium * Add elixir-1.18-compat.patch to fix json output of rabbitmctl diff -Nru rabbitmq-server-4.0.5/debian/rules rabbitmq-server-4.0.5/debian/rules --- rabbitmq-server-4.0.5/debian/rules 2025-06-26 10:36:03.000000000 +0200 +++ rabbitmq-server-4.0.5/debian/rules 2025-08-11 14:31:10.000000000 +0200 @@ -2,7 +2,7 @@ # -*- makefile -*- DEB_DESTDIR=debian/rabbitmq-server -VERSION = $(shell dpkg-parsechangelog -SVersion | sed -e 's/^[[:digit:]]*://' -e 's/[-].*//' -e 's/~/.0/' -e 's/+dfsg1//' | head -n 1) +export PROJECT_VERSION=$(shell dpkg-parsechangelog -SVersion | sed -e 's/^[[:digit:]]*://' -e 's/[-].*//' -e 's/~/.0/' -e 's/+dfsg1//' | head -n 1) export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 @@ -24,7 +24,7 @@ override_dh_auto_install: PREFIX = /usr override_dh_auto_install: RMQ_ROOTDIR = $(PREFIX)/lib/rabbitmq -override_dh_auto_install: RMQ_ERLAPP_DIR = $(RMQ_ROOTDIR)/lib/rabbitmq_server-$(VERSION) +override_dh_auto_install: RMQ_ERLAPP_DIR = $(RMQ_ROOTDIR)/lib/rabbitmq_server-$(PROJECT_VERSION) override_dh_auto_install: dh_auto_install #dh_auto_install -- DESTDIR=$(DEB_DESTDIR) PREFIX=/usr MAN_DIR=$(DEB_DESTDIR)/usr/share/man @@ -59,7 +59,7 @@ override_dh_install: dh_install - sed -i s/%%VSN%%/$(VERSION)/ $(CURDIR)/debian/rabbitmq-server/usr/bin/rabbitmqadmin + sed -i s/%%VSN%%/$(PROJECT_VERSION)/ $(CURDIR)/debian/rabbitmq-server/usr/bin/rabbitmqadmin override_dh_auto_clean: rm -f plugins-src/rabbitmq-server plugins/README diff -Nru rabbitmq-server-4.0.5/debian/salsa-ci.yml rabbitmq-server-4.0.5/debian/salsa-ci.yml --- rabbitmq-server-4.0.5/debian/salsa-ci.yml 1970-01-01 01:00:00.000000000 +0100 +++ rabbitmq-server-4.0.5/debian/salsa-ci.yml 2025-08-11 14:31:10.000000000 +0200 @@ -0,0 +1,3 @@ +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml diff -Nru rabbitmq-server-4.0.5/debian/tests/control rabbitmq-server-4.0.5/debian/tests/control --- rabbitmq-server-4.0.5/debian/tests/control 2025-06-26 10:36:03.000000000 +0200 +++ rabbitmq-server-4.0.5/debian/tests/control 2025-08-11 14:31:10.000000000 +0200 @@ -1,2 +1,22 @@ Tests: smoke-test Restrictions: superficial, isolation-container + +Tests: hello-world +Restrictions: isolation-container, needs-root, allow-stderr +Depends: rabbitmq-server, + python3-pika + +Tests: work-queue +Restrictions: isolation-container, needs-root, allow-stderr +Depends: rabbitmq-server, + python3-pika + +Tests: publish-subscribe +Restrictions: isolation-container, needs-root, allow-stderr +Depends: rabbitmq-server, + python3-pika + +Tests: rpc +Restrictions: isolation-container, needs-root, allow-stderr +Depends: rabbitmq-server, + python3-pika diff -Nru rabbitmq-server-4.0.5/debian/tests/hello-world rabbitmq-server-4.0.5/debian/tests/hello-world --- rabbitmq-server-4.0.5/debian/tests/hello-world 1970-01-01 01:00:00.000000000 +0100 +++ rabbitmq-server-4.0.5/debian/tests/hello-world 2025-08-11 14:31:10.000000000 +0200 @@ -0,0 +1,99 @@ +#!/bin/sh + +# Reset rabbitmq +rabbitmqctl stop_app +rabbitmqctl reset +rabbitmqctl start_app + +cat <<EOF >send.py +#!/usr/bin/env python3 +import pika + +connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) +channel = connection.channel() + +channel.queue_declare(queue='hello') + +channel.basic_publish(exchange='', + routing_key='hello', + body='Hello World!') +print(" [x] Sent 'Hello World!'") +EOF + +cat <<EOF >receive.py +#!/usr/bin/env python3 +import pika, sys, os + +def main(): + connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) + channel = connection.channel() + + channel.queue_declare(queue='hello') + + def callback(ch, method, properties, body): + print(f" [x] Received {body}") + + channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) + + print(' [*] Waiting for messages. To exit press CTRL+C') + channel.start_consuming() + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + print('Interrupted') + try: + sys.exit(0) + except SystemExit: + os._exit(0) +EOF + +echo "sending the message now" +python3 send.py + +# `rabbitmqctl list_queues` should look like +# Timeout: 60.0 seconds ... +# Listing queues for vhost / ... +# name messages +# hello 1 +# +# Check that the hello queue exists and that there is 1 message +rabbitmqctl list_queues # print for debugging +if rabbitmqctl list_queues | grep hello | awk '{print $2}' | grep -q "^1$"; then + echo "The 'hello' queue exists with a single message." +else + if [ $? -eq 1 ]; then + echo "Error: 'hello' queue not found." + exit 1 + else + echo "Error: An unknown error occurred." + exit 1 + fi +fi + +# should see +# [*] Waiting for messages. To exit press CTRL+C +# [x] Received b'Hello World!' +timeout 3s python3 receive.py + +# now the hello queue should still exist, but have no messages like so: +# # rabbitmqctl list_queues +# Timeout: 60.0 seconds ... +# Listing queues for vhost / ... +# name messages +# hello 0 +# +# Check that the hello queue exists and that there is no message +rabbitmqctl list_queues # print for debugging +if rabbitmqctl list_queues | grep hello | awk '{print $2}' | grep -q "^0$"; then + echo "The 'hello' queue exists with no messages." +else + if [ $? -eq 1 ]; then + echo "Error: 'hello' queue not found." + exit 1 + else + echo "Error: An unknown error occurred." + exit 1 + fi +fi diff -Nru rabbitmq-server-4.0.5/debian/tests/publish-subscribe rabbitmq-server-4.0.5/debian/tests/publish-subscribe --- rabbitmq-server-4.0.5/debian/tests/publish-subscribe 1970-01-01 01:00:00.000000000 +0100 +++ rabbitmq-server-4.0.5/debian/tests/publish-subscribe 2025-08-11 14:31:10.000000000 +0200 @@ -0,0 +1,52 @@ +#!/bin/sh + +set -e + +# Reset rabbitmq +rabbitmqctl stop_app +rabbitmqctl reset +rabbitmqctl start_app + +cat << EOF > receive_logs.py +#!/usr/bin/env python3 +import pika + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='logs', exchange_type='fanout') + +result = channel.queue_declare(queue='', exclusive=True) +queue_name = result.method.queue + +channel.queue_bind(exchange='logs', queue=queue_name) + +print(' [*] Waiting for logs. To exit press CTRL+C') + +def callback(ch, method, properties, body): + print(f" [x] {body}") + +channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True) + +channel.start_consuming() +EOF + +# create 2 consumers +python3 receive_logs.py & +python3 receive_logs.py & + +# the consumers are listed in the bindings. +# # rabbitmqctl list_bindings | grep logs +# logs exchange amq.gen-9cej1xIy-VQLf6d3UXvU1w queue amq.gen-9cej1xIy-VQLf6d3UXvU1w [] +# logs exchange amq.gen-H-ky4z3jFxa5UxpigJAD0g queue amq.gen-H-ky4z3jFxa5UxpigJAD0g [] +rabbitmqctl list_bindings # print for debug +# Check that JSON formatter works as well +rabbitmqctl list_bindings --formatter json +if [ $(rabbitmqctl list_bindings | grep "logs" | awk '{print $1}' | wc -l) -eq 2 ]; then + echo "The number of consumers is 2." +else + echo "The number of consumers is not 2." + exit 1 +fi diff -Nru rabbitmq-server-4.0.5/debian/tests/rpc rabbitmq-server-4.0.5/debian/tests/rpc --- rabbitmq-server-4.0.5/debian/tests/rpc 1970-01-01 01:00:00.000000000 +0100 +++ rabbitmq-server-4.0.5/debian/tests/rpc 2025-08-11 14:31:10.000000000 +0200 @@ -0,0 +1,119 @@ +#!/bin/sh + +# Reset rabbitmq +rabbitmqctl stop_app +rabbitmqctl reset +rabbitmqctl start_app + +cat << EOF > rpc_server.py +#!/usr/bin/env python +import pika + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) + +channel = connection.channel() + +channel.queue_declare(queue='rpc_queue') + +def fib(n): + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fib(n - 1) + fib(n - 2) + +def on_request(ch, method, props, body): + n = int(body) + + print(f" [.] fib({n})") + response = fib(n) + + ch.basic_publish(exchange='', + routing_key=props.reply_to, + properties=pika.BasicProperties(correlation_id = \ + props.correlation_id), + body=str(response)) + ch.basic_ack(delivery_tag=method.delivery_tag) + +channel.basic_qos(prefetch_count=1) +channel.basic_consume(queue='rpc_queue', on_message_callback=on_request) + +print(" [x] Awaiting RPC requests") +channel.start_consuming() +EOF + +cat << EOF > rpc_client.py +#!/usr/bin/env python3 +import pika +import uuid + + +class FibonacciRpcClient(object): + + def __init__(self): + self.connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) + + self.channel = self.connection.channel() + + result = self.channel.queue_declare(queue='', exclusive=True) + self.callback_queue = result.method.queue + + self.channel.basic_consume( + queue=self.callback_queue, + on_message_callback=self.on_response, + auto_ack=True) + + self.response = None + self.corr_id = None + + def on_response(self, ch, method, props, body): + if self.corr_id == props.correlation_id: + self.response = body + + def call(self, n): + self.response = None + self.corr_id = str(uuid.uuid4()) + self.channel.basic_publish( + exchange='', + routing_key='rpc_queue', + properties=pika.BasicProperties( + reply_to=self.callback_queue, + correlation_id=self.corr_id, + ), + body=str(n)) + while self.response is None: + self.connection.process_data_events(time_limit=None) + return int(self.response) + + +fibonacci_rpc = FibonacciRpcClient() + +print(" [x] Requesting fib(30)") +response = fibonacci_rpc.call(30) +print(f" [.] Got {response}") +EOF + +# Start the RPC server +python3 rpc_server.py & + +# Give the server some time to start +sleep 2 + +# Run a client to initiate a job for the fibonacci sequence +client_result=$(python3 rpc_client.py) + +# $client_results should look like: +# [x] Requesting fib(30) +# [.] fib(30) +# [.] Got 832040 + +echo $client_result +if echo $client_result | grep -q "Got 832040"; then + echo "client ran succesffuly" +else + echo "ERROR, something went wrong." + exit 1 +fi diff -Nru rabbitmq-server-4.0.5/debian/tests/smoke-test rabbitmq-server-4.0.5/debian/tests/smoke-test --- rabbitmq-server-4.0.5/debian/tests/smoke-test 2025-06-26 10:36:03.000000000 +0200 +++ rabbitmq-server-4.0.5/debian/tests/smoke-test 2025-08-11 14:31:10.000000000 +0200 @@ -1,7 +1,3 @@ #!/bin/sh -exec 2>&1 - -set -exu - systemctl is-active rabbitmq-server.service diff -Nru rabbitmq-server-4.0.5/debian/tests/work-queue rabbitmq-server-4.0.5/debian/tests/work-queue --- rabbitmq-server-4.0.5/debian/tests/work-queue 1970-01-01 01:00:00.000000000 +0100 +++ rabbitmq-server-4.0.5/debian/tests/work-queue 2025-08-11 14:31:10.000000000 +0200 @@ -0,0 +1,117 @@ +#!/bin/sh + +# Reset rabbitmq +rabbitmqctl stop_app +rabbitmqctl reset +rabbitmqctl start_app + +cat << EOF > new_task.py +#!/usr/bin/env python3 +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.queue_declare(queue='task_queue', durable=True) + +message = ' '.join(sys.argv[1:]) or "Hello World!" +channel.basic_publish( + exchange='', + routing_key='task_queue', + body=message, + properties=pika.BasicProperties(delivery_mode=2) # Set delivery mode to persistent (2) + ) +print(f" [x] Sent {message}") +connection.close() +EOF + +cat << EOF > worker.py +#!/usr/bin/env python3 +import pika +import time + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.queue_declare(queue='task_queue', durable=True) +print(' [*] Waiting for messages. To exit press CTRL+C') + + +def callback(ch, method, properties, body): + print(f" [x] Received {body.decode()}") + time.sleep(body.count(b'.')) + print(" [x] Done") + ch.basic_ack(delivery_tag=method.delivery_tag) + + +channel.basic_qos(prefetch_count=1) +channel.basic_consume(queue='task_queue', on_message_callback=callback) + +channel.start_consuming() +EOF + + +# Create 5 queues messages +python3 new_task.py First message. +python3 new_task.py Second message.. +python3 new_task.py Third message... +python3 new_task.py Fourth message.... +python3 new_task.py Fifth message..... + +# check the queued messages, we shoudl have 5 such as: +# # rabbitmqctl list_queues name messages_ready messages_unacknowledged +# Timeout: 60.0 seconds ... +# Listing queues for vhost / ... +# name messages_ready messages_unacknowledged +# hello 0 0 +# task_queue 5 0 +# +# Check that the task queue exists and that there is 5 messages +echo "Expected:" +echo "task_queue 5 0" +echo "Actual:" +tqueue=$(rabbitmqctl list_queues name messages_ready messages_unacknowledged | grep task_queue) +echo $tqueue +if echo $tqueue | awk '{print $2}' | grep -q "^5$"; then + echo "The 'task_queue' queue exists with 5 message." +else + echo "Error: error checking the task_queue" + exit 1 +fi + +# Now create 2 workers +python3 worker.py & +python3 worker.py & + +# let the workers do their job +sleep 13 + +# Now there should be no messages_ready and no messages_unacknowledged such as: +# # rabbitmqctl list_queues name messages_ready messages_unacknowledged +# Timeout: 60.0 seconds ... +# Listing queues for vhost / ... +# name messages_ready messages_unacknowledged +# hello 0 0 +# task_queue 0 0 +echo "Expected:" +echo "task_queue 0 0" +echo "Actual:" +tqueue=$(rabbitmqctl list_queues name messages_ready messages_unacknowledged | grep task_queue) +echo $tqueue +if echo $tqueue | grep task_queue | awk '{print $2}' | grep -q "^0"; then + echo "The 'task_queue' queue exists with 0 messages_ready." +else + echo "Error: checking the task_queue messages_ready" + exit 1 +fi + +if echo $tqueue | awk '{print $3}' | grep -q "^0"; then + echo "The 'task_queue' queue exists with 0 messages_unacknowledged." +else + echo "Error: checking the task_queue messages_unacknowledged" + exit 1 +fi +

