From nobody Wed Jan 11 22:11:34 2023 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NshjM3Fmrz2sKTs; Wed, 11 Jan 2023 22:11:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4NshjM28fvz3sPD; Wed, 11 Jan 2023 22:11:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1673475095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CSF+ipzj4h27gKw24imwTB00VQ4kjwCU5QetV4rSbFE=; b=ZENxPyk2uUosNL4jgH3u8Bl0N8hrOcUd45PIeI3DfRF3clxaFUniwicHx+QdFjwDi+9GaE Y8L8z6e/PA4L7hY01BEQHDBUZZd8kRUW34HCrrIBEk9x6zk+0f9Rr2RkZH0IJ4A4QY7WJr /UhIHO3rx8IfqFv3FSHI2EPCuWyCitZs70+d2g95FvOcnWYgaXDiZpZtlqyu/4UepTlksF 2psiTOlV/ymWGL20+4MVrdERuo/s69IjH5xQfJYYoaKYmtIxL82W36FEsAO6TRPjRLnfns gsfFHujcVnTn6aty/C0BOlf9OeDUL8k0OY+L4tK73AO65bNDn6VnNIce3QdSmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1673475095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CSF+ipzj4h27gKw24imwTB00VQ4kjwCU5QetV4rSbFE=; b=ad71vrmZT87k3fvPJVtUZxZCeBBoqqp4oQFDDpbwxN7VsZlOvonhHu21AleCCg1lSvh7IY Wh+5gsvZ1YQ5NanQUFMppGnUbxs4XK2cplh4hzsT+npRc+cWlvm3BripgKIdG+T3ZbgdeJ 5PPV5pP1+SGPijQw/OTgAe1h8lMzTciSA8AUxrWo/nRWpzyd2EtqBbAqdMo6/Sp4saxyDA XKmRi9IqyssNQ98Og9xcMMpcI3YlK4ZsPm6bbUXgRzjMjcN1tbryBvTWxyc4GqG1/ex0ls AscSq3AlIyhRY1fhYFWS6B8aUST4dBSf/vHeCf/CkaQ7wsdR4wd6+zZrmApZDg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1673475095; a=rsa-sha256; cv=none; b=R0SkzY1j3a1uK1ezKF4zC7pYCks2cMmNRnjjTHsaST9KIGHpdoQ9/gjepXh5583keKERxs RF4rwRTuOrpB2jaRCOpiOnVeVzMvooRp3M0dHLlFgRQu7xlFJcLD/6AK8It5pGHVyQ4Udb rrukD9jayRhPq5ZYIucjmXNaV22ygkrvOcMM5gekDUt4lhbdrT4uEhxahyZ8LHE4A8sTQ8 /ULmGx3q7Fb5HimXpbzdu8IK5lTU4MQjAEgG6OlXiywcnrock0kRiAb6bYJZUY7woCwyr2 A/+ljUMvIzeVwctCvQlO6TnP8AG1MFisNGG+PX2pTpzEluelZcBlukm+6Umpyw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4NshjM0X8Xz13yM; Wed, 11 Jan 2023 22:11:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30BMBYUY087452; Wed, 11 Jan 2023 22:11:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30BMBYkr087451; Wed, 11 Jan 2023 22:11:34 GMT (envelope-from git) Date: Wed, 11 Jan 2023 22:11:34 GMT Message-Id: <202301112211.30BMBYkr087451@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Dave Cottlehuber Subject: git: 9bf4ac146671 - main - net/lavinmq: new port AMQP-compliant message broker List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dch X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9bf4ac14667186f43abbe71ced1ed8e3df6c87c6 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dch: URL: https://cgit.FreeBSD.org/ports/commit/?id=9bf4ac14667186f43abbe71ced1ed8e3df6c87c6 commit 9bf4ac14667186f43abbe71ced1ed8e3df6c87c6 Author: Dave Cottlehuber AuthorDate: 2023-01-11 22:01:21 +0000 Commit: Dave Cottlehuber CommitDate: 2023-01-11 22:09:36 +0000 net/lavinmq: new port AMQP-compliant message broker High performance AMQP-0.9.1 compatible, written in Crystal. Differential Revision: https://reviews.freebsd.org/D31410 --- GIDs | 2 +- UIDs | 2 +- net/Makefile | 1 + net/lavinmq/Makefile | 88 ++++++++++++++++++++++++++++ net/lavinmq/distinfo | 17 ++++++ net/lavinmq/files/lavinmq.in | 94 ++++++++++++++++++++++++++++++ net/lavinmq/files/patch-src_lavinmqperf.cr | 11 ++++ net/lavinmq/pkg-descr | 16 +++++ net/lavinmq/pkg-plist | 10 ++++ 9 files changed, 239 insertions(+), 2 deletions(-) diff --git a/GIDs b/GIDs index 4b9e29f03df0..08e2ed3767a4 100644 --- a/GIDs +++ b/GIDs @@ -255,7 +255,7 @@ _arti:*:311: _sphinx:*:312: _fastdfs:*:313: promscale:*:314: -# free: 315 +lavinmq:*:315: # free: 316 # free: 317 # free: 318 diff --git a/UIDs b/UIDs index 411248604fa9..7a7aee1f9492 100644 --- a/UIDs +++ b/UIDs @@ -260,7 +260,7 @@ _arti:*:311:311::0:0:Arti Daemon:/nonexistent:/usr/sbin/nologin _sphinx:*:312:312::0:0:Sphinxsearch Owner:/nonexistent:/usr/sbin/nologin _fastdfs:*:313:313::0:0:FastDFS Owner:/nonexistent:/usr/sbin/nologin promscale:*:314:314::0:0:Promscale:/nonexistent:/usr/sbin/nologin -# free: 315 +lavinmq:*:315:315::0:0:LavinMQ user:/nonexistent:/usr/sbin/nologin # free: 316 # free: 317 # free: 318 diff --git a/net/Makefile b/net/Makefile index 392ac26afc8b..bacf08db86c3 100644 --- a/net/Makefile +++ b/net/Makefile @@ -346,6 +346,7 @@ SUBDIR += lambdamoo SUBDIR += landrop SUBDIR += latd + SUBDIR += lavinmq SUBDIR += ldap-stats SUBDIR += ldapbrowser SUBDIR += ldapdiff diff --git a/net/lavinmq/Makefile b/net/lavinmq/Makefile new file mode 100644 index 000000000000..5c1a67ad9e35 --- /dev/null +++ b/net/lavinmq/Makefile @@ -0,0 +1,88 @@ +PORTNAME= lavinmq +DISTVERSIONPREFIX= v +DISTVERSION= 1.0.0-beta.8 +CATEGORIES= net + +PATCH_SITES= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/ +# PATCHFILES+= 3a73c414b749.patch:-p1 # https://github.com/cloudamqp/lavinmq/pull/273 + +MAINTAINER= dch@FreeBSD.org +COMMENT= Next-generation AMQP 0.9.1 based message broker + +LICENSE= APACHE20 + +BUILD_DEPENDS= crystal:lang/crystal \ + help2man:misc/help2man \ + shards:devel/shards + +USES= pkgconfig ssl:build +USE_GITHUB= yes +GH_ACCOUNT= cloudamqp +GH_TUPLE= \ + 84codes:http-protection:893a191d55e301e0df96d6dd0f7d72c527bddeb8:a/deps/http-protection \ + 84codes:systemd.cr:v2.0.0:systemd/deps/systemd.cr \ + cloudamqp:amq-protocol.cr:v1.1.2:proto/deps/amq-protocol.cr \ + cloudamqp:amqp-client.cr:v1.0.9:client/deps/amqp-client.cr \ + luislavena:radix:v0.4.1:radix/deps/radix \ + schovi:baked_file_system:v0.10.0:baked/deps/baked_file_system \ + tbrand:router.cr:v0.2.8:router/deps/router.cr + +USE_RC_SUBR= lavinmq + +USERS= lavinmq +GROUPS= lavinmq + +PORTDOCS= CHANGELOG.md NOTICE README.md SECURITY.md + +OPTIONS_DEFINE= DOCS + +SHARDS_ENV= --time --verbose --production --release --no-color --stats --static + +post-extract: + # force shards to use local paths, not git repos, for dependencies + @${RM} ${WRKSRC}/shard.lock + @${REINPLACE_CMD} -E \ + -e 's,github: .*/,path: deps/,' \ + -e '/branch:/d' \ + -e '/version: .>1/d' \ + ${WRKSRC}/shard.yml ${WRKSRC}/deps/*/shard.yml + # switch config example into hier(5) compliance + @${REINPLACE_CMD} -E \ + -e 's,/etc/,${PREFIX}/etc/,' \ + -e 's,/lib/,/db/,' \ + -e 's,/tmp/lavinmq-http.sock,/var/run/lavinmq/http.sock,' \ + -e 's,/tmp/lavinmq.sock,/var/run/lavinmq/amqp.sock,' \ + ${WRKSRC}/extras/config.ini + +do-build: + ${MKDIR} ${WRKDIR}/man1 + (cd ${WRKSRC} && ${LOCALBASE}/bin/shards lock ${SHARDS_ENV} \ + && ${LOCALBASE}/bin/shards build ${SHARDS_ENV}) + help2man -Nn "fast and advanced message queue server" \ + ${WRKSRC}/bin/lavinmq -o ${WRKDIR}/man1/lavinmq.1 + help2man -Nn "control utility for lavinmq server" \ + ${WRKSRC}/bin/lavinmqctl -o ${WRKDIR}/man1/lavinmqctl.1 + help2man -Nn "performance testing tool for amqp servers" \ + ${WRKSRC}/bin/lavinmqperf -o ${WRKDIR}/man1/lavinmqperf.1 + +do-install: + ${MKDIR} ${STAGEDIR}${ETCDIR} \ + ${STAGEDIR}/var/db/lavinmq \ + ${STAGEDIR}/var/log/lavinmq \ + ${STAGEDIR}${MAN1PREFIX}/man/man1 + ${INSTALL_DATA} ${WRKSRC}/extras/config.ini \ + ${STAGEDIR}${ETCDIR}/config.ini.sample +.for f in lavinmq lavinmqctl lavinmqperf + ${INSTALL_PROGRAM} ${WRKSRC}/bin/${f} \ + ${STAGEDIR}${PREFIX}/bin + ${INSTALL_MAN} ${WRKDIR}/man1/${f}.1 ${STAGEDIR}${MAN1PREFIX}/man/man1/ +.endfor + +do-install-DOCS-on: + ${MKDIR} ${STAGEDIR}${DOCSDIR} +.for f in ${PORTDOCS} + ${INSTALL_DATA} ${WRKSRC}/${f} \ + ${STAGEDIR}${DOCSDIR} +.endfor + +.include diff --git a/net/lavinmq/distinfo b/net/lavinmq/distinfo new file mode 100644 index 000000000000..8ffa20a7e6a0 --- /dev/null +++ b/net/lavinmq/distinfo @@ -0,0 +1,17 @@ +TIMESTAMP = 1672656176 +SHA256 (cloudamqp-lavinmq-v1.0.0-beta.8_GH0.tar.gz) = e0c7a90bc0b240f2dcf118a9c922c4b0ee604f19dfb2ed0b7137cb73af8abe3b +SIZE (cloudamqp-lavinmq-v1.0.0-beta.8_GH0.tar.gz) = 707858 +SHA256 (84codes-http-protection-893a191d55e301e0df96d6dd0f7d72c527bddeb8_GH0.tar.gz) = eba9fed6dff8ed2b1322ca57b5bdd1e6d4afe49367ca84f38cd0cd7c062dab93 +SIZE (84codes-http-protection-893a191d55e301e0df96d6dd0f7d72c527bddeb8_GH0.tar.gz) = 10307 +SHA256 (84codes-systemd.cr-v2.0.0_GH0.tar.gz) = 4dd0c6f838542f97338866aef36de7b464c06112c4434e4db48aa65586b68ef3 +SIZE (84codes-systemd.cr-v2.0.0_GH0.tar.gz) = 4339 +SHA256 (cloudamqp-amq-protocol.cr-v1.1.2_GH0.tar.gz) = 23c1f3bd2c611a4249fc4a5438db2d68d647dfef900138675aabdc0e4a122ca5 +SIZE (cloudamqp-amq-protocol.cr-v1.1.2_GH0.tar.gz) = 15611 +SHA256 (cloudamqp-amqp-client.cr-v1.0.9_GH0.tar.gz) = 9c7cbcd390b353ac9e138d669ec251236341c0f8ccf18b190f37b46f16a5c0d8 +SIZE (cloudamqp-amqp-client.cr-v1.0.9_GH0.tar.gz) = 19647 +SHA256 (luislavena-radix-v0.4.1_GH0.tar.gz) = 5f207eb769101d94726eb476eb5f9b4603482c7941396ab4c85866722b7497b1 +SIZE (luislavena-radix-v0.4.1_GH0.tar.gz) = 13847 +SHA256 (schovi-baked_file_system-v0.10.0_GH0.tar.gz) = ea63c25b5327817bb494edb3e74950a42a4a50efc25e8035292f15f1e3039a50 +SIZE (schovi-baked_file_system-v0.10.0_GH0.tar.gz) = 56007 +SHA256 (tbrand-router.cr-v0.2.8_GH0.tar.gz) = a64540dbd57bc2feba50a432b37d3647f4ab72ee16058746623f3f024b5f3f25 +SIZE (tbrand-router.cr-v0.2.8_GH0.tar.gz) = 5132 diff --git a/net/lavinmq/files/lavinmq.in b/net/lavinmq/files/lavinmq.in new file mode 100644 index 000000000000..352f00d8e1be --- /dev/null +++ b/net/lavinmq/files/lavinmq.in @@ -0,0 +1,94 @@ +#!/bin/sh + +# PROVIDE: lavinmq +# REQUIRE: DAEMON +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf.local or /etc/rc.conf +# to enable this service: +# +# lavinmq_enable (bool): Set it to YES to enable lavinmq. +# Default is "NO". +# lavinmq_user (user): Set user to run lavinmq. +# Default is "lavinmq". +# lavinmq_group (group): Set group to run lavinmq. +# Default is "lavinmq". +# lavinmq_config (file): Set lavinmq config file. +# Default is "%%ETCDIR%%/lavinmq.conf". +# lavinmq_syslog_output_enable (bool): Set to enable syslog output. +# Default is "NO". See daemon(8). +# lavinmq_syslog_output_priority (str): Set syslog priority if syslog enabled. +# Default is "info". See daemon(8). +# lavinmq_syslog_output_facility (str): Set syslog facility if syslog enabled. +# Default is "daemon". See daemon(8). + +. /etc/rc.subr + +name=lavinmq +rcvar=lavinmq_enable + +load_rc_config $name + +: ${lavinmq_enable:="NO"} +: ${lavinmq_dir:="/var/db/lavinmq"} +: ${lavinmq_run:="/var/run/lavinmq"} +: ${lavinmq_user:="lavinmq"} +: ${lavinmq_group:="lavinmq"} +: ${lavinmq_config:="%%ETCDIR%%/config.ini"} + +DAEMON=$(/usr/sbin/daemon 2>&1 | grep -q syslog ; echo $?) +if [ ${DAEMON} -eq 0 ]; then + : ${lavinmq_syslog_output_enable:="NO"} + : ${lavinmq_syslog_output_priority:="info"} + : ${lavinmq_syslog_output_facility:="daemon"} + if checkyesno lavinmq_syslog_output_enable; then + lavinmq_syslog_output_flags="-T ${name}" + + if [ -n "${lavinmq_syslog_output_priority}" ]; then + lavinmq_syslog_output_flags="${lavinmq_syslog_output_flags} -s ${lavinmq_syslog_output_priority}" + fi + + if [ -n "${lavinmq_syslog_output_facility}" ]; then + lavinmq_syslog_output_flags="${lavinmq_syslog_output_flags} -l ${lavinmq_syslog_output_facility}" + fi + fi +else + lavinmq_syslog_output_enable="NO" + lavinmq_syslog_output_flags="" +fi + +pidfile=/var/run/lavinmq/daemon.pid +procname="%%PREFIX%%/bin/lavinmq" +command="/usr/sbin/daemon" +command_args="-f -t ${name} ${lavinmq_syslog_output_flags} -p ${pidfile} /usr/bin/env ${lavinmq_env} ${procname} --config=${lavinmq_config}" + +extra_commands="reload monitor" +monitor_cmd=lavinmq_monitor +start_precmd=lavinmq_startprecmd +required_files="$lavinmq_config" + +lavinmq_monitor() +{ + sig_reload=USR1 + run_rc_command "reload" +} + +lavinmq_startprecmd() +{ + if [ ! -d ${lavinmq_run} ]; then + install -d -o ${lavinmq_user} -g ${lavinmq_group} ${lavinmq_run} + fi + + if [ ! -d ${lavinmq_dir} ]; then + install -d -o ${lavinmq_user} -g ${lavinmq_group} ${lavinmq_dir} + fi + + if [ ! -e ${pidfile} ]; then + install -o ${lavinmq_user} -g ${lavinmq_group} /dev/null ${pidfile}; + fi + + # remove stray sockets that can block startup + rm -rf ${lavinmq_run}/*.sock /tmp/lavinmq +} + +run_rc_command "$1" diff --git a/net/lavinmq/files/patch-src_lavinmqperf.cr b/net/lavinmq/files/patch-src_lavinmqperf.cr new file mode 100644 index 000000000000..6ee6f520610e --- /dev/null +++ b/net/lavinmq/files/patch-src_lavinmqperf.cr @@ -0,0 +1,11 @@ +--- src/lavinmqperf.cr.orig 2023-01-02 14:26:00 UTC ++++ src/lavinmqperf.cr +@@ -482,7 +482,7 @@ class ConnectionCount < Perf + + private def client : AMQP::Client + client = @client ||= AMQP::Client.new(@uri) +- client.host = "127.0.#{Random.rand(UInt8)}.#{Random.rand(UInt8)}" if @random_localhost ++ # client.host = "127.0.#{Random.rand(UInt8)}.#{Random.rand(UInt8)}" if @random_localhost + client + end + diff --git a/net/lavinmq/pkg-descr b/net/lavinmq/pkg-descr new file mode 100644 index 000000000000..1f89ac1f604f --- /dev/null +++ b/net/lavinmq/pkg-descr @@ -0,0 +1,16 @@ +LavinMQ is a message queue server, also called a message broker, compatible +with the AMQP0.9 spec, where messages are published by a sending service called +a producer, via the broker, to then be consumed by the receiving service called +a consumer. When not handling messages, the queue can route, buffer, and +persist the messages according to rules set up by the user. + +Messages can be sent across languages, platforms, and OS, which decouple +processes and creates a highly scalable system. lavinmq, as queue management +software, gives an organized, safe place for messages to wait until another +application or part of the system can come along and consume them for +processing. + +lavinmq is written in Crystal, a statically compiled LLVM-based +language with a ruby-like syntax. + +WWW: https://www.lavinmq.com/ diff --git a/net/lavinmq/pkg-plist b/net/lavinmq/pkg-plist new file mode 100644 index 000000000000..79d59f50cd3b --- /dev/null +++ b/net/lavinmq/pkg-plist @@ -0,0 +1,10 @@ +@dir(lavinmq,lavinmq,750) %%ETCDIR%% +@dir(lavinmq,lavinmq,750) /var/db/lavinmq +@dir(lavinmq,lavinmq,750) /var/log/lavinmq +@sample %%ETCDIR%%/config.ini.sample +bin/lavinmq +bin/lavinmqctl +bin/lavinmqperf +man/man1/lavinmq.1.gz +man/man1/lavinmqctl.1.gz +man/man1/lavinmqperf.1.gz