Centos 7.9安装FreeSwitch 1.8.2教程 - 详解
2025-09-22 22:30 tlnshuju 阅读(73) 评论(0) 收藏 举报一、前言
FreeSwitch 是一款开源的电话软交换解决方案,支持语音、视频和即时消息等多种通信方式。本文将详细介绍在 CentOS 7.9 系统上编译安装 FreeSwitch 1.8.2 的完整步骤,并提供优化后的安装脚本。
二、环境准备
2.1 系统要求
- 操作系统:Centos 7.9(64位)
- 内存:至少 2GB(推荐 4GB 以上)
- 硬盘:至少 20GB 可用空间
- 网络:能够访问互联网
2.2 依赖安装
首先安装基础编译环境和依赖包:
yum update -y
yum groupinstall -y "Development Tools"
yum install -y epel-release
# 安装核心依赖
yum install -y git gcc gcc-c++ wget zlib-devel libjpeg-devel freetype-devel \
alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel \
e2fsprogs-devel erlang flite-devel g722_1-devel gdbm-devel gnutls-devel ilbc2-devel \
ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel \
libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel \
libtiff-devel libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel lzo-devel \
mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel \
perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python-devel \
soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel which yasm \
zlib-devel libshout-devel libmpg123-devel lame-devel
三、安装步骤
3.1 安装编译工具
3.1.1 安装 CMake 3.23.0
cd /tmp
wget https://github.com/Kitware/CMake/releases/download/v3.23.0/cmake-3.23.0.tar.gz
tar -zvxf cmake-3.23.0.tar.gz
cd cmake-3.23.0
./bootstrap
make -j$(nproc)
make install
ln -sf /usr/local/bin/cmake /usr/bin/cmake
3.1.2 安装 autoconf 2.71
cd /tmp
wget http://mirrors.kernel.org/gnu/autoconf/autoconf-2.71.tar.gz
tar xzvf autoconf-2.71.tar.gz
cd autoconf-2.71
./configure
make -j$(nproc)
make install
3.1.3 安装 yasm 1.3.0
cd /tmp
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -xvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make -j$(nproc)
make install
3.1.4 安装 nasm 2.14.02(关键修正)
cd /tmp
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz
tar -zxvf nasm-2.14.02.tar.gz
cd nasm-2.14.02
./configure
make -j$(nproc)
make install
3.2 创建用户和目录
groupadd -r freeswitch
useradd -r -g freeswitch -d /opt/freeswitch -s /bin/false freeswitch
mkdir -p /opt/freeswitch
chown -R freeswitch:freeswitch /opt/freeswitch
3.3 下载并编译 FreeSwitch 1.8.2
cd /opt
wget http://files.freeswitch.org/freeswitch-releases/freeswitch-1.8.2.tar.bz2
tar xvjf freeswitch-1.8.2.tar.bz2
cd freeswitch-1.8.2
# 修改模块配置,启用必要模块
sed -i 's/^#codecs\/mod_opus/codecs\/mod_opus/' modules.conf
sed -i 's/^#codecs\/mod_g722_1/codecs\/mod_g722_1/' modules.conf
sed -i 's/^#formats\/mod_shout/formats\/mod_shout/' modules.conf
# 配置编译选项
./configure --prefix=/opt/freeswitch --enable-portable-binary \
--with-gnu-ld --with-python --with-openssl --enable-core-odbc-support \
--enable-zrtp --disable-libvpx
# 编译安装
make -j$(nproc)
make install
# 安装声音文件
make sounds-install
make moh-install
# 设置权限
chown -R freeswitch:freeswitch /opt/freeswitch
chmod -R 755 /opt/freeswitch
四、系统配置
4.1 防火墙配置
systemctl start firewalld
systemctl enable firewalld
# 开放SIP和RTP端口
firewall-cmd --permanent --add-port=5060/tcp
firewall-cmd --permanent --add-port=5060/udp
firewall-cmd --permanent --add-port=5061/tcp
firewall-cmd --permanent --add-port=5061/udp
firewall-cmd --permanent --add-port=16384-32768/udp
firewall-cmd --reload
4.2 SELinux 配置
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4.3 systemd 服务配置
创建 /etc/systemd/system/freeswitch.service 文件:
[Unit]
Description=FreeSWITCH open source softswitch
After=network.target
[Service]
Type=simple
User=freeswitch
Group=freeswitch
WorkingDirectory=/opt/freeswitch
ExecStart=/opt/freeswitch/bin/freeswitch -u freeswitch -g freeswitch -ncwait -nonat
TimeoutSec=45s
Restart=always
RestartSec=5
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=60000
LimitSTACK=250000
LimitRTPRIO=99
LimitRTTIME=7000000
[Install]
WantedBy=multi-user.target
启用并启动服务:
systemctl daemon-reload
systemctl enable freeswitch
systemctl start freeswitch
五、启动与测试
5.1 启动服务
# 使用systemd启动(推荐)
systemctl start freeswitch
# 或者直接启动(调试用)
/opt/freeswitch/bin/freeswitch -c
5.2 验证安装
# 检查服务状态
systemctl status freeswitch
# 查看版本
/opt/freeswitch/bin/freeswitch --version
# 连接到CLI
/opt/freeswitch/bin/fs_cli
# 在CLI中执行命令检查状态
freeswitch@localhost> sofia status
freeswitch@localhost> version
六、常见问题解决
6.1 编译错误:缺少依赖
如果编译过程中提示缺少某个依赖,使用yum安装对应的devel包:
# 例如缺少opus-devel
yum install -y opus-devel
6.2 启动失败:端口占用
# 查找占用端口的进程
netstat -tlnp | grep 5060
# 终止占用进程
kill -9 <PID>
6.3 模块加载失败
检查modules.conf文件,确保需要的模块未被注释,并重新编译安装:
cd /opt/freeswitch-1.8.2
make clean
./configure [之前的配置选项]
make
make install
七、原脚本附录
7.1 install.sh(修改版)
#!/bin/bash
echo "=== 基于CentOS 7.9的FreeSWITCH 1.8.2安装脚本 ==="
# 检查是否为root用户
if [ "$EUID" -ne 0 ];
then
echo "请使用root用户运行此脚本"
exit 1
fi
# 检查CentOS版本
if [ ! -f /etc/redhat-release ];
then
echo "❌ 此脚本仅支持CentOS系统"
exit 1
fi
echo "✅ 检测到CentOS系统,开始安装..."
# 1. 安装基础依赖包
echo "=== 1. 安装基础依赖包 ==="
yum update -y
yum groupinstall -y "Development Tools"
yum install -y epel-release
# 安装所有依赖包
yum install -y git gcc gcc-c++ wget zlib-devel libjpeg-devel freetype-devel
yum install -y alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel g722_1-devel gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel libtiff-devel libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel which yasm zlib-devel libshout-devel libmpg123-devel lame-devel
# 检查gcc版本
echo "=== 检查GCC版本 ==="
gcc --version | head -1
echo "⚠️ 注意:建议使用gcc 4.8.5,版本不能太高"
# 2. 安装高版本cmake 3.23.0
echo "=== 2. 安装CMake 3.23.0 ==="
cd /tmp
wget https://github.com/Kitware/CMake/releases/download/v3.23.0/cmake-3.23.0.tar.gz
if [ $? -ne 0 ];
then
echo "❌ CMake下载失败"
exit 1
fi
tar -zvxf cmake-3.23.0.tar.gz
cd cmake-3.23.0
./bootstrap
if [ $? -ne 0 ];
then
echo "❌ CMake bootstrap失败"
exit 1
fi
make -j$(nproc)
if [ $? -ne 0 ];
then
echo "❌ CMake编译失败"
exit 1
fi
make install
if [ $? -ne 0 ];
then
echo "❌ CMake安装失败"
exit 1
fi
# 创建软链接
ln -sf /usr/local/bin/cmake /usr/bin/cmake
ln -sf /usr/local/bin/cpack /usr/bin/cpack
ln -sf /usr/local/bin/ctest /usr/bin/ctest
echo "✅ CMake 3.23.0 安装成功"
# 3. 安装autoconf 2.71
echo "=== 3. 安装autoconf 2.71 ==="
cd /tmp
wget http://mirrors.kernel.org/gnu/autoconf/autoconf-2.71.tar.gz
if [ $? -ne 0 ];
then
echo "❌ autoconf下载失败"
exit 1
fi
tar xzvf autoconf-2.71.tar.gz
cd autoconf-2.71
./configure
if [ $? -ne 0 ];
then
echo "❌ autoconf配置失败"
exit 1
fi
make -j$(nproc)
if [ $? -ne 0 ];
then
echo "❌ autoconf编译失败"
exit 1
fi
make install
if [ $? -ne 0 ];
then
echo "❌ autoconf安装失败"
exit 1
fi
echo "✅ autoconf 2.71 安装成功"
# 4. 安装yasm 1.3.0
echo "=== 4. 安装yasm 1.3.0 ==="
cd /tmp
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
if [ $? -ne 0 ];
then
echo "❌ yasm下载失败"
exit 1
fi
tar -xvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
if [ $? -ne 0 ];
then
echo "❌ yasm配置失败"
exit 1
fi
make -j$(nproc)
if [ $? -ne 0 ];
then
echo "❌ yasm编译失败"
exit 1
fi
make install
if [ $? -ne 0 ];
then
echo "❌ yasm安装失败"
exit 1
fi
echo "✅ yasm 1.3.0 安装成功"
# 5. 安装nasm 2.14.02(修正为官方源下载)
echo "=== 5. 安装nasm 2.14.02 ==="
cd /tmp
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz
if [ $? -ne 0 ];
then
echo "❌ nasm下载失败"
exit 1
fi
tar -zxvf nasm-2.14.02.tar.gz
cd nasm-2.14.02
./configure
make -j$(nproc)
make install
echo "✅ nasm 2.14.02 安装成功"
# 6. 创建freeswitch用户和组
echo "=== 6. 创建freeswitch用户和组 ==="
groupadd -r freeswitch 2>/dev/null || true
useradd -r -g freeswitch -d /opt/freeswitch -s /bin/false freeswitch 2>/dev/null || true
mkdir -p /opt/freeswitch
chown -R freeswitch:freeswitch /opt/freeswitch
# 7. 配置防火墙
echo "=== 7. 配置防火墙 ==="
systemctl start firewalld 2>/dev/null || true
systemctl enable firewalld 2>/dev/null || true
firewall-cmd --permanent --add-port=5060/udp
firewall-cmd --permanent --add-port=5060/tcp
firewall-cmd --permanent --add-port=5061/udp
firewall-cmd --permanent --add-port=5061/tcp
firewall-cmd --permanent --add-port=16384-32768/udp
firewall-cmd --reload
# 8. 配置SELinux
echo "=== 8. 配置SELinux ==="
setenforce 0 2>/dev/null || true
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 2>/dev/null || true
# 9. 下载FreeSWITCH 1.8.2
echo "=== 9. 下载FreeSWITCH 1.8.2 ==="
cd /opt
wget http://files.freeswitch.org/freeswitch-releases/freeswitch-1.8.2.tar.bz2
if [ $? -ne 0 ];
then
echo "❌ FreeSWITCH 1.8.2 下载失败"
exit 1
fi
# 10. 解压源码
echo "=== 10. 解压源码 ==="
tar xvjf freeswitch-1.8.2.tar.bz2
if [ $? -ne 0 ];
then
echo "❌ 源码解压失败"
exit 1
fi
cd freeswitch-1.8.2
# 11. 配置模块(启用常用模块)
echo "=== 11. 配置模块 ==="
# 启用opus和g722_1等常用模块
sed -i 's/^#codecs\/mod_opus/codecs\/mod_opus/' modules.conf
sed -i 's/^#codecs\/mod_g722_1/codecs\/mod_g722_1/' modules.conf
sed -i 's/^#formats\/mod_shout/formats\/mod_shout/' modules.conf
sed -i 's/^#formats\/mod_opus/formats\/mod_opus/' modules.conf
echo "✅ 已启用常用模块"
# 12. 配置编译选项
echo "=== 12. 配置编译选项 ==="
./configure --prefix=/opt/freeswitch --enable-portable-binary \
--with-gnu-ld --with-python --with-openssl --enable-core-odbc-support \
--enable-zrtp --disable-libvpx
if [ $? -ne 0 ];
then
echo "❌ configure 失败,检查错误信息"
exit 1
fi
# 13. 编译
echo "=== 13. 开始编译(可能需要20-40分钟)==="
make -j$(nproc)
if [ $? -ne 0 ];
then
echo "❌ FreeSWITCH 编译失败"
echo "请检查编译错误信息,可能需要安装更多依赖包"
exit 1
fi
# 14. 安装
echo "=== 14. 安装 ==="
make install
if [ $? -ne 0 ];
then
echo "❌ FreeSWITCH 安装失败"
exit 1
fi
# 15. 安装声音文件
echo "=== 15. 安装声音文件 ==="
make sounds-install
make moh-install
# 16. 检查安装结果
if [ ! -f "/opt/freeswitch/bin/freeswitch" ];
then
echo "❌ FreeSWITCH 可执行文件不存在,安装失败"
exit 1
fi
# 17. 设置权限
chown -R freeswitch:freeswitch /opt/freeswitch
chmod -R 755 /opt/freeswitch
echo "✅ FreeSWITCH 1.8.2 安装成功"
# 18. 创建系统服务
echo "=== 18. 创建系统服务 ==="
cat > /etc/systemd/system/freeswitch.service <<
'EOF'
[Unit]
Description=FreeSWITCH open source softswitch
After=network.target
[Service]
Type=simple
User=freeswitch
Group=freeswitch
WorkingDirectory=/opt/freeswitch
ExecStart=/opt/freeswitch/bin/freeswitch -u freeswitch -g freeswitch -ncwait -nonat
TimeoutSec=45s
Restart=always
RestartSec=5
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=60000
LimitSTACK=250000
LimitRTPRIO=99
LimitRTTIME=7000000
[Install]
WantedBy=multi-user.target
EOF
# 19. 启动服务
echo "=== 19. 启动服务 ==="
systemctl daemon-reload
systemctl start freeswitch
systemctl enable freeswitch
# 20. 检查结果
echo "=== 20. 检查安装结果 ==="
echo "服务状态:"
systemctl status freeswitch --no-pager
echo "端口监听:"
netstat -tlnp | grep 5060
echo "防火墙状态:"
firewall-cmd --list-ports
echo "=== FreeSWITCH 1.8.2 安装完成!==="
echo "版本信息:FreeSWITCH 1.8.2"
echo "系统:CentOS 7.9.2009 x86_64"
echo "OpenSSL:1.1.1w"
echo "配置文件位置: /opt/freeswitch/conf"
echo "日志文件位置: /opt/freeswitch/log"
echo "可执行文件: /opt/freeswitch/bin/freeswitch"
echo "CLI 工具: /opt/freeswitch/bin/fs_cli"
echo ""
echo "✅ 支持的功能:"
echo "- 标准 SIP 协议"
echo "- 基本通话功能"
echo "- 会议功能"
echo "- 语音邮件"
echo "- OPUS 和 G722.1 编解码"
echo ""
echo " 连接方式:"
echo "- SIP over UDP: 5060"
echo "- SIP over TCP: 5060"
echo "- SIP over TLS: 5061"
echo "- RTP 端口范围: 16384-32768"
echo ""
echo " 系统配置:"
echo "- 防火墙已配置并开放必要端口"
echo "- SELinux已设置为宽松模式"
echo "- 系统服务已创建并启用"
7.2 start.sh(修改版)
#!/bin/bash
echo "=== FreeSWITCH 稳定启动脚本 ==="
# 检查是否为root用户
if [ "$EUID" -ne 0 ];
then
echo "请使用root用户运行此脚本"
exit 1
fi
# 1. 停止所有FreeSWITCH进程
echo "=== 1. 停止所有FreeSWITCH进程 ==="
pkill -f freeswitch 2>/dev/null || true
sleep 2
# 2. 清理PID文件
echo "=== 2. 清理PID文件 ==="
rm -f /opt/freeswitch/run/freeswitch.pid
rm -f /opt/freeswitch/var/run/freeswitch/freeswitch.pid
# 3. 启动FreeSWITCH(后台模式)
echo "=== 3. 启动FreeSWITCH后台服务 ==="
cd /opt/freeswitch
nohup /opt/freeswitch/bin/freeswitch -u freeswitch -g freeswitch -nc -nonat > /var/log/freeswitch.log 2>
&1 &
# 4. 等待启动
echo "=== 4. 等待FreeSWITCH启动 ==="
sleep 10
# 5. 检查进程
echo "=== 5. 检查FreeSWITCH进程 ==="
FS_PID=$(pgrep -f "freeswitch.*-nc")
if [ -n "$FS_PID" ];
then
echo "✅ FreeSWITCH 进程运行中,PID: $FS_PID"
# 6. 检查端口
echo "=== 6. 检查SIP端口 ==="
sleep 5
if netstat -tlnp | grep -q 5060;
then
echo "✅ SIP端口5060正在监听"
netstat -tlnp | grep 5060
else
echo "⚠️ SIP端口5060未监听"
echo "检查日志:"
tail -20 /var/log/freeswitch.log
fi
# 7. 启动系统服务
echo "=== 7. 启动系统服务 ==="
systemctl start freeswitch 2>/dev/null || true
systemctl enable freeswitch 2>/dev/null || true
echo ""
echo " FreeSWITCH 启动成功!"
echo "服务器IP: $(hostname -I | awk '{print $1}')"
echo "SIP端口: 5060"
echo "进程PID: $FS_PID"
echo "日志文件: /var/log/freeswitch.log"
echo ""
echo "管理命令:"
echo "- 查看状态: systemctl status freeswitch"
echo "- 停止服务: systemctl stop freeswitch"
echo "- 重启服务: systemctl restart freeswitch"
echo "- 查看日志: tail -f /var/log/freeswitch.log"
echo "- 进入CLI: /opt/freeswitch/bin/fs_cli"
else
echo "❌ FreeSWITCH 启动失败"
echo "检查日志:"
tail -20 /var/log/freeswitch.log
fi
echo "=== 启动完成 ==="
浙公网安备 33010602011771号