diff options
author | Michael Orlitzky <mjo@gentoo.org> | 2016-06-05 18:20:19 -0400 |
---|---|---|
committer | Michael Orlitzky <mjo@gentoo.org> | 2016-06-05 18:33:00 -0400 |
commit | bd452f87c73fb1dfb3050d980cdbf53f0382b216 (patch) | |
tree | 16d17e246a73ca9c3f2fbc9811f0009840d024fd /mail-filter | |
parent | games-util/pyfa: updated patch for live ebuild (bug #584624) (diff) | |
download | gentoo-bd452f87c73fb1dfb3050d980cdbf53f0382b216.tar.gz gentoo-bd452f87c73fb1dfb3050d980cdbf53f0382b216.tar.bz2 gentoo-bd452f87c73fb1dfb3050d980cdbf53f0382b216.zip |
mail-filter/spamassassin: new revision with an optional sa-update cron job.
To make life easier for our users, a cron job that runs sa-update
nightly has been provided. It is only installed with USE=cron, but an
elog will mention its existence when that USE flag is disabled. The
cron job will also attempt to restart or reload spamd/amavisd if the
signatures have been updated.
Alongside that new feature, some of the dependencies have been cleaned
up. Pointless version bounds were removed, and an obsolete perl module
or two was pruned. The libwww-perl dependency was replaced by
wget/curl.
Gentoo-Bug: 532094
Package-Manager: portage-2.2.28
Diffstat (limited to 'mail-filter')
-rw-r--r-- | mail-filter/spamassassin/files/update-spamassassin-rules.cron | 38 | ||||
-rw-r--r-- | mail-filter/spamassassin/metadata.xml | 15 | ||||
-rw-r--r-- | mail-filter/spamassassin/spamassassin-3.4.1-r6.ebuild | 215 |
3 files changed, 262 insertions, 6 deletions
diff --git a/mail-filter/spamassassin/files/update-spamassassin-rules.cron b/mail-filter/spamassassin/files/update-spamassassin-rules.cron new file mode 100644 index 000000000000..1b36af0548db --- /dev/null +++ b/mail-filter/spamassassin/files/update-spamassassin-rules.cron @@ -0,0 +1,38 @@ +#!/bin/bash +# +# Update SpamAssassin rules and reload daemons that use them. +# + +# First, redirect stdout to /dev/null. +exec 1>/dev/null + +# Try to update the rules. +sa-update + +# Exit code 0: all new updates were installed. +# Exit code 1: we were already up-to-date. +# Exit code 3: some updates were installed, but some weren't. +# Any other exit code indicates failure. +if (( $? == 0 || $? == 3 )); then + # Compilation spits out its progress onto stderr. + sa-compile 2>/dev/null + + # Do you run spamd or amavisd? Both daemons need to be reloaded + # in order to pick up the newly-updated rules. + if command -v rc-service 2>/dev/null; then + # OpenRC is installed. These "status" checks should succeed + # only when the daemon is running under OpenRC. We redirect + # stderr to hide the lecture that OpenRC gives you if you + # try this on a system running systemd. + rc-service spamd status 2>/dev/null && rc-service spamd reload + rc-service amavisd status 2>/dev/null && rc-service amavisd reload + fi + + if command -v systemctl 2>/dev/null; then + # The systemctl (systemd) executable is installed, so try to + # use it to restart spamd and amavisd. These are safe to run + # if systemd is installed but not in use. + systemctl try-restart spamassassin + systemctl try-restart amavisd + fi +fi diff --git a/mail-filter/spamassassin/metadata.xml b/mail-filter/spamassassin/metadata.xml index c24a432aecef..e3f1239d1175 100644 --- a/mail-filter/spamassassin/metadata.xml +++ b/mail-filter/spamassassin/metadata.xml @@ -3,10 +3,13 @@ <pkgmetadata> <!-- maintainer-needed --> <use> - <flag name="qmail">Build qmail functionality and docs</flag> - <flag name="bayes"> - Require a database (MySQL, SQLite, Postgres, or BerkDB) backend to - enable the Bayesian filtering database. - </flag> -</use> + <flag name="bayes"> + Require a database (MySQL, SQLite, Postgres, or BerkDB) backend + to enable the Bayesian filtering database. + </flag> + <flag name="cron"> + Install a cron job to update SpamAssassin's rules daily. + </flag> + <flag name="qmail">Build qmail functionality and docs</flag> + </use> </pkgmetadata> diff --git a/mail-filter/spamassassin/spamassassin-3.4.1-r6.ebuild b/mail-filter/spamassassin/spamassassin-3.4.1-r6.ebuild new file mode 100644 index 000000000000..461de344c821 --- /dev/null +++ b/mail-filter/spamassassin/spamassassin-3.4.1-r6.ebuild @@ -0,0 +1,215 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=6 + +inherit toolchain-funcs systemd + +MY_P=Mail-SpamAssassin-${PV//_/-} +S=${WORKDIR}/${MY_P} +DESCRIPTION="An extensible mail filter which can identify and tag spam" +HOMEPAGE="http://spamassassin.apache.org/" +SRC_URI="mirror://apache/spamassassin/source/${MY_P}.tar.bz2" + +LICENSE="Apache-2.0 GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~x86-macos" +IUSE="+bayes berkdb cron ipv6 ldap libressl mysql postgres qmail sqlite ssl test" + +# You can do without a database unless you need the Bayes features. +REQUIRED_USE="bayes? ( || ( berkdb mysql postgres sqlite ) )" + +# SpamAssassin doesn't use libwww-perl except as a fallback for when +# curl/wget are missing, so we depend on one of those instead. Some +# mirrors use https, so we need those utilities to support SSL. +# +# re2c is needed to compile the rules (sa-compile). +# +DEPEND="app-crypt/gnupg + dev-lang/perl + dev-perl/Digest-SHA1 + dev-perl/Encode-Detect + dev-perl/Geo-IP + dev-perl/HTML-Parser + dev-perl/HTTP-Date + dev-perl/Mail-DKIM + dev-perl/Mail-SPF + dev-perl/Net-DNS + dev-perl/Net-Patricia + dev-perl/NetAddr-IP + dev-util/re2c + || ( net-misc/wget[ssl] net-misc/curl[ssl] ) + virtual/perl-Archive-Tar + virtual/perl-IO-Zlib + virtual/perl-MIME-Base64 + virtual/perl-Pod-Parser + virtual/perl-Time-HiRes + berkdb? ( virtual/perl-DB_File ) + ipv6? ( dev-perl/IO-Socket-INET6 ) + ldap? ( dev-perl/perl-ldap ) + mysql? ( + dev-perl/DBI + dev-perl/DBD-mysql + ) + postgres? ( + dev-perl/DBI + dev-perl/DBD-Pg + ) + sqlite? ( + dev-perl/DBI + dev-perl/DBD-SQLite + ) + ssl? ( + dev-perl/IO-Socket-SSL + !libressl? ( dev-libs/openssl:0 ) + libressl? ( dev-libs/libressl ) + )" + +RDEPEND="${DEPEND}" + +# Some spamd tests fail, and it looks like the whole suite eventually +# hangs. +RESTRICT=test + +PATCHES=( + "${FILESDIR}/spamassassin-3.4.1-bug_7199.patch" + "${FILESDIR}/spamassassin-3.4.1-bug_7223.patch" + "${FILESDIR}/spamassassin-3.4.1-bug_7231.patch" + "${FILESDIR}/spamassassin-3.4.1-bug_7265.patch" +) + +src_configure() { + # spamc can be built with ssl support. + local use_ssl="no" + if use ssl; then + use_ssl="yes" + fi + + # Set SYSCONFDIR explicitly so we can't get bitten by bug 48205 again + # (just to be sure, nobody knows how it could happen in the first place). + # + # We also set the path to the perl executable explictly. This will be + # used to create the initial shebang line in the scripts (bug 62276). + perl Makefile.PL \ + PREFIX="${EPREFIX}/usr" \ + INSTALLDIRS=vendor \ + SYSCONFDIR="${EPREFIX}/etc" \ + DATADIR="${EPREFIX}/usr/share/spamassassin" \ + PERL_BIN="${EPREFIX}/usr/bin/perl" \ + ENABLE_SSL="${use_ssl}" \ + DESTDIR="${D}" \ + || die "Unable to build!" + + # Now configure spamc. + emake CC="$(tc-getCC)" LDFLAGS="${LDFLAGS}" spamc/Makefile +} + +src_compile() { + PERL_MM_USE_DEFAULT=1 emake + + if use qmail; then + emake spamc/qmail-spamc + fi +} + +src_install () { + emake install + einstalldocs + + # Create the stub dir used by sa-update and friends + keepdir /var/lib/spamassassin + + # Move spamd to sbin where it belongs. + dodir /usr/sbin + mv "${ED}"/usr/bin/spamd "${ED}"/usr/sbin/spamd || die "move spamd failed" + + if use qmail; then + dobin spamc/qmail-spamc + fi + + ln -s mail/spamassassin "${ED}"/etc/spamassassin || die + + # Disable plugin by default + sed -i -e 's/^loadplugin/\#loadplugin/g' \ + "${ED}"/etc/mail/spamassassin/init.pre \ + || die "failed to disable plugins by default" + + # Add the init and config scripts. + newinitd "${FILESDIR}"/3.4.1-spamd.init spamd + newconfd "${FILESDIR}"/3.4.1-spamd.conf spamd + + systemd_newunit "${FILESDIR}"/${PN}.service-r1 ${PN}.service + systemd_install_serviced "${FILESDIR}"/${PN}.service.conf + + # The sed statements in the following conditionals alter the init + # script to depend (or not) on the database being running before + # spamd is started. The sed commands either enable the dependency, + # or delete the line entirely. + if use postgres; then + sed -i -e 's:@USEPOSTGRES@::' "${ED}/etc/init.d/spamd" || die + + dodoc sql/*_pg.sql + else + sed -i -e '/@USEPOSTGRES@/d' "${ED}/etc/init.d/spamd" || die + fi + + if use mysql; then + sed -i -e 's:@USEMYSQL@::' "${ED}/etc/init.d/spamd" || die + + dodoc sql/*_mysql.sql + else + sed -i -e '/@USEMYSQL@/d' "${ED}/etc/init.d/spamd" || die + fi + + dodoc NOTICE TRADEMARK CREDITS UPGRADE USAGE sql/README.bayes \ + sql/README.awl procmailrc.example sample-nonspam.txt \ + sample-spam.txt spamd/PROTOCOL spamd/README.vpopmail \ + spamd-apache2/README.apache + + # Rename some files so that they don't clash with others. + newdoc spamd/README README.spamd + newdoc sql/README README.sql + newdoc ldap/README README.ldap + + if use qmail; then + dodoc spamc/README.qmail + fi + + insinto /etc/mail/spamassassin/ + insopts -m0400 + newins "${FILESDIR}"/secrets.cf secrets.cf.example + + # Create the directory where sa-update stores its GPG key (if you + # choose to import one). If this directory does not exist, the + # import will fail. This is bug 396307. We expect that the import + # will be performed as root, and making the directory accessible + # only to root prevents a warning on the command-line. + diropts -m0700 + dodir /etc/mail/spamassassin/sa-update-keys + + if use cron; then + # Install the cron job if they want it. + exeinto /etc/cron.daily + newexe "${FILESDIR}/update-spamassassin-rules.cron" \ + update-spamassassin-rules + fi +} + +pkg_postinst() { + elog + elog 'No rules are installed by default. You will need to run sa-update' + elog 'at least once, and most likely configure SpamAssassin before it' + elog 'will work.' + + if ! use cron; then + elog + elog 'You should consider a cron job for sa-update. One is provided' + elog 'for daily updates if you enable the "cron" USE flag.' + fi + elog + elog 'Configuration and update help can be found on the wiki:' + elog + elog ' https://wiki.gentoo.org/wiki/SpamAssassin' + elog +} |