pkg/kamailio/deb: fix init script
[sip-router] / pkg / kamailio / deb / squeeze / kamailio.init
1 #! /bin/sh
2 #
3 ### BEGIN INIT INFO
4 # Provides:          kamailio
5 # Required-Start:    $syslog $network $local_fs $remote_fs $time
6 # Should-Start:      $named slapd mysql postgresql snmpd radiusd
7 # Should-Stop:       $named slapd mysql postgresql snmpd radiusd
8 # Required-Stop:     $syslog $network $local_fs $remote_fs
9 # Default-Start:     2 3 4 5
10 # Default-Stop:      0 1 6
11 # Short-Description: Start the Kamailio SIP proxy server
12 # Description:       Start the Kamailio SIP proxy server
13 ### END INIT INFO
14
15 . /lib/lsb/init-functions
16
17 PATH=/sbin:/bin:/usr/sbin:/usr/bin
18 DAEMON=/usr/sbin/kamailio
19 NAME=kamailio
20 DESC="Kamailio SIP server"
21 HOMEDIR=/var/run/kamailio
22 PIDFILE=$HOMEDIR/$NAME.pid
23 DEFAULTS=/etc/default/kamailio
24 RUN_KAMAILIO=no
25 USER=kamailio
26 GROUP=kamailio
27 # Amount of memory to allocate for the running Kamailio server (in Mb)
28 MEMORY=64
29 DUMP_CORE=no
30
31 # Do not start kamailio if fork=no is set in the config file
32 # otherwise the boot process will just stop
33 check_fork ()
34 {
35     if grep -q "^[[:space:]]*fork[[:space:]]*=[[:space:]]*no.*" /etc/kamailio/kamailio.cfg; then
36         log_failure_msg "Not starting $DESC: fork=no specified in config file; run /etc/init.d/kamailio debug instead"
37         exit 0
38     fi
39 }
40
41 check_kamailio_config ()
42 {
43         # Check if kamailio configuration is valid before starting the server
44         set +e
45         out=$($DAEMON -c 2>&1 > /dev/null)
46         retcode=$?
47         set -e
48         if [ "$retcode" != '0' ]; then
49             log_failure_msg "Not starting $DESC: invalid configuration file!"
50             log_failure_msg
51             log_failure_msg "$out"
52             log_faiulre_msg
53             exit 1
54         fi
55 }
56
57 create_radius_seqfile ()
58 {
59     # Create a radius sequence file to be used by the radius client if
60     # radius accounting is enabled. This is needed to avoid any issue
61     # with the file not being writable if kamailio first starts as user
62     # root because DUMP_CORE is enabled and creates this file as user
63     # root and then later it switches back to user kamailio and cannot
64     # write to the file. If the file exists before kamailio starts, it
65     # won't change it's ownership and will be writable for both root
66     # and kamailio, no matter what options are chosen at install time
67     RADIUS_SEQ_FILE=/var/run/kamailio/kamailio_radius.seq
68     if [ -d /var/run/kamailio ]; then
69         chown ${USER}:${GROUP} /var/run/kamailio
70
71         if [ ! -f $RADIUS_SEQ_FILE ]; then
72             touch $RADIUS_SEQ_FILE
73         fi
74
75         chown ${USER}:${GROUP} $RADIUS_SEQ_FILE
76         chmod 660 $RADIUS_SEQ_FILE
77     fi
78 }
79
80 test -f $DAEMON || exit 0
81
82 # Load startup options if available
83 if [ -f $DEFAULTS ]; then
84    . $DEFAULTS || true
85 fi
86
87 if [ "$RUN_KAMAILIO" != "yes" ]; then
88     log_failure_msg "Kamailio not yet configured. Edit /etc/default/kamailio first."
89     exit 0
90 fi
91
92 set -e
93
94 MEMORY=$((`echo $MEMORY | sed -e 's/[^0-9]//g'`))
95 [ -z "$USER" ]  && USER=kamailio
96 [ -z "$GROUP" ] && GROUP=kamailio
97 [ $MEMORY -le 0 ] && MEMORY=32
98
99 if test "$DUMP_CORE" = "yes" ; then
100     # set proper ulimit
101     ulimit -c unlimited
102
103     # directory for the core dump files
104     # COREDIR=/home/corefiles
105     # [ -d $COREDIR ] || mkdir $COREDIR
106     # chmod 777 $COREDIR
107     # echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern
108 fi
109
110 # /var/run can be a tmpfs
111 if [ ! -d $HOMEDIR ]; then
112     mkdir -p $HOMEDIR
113 fi
114
115 OPTIONS="-P $PIDFILE -m $MEMORY -u $USER -g $GROUP"
116
117 case "$1" in
118   start|debug)
119         check_kamailio_config
120         create_radius_seqfile
121
122         if [ "$1" != "debug" ]; then
123             check_fork
124         fi
125
126         log_daemon_msg "Starting $DESC: $NAME"
127         start-stop-daemon --start --quiet --pidfile $PIDFILE \
128                 --exec $DAEMON -- $OPTIONS || log_failure_msg " already running"
129         log_end_msg 0
130         ;;
131   stop)
132         log_daemon_msg "Stopping $DESC: $NAME"
133         start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
134                 --exec $DAEMON
135         log_end_msg 0
136         ;;
137   restart|force-reload)
138         check_kamailio_config
139         create_radius_seqfile
140
141         $0 stop
142         sleep 1
143         $0 start
144         ;;
145   status)
146         log_daemon_msg "Status of $DESC: "
147
148         status_of_proc -p"$PIDFILE" $NAME $NAME
149         ;;
150   *)
151         N=/etc/init.d/$NAME
152         echo "Usage: $N {start|stop|restart|force-reload|status|debug}" >&2
153         exit 1
154         ;;
155 esac
156
157 exit 0