debian11 中 freeswitch 编译安装
这篇文章记录一下在 Debian 11 中编译安装 FreeSWITCH 1.10.12 的过程。
我这里走的是源码编译方案,依赖使用 Sofia-SIP v1.13.17 和 SpanDSP fs 分支,同时主动剔除SignalWire 以及 mod_verto 相关依赖。
安装前提 安装前提,需要安装代理软件,没有一个稳定的代理的话,安装基本不可能实现。这是前提中的前提。
另外,下面的操作默认你使用 root 用户执行,或者至少具备足够的 sudo 权限。
新建安装脚本 新建脚本文件 freeswitch_install.sh,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 #!/bin/bash set -eFS_VERSION="v1.10.12" SOFIA_VERSION="v1.13.17" SPANDSP_BRANCH="fs" INSTALL_PATH="/usr/local/freeswitch" echo "===============================================================" echo "开始安装 FreeSWITCH $FS_VERSION " echo "依赖库:Sofia-SIP ($SOFIA_VERSION ), SpanDSP (branch: $SPANDSP_BRANCH )" echo "已移除 SignalWire 及 mod_verto 依赖" echo "===============================================================" apt-get update apt-get install -y git build-essential cmake automake autoconf libtool-bin pkg-config \ libssl-dev zlib1g-dev libsqlite3-dev libcurl4-openssl-dev libpcre3-dev \ libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libtiff5-dev yasm \ libopus-dev libsndfile1-dev libavformat-dev libswscale-dev liblua5.2-dev \ libshout3-dev libmpg123-dev libmp3lame-dev libpq-dev \ python3-dev wget uuid-dev libmagic-dev libjpeg-dev rm -rf /usr/src/freeswitch-depsmkdir -p /usr/src/freeswitch-depscd /usr/src/freeswitch-depsecho ">>> 正在编译 Sofia-SIP $SOFIA_VERSION ..." git clone --branch $SOFIA_VERSION https://github.com/freeswitch/sofia-sip.git cd sofia-sip./bootstrap.sh ./configure --prefix=/usr make -j$(nproc ) make install cd ..echo ">>> 正在编译 SpanDSP ($SPANDSP_BRANCH 分支)..." git clone --branch $SPANDSP_BRANCH https://github.com/freeswitch/spandsp.git cd spandsp./bootstrap.sh ./configure --prefix=/usr make -j$(nproc ) make install cd ..ldconfig echo ">>> 正在下载 FreeSWITCH $FS_VERSION ..." cd /usr/srcrm -rf freeswitchgit clone --branch $FS_VERSION https://github.com/signalwire/freeswitch.git cd freeswitch./bootstrap.sh -j echo ">>> 配置模块 (禁用 SignalWire 和 Verto)..." sed -i 's/endpoints\/mod_verto/#endpoints\/mod_verto/' modules.conf sed -i 's/applications\/mod_signalwire/#applications\/mod_signalwire/' modules.conf sed -i 's/#endpoints\/mod_sofia/endpoints\/mod_sofia/' modules.conf sed -i 's/#applications\/mod_spandsp/applications\/mod_spandsp/' modules.conf sed -i 's/#applications\/mod_av/applications\/mod_av/' modules.conf sed -i 's/#formats\/mod_shout/formats\/mod_shout/' modules.conf echo ">>> 开始执行 Configure..." ./configure --prefix=$INSTALL_PATH --enable-core-pgsql-support echo ">>> 开始编译 (请耐心等待)..." make -j$(nproc ) make install echo ">>> 安装声音文件..." make cd-sounds-install make cd-moh-install ln -sf $INSTALL_PATH /bin/fs_cli /usr/bin/fs_cliln -sf $INSTALL_PATH /bin/freeswitch /usr/bin/freeswitchif ! getent group freeswitch > /dev/null; then groupadd freeswitch; fi if ! getent passwd freeswitch > /dev/null; then useradd -r -g freeswitch -d $INSTALL_PATH -s /bin/false freeswitch; fi chown -R freeswitch:freeswitch $INSTALL_PATH chmod -R ug+rw $INSTALL_PATH echo "===============================================================" echo "FreeSWITCH $FS_VERSION 安装成功!" echo "依赖方案:Sofia-SIP v1.13.17 + SpanDSP (fs branch)" echo "SignalWire 依赖已彻底剔除。" echo "您可以执行 'freeswitch -nc' 启动程序,'fs_cli' 进入控制台。" echo "==============================================================="
给脚本增加执行权限后直接运行:
1 2 chmod +x freeswitch_install.sh./freeswitch_install.sh
安装后补充配置 脚本执行完成后,还需要把配置文件安装完整,并确认不需要的模块没有被自动加载。
完成配置文件安装 在 /usr/src/freeswitch 目录下执行:
1 2 cd /usr/src/freeswitchmake samples-conf
配置文件路径 你的所有配置文件都位于:
1 /usr/local/freeswitch/etc/freeswitch
禁用不需要的模块 看到 modules.conf.xml 内容后,如果发现 mod_signalwire 和 mod_verto 处于开启状态,就需要手动处理。
这是因为前面的编译方案已经刻意去掉了 SignalWire 相关底层依赖,如果这里仍然加载这两个模块, 启动时就可能报错,甚至连 mod_sofia 的加载都会受到影响。
打开下面这个文件:
1 nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
找到以下几行并加上注释,或者直接删除:
确认 mod_sofia 已启用 确认这一行没有被注释:
1 <load module ="mod_sofia" />
处理路径并重启 如果刚执行完 make samples-conf,建议顺手把动态库缓存和配置目录路径也处理一下,然后再重启 FreeSWITCH:
1 2 3 4 5 6 7 8 9 10 11 12 ldconfig ln -s /usr/local/freeswitch/etc/freeswitch /usr/local/freeswitch/conf || true killall -9 freeswitch || true /usr/local/freeswitch/bin/freeswitch -nc
如果你前面已经创建了脚本中的软链接,那么也可以直接这样启动:
启动与验证 当终端里出现 Backgrounding. 以及对应的进程号时,说明 FreeSWITCH 已经成功启动。
这时候可以继续做下面几步验证。
进入控制台
常用检查命令 进入 fs_cli 后,可以执行以下命令:
1 2 3 4 version status sofia status module_exists mod_spandsp
分别对应:
version:查看版本信息,确认是否为 1.10.12
status:查看当前运行状态
sofia status:检查 SIP 模块是否正常
module_exists mod_spandsp:确认 mod_spandsp 是否已经加载
如果只是退出控制台,可以输入 /exit 或者直接按 Ctrl+D,这不会关闭 FreeSWITCH 服务。
查看日志 调试时可以直接查看日志:
1 tail -f /usr/local/freeswitch/log/freeswitch.log
查看 5060 端口监听状态
停止 FreeSWITCH 在 fs_cli 中执行:
或者在系统命令行执行:
修改配置后,可以在 fs_cli 中执行下面的命令重新加载 XML 配置:
常见问题排查 sofia status 提示 Command not found这通常意味着 mod_sofia.so 加载失败。
可以先在 fs_cli 中手动执行:
然后根据具体报错继续处理。
报错:mod_sofia.so: cannot open shared object file: No such file or directory 原因一般是编译时没有把这个模块装进去。
回到源码目录重新安装:
1 2 cd /usr/src/freeswitchmake mod_sofia-install
报错:libsofia-sip.so.0: cannot open shared object file 原因一般是动态链接库路径没有被系统正确识别。
执行下面的命令:
1 2 echo "/usr/local/lib" > /etc/ld.so.conf.d/local.confldconfig
然后再重启一次 FreeSWITCH:
1 2 3 killall -9 freeswitch || true ldconfig freeswitch -nc
只要 mod_sofia 能成功加载,后面的 SIP 注册和客户端连通性验证基本就能继续往下走了。