File rabbitmq-server.spec of Package rabbitmq-server

#
# spec file for package rabbitmq-server
#
# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%define _rabbit_erllibdir %{_libdir}/rabbitmq/lib/rabbitmq_server-%{version}
%define _rabbit_libdir %{_libdir}/rabbitmq

%if %{undefined _initddir}
%define _initddir %{_sysconfdir}/init.d
%endif

Name:           rabbitmq-server
Version:        3.4.4
Release:        0
Summary:        The RabbitMQ Server
License:        MPL-1.1
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
Source6:        rabbitmq-server.service
Source7:        rabbitmq-server.tmpfiles.d.conf
Source8:        rabbitmq-server-ha.ocf
Patch0:         no-nmap.patch
Patch1:         no-remove-common.patch
Patch2:         rabbitmq-systemd-notification-support.patch
# PATCH-FIX-UPSTREAM detect_missing_user_process.patch bsc#1054243
# https://github.com/rabbitmq/rabbitmq-server/pull/747
Patch3:         detect_missing_user_process.patch
Patch4:         27fcfd890380f08ddab86daa55cf262a2151a09b.patch
Patch8:         make-ha-ocf-reliable.patch
Patch9:         0001-Don-t-die-in-case-of-faulty-node.patch
Patch10:        0001-Escape-HTML-tags-in-policy-definition-fields.patch
Patch11:        0002-Don-t-echo-provided-encoding-value-back.patch
Patch12:        0003-Strip-off-pids-and-format-consumer-details-for-2-end.patch
Patch13:        0004-Format-Web-contexts.patch
# PATCH-FIX-UPSTREAM CVE-2019-11287 bsc#1157665
# https://github.com/rabbitmq/rabbitmq-server/pull/2155
Patch14:        explanation-format.patch

BuildRequires:  erlang
BuildRequires:  erlang-src
BuildRequires:  fdupes
BuildRequires:  libxslt
# require python json module
BuildRequires:  python >= 2.6
BuildRequires:  python-xml
BuildRequires:  unzip
BuildRequires:  xmlto
BuildRequires:  zip
Requires:       erlang
Requires:       logrotate
Provides:       AMQP-server
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Requires(pre):  pwdutils
Requires(pre):  %fillup_prereq
Requires(pre):  %insserv_prereq
%if 0%{?suse_version} > 1140
BuildRequires:  systemd
%{?systemd_requires}
%define have_systemd 1
Requires:       erlang-sd_notify
%else
Requires:       %fillup_prereq
Requires:       %insserv_prereq
%endif
# Do not use noarch since the Erlang packaging does not really allow that
#BuildArch:      noarch

%description
RabbitMQ is an implementation of AMQP, the emerging standard for high
performance enterprise messaging. The RabbitMQ server is a robust and
scalable implementation of an AMQP broker.

%package plugins
Summary:        Plugins for the RabbitMQ server
Group:          System/Daemons
Requires:       rabbitmq-server = %{version}

%description plugins
RabbitMQ is an implementation of AMQP, the emerging standard for high
performance enterprise messaging. The RabbitMQ server is a robust and
scalable implementation of an AMQP broker.

This package includes some plugins for the RabbitMQ server

%package -n erlang-rabbitmq-client
Summary:        RabbitMQ AMQP language bindings for Erlang
Group:          Development/Libraries/Other
Requires:       erlang
Provides:       erlang-gen_server2 = %{version}

%description -n erlang-rabbitmq-client
RabbitMQ is an implementation of AMQP, the emerging standard for high
performance enterprise messaging. The RabbitMQ server is a robust and
scalable implementation of an AMQP broker.

This package includes the RabbitMQ AMQP language bindings for Erlang.

%prep
%setup -q
cp %{SOURCE4} scripts/rabbitmq-server.ocf
cp %{SOURCE8} scripts/rabbitmq-server-ha.ocf
%patch0
%patch1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch8 -p1
%patch9 -p1
%patch10 -d plugins-src/rabbitmq-management -p1
%patch11 -d plugins-src/rabbitmq-management -p1
%patch12 -d plugins-src/rabbitmq-management -p1
%patch13 -d plugins-src/rabbitmq-management -p1
%patch14 -p1

%build
make all VERSION=%{version}
# %{?_smp_mflags}

%install
make install \
  TARGET_DIR=%{buildroot}%{_rabbit_erllibdir} \
  SBIN_DIR=%{buildroot}%{_rabbit_libdir}/bin \
  MAN_DIR=%{buildroot}%{_mandir} \
  DOC_INSTALL_DIR=%{buildroot}/%{_docdir} \
  VERSION=%{version}

mkdir -p %{buildroot}%{_sbindir}
%if 0%{?have_systemd}
install -p -D -m 644 %{SOURCE6} %{buildroot}%{_unitdir}/%{name}.service
ln -s -f %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}
%else
# Install init scripts
install -p -D -m 0755 %{SOURCE1} %{buildroot}%{_initddir}/rabbitmq-server
ln -sf %{_initddir}/rabbitmq-server %{buildroot}%{_sbindir}/rcrabbitmq-server
mkdir -p %{buildroot}%{_localstatedir}/adm/fillup-templates/
install -p -D -m 644 %{SOURCE5} %{buildroot}%{_localstatedir}/adm/fillup-templates/sysconfig.rabbitmq-server
%endif

# Install wrapper scripts
%define _rabbit_wrapper %{_builddir}/`basename %{SOURCE2}`
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}
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 scripts/rabbitmq-server.ocf %{buildroot}%{_exec_prefix}/lib/ocf/resource.d/rabbitmq/rabbitmq-server
install -p -D -m 0755 scripts/rabbitmq-server-ha.ocf %{buildroot}%{_exec_prefix}/lib/ocf/resource.d/rabbitmq/rabbitmq-server-ha

# install config files
install -p -D -m 0644 docs/rabbitmq.config.example %{buildroot}/%{_sysconfdir}/rabbitmq/rabbitmq.config

# Copy all necessary lib files etc.
install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/logrotate.d/rabbitmq-server

# Install Erlang client
mkdir -p %{buildroot}%{_libdir}/erlang/lib
for i in amqp_client rabbit_common ; do
   unzip %{buildroot}%{_rabbit_erllibdir}/plugins/$i*.ez -d %{buildroot}%{_libdir}/erlang/lib
done

# Create other necessary directories for RabbitMQ server
mkdir -p %{buildroot}%{_sysconfdir}/rabbitmq
mkdir -p %{buildroot}%{_localstatedir}/lib/rabbitmq/mnesia
mkdir -p %{buildroot}%{_localstatedir}/log/rabbitmq

# tmpfiles.d for systemd
%if 0%{?have_systemd}
mkdir -p %{buildroot}%/usr/lib/tmpfiles.d
install -p -D -m 0644 %{SOURCE7} %{buildroot}/usr/lib/tmpfiles.d/rabbitmq-server.conf
%endif

# Build the list of files
rm -f %{_builddir}/filelist.%{name}.rpm
echo '%defattr(-,root,root, -)' >> %{_builddir}/filelist.%{name}.rpm
(cd %{buildroot}; \
    find . -type f ! -regex '\.%{_sysconfdir}.*' \
        ! -regex '\.\(%{_rabbit_erllibdir}\|%{_rabbit_libdir}\).*' \
        | sed -e 's/^\.//' >> %{_builddir}/filelist.%{name}.rpm)

# Create hardlinks for duplicate files
%fdupes %{buildroot}/usr/share

%pre
getent group rabbitmq >/dev/null || groupadd -r rabbitmq
getent passwd rabbitmq >/dev/null || useradd -r -g rabbitmq \
  -d %{_localstatedir}/lib/rabbitmq \
  -s /sbin/nologin \
  -c "user for RabbitMQ messaging server" rabbitmq
%if 0%{?have_systemd}
%service_add_pre %{name}.service
%endif

%post
%if 0%{?have_systemd}
%service_add_post %{name}.service
systemd-tmpfiles --create --clean /usr/lib/tmpfiles.d/rabbitmq-server.conf
%else
%fillup_and_insserv rabbitmq-server
%endif

%preun
%if 0%{?have_systemd}
%service_del_preun %{name}.service
%else
%stop_on_removal rabbitmq-server
%endif

%postun
%if 0%{?have_systemd}
%service_del_postun %{name}.service
%else
%restart_on_update rabbitmq-server
%insserv_cleanup
%endif

%files -f ../filelist.%{name}.rpm
%defattr(-,root,root,-)
%attr(0750, rabbitmq, rabbitmq) %dir %{_localstatedir}/lib/rabbitmq
%attr(0750, rabbitmq, rabbitmq) %dir %{_localstatedir}/log/rabbitmq
%dir %{_sysconfdir}/rabbitmq
%dir %{_rabbit_libdir}
%{_rabbit_libdir}/bin
%dir %{_rabbit_libdir}/lib
%{_rabbit_erllibdir}
%if 0%{?have_systemd}
%{_unitdir}/%{name}.service
/usr/lib/tmpfiles.d/rabbitmq-server.conf
%else
%{_initddir}/rabbitmq-server
%endif
%{_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
%config(noreplace) %{_sysconfdir}/rabbitmq/rabbitmq.config
%doc LICENSE* README
%dir %{_rabbit_erllibdir}/plugins
%exclude %{_rabbit_erllibdir}/plugins/*
%exclude %{_libdir}/erlang/lib/amqp_client*/*
%exclude %{_libdir}/erlang/lib/rabbit_common*/*

%files plugins
%defattr(-,root,root)
%{_rabbit_erllibdir}/plugins/

%files -n erlang-rabbitmq-client
%defattr(-,root,root)
%{_libdir}/erlang/lib/amqp_client*/
%{_libdir}/erlang/lib/rabbit_common*/

%changelog
openSUSE Build Service is sponsored by