## ## postfix.spec -- OpenPKG RPM Specification ## Copyright (c) 2000-2005 The OpenPKG Project ## Copyright (c) 2000-2005 Ralf S. Engelschall ## Copyright (c) 2000-2005 Cable & Wireless ## ## 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. ## # FIXME: rse: with_spf/with_srs/with_whoson options broken after upgrade to Postfix 2.2 # package versions %define V_postfix 2.2.1 %define V_spf 2.2.0-5 %define V_srs 2.1.4-1 %define V_pflogsumm 1.1.0 %define V_whoson 2.1.4 # package information Name: postfix Summary: Mail Transfer Agent (MTA) URL: http://www.postfix.org/ Vendor: Wietse Venema Packager: The OpenPKG Project Distribution: OpenPKG Class: BASE Group: Mail License: IPL Version: %{V_postfix} Release: 20050315 # package options %option with_fsl yes %option with_ssl no %option with_sasl no %option with_spf no %option with_srs no %option with_mysql no %option with_ldap no %option with_whoson no %option with_fdsetsize no # list of sources Source0: ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-%{V_postfix}.tar.gz Source1: http://jimsun.linxnet.com/downloads/pflogsumm-%{V_pflogsumm}.tar.gz Source2: etc.tar Source3: fsl.postfix Source4: rc.postfix Patch0: postfix.patch Patch1: postfix.patch.pfls Patch2: ftp://ftp.openpkg.org/sources/CPY/postfix/postfix-%{V_whoson}-whoson.patch Patch3: http://www.ipnet6.org/postfix/download/postfix-libspf2-%{V_spf}.patch Patch4: http://www.libsrs2.org/patch/postfix-libsrs2-%{V_srs}.patch # build information Prefix: %{l_prefix} BuildRoot: %{l_buildroot} BuildPreReq: OpenPKG, openpkg >= 20040130, perl, gcc PreReq: OpenPKG, openpkg >= 20040130, perl, procmail, perl-time BuildPreReq: make, pcre, db PreReq: make, pcre, db %if "%{with_fsl}" == "yes" BuildPreReq: fsl >= 1.3.0 PreReq: fsl >= 1.3.0 %endif %if "%{with_ssl}" == "yes" BuildPreReq: openssl PreReq: openssl %endif %if "%{with_sasl}" == "yes" BuildPreReq: sasl PreReq: sasl %endif %if "%{with_spf}" == "yes" BuildPreReq: libspf2 PreReq: libspf2 %endif %if "%{with_srs}" == "yes" BuildPreReq: libsrs2 PreReq: libsrs2 %endif %if "%{with_mysql}" == "yes" BuildPreReq: mysql PreReq: mysql %endif %if "%{with_ldap}" == "yes" BuildPreReq: openldap, openssl PreReq: openldap, openssl %endif %if "%{with_whoson}" == "yes" BuildPreReq: whoson PreReq: whoson %endif AutoReq: no AutoReqProv: no Provides: MTA Conflicts: exim, sendmail, ssmtp %description Postfix is a new-generation Mail Transfer Agent (MTA) able to fully replace the Sendmail MTA. Local specifics in this OpenPKG version: o Postfix delivers locally via Procmail o Postfix logs directly to the filesystem and not via syslog(3) o Berkeley-DB lookup table support o PCRE matching support o Optional STARTTLS support (see package options below) o Optional SASL2 authentication support (see package options below) o Optional MySQL support (see package options below) o Optional OpenLDAP support (see package options below) o Optional WHOSON support (see package options below) %track prog postfix = { version = %{V_postfix} url = ftp://ftp.porcupine.org/mirrors/postfix-release/official/ regex = postfix-(\d+\.\d+\.\d+)\.tar\.gz } prog postfix:spf = { version = %{V_spf} url = http://www.ipnet6.org/postfix/spf/ regex = postfix-libspf2-(\d+\.\d+\.\d+(-\d+)?)\.patch } prog postfix:srs = { version = %{V_srs} url = http://www.libsrs2.org/download.html regex = postfix-libsrs2-(\d+\.\d+\.\d+(-\d+)?)\.patch } prog postfix:pflogsumm = { version = %{V_pflogsumm} url = http://jimsun.linxnet.com/postfix_contrib.html regex = pflogsumm-(__VER__)\.tar\.gz } prog postfix:whoson = { version = %{V_whoson} url = ftp://ftp.openpkg.org/sources/CPY/postfix/ regex = postfix-(__VER__)-whoson.patch } %prep # unpack distribution files %setup -q %setup -q -T -D -a 1 %setup -q -T -D -a 2 # apply vendor SPF/SRS patches %if "%{with_spf}" == "yes" perl -e 'my $p = ""; $p .= $_ while (); $p =~ s/(default:)([\s+]*\})/$1 break; $2/sg; print $p;' \ <%{PATCH postfix-libspf2-%{V_spf}.patch} | %{l_patch} -p1 %endif %if "%{with_srs}" == "yes" perl -e 'my $p = ""; $p .= $_ while (); $p =~ s/diff\s+-Nur\s+[^\n]+src\/local\/Makefile\.in.+?\n(diff)/$1/s; print $p;' \ <%{PATCH postfix-libsrs2-%{V_srs}.patch} | %{l_patch} -p1 %{l_shtool} subst \ -e 's;\(local_expand\.c\);\1 srs.c;' \ -e 's;\(local_expand\.o\);\1 srs.o;' \ src/local/Makefile.in %endif # apply OpenPKG patches %patch -p0 ( cd pflogsumm-%{V_pflogsumm} && %{l_patch} -p0 <%{PATCH1} ) || exit $? # apply vendor WHOSON patch %if "%{with_whoson}" == "yes" %patch -p0 -P 2 %endif %build # configure Postfix (hard-core part I) %{l_shtool} subst \ -e 's/var_config_dir, /var_command_dir, /' \ src/postfix/postfix.c %{l_shtool} subst \ -e 's;config_directory/postfix-script;command_directory/postfix-script;' \ -e 's;config_directory/post-install;command_directory/postfix-install;' \ conf/postfix-script %{l_shtool} subst \ -e 's;/usr/include;%{l_prefix}/include;g' \ makedefs # configure Postfix (regular part) unset LD_LIBRARY_PATH || true CCARGS="" CCARGS="$CCARGS %{l_cflags -O}" CCARGS="$CCARGS %{l_cppflags}" CCARGS="$CCARGS -DDEF_CONFIG_DIR=\\\"%{l_prefix}/etc/postfix\\\"" AUXLIBS="" AUXLIBS="$AUXLIBS %{l_ldflags}" CCARGS="$CCARGS -DHAS_DB" AUXLIBS="$AUXLIBS -ldb" CCARGS="$CCARGS -DHAS_PCRE" AUXLIBS="$AUXLIBS -lpcre" %if "%{with_mysql}" == "yes" CCARGS="$CCARGS -DHAS_MYSQL %{l_cppflags mysql .}" AUXLIBS="$AUXLIBS %{l_ldflags mysql .} -lmysqlclient -lz -lm" %endif %if "%{with_sasl}" == "yes" CCARGS="$CCARGS -DUSE_SASL_AUTH %{l_cppflags sasl .}" AUXLIBS="$AUXLIBS -lsasl2 -lcrypt" if [ -f /usr/lib/libdl.so -o -f /usr/lib/libdl.a ]; then AUXLIBS="$AUXLIBS -ldl" fi %endif %if "%{with_ssl}" == "yes" CCARGS="$CCARGS -DHAS_TLS" AUXLIBS="$AUXLIBS -lssl -lcrypto" %endif %if "%{with_spf}" == "yes" AUXLIBS="$AUXLIBS -lspf2" %endif %if "%{with_srs}" == "yes" CCARGS="$CCARGS -DHAS_SRS" AUXLIBS="$AUXLIBS -lsrs2" %endif %if "%{with_ldap}" == "yes" CCARGS="$CCARGS -DHAS_LDAP" AUXLIBS="$AUXLIBS -lldap -llber -lssl -lcrypto" %endif %if "%{with_fsl}" == "yes" AUXLIBS="$AUXLIBS %{l_fsl_ldflags} %{l_fsl_libs}" CCARGS="$CCARGS -DUSE_SOFTLIMITONLY" %endif %if "%{with_fdsetsize}" != "no" %if "%{with_fdsetsize}" == "yes" CCARGS="$CCARGS -DFD_SETSIZE=1024" %else CCARGS="$CCARGS -DFD_SETSIZE=%{with_fdsetsize}" %endif %endif case "%{l_platform -t}" in *-sunos* ) AUXLIBS="$AUXLIBS -lrt" ;; esac %{l_make} %{l_mflags} makefiles \ CC="%{l_cc}" CCARGS="$CCARGS" AUXLIBS="$AUXLIBS" # configure Postfix (hard-core part II) %{l_shtool} subst \ -e 's;#define HAS_DBM;#define HAS_DBM_DISABLED;' \ -e 's;#define HAS_DB;#define HAS_DB_DISABLED;' \ src/util/sys_defs.h # build Postfix %{l_make} %{l_mflags} %install rm -rf $RPM_BUILD_ROOT # perform standard installation procedure %{l_shtool} subst -e "s;chown;true;" postfix-install sh postfix-install -non-interactive \ install_root=$RPM_BUILD_ROOT \ config_directory=%{l_prefix}/etc/postfix \ daemon_directory=%{l_prefix}/libexec/postfix \ command_directory=%{l_prefix}/sbin \ queue_directory=%{l_prefix}/var/postfix \ sendmail_path=%{l_prefix}/sbin/sendmail \ newaliases_path=%{l_prefix}/sbin/newaliases \ mailq_path=%{l_prefix}/sbin/mailq \ manpage_directory=%{l_prefix}/man \ mail_user=%{l_musr} \ setgid_group=%{l_rgrp} # post-adjust binaries rm -f $RPM_BUILD_ROOT%{l_prefix}/sbin/mailq ln $RPM_BUILD_ROOT%{l_prefix}/sbin/sendmail \ $RPM_BUILD_ROOT%{l_prefix}/sbin/mailq rm -f $RPM_BUILD_ROOT%{l_prefix}/sbin/newaliases ln $RPM_BUILD_ROOT%{l_prefix}/sbin/sendmail \ $RPM_BUILD_ROOT%{l_prefix}/sbin/newaliases strip $RPM_BUILD_ROOT%{l_prefix}/sbin/* >/dev/null 2>&1 || true strip $RPM_BUILD_ROOT%{l_prefix}/libexec/postfix/* >/dev/null 2>&1 || true # post-adjust configuration %{l_shtool} subst \ -e "s;^\\(mail_owner[^=]*=\\).*;\\1 %{l_musr};" \ $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/main.cf rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/*.orig rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/*LICENSE mv $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/postfix-script \ $RPM_BUILD_ROOT%{l_prefix}/sbin/postfix-script rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/postfix-script* mv $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/post-install \ $RPM_BUILD_ROOT%{l_prefix}/sbin/postfix-install ( cd $RPM_BUILD_ROOT%{l_prefix}/etc/postfix %{l_shtool} mkdir -f -p -m 755 sample for cfg in access aliases canonical header_checks \ relocated transport virtual \ main.cf master.cf main.cf.default; do mv $cfg sample/ done ) || exit $? # install default configuration %{l_shtool} install -c -m 644 %{l_value -s -a} \ etc/* $RPM_BUILD_ROOT%{l_prefix}/etc/postfix/ # pre-create variable stuff ( cd $RPM_BUILD_ROOT%{l_prefix}/var/postfix %{l_shtool} mkdir -f -p -m 700 \ active bounce corrupt defer deferred \ flush incoming private saved %{l_shtool} mkdir -f -p -m 730 maildrop %{l_shtool} mkdir -f -p -m 710 public %{l_shtool} mkdir -f -p -m 755 log pid ) || exit $? # install addons %{l_shtool} install -c -m 755 \ -e 's;/usr/sbin/sendmail;%{l_prefix}/sbin/sendmail;g' \ auxiliary/rmail/rmail $RPM_BUILD_ROOT%{l_prefix}/sbin/rmail %{l_shtool} install -c -m 755 \ -e 's;/usr/bin/perl;%{l_prefix}/bin/perl;g' \ -e 's;postconf -h;%{l_prefix}/sbin/postconf -h;' \ auxiliary/qshape/qshape.pl $RPM_BUILD_ROOT%{l_prefix}/sbin/qshape %{l_shtool} install -c -m 644 \ man/man1/qshape.1 $RPM_BUILD_ROOT%{l_prefix}/man/man8/qshape.8 ( cd pflogsumm-%{V_pflogsumm} %{l_shtool} install -c -m 755 \ -e 's;/usr/bin/perl;%{l_prefix}/bin/perl;g' \ pflogsumm.pl $RPM_BUILD_ROOT%{l_prefix}/sbin/pflogsumm %{l_shtool} install -c -m 644 \ pflogsumm.1 $RPM_BUILD_ROOT%{l_prefix}/man/man1/ ) || exit $? # install run-command script %{l_shtool} mkdir -f -p -m 755 \ $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d %{l_shtool} install -c -m 755 %{l_value -s -a} \ %{SOURCE rc.postfix} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/ # adjust installation to avoid file name conflicts ( cd $RPM_BUILD_ROOT%{l_prefix}/man/man8 mv master.8 postfix_master.8 ) || 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.postfix} \ $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/ # generate file list %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \ %{l_files_std} \ '%not %dir %{l_prefix}/etc/fsl' \ '%config %{l_prefix}/etc/fsl/fsl.postfix' \ '%attr(-,%{l_susr},%{l_mgrp}) %{l_prefix}/etc/postfix' \ '%config %attr(-,%{l_susr},%{l_mgrp}) %{l_prefix}/etc/postfix/*' \ '%attr(-,%{l_susr},%{l_mgrp}) %{l_prefix}/libexec/postfix/*' \ '%attr(2755,%{l_musr},%{l_rgrp}) %{l_prefix}/sbin/{postdrop,postqueue}' \ '%dir %attr(-,%{l_susr},%{l_mgrp}) %{l_prefix}/libexec/postfix' \ '%dir %attr(-,%{l_susr},%{l_mgrp}) %{l_prefix}/var/postfix' \ '%dir %attr(-,%{l_musr},%{l_rgrp}) %{l_prefix}/var/postfix/{maildrop,public}' %files -f files %clean rm -rf $RPM_BUILD_ROOT %pre # before upgrade, save status and stop service [ $1 -eq 2 ] || exit 0 eval `%{l_rc} postfix status 2>/dev/null | tee %{l_tmpfile}` %{l_rc} postfix stop 2>/dev/null exit 0 %post if [ $1 -eq 1 ]; then # after install, generate configuration ( cd $RPM_INSTALL_PREFIX/etc/postfix && %{l_make} all; true ) >/dev/null 2>&1 fi if [ $1 -eq 2 ]; then # after upgrade, regenerate configuration ( cd $RPM_INSTALL_PREFIX/etc/postfix && %{l_make} clean all; true ) >/dev/null 2>&1 # after upgrade, restore status eval `cat %{l_tmpfile}`; rm -f %{l_tmpfile} >/dev/null 2>&1 || true [ ".$postfix_active" = .yes ] && %{l_rc} postfix start fi exit 0 %preun # before erase, stop service and remove log files [ $1 -eq 0 ] || exit 0 %{l_rc} postfix stop 2>/dev/null rm -f $RPM_INSTALL_PREFIX/var/postfix/log/postfix.log* >/dev/null 2>&1 || true # remove generated configuration files ( cd $RPM_INSTALL_PREFIX/etc/postfix && %{l_make} clean >/dev/null 2>&1; true ) || true # remove generated run-time files and directories rm -rf $RPM_INSTALL_PREFIX/etc/postfix/prng_exch rm -rf $RPM_INSTALL_PREFIX/var/postfix/pid/* rm -rf $RPM_INSTALL_PREFIX/var/postfix/private/* rm -rf $RPM_INSTALL_PREFIX/var/postfix/public/* find $RPM_INSTALL_PREFIX/var/postfix/active/ -type d -print |\ xargs rmdir >/dev/null 2>&1 || true find $RPM_INSTALL_PREFIX/var/postfix/incoming/ -type d -print |\ xargs rmdir >/dev/null 2>&1 || true exit 0