FreeSwitch is a high-performance VoIP/SIP PBX/Switch software package.
FreeSWITCH is an open source telephony platform designed to facilitate the creation of voice and chat driven products scaling from a soft-phone up to a soft-switch.
Installing FreeSwitch Dependencies
Things like ODBC and a few other packages are necessary.
apt-get install libedit-dev libldns-dev libmp4v2-dev libncurses5-dev libmemcached-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libvlc-dev emerge -pv dev-db/unixODBC media-libs/tiff media-libs/alsa-lib net-misc/curl net-misc/memcached dev-lang/erlang
Upgrade OpenSSL On Ubuntu Lucid
On Ubuntu Lucid (and others) you much manually install an updated OpenSSL
wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz cd openssl-1.0.1f ./config shared --prefix=/opt/openssl-1.0.1f make && make install
On Gentoo Check your USE flags against these.
dev-db/unixODBC-2.2.12 USE="-gnome -qt3" 0 kB media-libs/tiff-3.8.2-r8 USE="jpeg zlib -jbig -nocxx" 0 kB media-libs/alsa-lib-1.0.20-r1 USE="python -alisp -debug -doc" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" 777 kB net-misc/curl-7.19.6 USE="ipv6 ldap ssl -ares -gnutls -idn -kerberos -libssh2 -nss -test" 2,293 kB dev-lang/erlang-12.2.5-r1 USE="ssl -doc -emacs -hipe -java -kpoll -odbc -sctp -smp -tk" 46,358 kB app-admin/eselect-emacs-1.10 0 kB net-misc/memcached-1.4.1 USE="-debug -slabs-reassign -test" 271 kB net-libs/ptlib-2.10.10:0/2.10.10 net-libs/opal-3.10.10 USE="audio -capi -celt -debug -doc dtmf -examples -fax -ffmpeg -h224 -h281 -h323 -iax -ilbc ipv6 -ivr -ixj -java -ldap -lid plugins -sbc -sip -sipim -srtp ssl -static-libs -stats -swig theora video -vpb -vxml -wav -x264 -x264-static -xml"
Installing FreeSwitch from Git
Quite easy, clone the Git repo, bootstrap, adjust modules, ./configure and make.
Start by checking out the trunk and running the bootstrap.
git clone git://git.freeswitch.org/freeswitch.git /usr/src/freeswitch cd /usr/src/freeswitch ./bootstrap.sh
Edit modules.conf
for your desired environent, for example
sed -i 's/^.*applications\/mod_avmd.*$/applications\/mod_avmd/' modules.conf sed -i 's/^.*applications\/mod_cluechoo.*$/applications\/mod_cluechoo/' modules.conf sed -i 's/^.*applications\/mod_curl.*$/applications\/mod_curl/' modules.conf sed -i 's/^.*applications\/mod_distributor.*$/applications\/mod_distributor/' modules.conf sed -i 's/^.*applications\/mod_spy.*$/applications\/mod_spy/' modules.conf sed -i 's/^.*applications\/mod_memcache.*$/applications\/mod_memcache/' modules.conf sed -i 's/^.*dialplans\/mod_dialplan_asterisk.*$/#dialplans\/mod_dialplan_asterisk/' modules.conf sed -i 's/^.*say\/mod_say_ru.*$/#say\/mod_say_ru/' modules.conf
Now ./configure
freeswitch, run ./configure --help
for more information about the options and adjust as necessary, the following is only an example
root@ar # ./configure \ --prefix=/opt/freeswitch \ --without-erlang \ --without-java \ --without-python \
Append this if using Ubuntu with older OpenSSL
CFLAGS="-I/opt/openssl-1.0.1f/include" LDFLAGS="-L/opt/openssl-1.0.1f/lib"
Then make
and check for errors and other possible issues. Follow with make install
when all is well
root@host # make [ snip ] Compiling mod_xml_rpc.c... mkdir .libs Compiling mod_xml_rpc.c ... Creating mod_xml_rpc.so... Making all in build +-------- FreeSWITCH Build Complete -----------+ + FreeSWITCH has been successfully built. + + Install by running: + + + + make install + +----------------------------------------------+ root@host # make install
Configure and Start FreeSwitch
FreeSwitch is now installed into /opt/freeswitch, go there create a default extension and SIP profile.
root@host # cd /opt/freeswitch root@host # nano conf/sip_profiles/external/[provider].xml root@host # nano conf/dialplan/default.xml
Creating a Test SIP Extension
This creates a default extensions that all inbound calls will route to.
Add this in conf/dialplan/default.xml
.
<!-- Initial Entry for Inbound Calls --> <extension name="init"> <condition> <action application="log" data="NOTICE dialplan/default.xml@64" /> <action application="info" /> <action application="answer" /> <action application="record_session" data="/tmp/call-record.wav"/> </condition> </extension>
FreeSWITCH & ESL phpmod
On these system one update needs to happen to the ESL make file so it's going to process correctly.
Use of -Werror will cause the build to fail.
Patch the libs/esl/Makefile
as follows.
--- Makefile 2010-12-10 19:00:21.000000000 +0000 +++ Makefile.e 2010-12-10 21:00:05.000000000 +0000 @@ -3,9 +3,9 @@ LIBEDIT_DIR=../../libs/libedit DEBUG=-g -ggdb BASE_FLAGS=$(INCS) -DHAVE_EDITLINE $(DEBUG) -I$(LIBEDIT_DIR)/src/ -fPIC -PICKY=-O2 -ffast-math -Wall -Werror -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes +PICKY=-O2 -ffast-math -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes CFLAGS=$(BASE_FLAGS) $(PICKY) -CXXFLAGS=$(BASE_FLAGS) -Wall -Werror -Wno-unused-variable +CXXFLAGS=$(BASE_FLAGS) -Wall -Wno-unused-variable MYLIB=libesl.a LIBS=-lncurses -lpthread -lesl -lm LDFLAGS=-L.
That is, remove -Werror from PICKY and CXXFLAGS.
Then make phpmod-install
will complete.
Debian/Ubunut and apt Based Systems
~ # apt-get install gawk ~ # update-alternatives --set awk /usr/bin/gawk ~ # apt-get install autoconf build-essential git libtool make ~ # apt-get install libssl-dev libasound2-dev libogg-dev libvorbis-dev ~ # cd /usr/src . # git clone git://git.freeswitch.org/freeswitch.git /usr/src/freeswitch . # cd freeswitch . # ./bootstrap.sh . # ./configure ... . # make . # make install
See Debian Bug 628247 for more information on gawk vs mawk (gawk is better).
See Also
- FreeSWITCH Voicemail Configuration
- FreeSWITCH Performance
- Official Installation Guide for FreeSwitch
- We offer remote FreeSwitch Consulting Services for reasonable rates.
History / Changelog
- 2014-02-06 - Notes on ptlib, opal