8d0bb40
%global pypi_name mailman
8d0bb40
b38c192
%global baseversion 3.3.8
8d0bb40
#global prerelease rc2
8d0bb40
8d0bb40
Name:           mailman3
8d0bb40
Version:        %{baseversion}%{?prerelease:~%{prerelease}}
1e63b0e
Release:        5%{?dist}
8d0bb40
Summary:        The GNU mailing list manager
8d0bb40
b65aded
License:        GPL-3.0-or-later
8d0bb40
URL:            http://www.list.org
8d0bb40
Source0:        https://pypi.python.org/packages/source/m/%{pypi_name}/%{pypi_name}-%{baseversion}%{?prerelease}.tar.gz
8d0bb40
Source1:        mailman3.cfg
8d0bb40
Source2:        mailman3-tmpfiles.conf
8d0bb40
Source3:        mailman3.service
8d0bb40
Source4:        mailman3.logrotate
8d0bb40
Source5:        mailman3-digests.service
8d0bb40
Source6:        mailman3-digests.timer
b38c192
Source7:        mailman3-sysusers.conf
8d0bb40
8d0bb40
# <https://gitlab.com/mailman/mailman/merge_requests/721>
8d0bb40
Patch11:        %{name}-subject-prefix.patch
8d0bb40
# <https://gitlab.com/mailman/mailman/merge_requests/722>
b38c192
Patch12:        %{name}-use-either-importlib_resources-or-directly-importlib.patch
8d0bb40
8d0bb40
BuildArch:      noarch
8d0bb40
8d0bb40
# Ensure that tests will work...
8d0bb40
BuildRequires:  glibc-langpack-en
b38c192
b38c192
BuildRequires:  python3-devel >= 3.5
b38c192
BuildRequires:  python3-setuptools
b38c192
BuildRequires:  pyproject-rpm-macros
8d0bb40
8d0bb40
# SELinux https://fedoraproject.org/wiki/SELinux/IndependentPolicy#Creating_the_Spec_File
8d0bb40
Provides:  %{name}-selinux == %{version}-%{release}
8d0bb40
%global selinux_variants mls targeted
8d0bb40
Requires: selinux-policy >= %{_selinux_policy_version}
8d0bb40
BuildRequires: git
8d0bb40
BuildRequires: pkgconfig(systemd)
8d0bb40
BuildRequires: selinux-policy
8d0bb40
BuildRequires: selinux-policy-devel
8d0bb40
Requires(post): selinux-policy-base >= %{_selinux_policy_version}
8d0bb40
Requires(post): libselinux-utils
8d0bb40
Requires(post): policycoreutils
8d0bb40
Requires(post): policycoreutils-python-utils
8d0bb40
# SELinux https://fedoraproject.org/wiki/SELinux_Policy_Modules_Packaging_Draft
8d0bb40
BuildRequires:  checkpolicy, selinux-policy-devel
8d0bb40
BuildRequires:  hardlink
8d0bb40
8d0bb40
# Scriptlets
b38c192
BuildRequires:  systemd-rpm-macros
8d0bb40
%{?systemd_requires}
b38c192
%{?sysusers_requires_compat}
8d0bb40
8d0bb40
8d0bb40
%description
8d0bb40
This is GNU Mailman, a mailing list management system distributed under the
8d0bb40
terms of the GNU General Public License (GPL) version 3 or later.  The name of
8d0bb40
this software is spelled 'Mailman' with a leading capital 'M' but with a lower
8d0bb40
case second `m'.  Any other spelling is incorrect.
8d0bb40
8d0bb40
8d0bb40
%prep
8d0bb40
%autosetup -p1 -n %{pypi_name}-%{baseversion}%{?prerelease}
8d0bb40
b38c192
# Downgrade a few dependencies to satisfiable compatible versions
717d3ed
sed -e "s/flufl.i18n>=3.2/flufl.i18n>=2.0/" \
b38c192
    -i setup.py
b38c192
8d0bb40
# SELinux
8d0bb40
mkdir SELinux
8d0bb40
echo '%{_localstatedir}/lib/%{name}/data(/.*)? gen_context(system_u:object_r:etc_mail_t,s0)' \
8d0bb40
    > SELinux/%{name}.fc
8d0bb40
# remember to bump the following version if the policy is updated
8d0bb40
cat > SELinux/%{name}.te << EOF
8d0bb40
policy_module(%{name}, 1.4)
8d0bb40
EOF
8d0bb40
8d0bb40
b38c192
%generate_buildrequires
b38c192
%pyproject_buildrequires -t
b38c192
b38c192
8d0bb40
%build
b38c192
%pyproject_wheel
8d0bb40
8d0bb40
cd SELinux
8d0bb40
for selinuxvariant in %{selinux_variants}; do
8d0bb40
  make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile
8d0bb40
  mv %{name}.pp %{name}.pp.${selinuxvariant}
8d0bb40
  make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile clean
8d0bb40
done
8d0bb40
cd -
8d0bb40
8d0bb40
8d0bb40
%install
b38c192
%pyproject_install
b38c192
%pyproject_save_files %{pypi_name}
8d0bb40
8d0bb40
# move scripts away from _bindir to avoid conflicts and create a wrapper script
8d0bb40
mkdir -p %{buildroot}%{_libexecdir}/%{name}
8d0bb40
mv %{buildroot}%{_bindir}/* %{buildroot}%{_libexecdir}/%{name}/
8d0bb40
cat > %{buildroot}%{_bindir}/%{name} << EOF
8d0bb40
#!/bin/sh
8d0bb40
if [ "\$(whoami)" != "mailman" ]; then
8d0bb40
    echo "This command must be run under the mailman user."
8d0bb40
    exit 1
8d0bb40
fi
8d0bb40
%{_libexecdir}/%{name}/mailman \$@
8d0bb40
EOF
8d0bb40
chmod +x %{buildroot}%{_bindir}/%{name}
b38c192
echo "%{_bindir}/%{name}" >> %{pyproject_files}
b38c192
echo "%%dir %{_libexecdir}/%{name}" >> %{pyproject_files}
b38c192
echo "%{_libexecdir}/%{name}/mailman" >> %{pyproject_files}
b38c192
echo "%{_libexecdir}/%{name}/master" >> %{pyproject_files}
b38c192
echo "%{_libexecdir}/%{name}/runner" >> %{pyproject_files}
8d0bb40
8d0bb40
# service files
8d0bb40
install -D -m 0640 %{SOURCE1} %{buildroot}%{_sysconfdir}/mailman.cfg
b38c192
install -D -m 0644 %{SOURCE2} %{buildroot}%{_tmpfilesdir}/%{name}.conf
b38c192
install -D -m 0644 %{SOURCE7} %{buildroot}%{_sysusersdir}/%{name}.conf
8d0bb40
install -D -m 0644 %{SOURCE3} %{buildroot}%{_unitdir}/%{name}.service
8d0bb40
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d/
8d0bb40
sed -e 's,@LOGDIR@,%{_localstatedir}/log/%{name},g;s,@BINDIR@,%{_bindir},g' \
8d0bb40
    %{SOURCE4} > %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
8d0bb40
# periodic task
8d0bb40
install -D -m 0644 %{SOURCE5} %{buildroot}%{_unitdir}/%{name}-digests.service
8d0bb40
install -D -m 0644 %{SOURCE6} %{buildroot}%{_unitdir}/%{name}-digests.timer
8d0bb40
8d0bb40
mkdir -p %{buildroot}%{_localstatedir}/{lib,spool,log}/%{name}
8d0bb40
mkdir -p %{buildroot}/run/%{name} %{buildroot}/run/lock/%{name}
8d0bb40
mkdir -p %{buildroot}%{_sysconfdir}/%{name}.d
8d0bb40
# Mailman will auto-create the following dir, but not with the correct group
8d0bb40
# owner (MTAs such as Postfix must read and write to it). Set it here in RPM's
8d0bb40
# file listing.
8d0bb40
mkdir -p %{buildroot}%{_localstatedir}/lib/%{name}/data
8d0bb40
8d0bb40
# SELinux
8d0bb40
for selinuxvariant in %{selinux_variants}; do
8d0bb40
  install -d %{buildroot}%{_datadir}/selinux/${selinuxvariant}
8d0bb40
  install -p -m 644 SELinux/%{name}.pp.${selinuxvariant} \
8d0bb40
    %{buildroot}%{_datadir}/selinux/${selinuxvariant}/%{name}.pp
8d0bb40
done
8d0bb40
hardlink -cv %{buildroot}%{_datadir}/selinux
8d0bb40
8d0bb40
8d0bb40
%check
8d0bb40
# tests need a proper locale
8d0bb40
export LANG=en_US.UTF-8
8d0bb40
export LC_ALL=en_US.UTF-8
8d0bb40
# Mailman3 can only be tested when its installed (it starts runners and won't
8d0bb40
# find the buildroot), so we use a venv
b38c192
%python3 -m venv --system-site-packages --without-pip --clear venv
8d0bb40
venv/bin/python setup.py develop
b38c192
# Tests fail with nspawn mock due to lack of access to /dev/stdout
b38c192
# TODO: Figure out a fix for this
b38c192
venv/bin/python -m nose2 -v || :
8d0bb40
8d0bb40
8d0bb40
%pre
8d0bb40
# User & Group
b38c192
%sysusers_create_compat %{SOURCE7}
b38c192
8d0bb40
# SELinux
8d0bb40
for selinuxvariant in %{selinux_variants}; do
8d0bb40
    %selinux_relabel_pre -s ${selinuxvariant}
8d0bb40
done
8d0bb40
8d0bb40
%post
8d0bb40
# Service
8d0bb40
%systemd_post %{name}.service %{name}-digests.timer
8d0bb40
# SELinux
8d0bb40
for selinuxvariant in %{selinux_variants}; do
8d0bb40
    %selinux_modules_install -s ${selinuxvariant} %{_datadir}/selinux/${selinuxvariant}/%{name}.pp || :
8d0bb40
done
8d0bb40
8d0bb40
%preun
8d0bb40
# Service
8d0bb40
%systemd_preun %{name}.service %{name}-digests.timer
8d0bb40
8d0bb40
%postun
8d0bb40
# Service
8d0bb40
%systemd_postun_with_restart %{name}.service %{name}-digests.timer
8d0bb40
# SELinux
8d0bb40
if [ $1 -eq 0 ] ; then
8d0bb40
  for selinuxvariant in %{selinux_variants}; do
8d0bb40
    %selinux_modules_uninstall -s ${selinuxvariant} %{_datadir}/selinux/${selinuxvariant}/%{name}.pp || :
8d0bb40
  done
8d0bb40
fi
8d0bb40
8d0bb40
%posttrans
8d0bb40
# SELinux
8d0bb40
for selinuxvariant in %{selinux_variants}; do
8d0bb40
    %selinux_relabel_post -s ${selinuxvariant}
8d0bb40
done
8d0bb40
8d0bb40
b38c192
%files -f %{pyproject_files}
8d0bb40
%doc README.rst
8d0bb40
%license COPYING
8d0bb40
%{_unitdir}/*.service
8d0bb40
%{_unitdir}/*.timer
b38c192
%{_tmpfilesdir}/%{name}.conf
b38c192
%{_sysusersdir}/%{name}.conf
8d0bb40
%config(noreplace) %attr(640,mailman,mailman) %{_sysconfdir}/mailman.cfg
8d0bb40
%dir %{_sysconfdir}/%{name}.d
8d0bb40
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
8d0bb40
%dir %attr(755,mailman,mailman) %{_localstatedir}/lib/%{name}
8d0bb40
%dir %attr(2775,mailman,mail)   %{_localstatedir}/lib/%{name}/data
8d0bb40
%dir %attr(755,mailman,mailman) %{_localstatedir}/spool/%{name}
8d0bb40
%dir %attr(755,mailman,mailman) %{_localstatedir}/log/%{name}
8d0bb40
%dir %attr(755,mailman,mailman) /run/%{name}
8d0bb40
%dir %attr(755,mailman,mailman) /run/lock/%{name}
8d0bb40
# SELinux
8d0bb40
%doc SELinux/*
8d0bb40
%{_datadir}/selinux/*/%{name}.pp
8d0bb40
8d0bb40
8d0bb40
%changelog
1e63b0e
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.8-5
1e63b0e
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
1e63b0e
dddf928
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.8-4
dddf928
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
dddf928
b65aded
* Tue Aug 29 2023 Michel Lind <salimma@fedoraproject.org> - 3.3.8-3
b65aded
- Restore the required versions of flufl.bounce and flufl.lock
b65aded
- Use SPDX license identifier; fix license to GPL-3.0-or-later
b65aded
d45c2b1
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.8-2
d45c2b1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
d45c2b1
b38c192
* Sat May 13 2023 Neal Gompa <ngompa@fedoraproject.org> - 3.3.8-1
b38c192
- Update to 3.3.8
b38c192
8d0bb40
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.4-7
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
8d0bb40
8d0bb40
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.4-6
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
8d0bb40
8d0bb40
* Fri Sep 17 2021 Neal Gompa <ngompa@fedoraproject.org> - 3.3.4-5
8d0bb40
- Backport fix for click >= 8.0
8d0bb40
8d0bb40
* Fri Sep 17 2021 Neal Gompa <ngompa@fedoraproject.org> - 3.3.4-4
8d0bb40
- Fix sqlalchemy dependency to < 1.4
8d0bb40
8d0bb40
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.4-3
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
8d0bb40
8d0bb40
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 3.3.4-2
8d0bb40
- Rebuilt for Python 3.10
8d0bb40
8d0bb40
* Tue Mar 30 2021 Neal Gompa <ngompa13@gmail.com> - 3.3.4-1
8d0bb40
- Update to 3.3.4 to fix build
8d0bb40
- Refresh patch set
8d0bb40
8d0bb40
* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 3.3.2~rc2-3
8d0bb40
- Rebuilt for updated systemd-rpm-macros
8d0bb40
  See https://pagure.io/fesco/issue/2583.
8d0bb40
8d0bb40
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.2~rc2-2
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
8d0bb40
8d0bb40
* Fri Oct 16 2020 Neal Gompa <ngompa13@gmail.com> - 3.3.2~rc2-1
8d0bb40
- Update to 3.3.2rc2 to fix build
8d0bb40
- Refresh and clean up patch set
8d0bb40
8d0bb40
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.2-5
8d0bb40
- Second attempt - Rebuilt for
8d0bb40
  https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
8d0bb40
8d0bb40
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.2-4
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
8d0bb40
8d0bb40
* Thu Jun 18 2020 Marc Dequènes (Duck) <duck@redhat.com> - 3.2.2-3
8d0bb40
- backport patch to use new Python 3.9 files API, fixes tests hang,
8d0bb40
  adapted for older importlib_resources library
8d0bb40
- backport patch to fix tests failing due to quote comparison
8d0bb40
- remove obsolete tweaking of Python macros
8d0bb40
8d0bb40
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 3.2.2-2
8d0bb40
- Rebuilt for Python 3.9
8d0bb40
8d0bb40
* Thu Mar 19 2020 Marc Dequènes (Duck) <duck@redhat.com> - 3.2.2-1
8d0bb40
- NUR
8d0bb40
- remove Python 3.7 support patch, applied upstream
8d0bb40
- refreshed/adapted patches
8d0bb40
- don't hardcode the path to `hardlink`
8d0bb40
- update and tighten dependencies
8d0bb40
- adapt tests after changes in mailman3-subject-prefix.patch
8d0bb40
- backport content-type fix for tests
8d0bb40
- use importlib.resources instead of importlib_resources is available
8d0bb40
- fix stale lock preventing mailman3.service from starting
8d0bb40
  (see Debian#919160)
8d0bb40
- add upstream patch to fix compatibility with Python 3.7.4 and
8d0bb40
  Python 3.8b4
8d0bb40
- ported upstream patch to fix compatibility with Python 3.8
8d0bb40
- upstream patch to fix model deletion and template init
8d0bb40
8d0bb40
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.0-6
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
8d0bb40
8d0bb40
* Mon Sep 30 2019 Aurelien Bompard <abompard@fedoraproject.org> - 3.2.0-5
8d0bb40
- Fix hardlink
8d0bb40
8d0bb40
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 3.2.0-4
8d0bb40
- Rebuilt for Python 3.8
8d0bb40
8d0bb40
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.0-3
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
8d0bb40
8d0bb40
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.0-2
8d0bb40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
8d0bb40
8d0bb40
* Fri Aug 03 2018 Aurelien Bompard <abompard@fedoraproject.org> - 3.2.0-1
8d0bb40
- Version 3.2.0
8d0bb40
- Update dependencies
8d0bb40
- Merge the -selinux subpackage
8d0bb40
- Use the SELinux macros
8d0bb40
8d0bb40
* Tue Mar 06 2018 Aurelien Bompard <abompard@fedoraproject.org> - 3.1.1-0.7
8d0bb40
- Rebuild
8d0bb40
8d0bb40
* Tue Feb 13 2018 Aurelien Bompard <abompard@fedoraproject.org> - 3.1.1-0.6
8d0bb40
- git update to 8207caa09
8d0bb40
8d0bb40
* Mon May 29 2017 Aurelien Bompard <abompard@fedoraproject.org> - 3.1.1-0.1
8d0bb40
- version 3.1.0 final
8d0bb40
8d0bb40
* Thu Feb 09 2017 Aurelien Bompard <abompard@fedoraproject.org> - 3.1.0-0.30
8d0bb40
- add a cron job to send digests daily
8d0bb40
8d0bb40
* Wed Apr 29 2015 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0-1
8d0bb40
- version 3.0.0 final
8d0bb40
8d0bb40
* Fri Jul 18 2014 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0-0.18.bzr7251
8d0bb40
- add Patch11 (missing PostgreSQL upgrade file)
8d0bb40
8d0bb40
* Mon Nov 25 2013 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0-0.11.bzr7226
8d0bb40
- add SELinux policy module, according to:
8d0bb40
  http://fedoraproject.org/wiki/SELinux_Policy_Modules_Packaging_Draft
8d0bb40
8d0bb40
* Sun Oct 27 2013 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0-0.10.bzr7226
8d0bb40
- update to BZR snapshot (rev7226)
8d0bb40
8d0bb40
* Thu Aug 29 2013 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0-0.6.bzr7218
8d0bb40
- update to BZR snapshot (rev7218)
8d0bb40
8d0bb40
* Wed Aug 28 2013 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0-0.6.bzr7217
8d0bb40
- update to BZR snapshot (rev7217)
8d0bb40
- drop patch 0
8d0bb40
- rename to mailman3 and make it parallel-installable with Mailman 2
8d0bb40
8d0bb40
* Wed Jul 24 2013 Aurelien Bompard <abompard@fedoraproject.org> - 3:3.0.0-0.6
8d0bb40
- update to BZR snapshot (rev7215)
8d0bb40
- drop patch 1
8d0bb40
8d0bb40
* Thu Mar 07 2013 Aurelien Bompard <abompard@fedoraproject.org> - 3:3.0.0-0.2.b3
8d0bb40
- update to beta3
8d0bb40
- add a systemd service and a default config file
8d0bb40
8d0bb40
* Wed Nov 28 2012 Aurelien Bompard <abompard@fedoraproject.org> - 3.0.0b2-1
8d0bb40
- Initial package.