123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- # Copyright 1999-2016 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 toolchain-funcs
- 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 )
- python? ( ${PYTHON_DEPS} )
- berkdb? ( sys-libs/db )
- "
- RDEPEND="${DEPEND}"
- pkg_setup() {
- use python && python-single-r1_pkg_setup
- }
- src_prepare() {
- epatch "${FILESDIR}"/${P}-ar.patch
- 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() {
- tc-export AR
- 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=/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/innfeed.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
- newinitd "${FILESDIR}"/innd-r1 innd
- }
- 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 "It is recommended to run emerge --config ${CATEGORY}/${PN}"
- elog "now to finish setting up this package."
- elog
- 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
- }
|