背景:
一直计划升级一下FreeSWITCH 1.6.20的,但是一直没有行动,一方面是线上使用比较稳定了,另一方面是Centos7编译FreeSWITCH确实有些麻烦,实在不如debian来得方便。
最近业务扩容,计划将FreeSWITCH升级计划提上日程,现整理了一下centos7编译FreeSWITCH 1.10.11的详细步骤和注意事项。
前置准备事项说明:
FreeSWITCH源码编译前,需要下载相应的安装包和依赖包:
必须的:
freeswitch-release-repo-0-1.noarch.rpm
sofia-sip-1.13.17.zip
spandsp-master.zip
可选的:
如果需要mod_av模块的话:
nasm-2.16.tar.gz
libx264.tar.bz2
libav-12.tar.bz2
如果需要mod_h323模块的话:
ptlib-2_10_9_6.tar.gz
h323plus-1_28_0.zip
如果需要mrcp模块的话:
unimrcp-deps-1.6.0.tar.gz
mod_unimrcp-main.zip
开始部署:
1、账号注册:
按照官方文档介绍,注册一个SignalWire 账号,并获取一个pat token(token有name和token 2部分,要记住,后面安装依赖包需要用到。不想注册的话,百度里面也能找到一些别人分享的token):https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/how-to-create-a-personal-access-token/how-to-create-a-personal-access-token/
2、安装依赖包:
不得不说,通过yum-builddep -y freeswitch安装依赖包,要省事很多,以前部署FreeSWITCH1.6.20的时候,很多centos7依赖包需要自己去找和适配,现在官方准备好了,基本可以很方便完成所需的依赖包安装了。
#输入signalwire账号和token,这里需要自己去官网注册一个(参照步骤1),或者自己百度一个,该账号并没有什么实际用途,仅仅是为了下载依赖包而已
echo "USER" > /etc/yum/vars/signalwireusername
echo "PASS" > /etc/yum/vars/signalwiretoken
#下载并安装freeswitch-release-repo-0-1.noarch.rpm epel-release,官方教程,这里有点坑爹
yum install -y https://$(< /etc/yum/vars/signalwireusername):$(< /etc/yum/vars/signalwiretoken)@files.freeswitch.org/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm epel-release
#安装依赖包
如果有spandsp-devel-1.99.0-15.a6266f2259.x86_64,先卸载掉,再安装spandsp3-devel
rpm -e spandsp-devel-1.99.0-15.a6266f2259.x86_64
yum install -y yum-plugin-ovl centos-release-scl rpmdevtools yum-utils git mariadb-connector-c mariadb-connector-c-devel python3-devel spandsp3-devel hiredis-devel hiredis
yum-builddep -y freeswitch --skip-broken
可能出现的报错:
Error: No Package found for lame-devel
#如果有该报错, Error: No Package found for lame-devel
#下载libmp3lame的rpm包,进行安装
rpm -ivh libmp3lame-3.98.4-4.el6.x86_64.rpm
rpm -ivh libmp3lame-devel-3.98.4-4.el6.x86_64.rpm
3、相关模块安装:
如果没有视频类的需求的话,建议直接跳到步骤4开始安装FreeSWITCH了
3.1、mod_av安装:
mod_av 依赖 libav,libav 需要 x264 lib 才能支持 H264,x264 依赖 nasm(系统自带的版本太低,需要大于 2.13 版才行),所以安装顺序是 nasm -> x264 -> libav
#启用devtoolset-9,切换到gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
# scl -l
devtoolset-9
scl enable devtoolset-9 bash
# 安装nasm
cd /usr/local/src/
wget -N -t 0 https://www.nasm.us/pub/nasm/releasebuilds/2.16/nasm-2.16.tar.gz
tar -xzvf nasm-2.16.tar.gz
cd nasm-2.16
./configure
make && make install
# 安装libx264
wget -c http://files.freeswitch.org/downloads/libs/libx264.tar.bz2
tar -jxvf libx264.tar.bz2
cd libx264
./configure --enable-static --enable-shared --prefix=/usr
make
make install
#FFmpeg-release-5.1安装:
wget -N -t 0 https://codeload.github.com/FFmpeg/FFmpeg/zip/refs/heads/release/5.1 -O FFmpeg-release-5.1.zip
unzip FFmpeg-release-5.1.zip
cd FFmpeg-release-5.1
ldconfig
./configure --prefix=/usr/local/freeswitch/ --enable-pic --extra-libs="-ldl" --extra-cflags=-fPIC --extra-cxxflags=-fPIC --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-libx264
make && make install
3.2、mod_h323安装:
3.2.1下载h323plus-v1_26_5.tar.gz和ptlib-2.12.8.tar.bz2
参考网址:http://www.h323plus.org/source/
3.2.2解压对应的模块,开始安装:
#ptlib依赖flex
yum -y install flex
#安装 ptlib
#进入ptlib源码目录:
cd ptlib-2_10_9_6
./configure
make&make install
#安装h323plus
#进入h323plus源码目录
cd h323plus-1_28_0
./configure
make&make install
4、安装FreeSWITCH:
FreeSWITCH默认安装启用了mod_av,如果不考虑视频、mrcp等模块的话,编辑源码下面的modules.conf文件,将mod_av注释后,此时就可以开始安装FreeSWITCH了,如果需要mod_av模块的话,就按照上面的步骤3进行安装;如果有非默认模块需要安装的话,编辑源码下面的modules.conf文件,启用需要启用的模块。
最后,开始编译FreeSWITCH 1.10.11,没有报错的话,FreeSWITCH 1.10.11就安装完成了。
#进入到freeswitch 1.10.11源码目录
cd freeswitch-1.10.11
./bootstrap.sh
#如果有编译默认模块之外的模块,在modules.conf里面启用对应的模块,没有则忽略
#如果没有视频的需求,可以把mod_av注释掉
vi modules.conf
#开始编译
./configure --enable-portable-binary --with-gnu-ld --with-python --with-openssl --enable-core-odbc-support --enable-zrtp --enable-core-pgsql-support
make
make -j install
make -j cd-sounds-install
make -j cd-moh-install
如果不需要安装mrcp对接asr/tts等服务的话,此时FreeSWITCH就部署完成了,还是比较简单的,可以跳到步骤7启动FreeSWITCH了;如果需要mrcp服务的话,可按照下面步骤部署mrcp服务。
5、mod_unimrcp模块安装
因为FreeSWITCH最新版本已经去掉了unimrcp模块的默认安装,所以如果需要使用mod_unimrcp的话,需要在FreeSWITCH 1.10.11部署完成之后,再部署unimrcp和mod_unimrcp模块,freeswitch自带的源码里面,没有mod_unimrcp模块了。如果不需要使用mrcp做机器人业务,则该步骤忽略可跳过,不影响freeswitch的正常启动使用。
5.1 mod_unimrcp安装:
#mod_unimrcp安装
#1、下载并安装:unimrcp-deps-1.6.0.tar.gz
cd /usr/local/src/
wget https://www.unimrcp.org/project/component-view/unimrcp-deps-1-6-0-tar-gz/download -O unimrcp-deps-1.6.0.tar.gz --no-check-certificate
tar xvzf unimrcp-deps-1.6.0.tar.gz
cd unimrcp-deps-1.6.0
cd libs/apr
./configure --prefix=/usr/local/apr
make && make install
cd ../apr-util
./configure --prefix=/usr/local/apr
make && make install
#2、下载并安装:unimrcp
cd /usr/local/src/
git clone https://github.com/unispeech/unimrcp.git
cd unimrcp
./bootstrap
./configure
make && make install
#3、下载并安装:mod_unimrcp
cd /usr/local/src/
git clone https://github.com/freeswitch/mod_unimrcp.git
cd mod_unimrcp
./bootstrap.sh
./configure
make
make install
6、中文包部署:
该步骤用处不大,有没有不影响freeswitch的正常使用,可跳过正常启动freeswitch。仅作为小功能了解一下。
freeswitch官方语音包下载地址:Index of /releases/sounds
下载后,上传到服务器,解压到freeswitch目录,如下:
修改freeswitch的vars.xml文件,启用中文播报
部署完成
参照此文档部署完成之后,FreeSWITCH默认安装在/usr/local/freeswitch目录下,
7、启动freeswitch并启用相关的模块:
为方便启动freeswitch,可以做软链,或进程守护
#freeswitch启动:
/usr/local/freeswitch/bin/freeswitch -nonat -nc
#做软链,方便启动:
ln -s /usr/local/freeswitch/bin/fs_cli /usr/local/bin/
ln -s /usr/local/freeswitch/bin/freeswitch /usr/local/bin/
大功告成
freeswitch相关优化:
freeswitch编译完成之后,测试的话基本是可以使用的;但是要上线业务的话,freeswitch正常启动后,其实还有不少的优化工作需要做,包括不限于:
1、关闭ipv6,
2、修改stun地址,
3、关闭signalwire模块,
4、其他参数优化
具体见后续文档
更多讨论或技术支持可加QQ群:482489124或QQ:736984328