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.

282 lines
8.2 KiB

# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=5
PYTHON_COMPAT=( python2_7 )
inherit autotools eutils multilib python-single-r1 ssl-cert
DESCRIPTION="The Internet News daemon, fully featured NNTP server"
HOMEPAGE="https://www.isc.org/software/inn"
SRC_URI="ftp://ftp.isc.org/isc/inn/${P}.tar.gz"
# GPL-2 only for init script
LICENSE="ISC GPL-2+ public-domain BSD-4 BSD-2 RSA BSD MIT GPL-2"
SLOT="0"
KEYWORDS="amd64 ppc x86"
IUSE="berkdb innkeywords inntaggedhash ipv6 kerberos perl python sasl ssl"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
DEPEND="
virtual/mta
dev-perl/MIME-tools
sys-libs/pam
sys-libs/zlib
kerberos? ( virtual/krb5 )
sasl? ( >=dev-libs/cyrus-sasl-2 )
ssl? ( dev-libs/openssl:0= )
python? ( ${PYTHON_DEPS} )
berkdb? ( sys-libs/db:* )
"
RDEPEND="${DEPEND}"
pkg_setup() {
use python && python-single-r1_pkg_setup
}
src_prepare() {
epatch "${FILESDIR}"/${P}-tests.patch
sed -e 's: -B .OLD::' -i Makefile.global.in || die
# Do not treat LDFLAGS as if it contained libraries to link to
sed -e 's:LDFLAGS::g' -i m4/python.m4 || die
# We do not have the biff service, but we do have comsat
sed -e 's:"biff":"comsat":g' -i tests/lib/getnameinfo-t.c || die
eautoreconf
}
src_configure() {
econf \
--prefix=/usr/$(get_libdir)/news \
--sysconfdir=/etc/news \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-control-dir=/usr/$(get_libdir)/news/bin/control \
--with-filter-dir=/usr/$(get_libdir)/news/bin/filter \
--with-db-dir=/var/spool/news/db \
--with-doc-dir=/usr/share/doc/${PF} \
--with-spool-dir=/var/spool/news \
--with-log-dir=/var/log/news \
--with-run-dir=/var/run/news \
--with-tmp-dir=/var/spool/news/tmp \
--disable-libtool \
--with-gnu-ld \
--enable-setgid-inews \
--enable-uucp-rnews \
$(use_with perl) \
$(use_with python) \
$(use_with kerberos kerberos /usr) \
$(use_with sasl) \
$(use_with ssl openssl) \
$(use_with berkdb berkeleydb /usr) \
$(use_enable ipv6) \
$(use_enable !inntaggedhash largefiles) \
$(use_enable inntaggedhash tagged-hash) \
$(use_enable innkeywords keywords)
}
src_install() {
emake DESTDIR="${D}/" P="" SPECIAL="" install
chown -R root:0 \
"${D}"/usr/$(get_libdir)/news/$(get_libdir) \
"${D}"/usr/$(get_libdir)/news/include \
"${D}"/usr/share/doc \
"${D}"/usr/share/man \
|| die
chmod 644 "${D}"/etc/news/* || die
chmod 640 \
"${D}"/etc/news/control.ctl \
"${D}"/etc/news/expire.ctl \
"${D}"/etc/news/incoming.conf \
"${D}"/etc/news/nntpsend.ctl \
"${D}"/etc/news/passwd.nntp \
"${D}"/etc/news/readers.conf \
|| die
# Prevent old db/* files from being overwritten
insinto /usr/share/inn/dbexamples
newins site/active.minimal active
newins site/newsgroups.minimal newsgroups
keepdir \
/var/log/news \
/var/spool/news/archive \
/var/spool/news/articles \
/var/spool/news/db \
/var/spool/news/incoming \
/var/spool/news/incoming/bad \
/var/spool/news/innfeed \
/var/spool/news/outgoing \
/var/spool/news/overview \
/var/spool/news/tmp
fowners news:news /var/log/news
dodoc ChangeLog MANIFEST README* doc/checklist
use ipv6 && dodoc doc/IPv6-info
# So other programs can build against INN
insinto /usr/$(get_libdir)/news/include
doins include/*.h
doinitd "${FILESDIR}"/innd
rm -r "${D}"/var/run
}
pkg_postinst() {
for db_file in active newsgroups
do
[[ -f ${ROOT}/var/spool/news/db/${db_file} ]] && continue
if [[ -f ${ROOT}/usr/share/inn/dbexamples/${db_file} ]]
then
cp "${ROOT}"/usr/share/inn/dbexamples/${db_file} \
"${ROOT}"/var/spool/news/db/${db_file}
else
touch "${ROOT}"/var/spool/news/db/${db_file}
fi
chown news:news "${ROOT}"/var/spool/news/db/${db_file}
chmod 664 "${ROOT}"/var/spool/news/db/${db_file}
done
elog "Do not forget to update your cron entries, and also run"
elog "makedbz if you need to. If this is a first-time installation"
elog "a minimal active file has been installed. You will need to"
elog "touch history and run 'makedbz -i' to initialize the history"
elog "database. See INSTALL for more information."
elog
elog "You need to assign a real shell to the news user, or else"
elog "starting inn will fail. You can use 'usermod -s /bin/bash news'"
elog "for this."
if use ssl
then
install_cert /etc/news/cert/cert
chown news:news \
"${ROOT}"/etc/news/cert/cert.{crt,csr,key,pem}
elog
elog "You may want to start nnrpd manually for native ssl support."
elog "If you choose to do so, automating this with a bootscript might"
elog "also be a good choice."
elog "Have a look at man nnrpd for valid parameters."
elog
elog "The certificate location in /etc/news/sasl.conf has been changed"
elog "to /etc/news/cert!"
fi
}
pkg_postrm() {
elog
elog "If you want your newsspool or altered configuration files"
elog "to be removed, please do so now manually."
elog
}
pkg_config() {
NEWSSPOOL_DIR="${ROOT}/var/spool/news"
NEWS_SHELL="$( awk -F':' '/^news:/ {print $7;}' ${ROOT}/etc/passwd )"
NEWS_ERRFLAG="0"
if [[ ${NEWS_SHELL} == /bin/false || ${NEWS_SHELL} == /dev/null ]]; then
einfo "Changing shell to /bin/bash for user news..."
usermod -s /bin/bash news
else
einfo "Shell for user news unchanged ('${NEWS_SHELL}')."
if [[ ${NEWS_SHELL} != /bin/sh && ${NEWS_SHELL} != /bin/bash ]]; then
ewarn "You might want to change it to '/bin/bash', though."
fi
fi
if [[ ! -e ${NEWSSPOOL_DIR}/db/history ]]; then
if [[ ! -f ${NEWSSPOOL_DIR}/db/history.dir \
&& ! -f ${NEWSSPOOL_DIR}/db/history.pag \
&& ! -f ${NEWSSPOOL_DIR}/db/history.hash \
&& ! -f ${NEWSSPOOL_DIR}/db/history.index ]]
then
einfo "Building history database ..."
touch "${NEWSSPOOL_DIR}"/db/history
chown news:news "${NEWSSPOOL_DIR}"/db/history
chmod 644 "${NEWSSPOOL_DIR}"/db/history
einfo "Running makedbz -i ..."
su - news -c "/usr/$(get_libdir)/news/bin/makedbz -i"
einfo "Moving files into place ..."
[[ -f ${NEWSSPOOL_DIR}/db/history.n.dir ]] && \
mv -vf "${NEWSSPOOL_DIR}"/db/history.n.dir \
"${NEWSSPOOL_DIR}"/db/history.dir
[[ -f ${NEWSSPOOL_DIR}/db/history.n.pag ]] && \
mv -vf "${NEWSSPOOL_DIR}"/db/history.n.pag \
"${NEWSSPOOL_DIR}"/db/history.pag
[[ -f ${NEWSSPOOL_DIR}/db/history.n.hash ]] && \
mv -vf "${NEWSSPOOL_DIR}"/db/history.n.hash \
"${NEWSSPOOL_DIR}"/db/history.hash
[[ -f ${NEWSSPOOL_DIR}/db/history.n.index ]] && \
mv -vf "${NEWSSPOOL_DIR}"/db/history.n.index \
"${NEWSSPOOL_DIR}"/db/history.index
einfo "Running makehistory ..."
su - news -c /usr/$(get_libdir)/news/bin/makehistory
else
NEWS_ERRFLAG="1"
eerror "Your installation seems to be screwed up."
eerror "${NEWSSPOOL_DIR}/db/history does not exist, but there's"
eerror "one of the files history.dir, history.hash or history.index"
eerror "within ${NEWSSPOOL_DIR}/db."
eerror "Use your backup to restore the history database."
fi
else
einfo "${NEWSSPOOL_DIR}/db/history found."
einfo "Leaving history database as it is."
fi
INNCFG_INODES=$(
sed /etc/news/inn.conf \
-e '/innwatchspoolnodes/ ! d; s:[^ ]*[ ]*\([^ ]*\):\1:'
)
INNSPOOL_INODES=$(
df -Pi ${NEWSSPOOL_DIR} | \
sed -e 's:[^ ]*[ ]*\([^ ]*\).*:\1:; 1 d'
)
if [[ ${INNCFG_INODES} -gt ${INNSPOOL_INODES} ]]; then
ewarn "Setting innwatchspoolinodes to zero, because the filesystem behind"
ewarn "$NEWSSPOOL_DIR works without inodes."
ewarn
cp /etc/news/inn.conf /etc/news/inn.conf.OLD
einfo "A copy of your old inn.conf has been saved to /etc/news/inn.conf.OLD."
sed -i /etc/news/inn.conf \
-e '/innwatchspoolnodes/ s:\([^ ]*\)\([ ]*\).*:\1\20:'
chown news:news /etc/news/inn.conf
chmod 644 /etc/news/inn.conf
fi
INNCHECK_LINES=$(
su - news -c "/usr/$(get_libdir)/news/bin/inncheck | wc -l"
)
if [[ ${INNCHECK_LINES} -gt 0 ]]; then
NEWS_ERRFLAG="1"
ewarn "inncheck most certainly found an error."
ewarn "Please check its output:"
eerror "`su - news -c /usr/$(get_libdir)/news/bin/inncheck`"
fi
if [[ ${NEWS_ERRFLAG} -gt 0 ]]; then
eerror "There were one or more errors/warnings checking your"
eerror "configuration. Please read inn's documentation and"
eerror "fix them accordingly."
else
einfo "INN configuration tests passed successfully."
ewarn "Please ensure you have configured inn properly."
fi
}