本人在安装FreeSWITCH的时候遇到了相当多的坑,网上很多方法都模棱两可,经常装失败,最后终于装成功后做一下总结
最顺利的安装方式
1. 下载压缩文件
下载地址: http://files.freeswitch.org/freeswitch-releases/ 我选择的下载版本是freeswitch-1.8.5.tar.xz ,下载完成后解压缩
wget http://files.freeswitch.org/freeswitch-releases/freeswitch-1.8.5.tar.xz
xz -d freeswitch-1.8.5.tar.xz
tar -xvf freeswitch-1.8.5.tar
2. 安装依赖包
apt-get update
apt-get install -y autoconf git libtool g++ zlib1g-dev libjpeg-dev libsqlite3-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libssl-dev pkg-config yasm liblua50-dev libopus-dev libsndfile1-dev libpq-dev libreadline-dev lua5.2 lua5.2-doc liblua5.2-dev libtiff5 libtiff5-dev
sudo apt-get install -y vim
sudo apt-get install -y g++
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y libjpeg-dev
sudo apt-get install -y libsqlite3-dev
sudo apt-get install -y libcurl4-gnutls-dev
sudo apt-get install -y libpcre3-dev
sudo apt-get install -y libspeexdsp-dev
sudo apt-get install -y libedit-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libopus-dev
sudo apt-get install -y liblua5.2-dev
sudo apt-get install -y libldns-dev
sudo apt-get install -y libsndfile1-dev
3. 编译安装
# 切换路径到第一步解压缩的文件夹下
./bootstrap.sh
./configure
make
make install
4. 安装声音文件
# 安装声音文件
make sounds-install
make moh-install
# 以下高质量的声音文件可选择安装
make cd-sounds-install
make cd-moh-install
如果一切顺利的话就安装好了,但是事实往往不那么容易,之后会列举几个会遇到的问题及解决方案
制作软连接
ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/
启动FreeSWITCH
freeswitch
关闭FreeSWITCH
shutdown
可能遇到的问题及解决方案
报错:
make[4]: Entering directory '/home/root/code/freeswitch-1.8.5/src/mod/applications/mod_signalwire'
Makefile:930: *** You must install libks to build mod_signalwire. Stop.
make[4]: Leaving directory '/home/root/code/freeswitch-1.8.5/src/mod/applications/mod_signalwire'
Makefile:683: recipe for target 'mod_signalwire-all' failed
make[3]: *** [mod_signalwire-all] Error 1
make[3]: Leaving directory '/home/root/code/freeswitch-1.8.5/src/mod'
Makefile:591: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/root/code/freeswitch-1.8.5/src'
Makefile:3494: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/root/code/freeswitch-1.8.5'
Makefile:1255: recipe for target 'all' failed
make: *** [all] Error 2
解决步骤如下:
# 下载并编译libks
cd /usr/local/src
git clone https://github.com/signalwire/libks.git
cd libks
cmake .
这时很大可能会遇到下面这个问题:
报错:
-- Checking for module 'uuid'
-- No package 'uuid' found
CMake Error at /home/root/tools/cmake-3.13.3-Linux-x86_64/share/cmake-3.13/Modules/FindPkgConfig.cmake:452 (message):
A required package was not found
Call Stack (most recent call first):
/home/root/tools/cmake-3.13.3-Linux-x86_64/share/cmake-3.13/Modules/FindPkgConfig.cmake:622 (_pkg_check_modules_internal)
cmake/FindUUID.cmake:15 (pkg_check_modules)
CMakeLists.txt:294 (include)
-- Configuring incomplete, errors occurred!
See also "/home/root/code/libks/CMakeFiles/CMakeOutput.log".
See also "/home/root/code/libks/CMakeFiles/CMakeError.log".
解决步骤如下
# 解决方法:下载并编译libuuid源码
wget https://jaist.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz
tar -zxvf libuuid-1.0.3.tar.gz
cd libuuid-1.0.3
./configure
make
make install
# 重新执行libks的
cmake .
#### 问题解决。然后执行libks的
make
make install
报错:
make[4]: Entering directory '/home/root/code/freeswitch-1.8.5/src/mod/applications/mod_signalwire'
Makefile:930: *** You must install signalwireto build mod_signalwire. Stop.
make[4]: Leaving directory '/home/root/code/freeswitch-1.8.5/src/mod/applications/mod_signalwire'
Makefile:683: recipe for target 'mod_signalwire-all' failed
make[3]: *** [mod_signalwire-all] Error 1
make[3]: Leaving directory '/home/root/code/freeswitch-1.8.5/src/mod'
Makefile:591: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/root/code/freeswitch-1.8.5/src'
Makefile:3494: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/root/code/freeswitch-1.8.5'
Makefile:1255: recipe for target 'all' failed
make: *** [all] Error 2
解决方法如下
# 解决方法:下载并编译signalwire-c
cd /usr/local/src
git clone https://github.com/signalwire/signalwire-c.git
cd signalwire-c
cmake .
make
make install
这时有可能会出现问题:
报错:
CMake Error at CMakeLists.txt:168 (string):
string sub-command REPLACE requires at least four arguments.
-- Configuring incomplete, errors occurred!
See also "/home/root/code/signalwire-c/CMakeFiles/CMakeOutput.log".
解决方法如下
# 阅读CMakeLists.txt,发现出问题的地方是使用git命令生成changelog的。对编译代码无影响。注释掉相关内容:
# Get git log info
#execute_process(COMMAND ${GIT_EXECUTABLE} log --no-merges --pretty=format:"%n [%an]%n * %s" --since="last month"
# OUTPUT_VARIABLE CHANGELOG
# WORKING_DIRECTORY .
# OUTPUT_STRIP_TRAILING_WHITESPACE)
#string(REPLACE "\"" "" CHANGELOG ${CHANGELOG})
## Create changelog
#file(WRITE changelog.Debian ${CHANGELOG_HEADER}\n${CHANGELOG}\n\n${CHANGELOG_FOOTER})
#execute_process(COMMAND ${GZIP_CMD} -f -9 -n changelog.Debian)
# Install changelog
#install(FILES "${CMAKE_BINARY_DIR}/changelog.Debian.gz" COMPONENT "runtime" DESTINATION "share/doc/${CPACK_DEBIAN_PACKAGE_NAME}")
# 在signalwire下重新执行
cmake .
make
make install
接下来到freeswitch目录下
make clean # 清除上次编译的中间文件
# 重新执行FreeSWITCH的
./configure
make
make install
若遇到启动freeswitch报错
'''
[ERR] mod_local_stream.c:360 Can't open /usr/local/freeswitch/sounds/music/8000/danza-espanola-op-37-h-142-xii-arabesca.wav
[ERR] switch_core_file.c:304 Invalid file format [wav] for [/usr/local/freeswitch/sounds/music/8000/partita-no-3-in-e-major-bwv-1006-1-preludio.wav]!
[ERR] mod_local_stream.c:360 Can't open /usr/local/freeswitch/sounds/music/8000/partita-no-3-in-e-major-bwv-1006-1-preludio.wav
.........................
.........................
'''
解决方法如下
1.先到 http://files.freeswitch.org/releases/sounds/ 下载原始的语音文件,freeswitch-sounds-zh-cn-sinmei-48000-1.0.51.tar.gz
2.用root用户在 /usr/local/freeswitch/sounds 下解压。该路径应该是 freeswitch 安装路径下的音频路径。可以先检查该路径下是否有英文语音文件。确认没有问题后解压。
3.进去报错的路径下 /usr/local/freeswitch/sounds/ 删除music文件夹。
4.运行 sudo freeswitch 测试是否能正常运行
5.如果不能正常运行,则需要根据 https://www.jianshu.com/p/3400fdd29fb5 里面的3-7步设置一下。
参考: https://www.jianshu.com/p/3400fdd29fb5
要编译,却没有configure文件,这是需要生成configure文件。按以下顺序执行命令即可生成 configure 文件。
1. aclocal
2. autoconf
3. autoheader
4. automake --add-missing
5. ./configure
6. make
7. make install
项目 https://github.com/kamalmostafa/minimodem 就是这样的一个工程。
./configure 时会出错,提示下面两个模块没有:
No package 'fftw3f' found
No package 'sndfile' found
这是输入 sudo apt-get install fftw3-dev libsndfile1-dev 即可安装缺失的模块,然后重新 configure 即可。
————————————————
执行命令’automake –add-missing’出现错误
解决方法
安装libtools
sudo apt install libtool
执行
libtoolize --automake --copy --debug --force
automake --add-missing时错误提示“ltmain.sh' not found”
在linux下编译c/c++程序出错:
$ automake --add-missing
....
....ltmain.sh' not found
....
解决方案(libtoolize配置即可):
$libtoolize --automake --copy --debug --force
新模块安装: 在 freeswitch/modules.conf 中加入 application/mod_xxx 配置。之后在freeswitch/目录中执行 make mod_xxx &&make install mod_xxx 即可
之后 去手动load mod_xx 或在配置文件中配置启动时自动加载该模块