news 2026/7/16 11:49:41

Ubuntu 20.04安装FreeSWITCH 1.10.x完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 20.04安装FreeSWITCH 1.10.x完整指南

1. 项目概述

FreeSWITCH是一款开源的软交换平台,广泛应用于VoIP通信、视频会议和即时消息系统。在Ubuntu 20.04 LTS上安装FreeSWITCH需要处理多个依赖关系和编译选项,这对新手来说可能是个挑战。本文将详细介绍从零开始安装FreeSWITCH 1.10.x的完整过程,包含我在实际部署中积累的经验技巧和常见问题解决方案。

2. 环境准备与依赖安装

2.1 系统更新与基础工具

首先确保系统是最新状态:

sudo apt update && sudo apt upgrade -y sudo apt install -y wget git vim

2.2 安装编译依赖

FreeSWITCH需要大量开发库支持,以下是针对Ubuntu 20.04 LTS的完整依赖列表:

sudo apt install -y build-essential pkg-config uuid-dev zlib1g-dev libjpeg-dev \ libsqlite3-dev libcurl4-openssl-dev libpcre3-dev libspeexdsp-dev libldns-dev \ libedit-dev libtiff5-dev yasm libopus-dev libsndfile1-dev unzip libavformat-dev \ libswscale-dev libavresample-dev liblua5.2-dev liblua5.2-0 cmake libpq-dev \ unixodbc-dev autoconf automake ntpdate libxml2-dev libpq-dev libpq5 sngrep \ libflite1 flite-dev libssl-dev libncurses5-dev libtool-bin

注意:如果计划使用TTS功能,需要额外安装flite开发包。数据库支持方面,默认使用SQLite,如需PostgreSQL支持需要安装libpq-dev。

3. 前置库安装

3.1 安装libks

sudo git clone -b v1.8.3 https://github.com/signalwire/libks.git /usr/local/src/libks cd /usr/local/src/libks sudo cmake . sudo make && sudo make install

验证安装:

sudo ldconfig && ldconfig -p | grep libks

3.2 安装signalwire-c

sudo git clone https://github.com/signalwire/signalwire-c.git /usr/local/src/signalwire-c cd /usr/local/src/signalwire-c sudo cmake . sudo make && sudo make install

3.3 安装Sofia-SIP

sudo git clone https://github.com/freeswitch/sofia-sip.git /usr/local/src/sofia-sip cd /usr/local/src/sofia-sip sudo ./bootstrap.sh sudo ./configure sudo make && sudo make install

3.4 安装SpanDSP

sudo git clone https://github.com/freeswitch/spandsp.git /usr/local/src/spandsp cd /usr/local/src/spandsp sudo git checkout -b finecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4 sudo ./bootstrap.sh sudo ./configure sudo make && sudo make install

经验分享:SpanDSP的特定commit(0d2e6ac)是解决编译错误的关键,新版本可能不兼容FreeSWITCH 1.10.x。

4. FreeSWITCH编译安装

4.1 下载和解压源码

sudo wget -c https://files.freeswitch.org/releases/freeswitch/freeswitch-1.10.7.-release.tar.gz -P /usr/local/src cd /usr/local/src sudo tar -zxvf freeswitch-1.10.7.-release.tar.gz cd freeswitch-1.10.7.-release

4.2 配置编译选项

基础配置:

sudo ./configure

如需数据库支持:

sudo ./configure --enable-core-odbc-support --enable-core-pgsql-support

4.3 编译与安装

sudo make sudo make install sudo make cd-sounds-install sudo make cd-moh-install

避坑指南:如果编译过程中出现mod_spandsp错误,尝试重新安装指定版本的SpanDSP,然后clean后重新编译。

5. 系统集成配置

5.1 创建系统用户

sudo groupadd freeswitch sudo adduser --quiet --system --home /usr/local/freeswitch \ --gecos 'FreeSWITCH open source softswitch' \ --ingroup freeswitch freeswitch --disabled-password sudo chown -R freeswitch:freeswitch /usr/local/freeswitch/ sudo chmod -R ug=rwX,o= /usr/local/freeswitch/ sudo chmod -R u=rwx,g=rx /usr/local/freeswitch/bin/*

5.2 创建符号链接

sudo ln -s /usr/local/freeswitch/conf /etc/freeswitch sudo ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin/fs_cli sudo ln -s /usr/local/freeswitch/bin/freeswitch /usr/sbin/freeswitch

5.3 配置systemd服务

创建服务文件/etc/systemd/system/freeswitch.service

[Unit] Description=FreeSWITCH open source softswitch Wants=network-online.target Requires=network.target local-fs.target After=network.target network-online.target local-fs.target [Service] Type=forking PIDFile=/usr/local/freeswitch/run/freeswitch.pid Environment="DAEMON_OPTS=-nonat" Environment="USER=freeswitch" Environment="GROUP=freeswitch" EnvironmentFile=-/etc/default/freeswitch ExecStartPre=/bin/chown -R ${USER}:${GROUP} /usr/local/freeswitch ExecStart=/usr/local/freeswitch/bin/freeswitch -u ${USER} -g ${GROUP} -ncwait ${DAEMON_OPTS} TimeoutSec=45s Restart=always [Install] WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload sudo systemctl enable freeswitch sudo systemctl start freeswitch

6. 验证与测试

6.1 检查服务状态

sudo systemctl status freeswitch

6.2 使用CLI交互

fs_cli

在CLI中运行:

status sofia status

6.3 测试基本功能

注册一个测试分机:

  1. 编辑/usr/local/freeswitch/conf/directory/default/1000.xml
  2. 确保有以下内容:
<user id="1000"> <params> <param name="password" value="1234"/> </params> </user>
  1. 使用软电话注册到FreeSWITCH服务器,用户名1000,密码1234

7. 常见问题解决

7.1 mod_sofia加载失败

错误现象:

Error Loading module /usr/local/freeswitch/mod/mod_sofia.so: undefined symbol: tptag_socket_keepalive

解决方案:

  1. 确认sofia-sip库已正确安装
  2. 重新编译sofia-sip和FreeSWITCH
  3. 检查LD_LIBRARY_PATH是否包含/usr/local/lib

7.2 SpanDSP编译错误

典型错误:

mod_spandsp_dsp.c:159:10: error: 'V18_MODE_5BIT_4545' undeclared

解决方案:

cd /usr/local/src/spandsp git reset --hard 0d2e6ac65e0e8f53d652665a743015a88bf048d4 ./bootstrap.sh ./configure make make install

7.3 音频文件问题

如果遇到音频播放问题:

sudo make cd-sounds-install sudo make cd-moh-install

8. 性能优化建议

8.1 配置文件优化

编辑/usr/local/freeswitch/conf/autoload_configs/switch.conf.xml

<settings> <param name="max-sessions" value="1000"/> <param name="sessions-per-second" value="30"/> <param name="max-dtmf-duration" value="3000"/> </settings>

8.2 日志配置

调整日志级别/usr/local/freeswitch/conf/autoload_configs/console.conf.xml

<configuration name="console.conf" description="Console Logger"> <mappings> <map name="all" value="info"/> </mappings> </configuration>

8.3 网络优化

对于高并发场景,调整内核参数:

echo 'net.core.somaxconn = 2048' | sudo tee -a /etc/sysctl.conf echo 'net.ipv4.tcp_max_syn_backlog = 2048' | sudo tee -a /etc/sysctl.conf sudo sysctl -p

9. 安全加固措施

9.1 修改默认密码

编辑/usr/local/freeswitch/conf/vars.xml

<X-PRE-PROCESS cmd="set" data="default_password=YourStrongPassword"/>

9.2 限制访问IP

编辑/usr/local/freeswitch/conf/autoload_configs/acl.conf.xml

<list name="domains" default="deny"> <node type="allow" domain="$${domain}"/> <node type="allow" cidr="192.168.1.0/24"/> </list>

9.3 启用TLS

生成证书:

cd /usr/local/freeswitch/bin ./freeswitch -certgen

配置TLS:

<param name="tls" value="true"/> <param name="tls-bind-params" value="transport=tls"/> <param name="tls-cert-dir" value="/usr/local/freeswitch/certs"/>

10. 维护与监控

10.1 日志轮转

创建/etc/logrotate.d/freeswitch

/usr/local/freeswitch/log/freeswitch.log { daily rotate 30 compress delaycompress missingok notifempty create 644 freeswitch freeswitch postrotate /usr/bin/killall -HUP freeswitch endscript }

10.2 监控脚本示例

创建监控脚本/usr/local/bin/check_freeswitch.sh

#!/bin/bash FS_PID=$(pgrep -f "freeswitch -ncwait") if [ -z "$FS_PID" ]; then systemctl restart freeswitch echo "$(date) - FreeSWITCH restarted" >> /var/log/freeswitch_monitor.log fi

添加到cron:

(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/check_freeswitch.sh") | crontab -

10.3 备份策略

建议定期备份以下目录:

  • /usr/local/freeswitch/conf
  • /usr/local/freeswitch/scripts
  • /usr/local/freeswitch/storage

可以使用rsync进行增量备份:

rsync -avz /usr/local/freeswitch/conf user@backup-server:/backup/freeswitch/
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 11:49:11

OSPF区域间路由的“翻译官”:三类LSA如何实现跨区域路由汇总与传递

1. OSPF多区域设计的必要性 第一次接触OSPF多区域配置时&#xff0c;我盯着拓扑图上的Area 0和Area 1发呆——为什么要把好端端的网络切成几块&#xff1f;直到某次凌晨处理全网路由震荡故障时才恍然大悟。当时单区域OSPF网络中某台交换机重启&#xff0c;导致全网上千台设备同…

作者头像 李华
网站建设 2026/7/16 11:49:06

Raven进阶技巧:自定义Neo4j查询语句提升CI/CD漏洞检测效率

Raven进阶技巧&#xff1a;自定义Neo4j查询语句提升CI/CD漏洞检测效率 【免费下载链接】raven CI/CD Security Analyzer 项目地址: https://gitcode.com/gh_mirrors/rav/raven Raven作为专业的CI/CD安全分析工具&#xff0c;通过Neo4j图数据库强大的关联分析能力&#x…

作者头像 李华
网站建设 2026/7/16 11:49:04

基于N32G457与RT-Thread的精密数字电流源设计

1. 项目背景与核心需求在工业自动化、医疗设备和实验室仪器等领域&#xff0c;精确可控的电流源是不可或缺的基础设备。传统电流源设计往往采用模拟电路方案&#xff0c;存在调节不灵活、精度受限等痛点。基于MCU的数字控制方案则能够实现更精细的电流调节和更丰富的功能扩展。…

作者头像 李华
网站建设 2026/7/16 11:46:32

SwCrypt实战教程:10个常见加密场景代码示例详解

SwCrypt实战教程&#xff1a;10个常见加密场景代码示例详解 【免费下载链接】SwCrypt RSA public/private key generation, RSA, AES encryption/decryption, RSA sign/verify in Swift with CommonCrypto in iOS and OS X 项目地址: https://gitcode.com/gh_mirrors/sw/SwCr…

作者头像 李华