[PATCH] Add RabbitMQ package and service.

OpenSubmitted by Christopher Baines.
Details
2 participants
  • Christopher Baines
  • zimoun
Owner
unassigned
Severity
normal
C
C
Christopher Baines wrote on 20 May 2018 22:36
(address . guix-patches@gnu.org)
87fu2m3w03.fsf@cbaines.net
Tags: moreinfo

RabbitMQ is a message broker/queuing system service. I've managed to get
a package that builds, and a service which at least starts and seems to
work.

The package still needs more work, I haven't looked too closely at the
source and what might need stripping out.

As for the service, it's very minimal, and I don't have very much
experience with RabbitMQ. However, this is a start, so here are some
patches.


Christopher Baines (2):
gnu: Add rabbitmq.
services: Add RabbitMQ.

gnu/local.mk | 3 +
gnu/packages/rabbitmq.scm | 90 +++++++++++++++++++++++++++
gnu/services/message-broker.scm | 105 ++++++++++++++++++++++++++++++++
gnu/tests/message-broker.scm | 86 ++++++++++++++++++++++++++
4 files changed, 284 insertions(+)
create mode 100644 gnu/packages/rabbitmq.scm
create mode 100644 gnu/services/message-broker.scm
create mode 100644 gnu/tests/message-broker.scm
-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlsB3DxfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE
9XfwQw/+Omz18htxBm2dQ7uTuKhXoz/OUHUSXqt3LjfxCQgDBSIQ3fDKlMuJxVka
IAaJ7upx5z5ZW11IByHpST+hGm57LV4okiIdkcFTXR8Q+7NIsh2hOdVeimWqGf8i
q3yqPV0bEYjQmTdXrEMcM9uxEfzs+XVUEtWRvHStVpjIl9VrJO2HzIJKZos1/zvf
FbL72a8Z8Rv1cCkM73yw120oOFzoR3Glwbr787lc4R2W3USQANQtVdMeLz0lewuU
peEjM6aSvqay+96pUWJzoNnyXPPrTxdXjdP7nfHqPpFy97kRJtpCERMKMuTsfM73
aB/YLmjIwwBqdbd0gIpzhR8zpZaZtBK+KatfqEIApjLo+XzLaT/KCJrP8J8vWYue
VmeFv4Rhw2mnhpSf1sYUUDPYaQnzIGT5NeaS3nRaNTHLriF5k39EIvTCNhOY34+u
4Ny3PbgGNY13wy+RpGJW3lr/y5fqgBFGXK8fZQ1uVVFWfYJ3EmNb1sELjscCA3nk
KTojh6fEhEs7dsxidjS1KP8PiocJWnzqftVBnTTi5OU4H8Hvgg3+j0PgfI1jzELR
fNjtOdU70NFBwi2knFzxEMugPV0N4LzgmasfTxJ2t9DcErFBV1wsXMoVcalZw2Qs
4UnWOKuEqtrj7JDl7q28yY9JfZR2AC+DXq4jhI7fkihoQRw95AE=
=t6j1
-----END PGP SIGNATURE-----

C
C
Christopher Baines wrote on 20 May 2018 22:39
[PATCH 2/2] services: Add RabbitMQ.
(address . 31539@debbugs.gnu.org)
20180520203958.25330-2-mail@cbaines.net
* gnu/services/message-broker.scm: New file.
* gnu/services/message-broker.scm: New file.
* gnu/local.mk: Add entries for new files.
---
gnu/local.mk | 2 +
gnu/services/message-broker.scm | 105 ++++++++++++++++++++++++++++++++
gnu/tests/message-broker.scm | 86 ++++++++++++++++++++++++++
3 files changed, 193 insertions(+)
create mode 100644 gnu/services/message-broker.scm
create mode 100644 gnu/tests/message-broker.scm

Toggle diff (225 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 22aad6d7e..7f5bc19e9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -478,6 +478,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/virtualization.scm		\
   %D%/services/mail.scm				\
   %D%/services/mcron.scm			\
+  %D%/services/message-broker.scm			\
   %D%/services/messaging.scm			\
   %D%/services/monitoring.scm			\
   %D%/services/networking.scm			\
@@ -532,6 +533,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/tests/nfs.scm				\
   %D%/tests/install.scm				\
   %D%/tests/mail.scm				\
+  %D%/tests/message-broker.scm			\
   %D%/tests/messaging.scm			\
   %D%/tests/networking.scm			\
   %D%/tests/rsync.scm				\
diff --git a/gnu/services/message-broker.scm b/gnu/services/message-broker.scm
new file mode 100644
index 000000000..2685ee0fc
--- /dev/null
+++ b/gnu/services/message-broker.scm
@@ -0,0 +1,105 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services message-broker)
+  #:use-module (gnu services)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages rabbitmq)
+  #:use-module (guix modules)
+  #:use-module (guix records)
+  #:use-module (guix gexp)
+  #:use-module (ice-9 match)
+  #:export (<rabbitmq-configuration>
+            rabbitmq-configuration
+            rabbitmq-configuration?
+            rabbitmq-configuration-rabbitmq
+            rabbitmq-configuration-interfaces
+            rabbitmq-configuration-tcp-port
+            rabbitmq-configuration-udp-port
+            rabbitmq-configuration-additional-options
+
+            rabbitmq-service-type))
+
+
+;;;
+;;; RabbitMQ
+;;;
+
+(define-record-type* <rabbitmq-configuration>
+  rabbitmq-configuration make-rabbitmq-configuration
+  rabbitmq-configuration?
+  (rabbitmq          rabbitmq-configuration-rabbitmq ;<package>
+                      (default rabbitmq))
+  (interfaces         rabbitmq-configuration-interfaces
+                      (default '("0.0.0.0")))
+  (tcp-port           rabbitmq-configuration-tcp-port
+                      (default 11211))
+  (udp-port           rabbitmq-configuration-udp-port
+                      (default 11211))
+  (additional-options rabbitmq-configuration-additional-options
+                      (default '())))
+
+(define %rabbitmq-accounts
+  (list (user-group (name "rabbitmq") (system? #t))
+        (user-account
+         (name "rabbitmq")
+         (group "rabbitmq")
+         (system? #t)
+         (comment "Rabbitmq server user")
+         (home-directory "/var/empty")
+         (shell (file-append shadow "/sbin/nologin")))))
+
+(define rabbitmq-activation
+  #~(begin
+      (use-modules (guix build utils))
+      (let ((user (getpwnam "rabbitmq")))
+        (mkdir-p "/var/run/rabbitmq")
+        (chown "/var/run/rabbitmq"
+               (passwd:uid user) (passwd:gid user)))))
+
+(define rabbitmq-shepherd-service
+  (match-lambda
+    (($ <rabbitmq-configuration> rabbitmq interfaces tcp-port udp-port
+                                  additional-options)
+     (with-imported-modules (source-module-closure
+                             '((gnu build shepherd)))
+       (list (shepherd-service
+              (provision '(rabbitmq))
+              (documentation "Run the Rabbitmq daemon.")
+              (requirement '(user-processes loopback))
+              (modules '((gnu build shepherd)))
+              (start #~(make-forkexec-constructor
+                        `(#$(file-append rabbitmq "/sbin/rabbitmq-server"))
+                        #:pid-file "/var/run/rabbitmq/pid"
+                        #:environment-variables
+                        `("RABBITMQ_PID_FILE=/var/run/rabbitmq/pid"
+                          ,@(environ))))
+              (stop #~(make-kill-destructor))))))))
+
+(define rabbitmq-service-type
+  (service-type (name 'rabbitmq)
+                (extensions
+                 (list (service-extension shepherd-root-service-type
+                                          rabbitmq-shepherd-service)
+                       (service-extension activation-service-type
+                                          (const rabbitmq-activation))
+                       (service-extension account-service-type
+                                          (const %rabbitmq-accounts))))
+                (default-value (rabbitmq-configuration))))
diff --git a/gnu/tests/message-broker.scm b/gnu/tests/message-broker.scm
new file mode 100644
index 000000000..f2f559081
--- /dev/null
+++ b/gnu/tests/message-broker.scm
@@ -0,0 +1,86 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests message-broker)
+  #:use-module (gnu tests)
+  #:use-module (gnu system)
+  #:use-module (gnu system file-systems)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu system vm)
+  #:use-module (gnu services)
+  #:use-module (gnu services message-broker)
+  #:use-module (gnu services networking)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:export (%test-rabbitmq))
+
+(define %rabbitmq-os
+  (simple-operating-system
+   (dhcp-client-service)
+   (service rabbitmq-service-type)))
+
+(define* (run-rabbitmq-test #:optional (port 11211))
+  "Run tests in %RABBITMQ-OS, forwarding PORT."
+  (define os
+    (marionette-operating-system
+     %rabbitmq-os
+     #:imported-modules '((gnu services herd)
+                          (guix combinators))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings `((11211 . ,port)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11) (srfi srfi-64)
+                       (gnu build marionette)
+                       (ice-9 rdelim))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "rabbitmq")
+
+          ;; Wait for rabbitmq to be up and running.
+          (test-assert "service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'rabbitmq)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "rabbitmq-test" test))
+
+(define %test-rabbitmq
+  (system-test
+   (name "rabbitmq")
+   (description "Connect to a running RABBITMQ server.")
+   (value (run-rabbitmq-test))))
-- 
2.17.0
C
C
Christopher Baines wrote on 20 May 2018 22:39
[PATCH 1/2] gnu: Add rabbitmq.
(address . 31539@debbugs.gnu.org)
20180520203958.25330-1-mail@cbaines.net
* gnu/packages/rabbitmq.scm: New file.
* gnu/local.mk: Add gnu/packages/rabbitmq.scm.
---
gnu/local.mk | 1 +
gnu/packages/rabbitmq.scm | 90 +++++++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+)
create mode 100644 gnu/packages/rabbitmq.scm

Toggle diff (110 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index fbdb30989..22aad6d7e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -359,6 +359,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/toys.scm				\
   %D%/packages/tryton.scm			\
   %D%/packages/qt.scm				\
+  %D%/packages/rabbitmq.scm			\
   %D%/packages/ragel.scm			\
   %D%/packages/rails.scm			\
   %D%/packages/ratpoison.scm			\
diff --git a/gnu/packages/rabbitmq.scm b/gnu/packages/rabbitmq.scm
new file mode 100644
index 000000000..d453dfe10
--- /dev/null
+++ b/gnu/packages/rabbitmq.scm
@@ -0,0 +1,90 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages rabbitmq)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages rsync)
+  #:use-module (gnu packages erlang)
+  #:use-module (gnu packages elixir)
+  #:use-module (gnu packages python))
+
+(define-public rabbitmq
+  (package
+    (name "rabbitmq")
+    (version "3.7.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/rabbitmq/rabbitmq-server/releases/download/v"
+                    version
+                    "/rabbitmq-server-" version ".tar.xz"))
+              (file-name (string-append name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0y3c3kmj2jnfic4rzfn5x0raigkgscxv94fn3ijnnk535b209iw8"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "deps/rabbit_common/src/vm_memory_monitor.erl"
+               (("getconf") (string-append (assoc-ref inputs "glibc")
+                                           "/bin/getconf")))
+             #t))
+         (delete 'configure)
+         (delete 'check)
+         (add-after 'install 'patch-scripts
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (substitute* (string-append out "/sbin/rabbitmq-server")
+                 (("uname") (which "uname"))
+                 (("mkdir") (which "mkdir"))
+                 (("cp ") (string-append (which "cp") " "))
+                 (("\\$\\{ERL\\_DIR\\}") (string-append (dirname (which "erl"))
+                                                        "/"))
+                 (("dirname") (which "dirname")))
+               (substitute* (string-append out "/sbin/rabbitmq-env")
+                 (("dirname") (which "dirname"))
+                 (("\\$\\{ERL\\_DIR\\}") (string-append (dirname (which "erl"))
+                                                        "/"))
+                 (("\\| tr") (string-append "| " (which "tr")))
+                 (("basename") (which "basename"))
+                 (("sed") (which "sed")))
+               #t))))
+       #:make-flags
+       (list (string-append "RMQ_ERLAPP_DIR=" (assoc-ref %outputs "out")))))
+    (native-inputs
+     `(("erlang" ,erlang)
+       ("elixir" ,elixir)
+       ("python" ,python-wrapper)
+       ("libxslt" ,libxslt)
+       ("rsync" ,rsync)
+       ("glibc",glibc)
+       ("zip" ,zip)))
+    (home-page "http://www.rabbitmq.com/")
+    (synopsis "TODO")
+    (description "TODO")
+    (license "TODO")))
+
-- 
2.17.0
Z
Z
zimoun wrote on 20 Oct 2020 09:45
Re: [bug#31539] [PATCH] Add RabbitMQ package and service.
(name . Christopher Baines)(address . mail@cbaines.net)(address . 31539@debbugs.gnu.org)
86zh4h8hne.fsf@gmail.com
Dear,

The 2 patches [1] are more than 2 years old. They are about adding
RabbitMQ package and service. Have they been fallen in the crack?

Are they still relevant? They are tagged ’moreinfo’, why? Because the
package needs more work?



On Sun, 20 May 2018 at 21:36, Christopher Baines <mail@cbaines.net> wrote:
Toggle quote (28 lines)
> Tags: moreinfo
>
> RabbitMQ is a message broker/queuing system service. I've managed to get
> a package that builds, and a service which at least starts and seems to
> work.
>
> The package still needs more work, I haven't looked too closely at the
> source and what might need stripping out.
>
> As for the service, it's very minimal, and I don't have very much
> experience with RabbitMQ. However, this is a start, so here are some
> patches.
>
>
> Christopher Baines (2):
> gnu: Add rabbitmq.
> services: Add RabbitMQ.
>
> gnu/local.mk | 3 +
> gnu/packages/rabbitmq.scm | 90 +++++++++++++++++++++++++++
> gnu/services/message-broker.scm | 105 ++++++++++++++++++++++++++++++++
> gnu/tests/message-broker.scm | 86 ++++++++++++++++++++++++++
> 4 files changed, 284 insertions(+)
> create mode 100644 gnu/packages/rabbitmq.scm
> create mode 100644 gnu/services/message-broker.scm
> create mode 100644 gnu/tests/message-broker.scm


All the best,
simon
C
C
Christopher Baines wrote on 20 Oct 2020 09:59
(name . zimoun)(address . zimon.toutoune@gmail.com)(address . 31539@debbugs.gnu.org)
874kmpib0a.fsf@cbaines.net
zimoun <zimon.toutoune@gmail.com> writes:

Toggle quote (6 lines)
> The 2 patches [1] are more than 2 years old. They are about adding
> RabbitMQ package and service. Have they been fallen in the crack?
>
> Are they still relevant? They are tagged ’moreinfo’, why? Because the
> package needs more work?

The service is OK, but the package needs some work before merging. It
doesn't built RabbitMQ from source.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAl+OmMVfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XchGRAAorynRVl58Zdn22BRy5Nfd8XbW2BgWNVk
tq7LNtTO6nLUlpQEPg++l/1AgE43TaDFTqBmXd6akKzqIhOVykXOhhOzrzn0KWf9
I1T1Gmp0uE0qYerQWoSG8oGZRHyUettMyh4D1gyYDdNJ4zsatuPrLbrvC08Gz1Rq
g9t5Yclqi+bXzeZL2tDaZlcf2al5vYWvtVpT+knM9OWRtHQxem0b5f9vMmaf2J++
iKzFaW1Y09fmyAlqCHQ4AR/JcfXrXDc5IZKGPVjTXrZg4TtCZWhJol+J2R2f0QCc
/Nbywp2/s5xw24ddIzqIkdilZJeHX+W5to/2pO5HGD2N6QjpHl1wibpS0oDRLQpp
Q05D1htBel8NREEaFGEPy68OHrky786o5WFprA6iM51Xk6Jj9n/RUMZTCZKLuVNx
E3zZL76r1QhP0eWF15MEjHJYrF1iqOgT8CUUCvR8NQnpnxryXhWX0cOSqLgVmrqn
9QeiC3LsuEQ5QQaGOL2FhmpVZkoAgWpeM4Bm1Q3rjjtq0iUb9Jn52rH2gPnS/5lT
ZrnXbROIK+i5JVVQpwYfUj3n74X0eGMgZ/6qVQ0aePOp3OovMcx0fUU4mmC0cGHx
YUJ+OVo4rC+AGHmyt3evZ5iahQQ0vtAP9lkhN6dpx8L2clSmXOSvB7uYgWz0/2U2
7AWP6r8Co/0=
=QDR5
-----END PGP SIGNATURE-----

Z
Z
zimoun wrote on 28 Oct 2020 18:28
tags 31539 + easy - moreinfo
(address . control@debbugs.gnu.org)
86k0va1cqr.fsf@gmail.com
tags 31539 - moreinfo
tags 31539 + easy
thanks
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send email to 31539@debbugs.gnu.org