diff --git a/system/sbin/kazoo-kamailio b/system/sbin/kazoo-kamailio new file mode 100755 index 0000000..97454d7 --- /dev/null +++ b/system/sbin/kazoo-kamailio @@ -0,0 +1,102 @@ +#!/bin/bash + +if [ -f /etc/default/kamailio ]; then + . /etc/default/kamailio +fi + +if [ -f /etc/sysconfig/kamailio ]; then + . /etc/sysconfig/kamailio +fi + +RETVAL=0 +USER=${KAMAILIO_USER:-kamailio} +GROUP=${KAMAILIO_GROUP:-kamailio} +BIN_FILE=${KAMAILIO_BIN:-/usr/sbin/kamailio} +CFG_FILE=${KAMAILIO_CONFIG:-/etc/kazoo/kamailio/kamailio.cfg} +PID_FILE=/var/run/kazoo-kamailio/kamailio.pid +export HOME=${KAMAILIO_HOME:-/var/run/kamailio} + +OPTIONS="-P ${PID_FILE} -m ${SHM_MEMORY} -M ${PKG_MEMORY} -u ${USER} -g ${GROUP} ${EXTRA_OPTIONS}" +SHM_MEMORY=$((`echo $SHM_MEMORY | sed -e 's/[^0-9]//g'`)) +PKG_MEMORY=$((`echo $PKG_MEMORY | sed -e 's/[^0-9]//g'`)) +[ $SHM_MEMORY -le 0 ] && SHM_MEMORY=64 +[ $PKG_MEMORY -le 0 ] && PKG_MEMORY=8 + +if test "$DUMP_CORE" = "yes" ; then + ulimit -c unlimited +fi + +# Do not start kamailio if fork=no is set in the config file +# otherwise the boot process will just stop +check_fork () +{ + if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" $CFG_FILE; then + echo "Not starting Kamailio: fork=no specified in config file" + exit 1 + fi +} + +check_kamailio_config () +{ + local ERRORS=$($BIN_FILE -c 2>&1 > /dev/null) + RETVAL=$? + if [ "${RETVAL}" != '0' ]; then + echo "Not starting Kamailio: invalid configuration file!" + echo -e "\n${ERRORS}\n" + RETVAL=1 + fi +} + +start() { + check_kamailio_config + check_fork + + mkdir -p /var/run/kazoo-kamailio + chown -R ${USER} /var/run/kazoo-kamailio + mkdir -p /var/run/kamailio + chown -R ${USER} /var/run/kamailio + + cd ${HOME} + if [ "$(whoami)" == "${USER}" ]; then + exec ${BIN_FILE} -f ${CFG_FILE} -P ${PID_FILE} -m ${SHM_MEMORY} -M ${PKG_MEMORY} -u ${USER} -g ${GROUP} ${EXTRA_OPTIONS} $@ + else + exec su -s /bin/bash -c "${BIN_FILE} -f ${CFG_FILE} -P ${PID_FILE} -m ${SHM_MEMORY} -M ${PKG_MEMORY} -u ${USER} -g ${GROUP} ${EXTRA_OPTIONS} $@" ${USER} + fi + RETVAL=$? +} + +stop() { + killproc ${BIN_FILE} + RETVAL=$? +} + +status() { + kamctl fifo ds_list + RETVAL=$? +} + +case "$1" in + start) + shift + start $@ + ;; + foreground) + shift + start "-DD -E" + ;; + stop) + stop + ;; + status) + status + ;; + restart) + stop + start + ;; + *) + echo $"Usage: $0 {start|stop|restart|status}" + RETVAL=1 +esac + +exit ${RETVAL}