File intelmq.spec of Package intelmq

#
# spec file for package intelmq
#
# Copyright (c) 2023 Institute for Common Good Technology <packaging@commongoodtechnology.org>
#
# 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://github.com/certtools/intelmq/issues and the intelmq-mailinglists

Name:           intelmq
Version:        3.4.1~alpha1
Release:        0
Summary:        Solution for IT security teams for collecting and processing security feeds
License:        AGPL-3.0-only
URL:            https://docs.intelmq.org/
Source:         intelmq_%{version}.orig.tar.gz
Source1:        intelmq_%{version}-1.debian.tar.gz
Source2:        intelmq-rpmlintrc
Source3:        state.json
Patch0:         https://github.com/certtools/intelmq/pull/2520.patch#/fix-yaml-loader.patch
BuildRequires:  fdupes
%if 0%{?fedora} || 0%{?centos_version} || 0%{?rhel_version}
Requires(pre):  shadow-utils
Requires:       cronie
%else
Requires(pre):  /usr/sbin/useradd,/usr/sbin/groupadd
Requires:       cron
%endif
Requires(post): sudo
Requires(pre):  systemd
BuildRequires:  python3-dnspython
BuildRequires:  python3-requests
BuildRequires:  python3-setuptools
%if 0%{?is_opensuse}
BuildRequires:  systemd-rpm-macros
Requires(pre):  permissions
Requires(post): permissions
%endif
BuildRequires:  python3-python-dateutil >= 2.5
BuildRequires:  python3
BuildRequires:  python3-psutil
BuildRequires:  python3-redis
BuildRequires:  python3-ruamel.yaml
BuildRequires:  python3-termstyle
# SECTION tests
BuildRequires:  python3-Cerberus
BuildRequires:  python3-requests-mock
BuildRequires:  python3-pytest
BuildRequires:  rsync
# /SECTION
Requires:       logrotate
Requires:       python3-intelmq == %version
Requires:       valkey
%{?systemd_requires}
Recommends:     intelmq-contrib
Provides: user(intelmq)
Provides: group(intelmq)
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
BuildArch:      noarch

%package -n python3-intelmq
Summary:        IntelMQ Python Library
Group:          Development/Languages/Python
Requires:       python3-psutil
Requires:       python3-redis
Requires:       python3-ruamel.yaml
Requires:       python3-termstyle
Requires:       bash-completion
Requires:       jq
Requires:       python3-requests >= 2.2.0
Requires:       python3-python-dateutil >= 2.5
Requires:       python3-dnspython
Requires:       which
%if 0%{?centos_version} == 700 || 0%{?rhel_version} == 700
Requires:       python3-psycopg2 >= 2.5.5
%else
Recommends:     python3-pyasn >= 1.5.0b7
Recommends:     python3-beautifulsoup4
Recommends:     python3-certstream
Recommends:     python3-geoip2 >= 2.2.0
Recommends:     python3-imbox >= 0.8.5
Recommends:     python3-pika
Recommends:     python3-psycopg2 >= 2.5.5
Recommends:     python3-rt >= 1.0.9
Recommends:     python3-shodan >= 1.7.2
Recommends:     python3-stomp.py >= 4.1.8
%endif

%package contrib
Summary:        Contributed scripts for IntelMQ
Group:          Development/Languages/Python
Requires:       intelmq


%description
IntelMQ is a solution for IT security teams (CERTs, CSIRTs, abuse departments,...) for collecting and processing security feeds (such as log files) using a message queuing protocol. It's a community driven initiative called IHAP (Incident Handling Automation Project) which was conceptually designed by European CERTs/CSIRTs during several InfoSec events. Its main goal is to give to incident responders an easy way to collect & process threat intelligence thus improving the incident handling processes of CERTs.

%description -n python3-intelmq
This package contains the python library for intelmq.

%description contrib
Extensions, scripts, additional programs and examples

%pre
getent group intelmq >/dev/null || groupadd -r intelmq
getent passwd intelmq >/dev/null || useradd -r -d %{_localstatedir}/lib/intelmq/ -c "user running intelmq" -g intelmq -s /bin/bash intelmq

%post
%tmpfiles_create %{_tmpfilesdir}/intelmq.conf
if [ "$1" -eq 2 ] ; then  # only upgrade
  sudo -u intelmq %{_bindir}/intelmqctl upgrade-config
  sudo -u intelmq %{_bindir}/intelmqctl -q check --no-connections
fi

%preun
if [ "$1" -eq 0 ] ; then  # only uninstall
  %{_bindir}/systemd-tmpfiles --remove /usr/lib/tmpfiles.d/intelmq.conf
fi

%postun
if [ "$1" -eq 0 ] ; then  # only uninstall
  getent passwd intelmq >/dev/null && userdel intelmq
  getent group intelmq >/dev/null && groupdel intelmq
fi

%prep
%setup -q -n intelmq
%setup -D -T -b 1 -q -n intelmq
%if 0%{?suse_version} > 1600
# Tumbleweed
%patch -p1 0
%endif
patch -p1 < ../debian/patches/fix-logrotate-path.patch
patch -p1 < ../debian/patches/fix-intelmq-paths.patch
sed -i -e '/#!\/usr\/bin\//d' intelmq/bin/*.py
sed -i '1!b;s@/usr/bin/env python@/usr/bin/python@' contrib/check_mk/cronjob_intelmq_queues.py contrib/check_mk/cronjob_intelmq_statistics.py contrib/elasticsearch/elasticmapper contrib/malware_name_mapping/download_mapping.py contrib/systemd/systemd.py
# Tumbleweed
%if 0%{?suse_version} > 1320 || 0%{?centos_version} || 0%{?rhel_version} || 0%{?fedora}
sed -i 's/python-termstyle/termstyle/' setup.py
%endif
%if 0%{?fedora} && 0%{?fedora} <= 25
sed -i 's/dnspython/dnspython3/' setup.py
%endif
# remove need for pytest-cov
sed -i 's/--cov[^ ]*//g' pytest.ini

%build
sed -i -f ../debian/sedfile intelmq/etc/* setup.py contrib/logrotate/intelmq
%{python_build}

%install
%{python_install}
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d/ %{buildroot}%{_sysconfdir}/cron.d/
install -m 644 contrib/logrotate/intelmq %{buildroot}%{_sysconfdir}/logrotate.d/
# cron scripts should not have executable bit set, refused by newer versions of cron
install -m 644 ../debian/cron.d/intelmq-update-database %{buildroot}%{_sysconfdir}/cron.d/
install -d -m 0755 %{buildroot}/usr/lib/tmpfiles.d/ %{buildroot}%{_localstatedir}/lib/intelmq/bots/file-output %{buildroot}%{_localstatedir}/log/intelmq %{buildroot}%{_datadir}/intelmq/contrib/
install -D -m 644 contrib/tmpfiles.d/intelmq.conf %{buildroot}%{_tmpfilesdir}/intelmq.conf
%if 0%{?is_opensuse}
install -D -m 644 contrib/bash-completion/intelmqctl %{buildroot}%{_datadir}/bash-completion/completions/intelmqctl
install -D -m 644 contrib/bash-completion/intelmqdump %{buildroot}%{_datadir}/bash-completion/completions/intelmqdump
%else
install -D -m 644 contrib/bash-completion/intelmqctl %{buildroot}%{_datadir}/bash_completion/completions/intelmqctl
install -D -m 644 contrib/bash-completion/intelmqdump %{buildroot}%{_datadir}/bash_completion/completions/intelmqdump
%endif
# remove program not needed for packages
rm %{buildroot}/%{_bindir}/intelmqsetup
# create directory layout and empty state file
ROOT_DIR=%{buildroot} PYTHONPATH=. python3 intelmq/bin/intelmqsetup.py --skip-ownership --state-file %{buildroot}%{_localstatedir}/lib/intelmq/state.json --skip-api
# add pre-built state file
install -m 644 %{SOURCE3} %{buildroot}%{_localstatedir}/lib/intelmq/state.json
# install default config
install -D -m 0644 intelmq/bots/experts/modify/examples/default.conf %{buildroot}%{_localstatedir}/lib/intelmq/bots/modify/modify.conf

# contrib scripts
cp -r contrib/eventdb/ contrib/example-extension-package/ contrib/feeds-config-generator/ contrib/logcheck contrib/malware_name_mapping/ contrib/prettyprint/ contrib/systemd/ %{buildroot}%{_datadir}/intelmq/contrib/

%fdupes %{buildroot}

%check
INTELMQ_SKIP_REDIS=1 INTELMQ_SKIP_INTERNET=1 PYTHONPATH=${PYTHONPATH:+$PYTHONPATH:}%BUILDROOT%{python3_sitelib}/intelmq/ PYTHONDONTWRITEBYTECODE=1 pytest -v intelmq/tests/

%files
%config(noreplace) %{_sysconfdir}/cron.d/intelmq-update-database
%config %{_sysconfdir}/logrotate.d/intelmq
%{_tmpfilesdir}
%if 0%{?is_opensuse}
%{_datadir}/bash-completion/completions/intelmqctl
%{_datadir}/bash-completion/completions/intelmqdump
%else
%{_datadir}/bash_completion/completions/intelmqctl
%{_datadir}/bash_completion/completions/intelmqdump
%endif
%doc README.md AUTHORS COPYRIGHT CHANGELOG.md NEWS.md SECURITY.md
%doc intelmq/bots/experts/modify/examples
%license LICENSE

%if 0%{?is_opensuse}
%dir %{_sysconfdir}/cron.d/
%dir %{_sysconfdir}/logrotate.d/
%dir %{_datadir}/bash-completion/
%dir %{_datadir}/bash-completion/completions/
%endif

%defattr(-,intelmq,intelmq,-)
%attr(0775,-,-) %dir %{_sysconfdir}/intelmq/
%attr(0664,-,-) %config(noreplace) %{_sysconfdir}/intelmq/*.conf
%attr(0664,-,-) %config(noreplace) %{_sysconfdir}/intelmq/runtime.yaml
%dir %{_localstatedir}/lib/intelmq/
%dir %{_localstatedir}/lib/intelmq/bots/
%dir %{_localstatedir}/lib/intelmq/bots/modify/
%dir %{_localstatedir}/lib/intelmq/bots/file-output/
%verify(not md5 size mtime) %config(noreplace) %{_localstatedir}/lib/intelmq/state.json
%{_localstatedir}/lib/intelmq/bots/modify/modify.conf
%dir %{_localstatedir}/log/intelmq/
%ghost %dir /run/intelmq

%files -n python3-intelmq
%{python3_sitelib}/*
%{_bindir}/*

%files contrib
%dir %{_datadir}/intelmq/
%{_datadir}/intelmq/contrib/

%changelog
openSUSE Build Service is sponsored by