当前位置: 首页 > news >正文

编译安装Freeswitch 1.10.12

网上大部分安装博客来自https://github.com/freeswitch/mod_unimrcp 的readme 文档,但这是两年前的版本(2023),当前最新稳定版是1.10.12,2024年发布。用旧的教程安装,新的版本存在包错。但是我估计在把各个项目都切到2023年的tag或者branch,再按照文档执行编译过程应该是没问题的。不过目前需求是用2024的版本,所以没去尝试。

回到正题,https://github.com/signalwire/freeswitch 项目的 docker/build 目录有三个Dockerfile文件,是2025年提交,本人亲测按照步骤可以成功安装最新稳定版freeswitch 1.10.12。下面是三个Dockerfile的作用说明。

文件 作用
base-image-from-repo.Dockerfile 用docker运行此Dockerfile,从官方源安装fs,需要官网的token。优点是简单快捷。缺点是无法更改源码和配置,即无法自定义编译的模块。
base-image-from-source.Dockerfile 用docker运行此Dockerfile,生成一个镜像。该镜像包含了编译过程中需要的所有依赖。然后用此镜像可以编译fs源码,生成Debian 下的deb安装包。但是生成的安装包在Debain12 直接安装会有很多依赖包错。
debs-from-source.Dockerfile 用docker运行此Dockerfile,生成一个镜像。用该镜像可以生成安装fs 的deb 包时所需要的依赖包。

到一台可以访问外网(减少各种依赖和包无法访问导致的报错!)且已经安装了git和docker的Linux服务器,新建一个目录执行下面的操作。

先编译fs源码成deb安装包

git clone https://github.com/signalwire/freeswitch
cd freeswitch
# fs-base-image中具备了编译fs源码所需要的所有依赖
docker build -t fs-base-image -f docker/build/base-image-from-source.Dockerfile .
# 如果要指定标签和版本号
#   docker build -t fs-base-image \
#     --build-arg LIBKS_REF=v1.0.0 \
#     --build-arg BUILD_NUMBER=123 \
#     -f docker/build/base-image-from-source.Dockerfile .# 创建宿主机保存的目录,也可以指定另外目录
mkdir -p "$HOME/DEBs"# 用fs-base-image编译源码,需要时间较长根据网速和服务器性能大概10-30min
# 将$(pwd) 改成freeswitch的源码目录,因为要安装的不是当前的最新源代码,而且最新稳定版本。
# 在另外的目录克隆源码,然后通过git tag查看版本,再git checkout 到指定tag
docker run -it --rm -v "$HOME/DEBs:/var/local/deb" -v "$(pwd):/usr/local/src/freeswitch" fs-base-image scripts/packaging/build/fsdeb.sh -b 42 -o /var/local/deb# 执行后在$HOME/DEBs目录下就有了指定版本的fs 的deb安装包。

再编译安装fs需要的依赖包

# 生成镜像fs-debian-package-builder
docker build -t fs-debian-package-builder -f docker/build/debs-from-source.Dockerfile .
# 也可指定标签
#   docker build -t fs-debian-package-builder \
#     --build-arg LIBKS_REF=v1.0.0 \
#     --build-arg BUILD_NUMBER=123 \
#     -f docker/build/debs-from-source.Dockerfile .#创建目录
mkdir -p "$HOME/DEBs-PACK"# 将安装fs所需要的依赖也打包成deb格式,存放到宿主机的 $HOME/DEBs 目录
# 为了区分fs的deb包,也可以将依赖的deb包存放的别的目录,后续先安装依赖的deb包,然后再安装fs的deb包
docker run -v "$HOME/DEBs-PACK:/var/local/deb" fs-debian-package-builder

现在开始用docker 构建一个含有fs的镜像。先用一个docker compose file运行一个容器。

执行docker compose -f docker-compose.yml up -d,docker-compose.yml 内容如下:

services:fs-debian12:container_name: fs-debian12image: debian:bookworm    tty: trueprivileged: truerestart: alwaysenvironment:TZ: "Asia/Shanghai"

将宿主机的安装包复制到容器,也可以在docker compose file中挂载。但是不知道会不会有文件生成,影响宿主机目录,所以用复制的方式。

docker cp $HOME/DEBs-PACK fs-debian12:/root
docker cp $HOME/DEBs fs-debian12:/root

进入容器,执行安装。

docker exec -it fs-debian12 bash
apt update# 先安装依赖
apt install -y /root/DEBs-PACK/*.deb# 再安装fs,如果有些依赖包确定不需要但是安装时有出现了报错,直接直接mv 重命名文件修改deb后缀,这样就不会安装了
apt update
apt install -y /root/DEBs/*.deb# 安装完成后执行,可以看到路径
whereis freeswitch
# 运行
freeswitch

此时已经在一个Debian12的容器中安装了freeswitch ,我们可以将此保存为镜像,作为基础镜像使用。

# 保存容器为镜像并且指定tag为v1
docker commit fs-debian12 fs-debian12:v1
# 也可以保存为文件方便部署使用
docker -o fs-debian12_v1.image fs-debian12:v1

下面用docker compose 得方式部署运行freeswitch:

services:repair:container_name: freeswitch-1.10.12image: fs-debian12:v1privileged: truerestart: alwaysenvironment:TZ: "Asia/Shanghai"network_mode: hostvolumes:- /home:/home- ./mod_asr.so:/usr/lib/freeswitch/mod/mod_asr.so- ./conf:/etc/freeswitch- ./log:/var/log/freeswitchcommand: ["freeswitch", "-ncwait",  "-nonat", "-rp", "-elegant-term"]

关于yaml的说明:

  • home 目录存放语音文件的目录。
  • mod_asr.so 是调用asr的so,另外有需要的旧版的依赖包复制到容器的/lib/x86_64-linux-gnu/ 目录。
  • conf 目录是配置,此目录先不做映射,开启容器后复制到宿主机根据需要修改后,再做映射。
  • log 目录映射出来,用来做日志持久化

启动参数的说明:

- -ncwait : 阻塞当前shell指令不输出日志,
- -nonat: 不检测网络,避免运行在docker时可能出现的网络问题,切network_mode指定为host
- -rp:实时设置,避免延迟
- -elegant-term: 退出时优雅关闭
http://www.jsqmd.com/news/145064/

相关文章:

  • 虚拟桌面是什么?Windows 自带的高效办公与摸鱼神器
  • 汽车领域智能体构建全解析—腾讯云黑客松Agent应用创新挑战赛微信公众号赛道实战复盘
  • 英伟达圣诞偷袭,200亿美元收购Groq
  • 鸿蒙开发入门:从环境搭建到第一个ArkTS应用,30分钟上手
  • 【计算机毕业设计案例】基于springboot的课程互助学习系统“资源共享 - 协作学习 - 互助答疑(程序+文档+讲解+定制)
  • [从程序员到架构师] 微服务场景实战 - 注册发现
  • 安装nvm管理node版本
  • 查找两个带头节点单链表的共同后缀起始位置
  • ‌测试代码覆盖率:Jacoco配置详解
  • 8.2.1-内核级支持的分布式存储ceph
  • 自动化测试覆盖率:达到90%+的实战体系构建
  • 鸿蒙6核心功能实战:手把手教你开发分布式协同小应用
  • SQL性能瓶颈破局:Explain分析+实战优化全攻略
  • 负熵流就是财富,财富就是负熵流
  • 放弃 HarmonyOS 7?OpenHarmony 6.1 LTS 版本适配指南(含老机型兼容技巧)
  • 【毕业设计】基于Java的网上宠物店管理系统基于Java技术的智慧宠物店管理系统设计(源码+文档+远程调试,全bao定制等)
  • 【开题答辩全过程】以 共享单车管理系统为例,包含答辩的问题和答案
  • 如何构建一个模型,将企业特定的知识集可视化展示,并可以据此引导用户进行有针对性的提问?
  • SpringBoot Maven 项目 pom 中的 plugin 插件用法整理 - 教程
  • U-Boot中make命令会发生什么?
  • 基于纳米微粒激发平面波的米氏散射FDTD仿真模拟与验证
  • 可持续演进的测试流水线设计原则
  • 饰品商拍提效:AI图生图实现白底图转上身图
  • Java毕设选题推荐:基于java的宠物用品店系统基于Java的网上宠物店管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • AAVE V4 新特性简介:更细致地管理流动性与用户仓位
  • AI CRM如何让你的销售流程自己跑起来,用AI激活销售漏斗
  • 面向 K8s 1.33 的 Linux 服务器深度运维实战(CentOS/RedHat/Ubuntu 通用)
  • mtr
  • 基于SpringBoot+Vue的图书馆选座平台设计与实现毕设源码
  • [省选联考 2021 A 卷] 矩阵游戏