1#!/bin/bash
2#
3# Startup script for Kamailio
4#
5# chkconfig: 345 85 15
6# description: Kamailio (OpenSER) - the Open Source SIP Server
7#
8# processname: kamailio
9# pidfile: /run/kamailio.pid
10# config: /etc/kamailio/kamailio.cfg
11#
12### BEGIN INIT INFO
13# Provides: kamailio
14# Required-Start: $local_fs $network
15# Short-Description: Kamailio (OpenSER) - the Open Source SIP Server
16# Description: Kamailio (former OpenSER) is an Open Source SIP Server released
17# 	under GPL, able to handle thousands of call setups per second.
18### END INIT INFO
19
20# Source function library.
21. /etc/rc.d/init.d/functions
22
23KAM=/usr/sbin/kamailio
24KAMCFG=/etc/kamailio/kamailio.cfg
25PROG=kamailio
26HOMEDIR=/run/$PROG
27PID_FILE=/run/$PROG/kamailio.pid
28LOCK_FILE=/var/lock/subsys/kamailio
29RETVAL=0
30DEFAULTS=/etc/sysconfig/kamailio
31RUN_KAMAILIO=no
32
33
34# Do not start kamailio if fork=no is set in the config file
35# otherwise the boot process will just stop
36check_fork ()
37{
38    if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" $KAMCFG; then
39        echo "Not starting $PROG: fork=no specified in config file; run /etc/init.d/kamailio debug instead"
40        exit 1
41    fi
42}
43
44check_kamailio_config ()
45{
46        # Check if kamailio configuration is valid before starting the server
47        out=$($KAM -c $OPTIONS 2>&1 > /dev/null)
48        retcode=$?
49        if [ "$retcode" != '0' ]; then
50            echo "Not starting $PROG: invalid configuration file!"
51            echo -e "\n$out\n"
52            exit 1
53        fi
54}
55
56
57start() {
58	check_kamailio_config
59        if [ "$1" != "debug" ]; then
60            check_fork
61        fi
62	echo -n $"Starting $PROG: "
63	daemon $KAM $OPTIONS >/dev/null 2>/dev/null
64	RETVAL=$?
65	[ $RETVAL = 0 ] && touch $LOCK_FILE && success
66	echo
67	return $RETVAL
68}
69
70stop() {
71	echo -n $"Stopping $PROG: "
72	killproc -p $PID_FILE
73	RETVAL=$?
74	echo
75	[ $RETVAL = 0 ] && rm -f $LOCK_FILE $PID_FILE
76}
77
78# Load startup options if available
79if [ -f $DEFAULTS ]; then
80   . $DEFAULTS || true
81fi
82
83if [ "$RUN_KAMAILIO" != "yes" ]; then
84    echo "Kamailio not yet configured. Edit $DEFAULTS first."
85    exit 0
86fi
87
88
89SHM_MEMORY=$((`echo $SHM_MEMORY | sed -e 's/[^0-9]//g'`))
90PKG_MEMORY=$((`echo $PKG_MEMORY | sed -e 's/[^0-9]//g'`))
91[ -z "$USER" ]  && USER=kamailio
92[ -z "$GROUP" ] && GROUP=kamailio
93[ $SHM_MEMORY -le 0 ] && SHM_MEMORY=32
94[ $PKG_MEMORY -le 0 ] && PKG_MEMORY=4
95
96if test "$DUMP_CORE" = "yes" ; then
97    # set proper ulimit
98    ulimit -c unlimited
99
100    # directory for the core dump files
101    COREDIR=/tmp
102    echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern
103fi
104
105# /run can be a tmpfs
106if [ ! -d $HOMEDIR ]; then
107    mkdir -p $HOMEDIR
108	chown ${USER}:${GROUP} $HOMEDIR
109fi
110
111OPTIONS="-f $KAMCFG -P $PID_FILE -m $SHM_MEMORY -M $PKG_MEMORY -u $USER -g $GROUP $EXTRA_OPTIONS"
112
113
114# See how we were called.
115case "$1" in
116	start|debug)
117		start
118		;;
119	stop)
120		stop
121		;;
122	status)
123		status $KAM
124		RETVAL=$?
125		;;
126	restart)
127		stop
128		start
129		;;
130	condrestart)
131		if [ -f $PID_FILE ] ; then
132			stop
133			start
134		fi
135		;;
136	*)
137		echo $"Usage: $PROG {start|stop|restart|condrestart|status|debug|help}"
138		exit 1
139esac
140
141exit $RETVAL
142