Difference between revisions of "FreeSWITCH compile"
(→Run Make) |
|||
(37 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | ==Git== | + | |
+ | |||
+ | |||
+ | |||
+ | |||
+ | '''Migrated to new documentation''' http://docs.fusionpbx.com/en/latest/advanced/freeswitch.html | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==Upgrade Move Source== | ||
+ | mv /usr/src/freeswitch freeswitch-version | ||
+ | |||
+ | ==Git Release == | ||
+ | cd /usr/src | ||
+ | git clone -b v1.4 https://freeswitch.org/stash/scm/fs/freeswitch.git | ||
+ | cd freeswitch | ||
+ | ./bootstrap.sh | ||
+ | |||
+ | or | ||
+ | |||
+ | ==Git Head == | ||
cd /usr/src | cd /usr/src | ||
− | git clone | + | git clone https://freeswitch.org/stash/scm/fs/freeswitch.git |
cd freeswitch | cd freeswitch | ||
./bootstrap.sh | ./bootstrap.sh | ||
Line 8: | Line 32: | ||
==files.freeswitch.org== | ==files.freeswitch.org== | ||
− | wget http://files.freeswitch.org/freeswitch-1.4. | + | cd /usr/src |
− | unzip freeswitch-1.4. | + | wget http://files.freeswitch.org/freeswitch-1.4.19.zip |
− | cd freeswitch-1.4. | + | unzip freeswitch-1.4.19.zip |
+ | cd freeswitch-1.4.19 | ||
==Ubuntu Dependencies== | ==Ubuntu Dependencies== | ||
Line 16: | Line 41: | ||
==Debian Dependencies== | ==Debian Dependencies== | ||
− | apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool 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 | + | 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== | ==modules.conf== | ||
Line 24: | Line 56: | ||
mod_memcache | mod_memcache | ||
mod_cidlookup | mod_cidlookup | ||
+ | mod_curl | ||
Used for MP3 support | Used for MP3 support | ||
Line 35: | Line 68: | ||
==Remove FreeSWITCH files== | ==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}/* | rm -rf /usr/local/freeswitch/{lib,mod,bin}/* | ||
Line 47: | Line 80: | ||
Debian and Ubuntu | Debian and Ubuntu | ||
chown -R www-data:www-data /usr/local/freeswitch | 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: | ||
+ | |||
+ | <pre> | ||
+ | #!/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 | ||
+ | </pre> | ||
+ | |||
+ | Make the script executable and make it auto start on system boot: | ||
+ | <pre> | ||
+ | chmod +x /etc/init.d/freeswitch | ||
+ | update-rc.d freeswitch defaults | ||
+ | </pre> |
Latest revision as of 03:50, 7 February 2016
Migrated to new documentation http://docs.fusionpbx.com/en/latest/advanced/freeswitch.html
Contents
Upgrade Move Source
mv /usr/src/freeswitch freeswitch-version
Git Release
cd /usr/src git clone -b v1.4 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.19.zip unzip freeswitch-1.4.19.zip cd freeswitch-1.4.19
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
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