| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- ###################
- Freeswitch install
- ###################
- |
- | **Upgrade Move Source**
- ::
- mv /usr/src/freeswitch freeswitch-version
- | **Git Release**
- ::
- cd /usr/src
- git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git
- cd freeswitch
- ./bootstrap.sh
- | or
- | **Git Head**
- ::
- cd /usr/src
- git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
- cd freeswitch
- ./bootstrap.sh
- | or
- | **files.freeswitch.org**
- ::
- cd /usr/src
- wget http://files.freeswitch.org/freeswitch-1.4.26.zip
- unzip freeswitch-1.4.26.zip
- cd freeswitch-1.4.26
-
- 1.4.x is considered EOL use the steps below for 1.6.x
-
- cd /usr/src
- wget http://files.freeswitch.org/freeswitch-1.6.20.zip
- unzip freeswitch-1.6.20.zip
- cd freeswitch-1.6.20
- | **Ubuntu Dependencies**
- ::
- apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool make python-dev gawk pkg-config libtiff-dev libperl-dev libgdbm-dev libdb-dev gettext libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libedit-dev libldns-dev libpq-dev memcached libmemcached-dev
- | **Debian Dependencies**
- ::
- apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool libtool-bin make python-dev gawk pkg-config libtiff5-dev libperl-dev libgdbm-dev libdb-dev gettext libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libedit-dev libldns-dev libpq-dev memcached libmemcached-dev
- | **CentOS**
- ::
- yum install git gcc-c++ autoconf automake libtool wget python ncurses-devel zlib-devel libjpeg-devel openssl-devel e2fsprogs-devel sqlite-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit-devel libmemcached-devel
- | Configure services to auto start
- ::
- chkconfig --add memcached && chkconfig --levels 33 memcached on
- chkconfig --add freeswitch && chkconfig --levels 35 freeswitch on
- | **modules.conf**
- | uncomment the FreeSWITCH modules that are needed.
- ::
- mod_avmd
- mod_callcenter
- mod_memcache
- mod_cidlookup
- mod_curl
- mod_translate
- | Used for MP3 support
- ::
- mod_shout
- | **Postgres driver**
- ::
- ./configure --enable-core-pgsql-support
- | **Run Make**
- ::
- make
- | **Remove FreeSWITCH files**
- | This step is only needed for a FreeSWITCH upgrade.
- | Once it has been confirmed that the compile was successful then remove files from previous version of FreeSWITCH
-
- ::
-
- rm -rf /usr/local/freeswitch/{lib,mod,bin}/*
-
- | **Install**
- ::
- make install
- | **File Permissions**
- | Set the file permissions instructions may vary based on the OS and install directory.
- | Debian and Ubuntu
- ::
- chown -R www-data:www-data /usr/local/freeswitch
-
-
- | CentOS or Other Unix operating systems
- | (need make sure that the web server has access to IVR recordings, Fax, and Voicemail)
- ::
- adduser --disabled-password --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup daemon freeswitch
- chown -R freeswitch:daemon /usr/local/freeswitch/
- chmod -R o-rwx /usr/local/freeswitch/
- | **Install Sound Files**
- | Run this on new installs.
- ::
- cd /usr/src/freeswitch
- make sounds-install moh-install
- make hd-sounds-install hd-moh-install
- make cd-sounds-install cd-moh-install
- **Startup Script**
- | Run on new install only. Create the file '/etc/init.d/freeswitch' with the following code:
- ::
- #!/bin/bash
- ### BEGIN INIT INFO
- # Provides: freeswitch
- # Required-Start: $local_fs $remote_fs
- # Required-Stop: $local_fs $remote_fs
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Description: Freeswitch debian init script.
- # Author: Matthew Williams
- #
- ### END INIT INFO
- # Do NOT "set -e"
-
- # PATH should only include /usr/* if it runs after the mountnfs.sh script
- PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
- DESC="Freeswitch"
- NAME=freeswitch
- DAEMON=/usr/local/freeswitch/bin/$NAME
- DAEMON_ARGS="-nc -nonat -reincarnate"
- PIDFILE=/usr/local/freeswitch/run/$NAME.pid
- SCRIPTNAME=/etc/init.d/$NAME
- FS_USER=www-data #freeswitch
- FS_GROUP=www-data #daemon
- # Exit if the package is not installed
- [ -x "$DAEMON" ] || exit 0
-
- # Read configuration variable file if it is present
- [ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
- # Load the VERBOSE setting and other rcS variables
- . /lib/init/vars.sh
-
- # Define LSB log_* functions.
- # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
- . /lib/lsb/init-functions
-
- #
- # Function that sets ulimit values for the daemon
- #
- do_setlimits() {
- ulimit -c unlimited
- ulimit -d unlimited
- ulimit -f unlimited
- ulimit -i unlimited
- ulimit -n 999999
- ulimit -q unlimited
- ulimit -u unlimited
- ulimit -v unlimited
- ulimit -x unlimited
- ulimit -s 240
- ulimit -l unlimited
- return 0
- }
- #
- # Function that starts the daemon/service
- #
- do_start()
- {
- # Set user to run as
- if [ $FS_USER ] ; then
- DAEMON_ARGS="`echo $DAEMON_ARGS` -u $FS_USER"
- fi
- # Set group to run as
- if [ $FS_GROUP ] ; then
- DAEMON_ARGS="`echo $DAEMON_ARGS` -g $FS_GROUP"
- fi
- # Return
- # 0 if daemon has been started
- # 1 if daemon was already running
- # 2 if daemon could not be started
- start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null -- \
- || return 1
- do_setlimits
- start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background -- \
- $DAEMON_ARGS \
- || return 2
- # Add code here, if necessary, that waits for the process to be ready
- # to handle requests from services started subsequently which depend
- # on this one. As a last resort, sleep for some time.
- }
-
- #
- # Function that stops the daemon/service
- #
- do_stop()
- {
- # Return
- # 0 if daemon has been stopped
- # 1 if daemon was already stopped
- # 2 if daemon could not be stopped
- # other if a failure occurred
- start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
- RETVAL="$?"
- [ "$RETVAL" = 2 ] && return 2
- # Wait for children to finish too if this is a daemon that forks
- # and if the daemon is only ever run from this initscript.
- # If the above conditions are not satisfied then add some other code
- # that waits for the process to drop all resources that could be
- # needed by services started subsequently. A last resort is to
- # sleep for some time.
- start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
- [ "$?" = 2 ] && return 2
- # Many daemons don't delete their pidfiles when they exit.
- rm -f $PIDFILE
- return "$RETVAL"
- }
-
- #
- # Function that sends a SIGHUP to the daemon/service
- #
- do_reload() {
- #
- # If the daemon can reload its configuration without
- # restarting (for example, when it is sent a SIGHUP),
- # then implement that here.
- #
- start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
- return 0
- }
-
- case "$1" in
- start)
- [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
- do_start
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
- stop)
- [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
- do_stop
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
- status)
- status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
- ;;
- #reload|force-reload)
- #
- # If do_reload() is not implemented then leave this commented out
- # and leave 'force-reload' as an alias for 'restart'.
- #
- #log_daemon_msg "Reloading $DESC" "$NAME"
- #do_reload
- #log_end_msg $?
- #;;
- restart|force-reload)
- #
- # If the "reload" option is implemented then remove the
- # 'force-reload' alias
- #
- log_daemon_msg "Restarting $DESC" "$NAME"
- do_stop
- case "$?" in
- 0|1)
- do_start
- case "$?" in
- 0) log_end_msg 0 ;;
- 1) log_end_msg 1 ;; # Old process is still running
- *) log_end_msg 1 ;; # Failed to start
- esac
- ;;
- *)
- # Failed to stop
- log_end_msg 1
- ;;
- esac
- ;;
- *)
- #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
- echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
- exit 3
- ;;
- esac
-
- exit 0
- Make the script executable and make it auto start on system boot:
- ::
- chmod +x /etc/init.d/freeswitch
- update-rc.d freeswitch defaults
- |
- Monit
- ------
- Used to monitor processes on UNIX systems.
- http://mmonit.com/monit/
- Install
- ^^^^^^^^^
- ::
- apt-get install monit
- Edit Monit /etc/default/monit and set the "startup" variable to 1 in order to allow monit to start.
- Configure
- ^^^^^^^^^^
- Fail2Ban
- ~~~~~~~~~~
- ::
-
- cd /etc/monit.d
- touch fail2ban
- nano fail2ban
- Add the following to the file and save it.
- ::
- check process fail2ban with pidfile /var/run/fail2ban/fail2ban.pid
- group services
- start program = "/etc/init.d/fail2ban start"
- stop program = "/etc/init.d/fail2ban stop"
- if 5 restarts within 5 cycles then timeout
- SIP
- ~~~~~
- To monitor SIP from local or remote server
- ::
- cd /etc/monit.d
- touch sip
- nano sip
- ::
- check host fusionpbx with address your-ip
- if failed port 5060 protocol sip with target monit@monit:5060
- then alert
-
- FreeSWITCH
- ~~~~~~~~~~~~
- ::
- cd /etc/monit/conf.d
- or
- ::
- cd /etc/monit.d
- touch freeswitch
- nano freeswitch
- Add the following
- ::
- #check process freeswitch with pidfile /usr/local/freeswitch/run/freeswitch.pid
- check process freeswitch with pidfile /run/freeswitch/freeswitch.pid
- start program = "/usr/bin/service freeswitch start"
- stop program = "/usr/bin/service freeswitch stop"
- or
- ::
- #check process freeswitch with pidfile /usr/local/freeswitch/run/freeswitch.pid
- #start program = "/usr/local/freeswitch/bin/./freeswitch -nc -u www-data"
- #stop program = "/usr/local/freeswitch/bin/./freeswitch -stop"
- check process freeswitch with pidfile /run/freeswitch/freeswitch.pid
- start program = "/usr/bin/./freeswitch -nc -u www-data"
- stop program = "/usr/bin/./freeswitch -stop"
- Additional Options
- ~~~~~~~~~~~~~~~~~~~
- ::
- if 5 restarts within 5 cycles then timeout
- if cpu > 60% for 2 cycles then alert
- if cpu > 80% for 5 cycles then alert
- if totalmem > 2000.0 MB for 5 cycles then restart
- if children > 2500 then restart
- Monit Daemon Add to the main monit config file.
- ::
- #monit daemon
- set httpd port 2812 and
- use address localhost
- allow localhost
- Monit Commands
- ~~~~~~~~~~~~~~~
- ::
- monit -h
- monit status
|