You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
379 lines
14 KiB
379 lines
14 KiB
## |
|
## imapd.spec -- OpenPKG RPM Package Specification |
|
## Copyright (c) 2000-2021 OpenPKG Project <http://openpkg.org/> |
|
## |
|
## Permission to use, copy, modify, and distribute this software for |
|
## any purpose with or without fee is hereby granted, provided that |
|
## the above copyright notice and this permission notice appear in all |
|
## copies. |
|
## |
|
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
|
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
|
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
## SUCH DAMAGE. |
|
## |
|
|
|
# package information |
|
Name: imapd |
|
Summary: Cyrus IMAP Server |
|
URL: http://cyrusimap.org/ |
|
Vendor: Carnegie Mellon University |
|
Packager: OpenPKG Project |
|
Distribution: OpenPKG Community |
|
Class: BASE |
|
Group: Mail |
|
License: BSD |
|
Version: 2.4.17 |
|
Release: 20140301 |
|
|
|
# package options |
|
%option with_fsl yes |
|
%option with_group no |
|
%option with_group_igncase no |
|
%option with_atvdom no |
|
%option with_drac no |
|
%option with_replication no |
|
%option with_murder no |
|
%option with_listext no |
|
%option with_nntp no |
|
%option with_ldap no |
|
|
|
# list of sources |
|
Source0: ftp://ftp.cyrusimap.org/cyrus-imapd/cyrus-imapd-%{version}.tar.gz |
|
Source1: rc.imapd |
|
Source2: cyrus.conf |
|
Source3: imapd.conf |
|
Source4: fsl.imapd |
|
Patch0: imapd.patch |
|
Patch1: imapd.patch.group |
|
|
|
# build information |
|
BuildPreReq: OpenPKG, openpkg >= 20160101, perl, perl-openpkg, make, config |
|
PreReq: OpenPKG, openpkg >= 20160101, perl, MTA |
|
BuildPreReq: sasl, db >= 4.4, openssl, pcre |
|
PreReq: sasl, db >= 4.4, openssl, pcre |
|
%if "%{with_fsl}" == "yes" |
|
BuildPreReq: fsl |
|
PreReq: fsl |
|
%endif |
|
%if "%{with_ldap}" == "yes" |
|
BuildPreReq: openldap >= 2.2.14 |
|
PreReq: openldap >= 2.2.14 |
|
%endif |
|
%if "%{with_drac}" == "yes" |
|
BuildPreReq: drac |
|
PreReq: drac |
|
%endif |
|
|
|
%description |
|
The Cyrus IMAP server is an IMAP4 and POP3 daemon that differs from |
|
other IMAP server implementations in that it is generally intended |
|
to be run on sealed servers, where normal users are not 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 the IMAP, POP3, or KPOP protocols. |
|
|
|
%track |
|
prog imapd = { |
|
version = %{version} |
|
url = ftp://ftp.cyrusimap.org/cyrus-imapd/ |
|
regex = cyrus-imapd-(\d+\.\d+\.\d+)\.tar\.gz |
|
} |
|
|
|
%prep |
|
%setup -q -n cyrus-imapd-%{version} |
|
%patch -p0 |
|
|
|
# upgrade config scripts for better platform support |
|
%{l_prefix}/bin/config install |
|
|
|
# add optional group file support with support to ignore case |
|
%if "%{with_group}" == "yes" |
|
cp %{PATCH imapd.patch.group} imapd.patch.group |
|
%if "%{with_group_igncase}" == "yes" |
|
%{l_shtool} subst -e 's;^\(\+.*\)strcmp;\1strcasecmp;' imapd.patch.group |
|
%endif |
|
%{l_patch} -p1 <imapd.patch.group |
|
%{l_shtool} subst \ |
|
-e 's;/etc/imapd\.group;%{l_prefix}/etc/imapd/imapd.group;' \ |
|
lib/auth_unix.c |
|
%endif |
|
|
|
# add optional support for ldap |
|
%if "%{with_ldap}" == "yes" |
|
%{l_shtool} subst -e 's;\(IMAP_LIBS="${LIB_SASL}\) \(.*"\);\1 -lldap -llber \2;g' configure |
|
%endif |
|
|
|
# add optional DRAC file support |
|
%if "%{with_drac}" == "yes" |
|
%{l_shtool} subst -e 's;@DRACLIBS@;-ldrac;g' contrib/drac_auth.patch |
|
%{l_patch} -p0 <contrib/drac_auth.patch |
|
%endif |
|
|
|
# make sure config2header rebuilds imapopts based on imapoptions |
|
rm -f lib/imapopts.h lib/imapopts.c >/dev/null 2>&1 || true |
|
|
|
# fix Berkeley-DB detection |
|
%{l_shtool} subst\ |
|
-e 's;-L/usr/local/lib;;g' \ |
|
-e 's;-I/usr/local/include;;g' \ |
|
-e 's;db-4\.[0-9];db;g' \ |
|
-e 's;-l\$dbname;%{l_prefix}/lib/lib$dbname.a;g' \ |
|
configure |
|
|
|
# ensure correct linking of Berkeley-DB in perl bindings |
|
loclibs="" |
|
case "%{l_platform -t}" in |
|
*-sunos* ) |
|
%{l_shtool} subst \ |
|
-e 's;^\( *.LIBS..*\)\(\"\],.*\)$;\1 -ldb -lrt\2;' \ |
|
perl/sieve/managesieve/Makefile.PL perl/imap/Makefile.PL |
|
;; |
|
* ) |
|
%{l_shtool} subst \ |
|
-e 's;^\( *.LIBS..*\)\(\"\],.*\)$;\1 -ldb\2;' \ |
|
perl/sieve/managesieve/Makefile.PL perl/imap/Makefile.PL |
|
;; |
|
esac |
|
|
|
# ensure invocation of correct Perl |
|
%{l_shtool} subst \ |
|
-e 's;^\(.) exec\) \(perl .*\)$;\1 %{l_prefix}/bin/\2;' \ |
|
perl/imap/cyradm.sh |
|
%{l_shtool} subst \ |
|
-e 's;^\(exec\) \(perl .*\)$;\1 %{l_prefix}/bin/\2;' \ |
|
perl/sieve/scripts/*.pl snmp/[a-z]* tools/[a-z]* |
|
|
|
# adjust hard-coded location of sieve |
|
%{l_shtool} subst \ |
|
-e 's;"/usr/sieve";"%{l_prefix}/var/imapd/sieve";g' \ |
|
lib/imapopts.c tools/masssievec tools/rehash tools/translatesieve tools/upgradesieve |
|
|
|
# adjust default config to install environment for use in "mkimap" install helper script |
|
%{l_shtool} install -c -m 644 \ |
|
-e "s;\\(@l_prefix@\\);$RPM_BUILD_ROOT\\1;g" %{l_value -s -a} \ |
|
%{SOURCE imapd.conf} imapd.conf-mkimap |
|
%{l_shtool} subst \ |
|
-e 's;^exec perl ;exec %{l_prefix}/bin/perl ;' \ |
|
-e 's;/etc/imapd.conf;%{l_prefix}/etc/imapd/imapd.conf;' \ |
|
-e 's;^\($sievedir = \).*$;\1 shift || "%{l_prefix}/var/imapd/sieve"\;;' \ |
|
tools/mkimap |
|
|
|
# adjust syslog identifier of "deliver" program |
|
%{l_shtool} subst \ |
|
-e '/alt_config/s;"deliver";"cyrdeliver";' \ |
|
imap/deliver.c |
|
|
|
# avoid name clash with postfix |
|
%{l_shtool} subst \ |
|
-e '/snprintf(buf, sizeof(buf), "%s/s;/reconstruct";/cyrreconstruct";' \ |
|
-e '/snprintf(buf, sizeof(buf), "%s/s;/quota";/cyrquota";' \ |
|
imap/imapd.c |
|
|
|
# fix up man pages |
|
%{l_shtool} subst \ |
|
-e 's;\(\\fB\|\.B \)/etc/\(cyrus.conf\|imapd.conf\);\1%{l_prefix}/etc/imapd/\2;g' \ |
|
-e 's;\(\\fB\|\.B \)/var/run/\(cyrus-master.pid\);\1%{l_prefix}/var/imapd/\2;g' \ |
|
man/*.[1-8] |
|
%{l_shtool} subst \ |
|
-e 's;"/var/imap/;"%{l_prefix}/var/imapd/;g' \ |
|
man/cyrus.conf.5 |
|
%{l_shtool} subst \ |
|
-e 's;/usr/cyrus/bin/;%{l_prefix}/bin/;g' \ |
|
-e 's;/usr/local/bin/gdb;%{l_prefix}/bin/gdb;g' \ |
|
-e 's;/usr/sieve;%{l_prefix}/var/imapd/sieve;g' \ |
|
-e 's;/var/imap/md5;%{l_prefix}/var/imapd/md5;g' \ |
|
man/imapd.conf.5 |
|
|
|
%build |
|
# configure program |
|
export CC="%{l_cc}" |
|
export CPPFLAGS="%{l_cppflags}" |
|
export CFLAGS="%{l_cflags -O}" |
|
export LDFLAGS="%{l_ldflags} %{l_fsl_ldflags}" |
|
export LIBS="%{l_fsl_libs} -lpcreposix -lpcre" |
|
%if "%{with_atvdom}" == "yes" |
|
CPPFLAGS="$CPPFLAGS -DATVDOM" |
|
%endif |
|
%if "%{with_drac}" == "yes" |
|
CPPFLAGS="$CPPFLAGS -DDRAC_AUTH" |
|
%endif |
|
case "%{l_platform -t}" in |
|
*-sunos* ) LIBS="$LIBS -lsocket -lnsl -lrt" ;; |
|
esac |
|
./configure \ |
|
--prefix=%{l_prefix} \ |
|
--mandir=%{l_prefix}/man \ |
|
--sysconfdir=%{l_prefix}/etc/imapd \ |
|
--with-service-path=%{l_prefix}/bin \ |
|
--with-lib-subdir=%{l_prefix}/lib \ |
|
--with-openssl=%{l_prefix} \ |
|
--with-bdb=%{l_prefix} \ |
|
--with-bdb-incdir=%{l_prefix}/include \ |
|
--with-bdb-libdir=%{l_prefix}/lib \ |
|
--with-sasl=%{l_prefix} \ |
|
--with-staticsasl=%{l_prefix} \ |
|
--with-com_err \ |
|
--without-libwrap \ |
|
--enable-idled \ |
|
--disable-gssapi \ |
|
--without-gss_impl \ |
|
--with-perl=%{l_prefix}/bin/perl \ |
|
--without-snmp \ |
|
--with-cyrus-prefix=%{l_prefix} \ |
|
--with-cyrus-user=%{l_rusr} \ |
|
--with-cyrus-group=%{l_rgrp} \ |
|
--with-pidfile=%{l_prefix}/var/imapd/cyrmaster.pid \ |
|
%if "%{with_ldap}" == "yes" |
|
--with-ldap=%{l_prefix} \ |
|
%endif |
|
%if "%{with_replication}" == "yes" |
|
--enable-replication \ |
|
%endif |
|
%if "%{with_murder}" == "yes" |
|
--enable-murder \ |
|
%endif |
|
%if "%{with_listext}" == "yes" |
|
--enable-listext \ |
|
%endif |
|
%if "%{with_nntp}" == "yes" |
|
--enable-nntp \ |
|
%endif |
|
--with-extraident=openpkg \ |
|
--without-krb |
|
|
|
# build program |
|
%{l_make} %{l_mflags} |
|
|
|
%install |
|
|
|
# install package |
|
%{l_make} %{l_mflags} install \ |
|
DESTDIR=$RPM_BUILD_ROOT |
|
|
|
# create additional directories |
|
%{l_shtool} mkdir -f -p -m 755 \ |
|
$RPM_BUILD_ROOT%{l_prefix}/etc/imapd \ |
|
$RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \ |
|
$RPM_BUILD_ROOT%{l_prefix}/var/imapd/log \ |
|
$RPM_BUILD_ROOT%{l_prefix}/var/imapd/tmp \ |
|
$RPM_BUILD_ROOT%{l_prefix}/var/imapd/sieve \ |
|
$RPM_BUILD_ROOT%{l_prefix}/var/imapd/spool \ |
|
$RPM_BUILD_ROOT%{l_prefix}/bin |
|
|
|
# install sieve administration script |
|
%{l_shtool} install -c -m 755 \ |
|
perl/sieve/scripts/sieveshell.pl \ |
|
$RPM_BUILD_ROOT%{l_prefix}/bin/sieveshell |
|
|
|
# install sieve command line compiler |
|
%{l_shtool} install -c -m 755 \ |
|
sieve/sievec \ |
|
$RPM_BUILD_ROOT%{l_prefix}/bin/sievec |
|
|
|
# offer a sane default configuration |
|
l_hostname=`%{l_shtool} echo -e %h` |
|
l_domainname=`%{l_shtool} echo -e %d | cut -c2-` |
|
%{l_shtool} install -c -m 644 %{l_value -s -a} \ |
|
-e "s;@l_hostname@;$l_hostname;g" \ |
|
-e "s;@l_domainname@;$l_domainname;g" \ |
|
%{SOURCE cyrus.conf} %{SOURCE imapd.conf} \ |
|
$RPM_BUILD_ROOT%{l_prefix}/etc/imapd/ |
|
|
|
# install run-command script |
|
%{l_shtool} install -c -m 755 %{l_value -s -a} \ |
|
%{SOURCE rc.imapd} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/ |
|
|
|
# use "mkimap" to create additional directories and install the tool |
|
./tools/mkimap imapd.conf-mkimap \ |
|
$RPM_BUILD_ROOT%{l_prefix}/var/imapd/sieve |
|
%{l_shtool} install -c -m 755 \ |
|
tools/mkimap $RPM_BUILD_ROOT%{l_prefix}/bin/ |
|
|
|
# rename files which are likely to cause namespace conflicts |
|
( cd $RPM_BUILD_ROOT%{l_prefix} |
|
for i in deliver master quota reconstruct; do |
|
mv bin/$i bin/cyr$i |
|
mv man/man8/$i.8 man/man8/cyr$i.8 |
|
done |
|
) || exit $? |
|
|
|
# install OSSP fsl configuration |
|
%{l_shtool} mkdir -f -p -m 755 \ |
|
$RPM_BUILD_ROOT%{l_prefix}/etc/fsl |
|
%{l_shtool} install -c -m 644 %{l_value -s -a} \ |
|
%{SOURCE fsl.imapd} $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/ |
|
|
|
# strip binaries and remove obsolete man pages |
|
strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true |
|
rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man5/krb.equiv.5 >/dev/null 2>&1 || true |
|
|
|
# determine installation files |
|
%{l_prefix}/bin/perl-openpkg -F perl-openpkg-files fixate |
|
%{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \ |
|
%{l_files_std} \ |
|
'%config %{l_prefix}/etc/fsl/fsl.imapd' \ |
|
'%config %{l_prefix}/etc/imapd/imapd.conf' \ |
|
'%config %{l_prefix}/etc/imapd/cyrus.conf' \ |
|
'%dir %attr(0750,%{l_rusr},%{l_mgrp}) %{l_prefix}/var/imapd' \ |
|
'%dir %attr(0750,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/imapd/*' \ |
|
'%dir %attr(0770,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/imapd/*/*' \ |
|
'%dir %attr(0770,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/imapd/tmp' \ |
|
'%dir %attr(0770,%{l_musr},%{l_rgrp}) %{l_prefix}/var/imapd/socket' \ |
|
`cat perl-openpkg-files` |
|
|
|
%files -f files |
|
|
|
%clean |
|
|
|
%pre |
|
# before upgrade, save status and stop service |
|
if [ $1 -eq 2 ]; then |
|
eval `%{l_rc} imapd status 2>/dev/null | tee %{l_tmpfile}` |
|
%{l_rc} imapd stop 2>/dev/null |
|
fi |
|
exit 0 |
|
|
|
%post |
|
if [ $1 -eq 1 ]; then |
|
# display final hints on initial installation |
|
( echo "To complete the Cyrus IMAP installation do:" |
|
echo "1. start SASL and Cyrus IMAP with:" |
|
echo " $RPM_INSTALL_PREFIX/bin/openpkg rc sasl start" |
|
echo " $RPM_INSTALL_PREFIX/bin/openpkg rc imapd start" |
|
echo "2. hook Cyrus IMAP into your particular MTA manually" |
|
echo " (usually configure mail delivery via LMTP)" |
|
echo "3. create mailboxes for each of your users:" |
|
echo " \$ $RPM_INSTALL_PREFIX/bin/cyradm --user=%{l_susr} localhost" |
|
echo " cyradm> createmailbox user.<user>" |
|
echo " cyradm> setaclmailbox user.<user> <user> lrswipcd" |
|
echo " cyradm> mboxconfig user.<user> comment \"<name>\"" |
|
echo " cyradm> setquota user.<user> STORAGE 500000" |
|
) | %{l_rpmtool} msg -b -t notice |
|
elif [ $1 -eq 2 ]; then |
|
# after upgrade, restore status |
|
eval `cat %{l_tmpfile}`; rm -f %{l_tmpfile} |
|
[ ".$imapd_active" = .yes ] && %{l_rc} imapd start |
|
fi |
|
exit 0 |
|
|
|
%preun |
|
# before erase, stop service and remove log and temporary files |
|
if [ $1 -eq 0 ]; then |
|
%{l_rc} imapd stop 2>/dev/null |
|
rm -f $RPM_INSTALL_PREFIX/var/imapd/*.db >/dev/null 2>&1 || true |
|
rm -f $RPM_INSTALL_PREFIX/var/imapd/db.backup* >/dev/null 2>&1 || true |
|
rm -f $RPM_INSTALL_PREFIX/var/imapd/log/*.log >/dev/null 2>&1 || true |
|
rm -f $RPM_INSTALL_PREFIX/var/imapd/socket/* >/dev/null 2>&1 || true |
|
rm -rf $RPM_INSTALL_PREFIX/var/imapd/tmp/* >/dev/null 2>&1 || true |
|
fi |
|
exit 0 |
|
|
|
|