diff --git a/data/tutorials/osips_event/opensips/etc/default/opensips b/data/tutorials/osips_event/opensips/etc/default/opensips new file mode 100755 index 000000000..0671f96a0 --- /dev/null +++ b/data/tutorials/osips_event/opensips/etc/default/opensips @@ -0,0 +1,27 @@ +# +# OpenSIPS startup options +# + +# Set to yes to enable opensips, once configured properly. +RUN_OPENSIPS=yes + +# User to run as +USER=opensips + +# Group to run as +GROUP=opensips + +# Amount of shared memory to allocate for the running OpenSIPS server (in Mb) +S_MEMORY=64 + +# Amount of pkg memory to allocate for the running OpenSIPS server (in Mb) +P_MEMORY=4 + +# Enable the server to leave a core file when it crashes. +# Set this to 'yes' to enable OpenSIPS to leave a core file when it crashes +# or 'no' to disable this feature. This option is case sensitive and only +# accepts 'yes' and 'no' and only in lowercase letters. +# On some systems (e.g. Ubuntu 6.10, Debian 4.0) it is necessary to specify +# a directory for the core files to get a dump. Look into the opensips +# init file for an example configuration. +DUMP_CORE=no diff --git a/data/tutorials/osips_event/opensips/etc/init.d/opensips b/data/tutorials/osips_event/opensips/etc/init.d/opensips new file mode 100755 index 000000000..f64a959d7 --- /dev/null +++ b/data/tutorials/osips_event/opensips/etc/init.d/opensips @@ -0,0 +1,192 @@ +#! /bin/sh +# +### BEGIN INIT INFO +# Provides: opensips +# Required-Start: $syslog $network $local_fs $time +# Required-Stop: $syslog $network $local_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start the OpenSIPS SIP server +# Description: Start the OpenSIPS SIP server +### END INIT INFO +# +# TODO: +# The following fields should be added (and completed): +# Should-Start: postgresql mysql radius +# Should-Stop: postgresql mysql radius + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/opensips +NAME=opensips +DESC=opensips +TUTFOLDER = /usr/share/cgrates/tutorials/osips_event/opensips +CFGFILE=$TUTFOLDER/etc/opensips/opensips.cfg +M4CFGFILE=$TUTFOLDER/etc/opensips/opensips.m4 +M4ARCHIVEDIR=$TUTFOLDER/etc/opensips/archive +HOMEDIR=/var/run/opensips +PIDFILE=$HOMEDIR/$NAME.pid +DEFAULTS=$TUTFOLDER/etc/default/opensips +RUN_OPENSIPS=no + +# Do not start opensips 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.*" $CFGFILE; then + echo "Not starting $DESC: fork=no specified in config file; run /etc/init.d/opensips debug instead" + exit 1 + fi +} + +check_opensips_config () +{ + # Check if opensips configuration is valid before starting the server + set +e + out=$($DAEMON -c 2>&1 > /dev/null) + retcode=$? + set -e + if [ "$retcode" != '0' ]; then + echo "Not starting $DESC: invalid configuration file!" + echo -e "\n$out\n" + exit 1 + fi +} + +create_radius_seqfile () +{ + # Create a radius sequence file to be used by the radius client if + # radius accounting is enabled. This is needed to avoid any issue + # with the file not being writable if opensips first starts as user + # root because DUMP_CORE is enabled and creates this file as user + # root and then later it switches back to user opensips and cannot + # write to the file. If the file exists before opensips starts, it + # won't change it's ownership and will be writable for both root + # and opensips, no matter what options are chosen at install time + RADIUS_SEQ_FILE=/var/run/opensips/opensips_radius.seq + if [ -d /var/run/opensips ]; then + chown ${USER}:${GROUP} /var/run/opensips + + if [ ! -f $RADIUS_SEQ_FILE ]; then + touch $RADIUS_SEQ_FILE + fi + + chown ${USER}:${GROUP} $RADIUS_SEQ_FILE + chmod 660 $RADIUS_SEQ_FILE + fi +} + +test -f $DAEMON || exit 0 + +# Load startup options if available +if [ -f $DEFAULTS ]; then + . $DEFAULTS || true +fi + +if [ "$RUN_OPENSIPS" != "yes" ]; then + echo "OpenSIPS not yet configured. Edit /etc/default/opensips first." + exit 0 +fi + +set -e + +S_MEMORY=$((`echo $S_MEMORY | sed -e 's/[^0-9]//g'`)) +P_MEMORY=$((`echo $P_MEMORY | sed -e 's/[^0-9]//g'`)) +[ -z "$USER" ] && USER=opensips +[ -z "$GROUP" ] && GROUP=opensips +[ $S_MEMORY -le 0 ] && S_MEMORY=32 +[ $P_MEMORY -le 0 ] && P_MEMORY=32 + +if test "$DUMP_CORE" = "yes" ; then + # set proper ulimit + ulimit -c unlimited + + # directory for the core dump files + # COREDIR=/home/corefiles + # [ -d $COREDIR ] || mkdir $COREDIR + # chmod 777 $COREDIR + # echo "$COREDIR/core.%e.sig%s.%p" > /proc/sys/kernel/core_pattern +fi + +OPTIONS="-P $PIDFILE -m $S_MEMORY -M $P_MEMORY -u $USER -g $GROUP" + +case "$1" in + start|debug) + check_opensips_config + create_radius_seqfile + + if [ "$1" != "debug" ]; then + check_fork + fi + + # dirs under /var/run can go away on reboots. + mkdir -p "$HOMEDIR" + chmod 775 "$HOMEDIR" + chown "$USER:$GROUP" "$HOMEDIR" >/dev/null 2>&1 || true + + # Generate config from M4 + if [ -f $M4CFGFILE ]; then + m4 -Q $M4CFGFILE >$CFGFILE.tmp + if [ $? != 0 ]; then + echo "Cannot process m4 macro" + rm "$CFGFILE.tmp" + exit 1 + fi + + [ -e $CFGFILE ] || touch $CFGFILE + + # compare configs + if [ `md5sum $CFGFILE|awk '{print $1}'` != `md5sum $CFGFILE.tmp|awk '{print $1}'` ]; then + mkdir -p "$M4ARCHIVEDIR" + mv "$CFGFILE" "$M4ARCHIVEDIR/$NAME.cfg-`date +%Y%m%d_%H%M%S`" + fi + + mv "$CFGFILE.tmp" "$CFGFILE" + chown $USER:$GROUP $CFGFILE + chmod 640 $CFGFILE + fi + + echo -n "Starting $DESC: $NAME" + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --exec $DAEMON -- $OPTIONS || echo -n " already running" + echo "." + ;; + stop) + echo -n "Stopping $DESC: $NAME" + start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \ + --exec $DAEMON + echo "." + ;; + restart|force-reload) + check_opensips_config + create_radius_seqfile + + echo -n "Restarting $DESC: $NAME" + start-stop-daemon --oknodo --stop --quiet --pidfile \ + $PIDFILE --exec $DAEMON + sleep 1 + start-stop-daemon --start --quiet --pidfile \ + $PIDFILE --exec $DAEMON -- $OPTIONS + echo "." + ;; + status) + echo -n "Status of $DESC: " + if [ ! -r "$PIDFILE" ]; then + echo "$NAME is not running." + exit 3 + fi + if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then + echo "$NAME is running." + exit 0 + else + echo "$NAME is not running but $PIDFILE exists." + exit 1 + fi + ;; + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|restart|force-reload|debug|status}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/data/tutorials/osips_event/opensips/etc/opensips/opensips.cfg b/data/tutorials/osips_event/opensips/etc/opensips/opensips.cfg index 51578751e..1f5d7375f 100644 --- a/data/tutorials/osips_event/opensips/etc/opensips/opensips.cfg +++ b/data/tutorials/osips_event/opensips/etc/opensips/opensips.cfg @@ -349,13 +349,9 @@ route[CGR_HANDLER] { } - failure_route[missed_call] { if (t_was_cancelled()) { exit; } } - - -