1
0
Fork 0
mirror of https://github.com/iiab/iiab.git synced 2025-02-13 11:42:08 +00:00
iiab/roles/ejabberd/templates/ejabberd-iiab.init
2018-05-05 21:40:56 +00:00

220 lines
5.3 KiB
Bash
Executable file

#!/bin/bash
#
# ejabberd Start and stop ejabberd.
# chkconfig: - 40 60
# description: ejabberd
# processname: ejabberd
# pidfile: /var/run/ejabberd/ejabberd.pid
### BEGIN INIT INFO
# Provides: ejabberd
# Required-Start: network
# Required-Stop: network
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop ejabberd
# Description: A distributed, fault-tolerant Jabber/XMPP server
### END INIT INFO
SYS_DOMAIN_FILE=/etc/sysconfig/iiab_domain_name
OUR_DOMAIN_FILE=/etc/sysconfig/ejabberd_domain_name
. /etc/rc.d/init.d/functions
if [ -r /etc/sysconfig/ejabberd-iiab ]; then
. /etc/sysconfig/ejabberd-iiab
fi
if [ ! "$CONFIG_FILE" ]; then
CONFIG_FILE=/etc/ejabberd/ejabberd-iiab.cfg
fi
# /var/run is tmpfs in fc18, so need to create every time
mkdir -p /var/run/ejabberd
chown ejabberd:ejabberd /var/run/ejabberd
# avoid using consolehelper, call ejabberdctl directly
progctl=/usr/sbin/ejabberdctl
check_domain_configured() {
if [ ! -e $SYS_DOMAIN_FILE ]; then
echo "Domain not configured yet 1" > /dev/stderr
exit 1;
fi
domain=`cat "$SYS_DOMAIN_FILE" `
if [ "$domain" == "random.xs.laptop.org" ]; then
echo "Domain not configured yet 2" > /dev/stderr
exit 1;
fi
#hostname=`hostname -f`
hostname=`hostname `
if [ "$hostname" == "localhost.localdomain" ]; then
echo "Domain not configured yet 3" > /dev/stderr
fi
# if [ "$hostname" != "schoolserver.$domain" ]; then
# echo "Domain changed -- restart to enable ejabberd" > /dev/stderr
# fi
short_host=`hostname -s`
node_name=`cat $OUR_DOMAIN_FILE`
# if [ ! -e "$OUR_DOMAIN_FILE" ] || ! cmp "$SYS_DOMAIN_FILE" "$OUR_DOMAIN_FILE" ; then
if [ ! -e "$OUR_DOMAIN_FILE" ] ; then
update_domain
fi
}
update_domain() {
BACKUP_SUFFIX=old
if [ -e $CONFIG_FILE ]; then
cp $CONFIG_FILE $CONFIG_FILE.$BACKUP_SUFFIX || exit 1
fi
new_name=$short_host.$domain
#(sed -e s/@@BASEDNSNAME2@@/$new_name/ $CONFIG_FILE.in > $CONFIG_FILE.tmp ) && mv $CONFIG_FILE.tmp $CONFIG_FILE || exit 1
# If we are changing the domain, we must clear the DB.
if [ -e /var/lib/ejabberd/online_src_created ] ; then
rm -f /var/lib/ejabberd/online_src_created
fi
if [ -d /var/lib/ejabberd/spool/ ]; then
rm -f /var/lib/ejabberd/spool/*
fi
# Mark as done -
# cp "$SYS_DOMAIN_FILE" "$OUR_DOMAIN_FILE"
echo "$domain" > "$OUR_DOMAIN_FILE"
}
setup_online_srg() {
if [ -e /var/lib/ejabberd/online_src_created ]; then
return 0
fi;
# give ejabberd a bit of time to startup on XO-1 HW :-)
sleep 10;
short_host=`hostname -s`
domain=`cat "$SYS_DOMAIN_FILE"`
# Note: grep -q exits as soon as the match is found, which ejabberdctl
# doesn't like. So we send the output to /dev/null instead - more
# portable too.
#
# ejabberdctl should handle SIGPIPE without messing up, but that's
# a minor problem anyway.
#
if ! ejabberdctl srg_list "$short_host.$domain" | grep '^Online$' > /dev/null ; then
# ejabberdctl doesn't like spaces in the description field.
# backslashes work - but escaping is better left alone for now :-)
ejabberdctl srg_create Online "$short_host.$domain" \
Online "Created_by_ejabberd_init" Online
[ $? -eq 0 ] || return 1
fi
if ! ejabberdctl srg_get_info Online "$short_host.$domain" | grep '^online_users: true$' > /dev/null ; then
ejabberdctl srg_user_add '@online@' "$short_host.$domain" \
Online "$short_host.$domain"
[ $? -eq 0 ] || return 1
fi
# mark success
touch /var/lib/ejabberd/online_src_created
}
is_running() {
/sbin/runuser -s /bin/bash - ejabberd -c "$progctl status" &>/dev/null
}
start() {
echo -n $"Starting ejabberd: "
#if [ "$ULIMIT_MAX_FILES" ]; then
# ulimit -n $ULIMIT_MAX_FILES
#fi
check_domain_configured
# check whether ejabberd was already started
if is_running; then
echo -n "already running" && warning && echo
return 0
fi
daemon --user=ejabberd $progctl start --config $CONFIG_FILE \
--ctl-config /etc/ejabberd/ejabberdctl-iiab.cfg \
--logs "/var/log/ejabberd" \
--spool "/var/lib/ejabberd/spool" \
2>/dev/null
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/ejabberd
echo
# it takes some time to actually start necessary nodes
sleep 5
# Ignore the return val of setup_online_srg
# ==> startup even if the SRG setup had errors.
set +e;
setup_online_srg
return $RETVAL
}
stop() {
# Stop daemons.
echo -n "Shutting down ejabberd: "
# check whether ejabberd was already stopped
if ! is_running; then
echo -n "already stopped" && warning && echo
return 0
fi
daemon $progctl stop 2>/dev/null
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ejabberd
echo
# it takes some time to actually stop necessary nodes
sleep 5
return $RETVAL
}
restart() {
stop
sleep 5
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload)
restart
;;
condrestart|try-restart)
[ -f /var/lock/subsys/ejabberd ] && restart || :
;;
status)
$progctl status
;;
*)
echo "Usage: ejabberd {start|stop|restart|force-reload|condrestart|try-restart|status}"
exit 2
esac
exit $RETVAL