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.
223 lines
8.0 KiB
223 lines
8.0 KiB
# Copyright 1999-2014 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# $Id$
|
|
|
|
EAPI=5
|
|
|
|
inherit eutils multilib pam ssl-cert systemd
|
|
|
|
DESCRIPTION="The Erlang Jabber Daemon"
|
|
HOMEPAGE="http://www.ejabberd.im/ https://github.com/processone/ejabberd/"
|
|
SRC_URI="http://www.process-one.net/downloads/${PN}/${PV}/${P}.tgz
|
|
mod_statsdx? ( https://dev.gentoo.org/~radhermit/dist/${PN}-mod_statsdx-1118.patch.gz )"
|
|
|
|
LICENSE="GPL-2"
|
|
SLOT="0"
|
|
KEYWORDS="amd64 ~arm ~ia64 ppc ~sparc x86"
|
|
EJABBERD_MODULES="mod_irc mod_muc mod_proxy65 mod_pubsub mod_statsdx"
|
|
IUSE="captcha debug ldap odbc pam +web zlib ${EJABBERD_MODULES}"
|
|
|
|
DEPEND=">=net-im/jabber-base-0.01
|
|
>=dev-libs/expat-1.95
|
|
>=dev-lang/erlang-12.2.5[ssl]
|
|
<dev-lang/erlang-16
|
|
odbc? ( dev-db/unixODBC )
|
|
ldap? ( =net-nds/openldap-2* )
|
|
>=dev-libs/openssl-0.9.8e
|
|
captcha? ( media-gfx/imagemagick[truetype,png] )
|
|
zlib? ( sys-libs/zlib )"
|
|
#>=sys-apps/shadow-4.1.4.2-r3 - fixes bug in su that made ejabberdctl unworkable.
|
|
RDEPEND="${DEPEND}
|
|
>=sys-apps/shadow-4.1.4.2-r3
|
|
pam? ( virtual/pam )"
|
|
|
|
S=${WORKDIR}/${P}/src
|
|
|
|
# paths in net-im/jabber-base
|
|
JABBER_ETC="${EPREFIX}/etc/jabber"
|
|
#JABBER_RUN="/var/run/jabber"
|
|
JABBER_SPOOL="${EPREFIX}/var/spool/jabber"
|
|
JABBER_LOG="${EPREFIX}/var/log/jabber"
|
|
JABBER_DOC="${EPREFIX}/usr/share/doc/${PF}"
|
|
|
|
src_prepare() {
|
|
if use mod_statsdx; then
|
|
ewarn "mod_statsdx is not a part of upstream tarball but is a third-party module"
|
|
ewarn "taken from here: http://www.ejabberd.im/mod_stats2file"
|
|
EPATCH_OPTS="-p2" epatch "${WORKDIR}"/${PN}-mod_statsdx-1118.patch
|
|
fi
|
|
|
|
# don't install release notes (we'll do this manually)
|
|
sed '/install .* [.][.]\/doc\/[*][.]txt $(DOCDIR)/d' -i Makefile.in || die
|
|
# Set correct paths
|
|
sed -e "/^EJABBERDDIR[[:space:]]*=/{s:ejabberd:${PF}:}" \
|
|
-e "/^ETCDIR[[:space:]]*=/{s:@sysconfdir@/ejabberd:${JABBER_ETC}:}" \
|
|
-e "/^LOGDIR[[:space:]]*=/{s:@localstatedir@/log/ejabberd:${JABBER_LOG}:}" \
|
|
-e "/^SPOOLDIR[[:space:]]*=/{s:@localstatedir@/lib/ejabberd:${JABBER_SPOOL}:}" \
|
|
-i Makefile.in || die
|
|
sed -e "/EJABBERDDIR=/{s:ejabberd:${PF}:}" \
|
|
-e "s|\(ETCDIR=\)@SYSCONFDIR@.*|\1${JABBER_ETC}|" \
|
|
-e "s|\(LOGS_DIR=\)@LOCALSTATEDIR@.*|\1${JABBER_LOG}|" \
|
|
-e "s|\(SPOOLDIR=\)@LOCALSTATEDIR@.*|\1${JABBER_SPOOL}|" \
|
|
-i ejabberdctl.template || die
|
|
|
|
# Set shell, so it'll work even in case jabber user have no shell
|
|
# This is gentoo specific I guess since other distributions may have
|
|
# ejabberd user with reall shell, while we share this user among different
|
|
# jabberd implementations.
|
|
sed '/^HOME/aSHELL=/bin/sh' -i ejabberdctl.template || die
|
|
sed '/^export HOME/aexport SHELL' -i ejabberdctl.template || die
|
|
|
|
#sed -e "s:/share/doc/ejabberd/:${JABBER_DOC}:" -i web/ejabberd_web_admin.erl
|
|
|
|
# fix up the ssl cert paths in ejabberd.cfg to use our cert
|
|
sed -e "s:/path/to/ssl.pem:/etc/ssl/ejabberd/server.pem:g" \
|
|
-i ejabberd.cfg.example || die "Failed sed ejabberd.cfg.example"
|
|
|
|
# correct path to captcha script in default ejabberd.cfg
|
|
sed -e 's|\({captcha_cmd,[[:space:]]*"\).\+"}|\1/usr/'$(get_libdir)'/erlang/lib/'${P}'/priv/bin/captcha.sh"}|' \
|
|
-i ejabberd.cfg.example || die "Failed sed ejabberd.cfg.example"
|
|
|
|
# disable mod_irc in ejabberd.cfg
|
|
if ! use mod_irc; then
|
|
sed -i -e "s/{mod_irc,/%{mod_irc,/" \
|
|
-i ejabberd.cfg.example || die "Failed to disable mod_irc"
|
|
fi
|
|
|
|
}
|
|
|
|
src_configure() {
|
|
econf \
|
|
--docdir="${EPREFIX}/usr/share/doc/${PF}/html" \
|
|
--libdir="${EPREFIX}/usr/$(get_libdir)/erlang/lib/" \
|
|
$(use_enable mod_irc) \
|
|
$(use_enable ldap eldap) \
|
|
$(use_enable mod_muc) \
|
|
$(use_enable mod_proxy65) \
|
|
$(use_enable mod_pubsub) \
|
|
$(use_enable web) \
|
|
$(use_enable odbc) \
|
|
$(use_enable zlib ejabberd_zlib) \
|
|
$(use_enable pam) \
|
|
--enable-user=jabber
|
|
}
|
|
|
|
src_compile() {
|
|
emake $(use debug && echo debug=true ejabberd_debug=true)
|
|
}
|
|
|
|
src_install() {
|
|
default
|
|
|
|
# Pam helper module permissions
|
|
# http://www.process-one.net/docs/ejabberd/guide_en.html
|
|
if use pam; then
|
|
pamd_mimic_system xmpp auth account || die "Cannot create pam.d file"
|
|
fowners root:jabber "/usr/$(get_libdir)/erlang/lib/${PF}/priv/bin/epam"
|
|
fperms 4750 "/usr/$(get_libdir)/erlang/lib/${PF}/priv/bin/epam"
|
|
fi
|
|
|
|
cd "${WORKDIR}"/${P}/doc
|
|
dodoc release_notes_${PV%%_rc*}.txt
|
|
|
|
newinitd "${FILESDIR}"/${PN}-3.initd ${PN}
|
|
newconfd "${FILESDIR}"/${PN}-3.confd ${PN}
|
|
systemd_dounit "${FILESDIR}"/${PN}.service
|
|
systemd_dotmpfilesd "${FILESDIR}"/${PN}.tmpfiles.conf
|
|
|
|
insinto /etc/logrotate.d
|
|
newins "${FILESDIR}"/${PN}.logrotate ${PN}
|
|
}
|
|
|
|
pkg_postinst() {
|
|
if [[ -z ${REPLACING_VERSIONS} ]] ; then
|
|
elog "For configuration instructions, please see"
|
|
elog "/usr/share/doc/${PF}/html/guide.html, or the online version at"
|
|
elog "http://www.process-one.net/en/ejabberd/docs/guide_en/"
|
|
|
|
if ! use web ; then
|
|
ewarn
|
|
ewarn "The web USE flag is off, this has disabled the web admin interface."
|
|
ewarn
|
|
fi
|
|
|
|
elog
|
|
elog '===================================================================='
|
|
elog 'Quick Start Guide:'
|
|
elog '1) Add output of `hostname -f` to /etc/jabber/ejabberd.cfg line 91'
|
|
elog ' {hosts, ["localhost", "thehost"]}.'
|
|
elog '2) Add an admin user to /etc/jabber/ejabberd.cfg line 360'
|
|
elog ' {acl, admin, {user, "theadmin", "thehost"}}.'
|
|
elog '3) Start the server'
|
|
elog ' # /etc/init.d/ejabberd start (for openRC)'
|
|
elog ' # systemctl start ejabberd (for Systemd)'
|
|
elog '4) Register the admin user'
|
|
elog ' # /usr/sbin/ejabberdctl register theadmin thehost thepassword'
|
|
elog '5) Log in with your favourite jabber client or using the web admin'
|
|
fi
|
|
|
|
# Upgrading from ejabberd-2.0.x:
|
|
if grep -E '^[^#]*EJABBERD_NODE=' "${EROOT}/etc/conf.d/ejabberd" >/dev/null 2>&1; then
|
|
source "${EROOT}/etc/conf.d/ejabberd"
|
|
ewarn
|
|
ewarn "!!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!"
|
|
ewarn "Starting with 2.1.x some paths and configuration files were"
|
|
ewarn "changed to reflect upstream intentions better. Notable changes are:"
|
|
ewarn
|
|
ewarn "1. Everything (even init scripts) is now handled with ejabberdctl script."
|
|
ewarn "Thus main configuration file became /etc/jabberd/ejabberdctl.cfg"
|
|
ewarn "You must update ERLANG_NODE there with the value of EJABBERD_NODE"
|
|
ewarn "from /etc/conf.d/ejebberd or ejabberd will refuse to start."
|
|
ewarn
|
|
ewarn "2. SSL certificate is now generated with ssl-cert eclass and resides"
|
|
ewarn "at standard location: /etc/ssl/ejabberd/server.pem."
|
|
ewarn
|
|
ewarn "3. Cookie now resides at /var/spool/jabber/.erlang.cookie"
|
|
ewarn
|
|
ewarn "4. /var/log/jabber/sasl.log is now /var/log/jabber/erlang.log"
|
|
ewarn
|
|
ewarn "5. Crash dumps (if any) will be located at /var/log/jabber"
|
|
|
|
local i ctlcfg new_ctlcfg
|
|
i=0
|
|
ctlcfg=${EROOT}/etc/jabber/ejabberdctl.cfg
|
|
while :; do
|
|
new_ctlcfg=$(printf "${EROOT}/etc/jabber/._cfg%04d_ejabberdctl.cfg" ${i})
|
|
[[ ! -e ${new_ctlcfg} ]] && break
|
|
ctlcfg=${new_ctlcfg}
|
|
((i++))
|
|
done
|
|
|
|
ewarn
|
|
ewarn "Updating ${ctlcfg} (debug: ${new_ctlcfg})"
|
|
sed -e "/#ERLANG_NODE=/aERLANG_NODE=$EJABBERD_NODE" "${ctlcfg}" > "${new_ctlcfg}" || die
|
|
|
|
if [[ -e ${EROOT}/var/run/jabber/.erlang.cookie ]]; then
|
|
ewarn "Moving .erlang.cookie..."
|
|
if [[ -e ${EROOT}/var/spool/jabber/.erlang.cookie ]]; then
|
|
mv -v "${EROOT}"/var/spool/jabber/.erlang.cookie{,bak}
|
|
fi
|
|
mv -v "${EROOT}"/var/{run/jabber,spool/jabber}/.erlang.cookie
|
|
fi
|
|
ewarn
|
|
ewarn "We'll try to handle upgrade automagically but, please, do your"
|
|
ewarn "own checks and do not forget to run 'etc-update'!"
|
|
ewarn "PLEASE! Run 'etc-update' now!"
|
|
fi
|
|
|
|
SSL_ORGANIZATION="${SSL_ORGANIZATION:-Ejabberd XMPP Server}"
|
|
install_cert /etc/ssl/ejabberd/server
|
|
# Fix ssl cert permissions bug #369809
|
|
chown root:jabber "${EROOT}/etc/ssl/ejabberd/server.pem"
|
|
chmod 0440 "${EROOT}/etc/ssl/ejabberd/server.pem"
|
|
if [[ -e ${EROOT}/etc/jabber/ssl.pem ]]; then
|
|
ewarn
|
|
ewarn "The location of SSL certificates has changed. If you are"
|
|
ewarn "upgrading from ${CATEGORY}/${PN}-2.0.5* or earlier you might"
|
|
ewarn "want to move your old certificates from /etc/jabber into"
|
|
ewarn "/etc/ssl/ejabberd/, update config files and"
|
|
ewarn "rm /etc/jabber/ssl.pem to avoid this message."
|
|
ewarn
|
|
fi
|
|
}
|