c1e4ddfd46
- Re-enable LTO Related: RHEL-40084
934 lines
31 KiB
RPMSpec
934 lines
31 KiB
RPMSpec
Name: cyrus-imapd
|
|
Version: 3.8.3
|
|
Release: %autorelease
|
|
Summary: A high-performance email, contacts and calendar server
|
|
License: BSD-Attribution-HPND-disclaimer
|
|
URL: http://www.cyrusimap.org/
|
|
|
|
# UID/GID 76 have long been reserved for Cyrus
|
|
%define uid 76
|
|
%define gid 76
|
|
|
|
%define cyrususer cyrus
|
|
%define cyrusgroup mail
|
|
%define cyrexecdir %_libexecdir/%name
|
|
|
|
%define ssl_pem_file_prefix /etc/pki/%name/%name
|
|
|
|
%global __provides_exclude ^perl\\(AnnotateInlinedCIDs\\)$
|
|
|
|
# Cassandane testsuite is no longer executed during build time. It is called from separate CI test:
|
|
# https://src.fedoraproject.org/tests/cyrus-imapd/blob/main/f/Sanity/cassandane
|
|
# Do not remove CASSANDANE* and CASSANDANE*_END tags - the content between them is extracted and executed inside the CI test.
|
|
# If you want to run cassandane locally:
|
|
# Run: `rpmbuild '--with cassandane'` or `echo '%%_with_cassandane 1' >> ~/.rpmmacros`.
|
|
%bcond_with cassandane
|
|
|
|
Source0: https://github.com/cyrusimap/cyrus-imapd/releases/download/cyrus-imapd-%version/cyrus-imapd-%version.tar.gz
|
|
Source1: https://github.com/cyrusimap/cyrus-imapd/releases/download/cyrus-imapd-%version/cyrus-imapd-%version.tar.gz.sig
|
|
Source2: ellie-pub.key
|
|
Source10: cyrus-imapd.logrotate
|
|
Source11: cyrus-imapd.pam-config
|
|
Source12: cyrus-imapd.sysconfig
|
|
Source13: cyrus-imapd.magic
|
|
# XXX A systemd timer would probably be better
|
|
Source14: cyrus-imapd.cron-daily
|
|
Source15: README.rpm
|
|
Source16: cyrus-imapd.service
|
|
Source17: cyrus-imapd-init.service
|
|
Source18: cyrus-imapd.tmpfiles.conf
|
|
Source19: cyrus-imapd.sysusers
|
|
|
|
# A template config file for cassandane; we will substitute in varions values.
|
|
Source81: cassandane.ini
|
|
|
|
# Adapt a timeout to handle our slower builders
|
|
Patch0: patch-cyrus-testsuite-timeout
|
|
# Fedora-specific patch for the default configuration file
|
|
Patch1: patch-cyrus-default-configs
|
|
# We rename quota to cyr_quota to avoid a conflict with /usr/bin/quota; one
|
|
# place in the source must be patched to match.
|
|
Patch2: patch-cyrus-rename-quota
|
|
# Workaround for some compiled Perl modules not being linked against
|
|
# libpcreposix, which causes them to fail to load.
|
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1668723
|
|
# https://github.com/cyrusimap/cyrus-imapd/issues/2629#issuecomment-456925909
|
|
Patch3: patch-cyrus-perl-linking
|
|
# cyrus-imapd does not support LTO
|
|
# https://github.com/cyrusimap/cyrus-imapd/pull/4679
|
|
# Remove attribute always_inline to fix compilation error and keep LTO enabled:
|
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2223951
|
|
Patch4: patch-cyrus-remove-always-inline-for-buf-len
|
|
Patch5: patch-cyrus-rename-imtest
|
|
|
|
# Cassandane patches:
|
|
# Prevent cassandane from trying to syslog things
|
|
Patch91: patch-cassandane-no-syslog
|
|
# Tell the annotator script to run as the current user/group
|
|
# Upstream ticket https://github.com/cyrusimap/cyrus-imapd/issues/1995
|
|
Patch92: patch-cassandane-fix-annotator
|
|
# TODO libexec/cyrus-imapd path element got into upstream:
|
|
# https://github.com/cyrusimap/cyrus-imapd/commit/9233f70bf7a2872ab0b456ea294ce36e0e01e182
|
|
# try to get fixed the below upstream to work on Fedora:
|
|
# https://github.com/cyrusimap/cyrus-imapd/commit/f10eee167313418d84e63d215310477d4fe68e94
|
|
Patch93: patch-cassandane-xapian-delve-path
|
|
|
|
BuildRequires: autoconf automake bison flex gcc gcc-c++ git glibc-langpack-en
|
|
BuildRequires: groff libtool make pkgconfig rsync systemd
|
|
BuildRequires: perl-devel perl-generators perl(ExtUtils::MakeMaker)
|
|
BuildRequires: perl(Pod::Html)
|
|
%if 0%{?fedora} || 0%{?rhel} > 8
|
|
BuildRequires: gnupg2
|
|
%endif
|
|
|
|
%if 0%{?fedora}
|
|
BuildRequires: clamav-devel shapelib-devel
|
|
%endif
|
|
BuildRequires: CUnit-devel cyrus-sasl-devel glib2-devel
|
|
BuildRequires: jansson-devel krb5-devel libical-devel libicu-devel
|
|
BuildRequires: libnghttp2-devel libxml2-devel mariadb-connector-c-devel net-snmp-devel
|
|
BuildRequires: openldap-devel openssl-devel pcre2-devel libpq-devel
|
|
BuildRequires: sqlite-devel xapian-core-devel
|
|
|
|
# Miscellaneous modules needed for 'make check' to function:
|
|
BuildRequires: cyrus-sasl-plain cyrus-sasl-md5
|
|
|
|
BuildRequires: systemd-rpm-macros
|
|
|
|
%if %{with cassandane}
|
|
# Additional packages required for cassandane to function
|
|
BuildRequires: cpan dovecot-devel file-devel net-tools words
|
|
BuildRequires: perl-interpreter
|
|
%if 0%{?fedora}
|
|
BuildRequires: cld2-devel
|
|
%endif
|
|
# Dependency list generated by this command:
|
|
# cd cassandane; grep -R -h '^[ \t]*use .*;$' | sed -e 's/.*use \([^ ]*\).*;/\1/' | sort | uniq | \
|
|
# egrep -v 'Cassandane::|Cyrus::|v5|Net::XmtpServer' | sed -e 's/\(.*\)/BuildRequires: perl(\1)/'
|
|
BuildRequires: perl(attributes)
|
|
BuildRequires: perl(base)
|
|
BuildRequires: perl(BSD::Resource)
|
|
BuildRequires: perl(bytes)
|
|
BuildRequires: perl(Carp)
|
|
BuildRequires: perl(charnames)
|
|
BuildRequires: perl(Clone)
|
|
BuildRequires: perl(Config)
|
|
BuildRequires: perl(constant)
|
|
BuildRequires: perl(Cwd)
|
|
BuildRequires: perl(Data::Dumper)
|
|
BuildRequires: perl(Data::UUID)
|
|
BuildRequires: perl(DBI)
|
|
BuildRequires: perl(Digest::file)
|
|
BuildRequires: perl(Digest::MD5)
|
|
BuildRequires: perl(Encode)
|
|
BuildRequires: perl(Errno)
|
|
BuildRequires: perl(Error)
|
|
BuildRequires: perl(experimental)
|
|
BuildRequires: perl(Exporter)
|
|
BuildRequires: perl(feature)
|
|
BuildRequires: perl(fields)
|
|
BuildRequires: perl(File::Basename)
|
|
BuildRequires: perl(File::Copy)
|
|
BuildRequires: perl(File::Find)
|
|
BuildRequires: perl(File::Path)
|
|
BuildRequires: perl(File::Slurp)
|
|
BuildRequires: perl(File::stat)
|
|
BuildRequires: perl(File::Temp)
|
|
BuildRequires: perl(Getopt::Long)
|
|
BuildRequires: perl(Getopt::Std)
|
|
BuildRequires: perl(HTTP::Daemon)
|
|
BuildRequires: perl(HTTP::Tiny)
|
|
BuildRequires: perl(IO::File)
|
|
BuildRequires: perl(IO::Handle)
|
|
BuildRequires: perl(IO::Scalar)
|
|
BuildRequires: perl(IO::Select)
|
|
BuildRequires: perl(IO::Socket)
|
|
BuildRequires: perl(IO::Socket::INET)
|
|
BuildRequires: perl(IO::Socket::INET6)
|
|
BuildRequires: perl(IO::Socket::UNIX)
|
|
BuildRequires: perl(JSON)
|
|
BuildRequires: perl(JSON::XS)
|
|
BuildRequires: perl(lib)
|
|
BuildRequires: perl(List::Util)
|
|
BuildRequires: perl(LWP::UserAgent)
|
|
BuildRequires: perl(MIME::Base64)
|
|
BuildRequires: perl(Module::Load::Conditional)
|
|
BuildRequires: perl(Net::LDAP::Filter)
|
|
BuildRequires: perl(Net::LDAP::FilterMatch)
|
|
BuildRequires: perl(Net::LDAP::LDIF)
|
|
BuildRequires: perl(Net::LDAP::Util)
|
|
BuildRequires: perl(Net::POP3)
|
|
BuildRequires: perl(Net::Server::PreForkSimple)
|
|
BuildRequires: perl(overload)
|
|
BuildRequires: perl(POSIX)
|
|
BuildRequires: perl(Scalar::Util)
|
|
BuildRequires: perl(Storable)
|
|
BuildRequires: perl(strict)
|
|
BuildRequires: perl(Sys::Hostname)
|
|
BuildRequires: perl(Sys::Syslog)
|
|
BuildRequires: perl(Time::HiRes)
|
|
BuildRequires: perl(URI)
|
|
BuildRequires: perl(URI::Escape)
|
|
BuildRequires: perl(User::pwent)
|
|
BuildRequires: perl(utf8)
|
|
BuildRequires: perl(vars)
|
|
BuildRequires: perl(version)
|
|
BuildRequires: perl(warnings)
|
|
# These were reported as missing during build itself
|
|
BuildRequires: perl(DBD::SQLite)
|
|
BuildRequires: perl(Digest::CRC)
|
|
BuildRequires: perl(Moo)
|
|
BuildRequires: perl(Unix::Syslog)
|
|
BuildRequires: perl(XML::Parser)
|
|
%endif
|
|
|
|
Requires(pre): shadow-utils
|
|
%{?systemd_requires}
|
|
%{?sysusers_requires_compat}
|
|
|
|
Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release}
|
|
Requires: cyrus-imapd-utils = %{version}-%{release}
|
|
Requires: file sscg
|
|
|
|
%{?perl_default_filter}
|
|
|
|
%description
|
|
The Cyrus IMAP (Internet Message Access Protocol) server provides access to
|
|
personal mail, system-wide bulletin boards, news-feeds, calendar and contacts
|
|
through the IMAP, JMAP, NNTP, CalDAV and CardDAV protocols. The Cyrus IMAP
|
|
server is a scalable enterprise groupware system designed for use from small to
|
|
large enterprise environments using technologies based on well-established Open
|
|
Standards.
|
|
|
|
A full Cyrus IMAP implementation allows a seamless mail and bulletin board
|
|
environment to be set up across one or more nodes. It differs from other IMAP
|
|
server implementations in that it is run on sealed nodes, where users are not
|
|
normally permitted to log in. The mailbox database is stored in parts of the
|
|
filesystem that are private to the Cyrus IMAP system. All user access to mail
|
|
is through software using the IMAP, IMAPS, JMAP, POP3, POP3S, KPOP, CalDAV
|
|
and/or CardDAV protocols.
|
|
|
|
The private mailbox database design gives the Cyrus IMAP server large
|
|
advantages in efficiency, scalability, and administratability. Multiple
|
|
concurrent read/write connections to the same mailbox are permitted. The server
|
|
supports access control lists on mailboxes and storage quotas on mailbox
|
|
hierarchies.
|
|
|
|
%package devel
|
|
Summary: Cyrus IMAP server development files
|
|
Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release}
|
|
Requires: pkgconfig
|
|
|
|
%description devel
|
|
The %name-devel package contains header files and libraries
|
|
necessary for developing applications which use the imclient library.
|
|
|
|
%package doc-extra
|
|
Summary: Extra documentation for the Cyrus IMAP server
|
|
BuildArch: noarch
|
|
|
|
%description doc-extra
|
|
This package contains the HTML documentation for the Cyrus IMAP server, as well
|
|
as some legacy and internal documentation not useful for normal operation of
|
|
the server.
|
|
|
|
%package libs
|
|
Summary: Runtime libraries for cyrus-imapd
|
|
|
|
%description libs
|
|
The cyrus-imapd-libs package contains libraries shared by the Cyrus IMAP server
|
|
and the its utilities.
|
|
|
|
%package utils
|
|
Summary: Cyrus IMAP server administration utilities
|
|
Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release}
|
|
Requires: perl-Cyrus = %{version}-%{release}
|
|
|
|
%description utils
|
|
The cyrus-imapd-utils package contains administrative tools for the
|
|
Cyrus IMAP server. It can be installed on systems other than the
|
|
one running the server.
|
|
|
|
%package virusscan
|
|
Summary: Cyrus virus scanning utility
|
|
Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release}
|
|
|
|
%description virusscan
|
|
The cyrus-imapd-virusscan package contains the cyr_virusscan utility. It
|
|
exists in a separate package so that users who do not wish to install all of
|
|
the clamav suite don't have to.
|
|
|
|
Install this package if you wish to use the internal cyrus virus scanning
|
|
utility.
|
|
|
|
%package -n perl-Cyrus
|
|
Summary: Perl libraries for interfacing with Cyrus IMAPd
|
|
|
|
%description -n perl-Cyrus
|
|
This package contains Perl libraries used to interface with Cyrus IMAPd.
|
|
|
|
|
|
%prep
|
|
%if 0%{?fedora} || 0%{?rhel} > 8
|
|
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
|
|
%endif
|
|
|
|
%autosetup -p1
|
|
|
|
# https://github.com/cyrusimap/cyrus-imapd/commit/216934c3f4884999206715db3499fc0162e1d65c
|
|
echo %version > VERSION
|
|
|
|
# Install the Fedora-specific documentation file
|
|
install -m 644 %SOURCE15 doc/
|
|
|
|
# The pm files have shebang lines for some reason
|
|
sed -i -e '1{/usr.bin.perl/d}' perl/annotator/{Message,Daemon}.pm
|
|
|
|
# This one uses env
|
|
sed -i -e '1i#!/usr/bin/perl' -e '1d' tools/rehash
|
|
|
|
# These files have a bizarre perl-in-shell shebang setup. The exec perl bit
|
|
# sometimes comes after a long comment block. All use magic to turn on -w.
|
|
# Some of these aren't installed, but we might as well fix them all just in
|
|
# case.
|
|
sed -i \
|
|
-e '1i#!/usr/bin/perl -w' \
|
|
-e '/^#!\/usr\/bin\/perl/d' \
|
|
-e '/^exec perl/d' \
|
|
-e '/^#!perl -w/d' \
|
|
-e '/^#!perl/d' \
|
|
-e '/^#!\/bin\/sh/d' \
|
|
-e '/^#! \/bin\/sh/d' \
|
|
perl/sieve/scripts/installsieve.pl perl/imap/cyradm.sh tools/translatesieve
|
|
# TODO: let the above remnants get fixed upstream like it happened for previous occurences:
|
|
# https://github.com/cyrusimap/cyrus-imapd/commit/09fd77717044f96e900c38b1e361028ef39ba381
|
|
# https://github.com/cyrusimap/cyrus-imapd/commit/bbb7c68a6b55ffe9356d2033192fffbcafc4d73f
|
|
|
|
%if %{with cassandane}
|
|
pushd cassandane
|
|
mkdir work
|
|
cp %SOURCE81 cassandane.ini
|
|
# RF rpm-buildroot-usage
|
|
sed -i \
|
|
-e "s!CASSDIR!$(pwd)!" \
|
|
-e "s!BUILDROOT!%buildroot!" \
|
|
cassandane.ini
|
|
popd
|
|
%endif
|
|
|
|
|
|
%build
|
|
#autoreconf -vi
|
|
|
|
%if %{with cassandane} && 0%{?fedora}
|
|
# Needed for Cyrus::FastMail tests to pass
|
|
export CLD2_CFLAGS="-I/usr/include/cld2"
|
|
export CLD2_LIBS="-lcld2"
|
|
%endif
|
|
|
|
%configure \
|
|
--disable-silent-rules \
|
|
\
|
|
--libexecdir=%cyrexecdir \
|
|
--with-clamav \
|
|
%if %{with cassandane} && 0%{?fedora}
|
|
`# Needed for Cyrus::FastMail tests to pass` \
|
|
--with-cld2 \
|
|
%endif
|
|
--with-extraident="%release Fedora" \
|
|
--with-krbimpl=mit \
|
|
--with-ldap=/usr \
|
|
--with-libwrap=no \
|
|
--with-mysql \
|
|
--with-pgsql \
|
|
--with-perl=%__perl \
|
|
--with-snmp \
|
|
--with-syslogfacility=MAIL \
|
|
\
|
|
--enable-autocreate \
|
|
--enable-backup \
|
|
--enable-calalarmd \
|
|
--enable-http \
|
|
--enable-idled \
|
|
--enable-murder \
|
|
--enable-jmap \
|
|
--enable-nntp \
|
|
--enable-replication \
|
|
--enable-unit-tests \
|
|
--enable-xapian \
|
|
`# Force use of pcre2 in case pcre still available` \
|
|
--disable-pcre
|
|
|
|
# Try to get rid of RPATH....
|
|
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
|
|
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
|
|
|
|
# The configure script will set up the Perl makefiles, but not in the way
|
|
# Fedora needs them. So regenerate them manually.
|
|
for i in perl/annotator perl/imap perl/sieve/managesieve; do
|
|
pushd $i
|
|
rm -f Makefile
|
|
perl Makefile.PL INSTALLDIRS=vendor # NO_PERLOCAL=1 NO_PACKLIST=1
|
|
popd
|
|
done
|
|
|
|
%make_build
|
|
|
|
# This isn't built by default, but this package has always installed it.
|
|
make notifyd/notifytest
|
|
|
|
# CASSANDANE_BUILD
|
|
%if %{with cassandane}
|
|
# This module is not available in Fedora:
|
|
yes | cpan -T IO::File::fcntl
|
|
# These are currently missing on RHEL10 (2024-06-10):
|
|
yes | cpan -T AnyEvent \
|
|
AnyEvent::Handle \
|
|
AnyEvent::Socket \
|
|
AnyEvent::Util \
|
|
Config::IniFiles \
|
|
Data::GUID \
|
|
Data::ICal \
|
|
DateTime \
|
|
DateTime::Format::ISO8601 \
|
|
File::chdir \
|
|
File::LibMagic \
|
|
Mail::IMAPTalk \
|
|
Mail::JMAPTalk \
|
|
Math::Int64 \
|
|
Net::CalDAVTalk \
|
|
Net::CardDAVTalk \
|
|
Net::CardDAVTalk::VCard \
|
|
Net::DAVTalk \
|
|
Net::LDAP::Server \
|
|
News::NNTPClient \
|
|
Plack::Loader \
|
|
Plack::Request \
|
|
Plack::Response \
|
|
String::CRC32 \
|
|
Test::TCP \
|
|
Test::Unit::Exception \
|
|
Test::Unit::Result \
|
|
Test::Unit::Runner::XML \
|
|
Text::VCardFast \
|
|
Types::Standard \
|
|
XML::DOM \
|
|
XML::Generator \
|
|
XML::Spice
|
|
|
|
# Fix cpan's version of perl-Test-Unit like it is done on Fedora:
|
|
# https://src.fedoraproject.org/rpms/perl-Test-Unit/c/c8ec65eb06f4f7059f9e4a32b5c521a26eef746b
|
|
sed -ie 's/defined(@{"$class\\::TESTS"})/@{"$class\::TESTS"}/' /usr/local/share/perl5/5.38/Test/Unit/TestCase.pm
|
|
|
|
# This is the test suite, which doesn't build much but does verify its dependencies.
|
|
pushd cassandane
|
|
export NOCYRUS=1
|
|
make
|
|
popd
|
|
%endif
|
|
# CASSANDANE_BUILD_END
|
|
|
|
|
|
%install
|
|
make install DESTDIR=%buildroot
|
|
|
|
# Create directories
|
|
install -d \
|
|
%buildroot/etc/{rc.d/init.d,logrotate.d,pam.d,sysconfig,cron.daily} \
|
|
%buildroot/%_libdir/sasl \
|
|
%buildroot/var/spool/imap \
|
|
%buildroot/var/lib/imap/{user,quota,proc,log,msg,socket,db,sieve,sync,md5,rpm,backup,meta} \
|
|
%buildroot/var/lib/imap/ptclient \
|
|
%buildroot/%_datadir/%name/rpm \
|
|
%buildroot/%cyrexecdir \
|
|
%buildroot/etc/pki/%name
|
|
|
|
install -d -m 0750 \
|
|
%buildroot/run/cyrus \
|
|
%buildroot/run/cyrus/socket
|
|
|
|
install -d -m 0700 \
|
|
%buildroot/run/cyrus/db \
|
|
%buildroot/run/cyrus/lock \
|
|
%buildroot/run/cyrus/proc
|
|
|
|
# Some tools which aren't installed by the makefile which we have always installed
|
|
install -m 755 notifyd/notifytest %buildroot%_bindir/
|
|
install -m 755 perl/imap/cyradm %buildroot%_bindir/
|
|
for i in arbitronsort.pl masssievec mkimap mknewsgroups rehash translatesieve; do
|
|
install -m 755 tools/$i %buildroot/%cyrexecdir/
|
|
done
|
|
|
|
install -p -m 644 %SOURCE10 %buildroot/etc/logrotate.d/%name
|
|
|
|
# PAM configuration files.
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/csync
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/http
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/imap
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/lmtp
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/mupdate
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/nntp
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/pop
|
|
install -p -m 644 %SOURCE11 %buildroot/etc/pam.d/sieve
|
|
|
|
install -p -m 644 %SOURCE12 %buildroot/etc/sysconfig/%name
|
|
install -p -m 644 %SOURCE13 %buildroot/%_datadir/%name/rpm/magic
|
|
install -p -m 755 %SOURCE14 %buildroot/etc/cron.daily/%name
|
|
install -p -m 644 doc/examples/cyrus_conf/prefork.conf %buildroot/etc/cyrus.conf
|
|
install -p -m 644 doc/examples/imapd_conf/normal.conf %buildroot/etc/imapd.conf
|
|
install -p -D -m 644 %SOURCE16 %buildroot/%_unitdir/cyrus-imapd.service
|
|
install -p -D -m 644 %SOURCE17 %buildroot/%_unitdir/cyrus-imapd-init.service
|
|
install -p -D -m 644 %SOURCE18 %buildroot/%_tmpfilesdir/cyrus-imapd.conf
|
|
# systemd-sysusers
|
|
install -p -D -m 644 %{SOURCE19} %{buildroot}%{_sysusersdir}/cyrus-imapd.conf
|
|
|
|
# Cleanup of doc dir
|
|
find doc perl -name CVS -type d -prune -exec rm -rf {} \;
|
|
find doc perl -name .cvsignore -type f -exec rm -f {} \;
|
|
rm -f doc/Makefile.dist*
|
|
rm -f doc/text/htmlstrip.c
|
|
rm -f doc/text/Makefile
|
|
rm -rf doc/man
|
|
|
|
# fix permissions on perl .so files
|
|
find %buildroot/%_libdir/perl5/ -type f -name "*.so" -exec chmod 755 {} \;
|
|
|
|
# Generate db config file
|
|
# XXX Is this still necessary?
|
|
( grep '^{' lib/imapoptions | grep _db | cut -d'"' -f 2,4 | \
|
|
sed -e 's/^ *//' -e 's/-nosync//' -e 's/ *$//' -e 's/"/=/'
|
|
echo sieve_version=2.2.3 ) | sort > %buildroot/%_datadir/%name/rpm/db.cfg
|
|
|
|
# Cyrus has various files with extremely conflicting names. Some of these are
|
|
# not unexpected ("imapd" itself) but some like "httpd" are rather surprising.
|
|
|
|
# Where there are only conflicting manpages, they have been moved to a "8cyrus"
|
|
# section. If the binary was renamed, then the manpages are renamed to match
|
|
# but a internal replacement has not been done. This may lead to more
|
|
# confusion but involves modifying fewer upstream files.
|
|
|
|
# Actual binary conflicts
|
|
# Rename 'fetchnews' binary and manpage to avoid clash with leafnode
|
|
mv %buildroot/%_sbindir/fetchnews %buildroot/%_sbindir/cyr_fetchnews
|
|
mv %buildroot/%_mandir/man8/fetchnews.8 %buildroot/%_mandir/man8/cyr_fetchnews.8
|
|
|
|
# Fix conflict with dump
|
|
mv %buildroot/%_sbindir/restore %buildroot/%_sbindir/cyr_restore
|
|
mv %buildroot/%_mandir/man8/restore.8 %buildroot/%_mandir/man8/cyr_restore.8
|
|
|
|
# Fix conceptual conflict with quota
|
|
mv %buildroot/%_sbindir/quota %buildroot/%_sbindir/cyr_quota
|
|
mv %buildroot/%_mandir/man8/quota.8 %buildroot/%_mandir/man8/cyr_quota.8
|
|
|
|
# fix conflicts with uw-imap
|
|
mv %buildroot/%_mandir/man8/imapd.8 %buildroot/%_mandir/man8/imapd.8cyrus
|
|
mv %buildroot/%_mandir/man8/pop3d.8 %buildroot/%_mandir/man8/pop3d.8cyrus
|
|
|
|
# Rename 'master' manpage
|
|
mv %buildroot/%_mandir/man8/master.8 %buildroot/%_mandir/man8/master.8cyrus
|
|
|
|
# Rename 'httpd' manpage to avoid clash with Apache
|
|
mv %buildroot/%_mandir/man8/httpd.8 %buildroot/%_mandir/man8/httpd.8cyrus
|
|
|
|
# Fix conflict with imtest from python-fslpy
|
|
mv %buildroot/%_bindir/imtest %buildroot/%_bindir/cyr_imtest
|
|
mv %buildroot/%_mandir/man1/imtest.1 %buildroot/%_mandir/man1/cyr_imtest.1
|
|
# Change individual symlinks to point to cyr_imtest instead of imtest
|
|
for i in httptest lmtptest mupdatetest nntptest pop3test sivtest smtptest synctest; do
|
|
ln -sfr %buildroot/%_bindir/cyr_imtest %buildroot/%_bindir/$i
|
|
done
|
|
|
|
# Old cyrus packages used to keep the deliver executable in
|
|
# /usr/lib/cyrus-imapd, and MTA configurations might rely on this.
|
|
# Remove this hack in the F30 timeframe.
|
|
# RF hardcoded-library-path in %%buildroot/usr/lib/cyrus-imapd
|
|
mkdir %buildroot/usr/lib/cyrus-imapd
|
|
pushd %buildroot/usr/lib/cyrus-imapd
|
|
ln -s ../../sbin/deliver
|
|
popd
|
|
|
|
#remove executable bit from docs and Perl modules
|
|
for ddir in doc perl/imap/examples
|
|
do
|
|
find $ddir -type f -exec chmod -x {} \;
|
|
done
|
|
|
|
# Remove pointless libtool archives
|
|
rm %buildroot/%_libdir/*.la
|
|
|
|
# Remove installed but not packaged files
|
|
rm %buildroot/%cyrexecdir/pop3proxyd
|
|
find %buildroot -name "perllocal.pod" -exec rm {} \;
|
|
find %buildroot -name ".packlist" -exec rm {} \;
|
|
|
|
# And this one gets installed with executable permission
|
|
chmod -x %buildroot/%perl_vendorlib/Cyrus/Annotator/Daemon.pm
|
|
|
|
|
|
%check
|
|
%if %{without cassandane}
|
|
exit 0
|
|
%endif
|
|
|
|
%ifarch %{ix86} armv7hl
|
|
exit 0
|
|
%endif
|
|
|
|
# TODO: The mime_boundary_extended cunit test fails due to LTO on ppc64le, skip it for now:
|
|
%ifnarch ppc64le
|
|
LD_LIBRARY_PATH=%buildroot/%_libdir make -j%{?_smp_build_ncpus} check || exit 1
|
|
%endif
|
|
|
|
# Cassandane cannot run solely as root because imap services would otherwise quit:
|
|
#$ grep -R "must run as the Cyrus user" | egrep "imapd|httpd|pop3d"
|
|
#imap/imapd.c: if (geteuid() == 0) fatal("must run as the Cyrus user", EX_USAGE);
|
|
#imap/httpd.c: if (geteuid() == 0) fatal("must run as the Cyrus user", EX_USAGE);
|
|
#imap/pop3d.c: if (geteuid() == 0) fatal("must run as the Cyrus user", EX_USAGE);
|
|
getent group saslauth >/dev/null || /usr/sbin/groupadd -g %gid -r saslauth
|
|
# Set up shell and home directory for cyrus so that debugging of failing tests is easier.
|
|
getent passwd cyrus >/dev/null && /usr/sbin/usermod -s /bin/bash cyrus
|
|
getent passwd cyrus >/dev/null || /usr/sbin/useradd -c "Cyrus IMAP Server" -d /var/lib/imap -g %cyrusgroup \
|
|
-G saslauth -s /bin/bash -u %uid -r %cyrususer -m
|
|
|
|
# Set LD_LIBRARY_PATH for cyrus so that it points to cyrus-imapd libraries we just built.
|
|
[ -z "`grep LD_LIBRARY_PATH /var/lib/imap/.bashrc`" ] && echo "export LD_LIBRARY_PATH=%buildroot/%_libdir" >> /var/lib/imap/.bashrc
|
|
|
|
# CASSANDANE
|
|
# Run the Cassandane test suite. This will exhaustively test the various
|
|
# server components, but running it in a mock chroot is rather an exercise.
|
|
pushd cassandane
|
|
|
|
# Do not depend on imaptest package (missing on RHEL10)
|
|
wget https://dovecot.org/nightly/imaptest/imaptest-20210511.tar.gz
|
|
rm -rf imaptest-src
|
|
mkdir imaptest-src
|
|
tar -xf imaptest-20210511.tar.gz --strip-components=1 -C imaptest-src
|
|
pushd imaptest-src
|
|
# Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1103927#c4 (and later)
|
|
sed -e 's@\(^LIBDOVECOT .*\)@\1 -Wl,-rpath -Wl,/usr/lib64/dovecot@' -i src/Makefile.in
|
|
./configure --with-dovecot=/usr/lib64/dovecot
|
|
make
|
|
popd
|
|
|
|
mkdir -p imaptest/src
|
|
ln -sfr ./imaptest-src/src/imaptest imaptest/src
|
|
ln -sfr ./imaptest-src/src/tests imaptest/src
|
|
|
|
chown -R cyrus:mail .
|
|
|
|
# Construct the set of excluded tests to pass to Cassandane
|
|
# ---------------------------------------------------------
|
|
exclude=()
|
|
tests=(
|
|
# This exclusion list was verified on 2024-06-10.
|
|
|
|
# This tests coredumping and won't work on a machine where systemd
|
|
# intercepts coredumps, which includes our builders.
|
|
Cassandane::Test::Core
|
|
|
|
# Can't currently be run at build time because of compiled-in paths. See
|
|
# https://github.com/cyrusimap/cyrus-imapd/issues/2386
|
|
Admin.imap_admins
|
|
|
|
# TODO currently failing
|
|
Cyrus::Flags.userflags_crash
|
|
Cyrus::JMAPCore.eventsource
|
|
Cyrus::JMAPEmail.email_query_no_guidsearch_ignore_jmapuploads
|
|
Cyrus::JMAPEmail.email_query_seen_multimbox
|
|
Cyrus::JMAPEmail.email_query_unicodefdfx
|
|
Cyrus::JMAPMailbox.mailbox_ignore_notes_subfolders
|
|
Cyrus::JMAPMailbox.mailbox_set_create_specialuse_nochildren
|
|
Cyrus::JMAPMailbox.mailbox_set_sharewith_acl
|
|
Cyrus::JMAPSieve.getmetadata
|
|
Cyrus::SearchSquat.nonincremental
|
|
Cyrus::SearchSquat.incremental
|
|
Cyrus::SearchSquat.one_doc_per_message
|
|
|
|
Cyrus::JMAPBackup.restore_calendars_batch_size_bug
|
|
Cyrus::Prometheus.connection_setup_failure_imapd
|
|
)
|
|
for i in ${tests[@]}; do exclude+=("!$i"); done
|
|
|
|
# If cyrus-imapd is built without cld2 support, the below tests are expected to fail:
|
|
if [ -z "$CLD2_CFLAGS" ]; then
|
|
exclude+=(
|
|
"!Cyrus::FastMail.cyr_expire_delete_findpaths_legacy"
|
|
"!Cyrus::FastMail.cyr_expire_delete_findpaths_nolegacy"
|
|
"!Cyrus::FastMail.relocate_legacy_domain"
|
|
"!Cyrus::FastMail.relocate_legacy_nodomain"
|
|
"!Cyrus::FastMail.relocate_legacy_nosearchdb"
|
|
"!Cyrus::FastMail.relocate_messages_still_exist"
|
|
"!Cyrus::FastMail.search_deleted_folder"
|
|
"!Cyrus::FastMail.sync_reset_legacy"
|
|
"!Cyrus::FastMail.sync_reset_nolegacy"
|
|
)
|
|
fi
|
|
|
|
%ifarch s390x
|
|
# This one test fails occasionally on s390x because the hosts are just too slow
|
|
# to complete it.D It's testing something valid (that the fork rate limiting
|
|
# settings work properly) but s390x can't fork quickly enough to exceeed the
|
|
# limits it's testing.
|
|
exclude+=("!Master.maxforkrate")
|
|
%endif
|
|
|
|
# Add -vvv for too much output
|
|
sudo -u cyrus -g mail LD_LIBRARY_PATH=%buildroot/%_libdir ./testrunner.pl -j%{?_smp_build_ncpus} -v -f pretty ${exclude[@]} 2>&1 || :
|
|
# CASSANDANE_END
|
|
|
|
if [ -s "work/failed" ]; then
|
|
cat work/failed
|
|
exit 1
|
|
fi
|
|
|
|
|
|
%pre
|
|
%sysusers_create_compat %{SOURCE19}
|
|
|
|
%post
|
|
%systemd_post cyrus-imapd.service
|
|
|
|
%preun
|
|
%systemd_preun cyrus-imapd.service
|
|
|
|
%postun
|
|
%systemd_postun_with_restart cyrus-imapd.service
|
|
|
|
|
|
%files
|
|
%license COPYING
|
|
%doc README.md doc/README.* doc/examples doc/text
|
|
|
|
%{_sbindir}/arbitron
|
|
%{_sbindir}/chk_cyrus
|
|
%{_sbindir}/ctl_backups
|
|
%{_sbindir}/ctl_conversationsdb
|
|
%{_sbindir}/ctl_cyrusdb
|
|
%{_sbindir}/ctl_deliver
|
|
%{_sbindir}/ctl_mboxlist
|
|
%{_sbindir}/ctl_zoneinfo
|
|
%{_sbindir}/cvt_cyrusdb
|
|
%{_sbindir}/cvt_xlist_specialuse
|
|
%{_sbindir}/cyr_backup
|
|
%{_sbindir}/cyr_buildinfo
|
|
%{_sbindir}/cyr_cd.sh
|
|
%{_sbindir}/cyr_dbtool
|
|
%{_sbindir}/cyr_deny
|
|
%{_sbindir}/cyr_df
|
|
%{_sbindir}/cyr_expire
|
|
%{_sbindir}/cyr_fetchnews
|
|
%{_sbindir}/cyr_info
|
|
%{_sbindir}/cyr_ls
|
|
%{_sbindir}/cyr_pwd
|
|
%{_sbindir}/cyr_quota
|
|
%{_sbindir}/cyr_restore
|
|
%{_sbindir}/cyr_synclog
|
|
%{_sbindir}/cyr_userseen
|
|
%{_sbindir}/cyrdump
|
|
%{_sbindir}/dav_reconstruct
|
|
%{_sbindir}/deliver
|
|
%{_sbindir}/ipurge
|
|
%{_sbindir}/mbexamine
|
|
%{_sbindir}/mbpath
|
|
%{_sbindir}/mbtool
|
|
%{_sbindir}/ptdump
|
|
%{_sbindir}/ptexpire
|
|
%{_sbindir}/reconstruct
|
|
%{_sbindir}/relocate_by_id
|
|
%{_sbindir}/sievec
|
|
%{_sbindir}/sieved
|
|
%{_sbindir}/squatter
|
|
%{_sbindir}/sync_client
|
|
%{_sbindir}/sync_reset
|
|
%{_sbindir}/tls_prune
|
|
%{_sbindir}/unexpunge
|
|
%{_datadir}/cyrus-imapd
|
|
%{_mandir}/man1/dav_reconstruct.1*
|
|
%{_mandir}/man5/cyrus.conf.5*
|
|
%{_mandir}/man5/imapd.conf.5*
|
|
%{_mandir}/man5/krb.equiv.5*
|
|
%{_mandir}/man8/arbitron.8*
|
|
%{_mandir}/man8/backupd.8*
|
|
%{_mandir}/man8/chk_cyrus.8*
|
|
%{_mandir}/man8/ctl_backups.8*
|
|
%{_mandir}/man8/ctl_conversationsdb.8*
|
|
%{_mandir}/man8/ctl_cyrusdb.8*
|
|
%{_mandir}/man8/ctl_deliver.8*
|
|
%{_mandir}/man8/ctl_mboxlist.8*
|
|
%{_mandir}/man8/ctl_zoneinfo.8*
|
|
%{_mandir}/man8/cvt_cyrusdb.8*
|
|
%{_mandir}/man8/cvt_xlist_specialuse.8*
|
|
%{_mandir}/man8/cyr_backup.8*
|
|
%{_mandir}/man8/cyr_buildinfo.8*
|
|
%{_mandir}/man8/cyr_dbtool.8*
|
|
%{_mandir}/man8/cyr_deny.8*
|
|
%{_mandir}/man8/cyr_df.8*
|
|
%{_mandir}/man8/cyr_expire.8*
|
|
%{_mandir}/man8/cyr_fetchnews.8*
|
|
%{_mandir}/man8/cyr_info.8*
|
|
%{_mandir}/man8/cyr_ls.8*
|
|
%{_mandir}/man8/cyr_quota.8*
|
|
%{_mandir}/man8/cyr_restore.8*
|
|
%{_mandir}/man8/cyr_synclog.8*
|
|
%{_mandir}/man8/cyr_userseen.8*
|
|
%{_mandir}/man8/cyradm.8*
|
|
%{_mandir}/man8/cyrdump.8*
|
|
%{_mandir}/man8/deliver.8*
|
|
%{_mandir}/man8/fud.8*
|
|
%{_mandir}/man8/httpd.8cyrus*
|
|
%{_mandir}/man8/idled.8*
|
|
%{_mandir}/man8/imapd.8cyrus*
|
|
%{_mandir}/man8/ipurge.8*
|
|
%{_mandir}/man8/lmtpd.8*
|
|
%{_mandir}/man8/lmtpproxyd.8*
|
|
%{_mandir}/man8/master.8cyrus*
|
|
%{_mandir}/man8/mbexamine.8*
|
|
%{_mandir}/man8/mbpath.8*
|
|
%{_mandir}/man8/mbtool.8*
|
|
%{_mandir}/man8/mupdate.8*
|
|
%{_mandir}/man8/nntpd.8*
|
|
%{_mandir}/man8/notifyd.8*
|
|
%{_mandir}/man8/pop3d.8cyrus*
|
|
%{_mandir}/man8/pop3proxyd.8*
|
|
%{_mandir}/man8/promstatsd.8*
|
|
%{_mandir}/man8/proxyd.8*
|
|
%{_mandir}/man8/ptdump.8*
|
|
%{_mandir}/man8/ptexpire.8*
|
|
%{_mandir}/man8/ptloader.8*
|
|
%{_mandir}/man8/reconstruct.8*
|
|
%{_mandir}/man8/relocate_by_id.8*
|
|
%{_mandir}/man8/sievec.8*
|
|
%{_mandir}/man8/sieved.8*
|
|
%{_mandir}/man8/smmapd.8*
|
|
%{_mandir}/man8/squatter.8*
|
|
%{_mandir}/man8/sync_client.8*
|
|
%{_mandir}/man8/sync_reset.8*
|
|
%{_mandir}/man8/sync_server.8*
|
|
%{_mandir}/man8/timsieved.8*
|
|
%{_mandir}/man8/tls_prune.8*
|
|
%{_mandir}/man8/unexpunge.8*
|
|
|
|
%exclude %{_sbindir}/cyr_virusscan
|
|
%exclude %{_mandir}/man8/cyr_virusscan.8*
|
|
|
|
# For the legacy symlink to the deliver binary
|
|
# RF hardcoded-library-path in /usr/lib/cyrus-imapd
|
|
/usr/lib/cyrus-imapd/
|
|
|
|
%dir /etc/pki/cyrus-imapd
|
|
%attr(0644,root,%cyrusgroup) %ghost %config(missingok,noreplace) %verify(not md5 size mtime) %ssl_pem_file_prefix-ca.pem
|
|
%attr(0644,root,%cyrusgroup) %ghost %config(missingok,noreplace) %verify(not md5 size mtime) %ssl_pem_file_prefix.pem
|
|
%attr(0640,root,%cyrusgroup) %ghost %config(missingok,noreplace) %verify(not md5 size mtime) %ssl_pem_file_prefix-key.pem
|
|
|
|
%config(noreplace) /etc/cyrus.conf
|
|
%config(noreplace) /etc/imapd.conf
|
|
%config(noreplace) /etc/logrotate.d/cyrus-imapd
|
|
%config(noreplace) /etc/sysconfig/cyrus-imapd
|
|
%config(noreplace) /etc/pam.d/*
|
|
|
|
/etc/cron.daily/cyrus-imapd
|
|
%_unitdir/cyrus-imapd.service
|
|
%_unitdir/cyrus-imapd-init.service
|
|
%_tmpfilesdir/cyrus-imapd.conf
|
|
%{_sysusersdir}/cyrus-imapd.conf
|
|
|
|
%dir %cyrexecdir/
|
|
%cyrexecdir/[a-uw-z]*
|
|
|
|
# This creates some directories which in the default configuration cyrus will
|
|
# never use because they are placed under /run instead. However, old
|
|
# configurations or setup advice from the 'net might reference them, and so
|
|
# it's simpler to just leave them in the package.
|
|
%attr(0750,%cyrususer,%cyrusgroup) %dir /var/lib/imap/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/backup/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/db/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/log/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/meta/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/md5/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/msg/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/proc/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/ptclient/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/quota/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/rpm/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/sieve/
|
|
%attr(0750,%cyrususer,%cyrusgroup) /var/lib/imap/socket
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/sync/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/lib/imap/user/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /var/spool/imap/
|
|
|
|
# The new locations
|
|
%attr(0750,%cyrususer,%cyrusgroup) %dir /run/cyrus/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /run/cyrus/db/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /run/cyrus/lock/
|
|
%attr(0700,%cyrususer,%cyrusgroup) /run/cyrus/proc/
|
|
%attr(0750,%cyrususer,%cyrusgroup) /run/cyrus/socket/
|
|
|
|
%files devel
|
|
%{_includedir}/cyrus/
|
|
%{_libdir}/libcyrus.so
|
|
%{_libdir}/libcyrus_imap.so
|
|
%{_libdir}/libcyrus_min.so
|
|
%{_libdir}/libcyrus_sieve.so
|
|
%{_libdir}/pkgconfig/*.pc
|
|
%{_mandir}/man3/imclient.3*
|
|
|
|
%files doc-extra
|
|
%doc doc/html doc/internal doc/legacy
|
|
|
|
%files libs
|
|
%license COPYING
|
|
%{_libdir}/libcyrus.so.0*
|
|
%{_libdir}/libcyrus_imap.so.0*
|
|
%{_libdir}/libcyrus_min.so.0*
|
|
%{_libdir}/libcyrus_sieve.so.0*
|
|
|
|
%files utils
|
|
%{_bindir}/cyradm
|
|
%{_bindir}/httptest
|
|
%{_bindir}/cyr_imtest
|
|
%{_bindir}/installsieve
|
|
%{_bindir}/lmtptest
|
|
%{_bindir}/mupdatetest
|
|
%{_bindir}/nntptest
|
|
%{_bindir}/notifytest
|
|
%{_bindir}/pop3test
|
|
%{_bindir}/sieveshell
|
|
%{_bindir}/sivtest
|
|
%{_bindir}/smtptest
|
|
%{_bindir}/synctest
|
|
%{_mandir}/man1/cyradm.1*
|
|
%{_mandir}/man1/httptest.1*
|
|
%{_mandir}/man1/cyr_imtest.1*
|
|
%{_mandir}/man1/installsieve.1*
|
|
%{_mandir}/man1/lmtptest.1*
|
|
%{_mandir}/man1/mupdatetest.1*
|
|
%{_mandir}/man1/nntptest.1*
|
|
%{_mandir}/man1/pop3test.1*
|
|
%{_mandir}/man1/sieveshell.1*
|
|
%{_mandir}/man1/sivtest.1*
|
|
%{_mandir}/man1/smtptest.1*
|
|
%{_mandir}/man1/synctest.1*
|
|
|
|
%files virusscan
|
|
%{_sbindir}/cyr_virusscan
|
|
%{_mandir}/man8/cyr_virusscan.8*
|
|
|
|
%files -n perl-Cyrus
|
|
%license COPYING
|
|
%doc perl/imap/README
|
|
%doc perl/imap/Changes
|
|
%doc perl/imap/examples
|
|
%{perl_vendorarch}/auto/Cyrus
|
|
%{perl_vendorarch}/Cyrus
|
|
%{perl_vendorlib}/Cyrus
|
|
%{_mandir}/man3/Cyrus::Annotator::Daemon.3pm*
|
|
%{_mandir}/man3/Cyrus::Annotator::Message.3pm*
|
|
%{_mandir}/man3/Cyrus::IMAP.3pm*
|
|
%{_mandir}/man3/Cyrus::IMAP::Admin.3pm*
|
|
%{_mandir}/man3/Cyrus::IMAP::Shell.3pm*
|
|
%{_mandir}/man3/Cyrus::SIEVE::managesieve.3pm*
|
|
|
|
|
|
%changelog
|
|
%autochangelog
|