概述

freeswitch是一款简单好用的VOIP开源软交换平台。

rockylinux docker上编译安装fs1.10版本的流程记录。

环境

docker engine:Version 24.0.6

rockylinux docker:8

freeswitch:v1.10.7

手动模式

rockylinux准备

docker hub拉取rockylinux镜像。

sudo docker pull rockylinux:8

启动docker容器,版本使用rockylinux8。

sudo docker run -itd --name rockylinux.8-fs.1.10-compile rockylinux:8

sudo docker exec -it rockylinux.8-fs.1.10-compile bash

以下步骤均为docker容器“rockylinux.8-fs.1.10-compile”内部操作。

依赖库

FreeSWITCH 的安装将从源代码完成,以便您可以看到依赖项和库的安装过程,在某些情况下,这些依赖项和库也将从源代码安装。显然,可以从可用的存储库安装 FreeSWITCH,但最好学会直接管理源。在编译 FreeSWITCH 之前,将安装一系列库和依赖项,这些库和依赖项将允许您安装几乎所有最重要的 FS 模块。首先,激活 Power-Tools 存储库,这允许安装标准 Rocky Linux 存储库中不存在的一些软件包:

dnf install 'dnf-command(config-manager)' nano

dnf config-manager --set-enabled powertools

您从Vorbis开始,它是一个音频压缩/解压缩库,对于正确编译mod_shout模块至关重要:

dnf install libvorbis libvorbis-devel vorbis-tools libogg libogg-devel -y

mpg123和libshout旁边:

dnf install mpg123-devel mpg123-libs libshout-devel -y

对于 GSM 音频格式,安装相关包:

dnf install gsm gsm-devel -y

FFMPEG 是mod_av模块的依赖项,允许您在 Verto 中使用视频 H264 编解码器、FreeSWITCH 中用于 WebRTC 的信令、SIP 信令之外的另一个选项:

dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm -y

dnf install ffmpeg ffmpeg-devel -y

接下来是 CURL,它是一个客户端,允许您使用 HTTP、HTTPS、FTP、GOPHER、DICT、TELNET 协议接收和/或发送文件;由mod_xml_curl模块使用:

dnf install curl curl-devel libidn-devel -y

编译源所需的所有库和依赖项均已安装:

dnf install gcc ncurses-devel make gcc-c++ zlib-devel libtool bison-devel bison openssl-devel bzip2-devel wget newt-devel subversion flex gtk2-devel bzip2 patch libjpeg-devel yasm libsndfile-devel net-tools git perl-ExtUtils-Embed -y

(可选)在 Rocky Linux 8 中,对于数据库管理,默认情况下不再存在 MySQL,而是安装了 MariaDB:

dnf install mariadb mariadb-server mariadb-devel -y

UNIXODBC 是 ODBC API 的 Linux 实现,允许连接到许多数据库管理系统(例如 MySQL/MariaDB):

dnf install unixODBC unixODBC-devel mariadb-connector-odbc libtool-ltdl-devel -y

由于FreeSWITCH的内部数据库默认是基于SQLite的,因此安装了程序包和开发包:

dnf install sqlite sqlite-devel libpq-devel -y

(可选)PostgreSQL:

dnf install postgresql-devel postgresql-server -y

(可选)从来源安装FLITE 、Festival Lite,这是 FS 的mod_flite模块使用的文本到语音系统:

cd /usr/src

git clone https://github.com/festvox/flite.git

cd flite/

./configure --enable-shared --with-audio=none --prefix=/usr

make

make get_voices

make install

Libuuid和uiid用于SoftSWITCH通道和进程线程的唯一标识:

dnf install libuuid libuuid-devel uuid uuid-devel -y

继续安装其他音频格式:SPEEX WAW 和 LAME;后者也是mod_shout模块的依赖项:

dnf install speex speex-devel speexdsp-devel wavpack wavpack-devel lame-devel -y

(可选)继续使用LIBMAD,它是一个高质量的 MPEG 音频解码器:

cd /usr/src

wget https://campus.voztovoice.org/FreeSWITCH/libmad-0.15.1b.tar.gz

tar -xf libmad-0.15.1b.tar.gz

cd libmad-0.15.1b

./configure --prefix=/usr --libdir=/usr/lib64

为了编译成功,必须修改Makefile中的一行:

nano +129 Makefile

CFLAGS = -Wall -g -O -fforce-mem -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2

使其保持:

CFLAGS = -Wall -g -O -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2

我们继续编译和安装:

make

make install

要安装与 Opus 音频编解码器相关的mod_opus模块,您必须按照以下步骤从源安装编解码器:

wget https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz

tar -xf opus-1.3.1.tar.gz

cd opus-1.3.1

./configure --prefix=/usr --libdir=/usr/lib64

make

make install

第一部分以S或X结尾,这是一个允许操作音频文件并可以将它们从一种格式传输到另一种格式的程序:

cd /usr/src

wget https://campus.voztovoice.org/FreeSWITCH/sox-14.4.2.tar.gz

tar -xf sox-14.4.2.tar.gz

cd sox-14.4.2

./configure --prefix=/usr --libdir=/usr/lib64

make && make install

继续使用libtiff。

dnf install libtiff libtiff-devel libxml2 libxml2-devel -y

安装spandsp3的依赖库,需要先安装fs官方仓库,访问官方仓库需要鉴权。

echo "signalwire" > /etc/yum/vars/signalwireusername

echo "TOKEN" > /etc/yum/vars/signalwiretoken

dnf install -y https://$(< /etc/yum/vars/signalwireusername):$(< /etc/yum/vars/signalwiretoken)@freeswitch.signalwire.com/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm

dnf install spandsp3 spandsp3-devel libks -y

(可选)OpenLDAP是轻量级目录访问协议的开源版本。通常它用于创建可以远程查阅和/或修改的用户目录。许多程序实现了连接到 OpenLDAP 服务器的可能性,FreeSWITCH 通过mod_ldap模块提供了这种可能性,尽管它被认为是过时的模块:

dnf install openldap openldap-clients openldap-devel openldap-servers -y

(可选)SNMP是简单网络管理协议,用于控制和监视 Linux 服务器和某些应用程序的性能:

dnf install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils -y

服务器的准备工作继续进行LUA编程语言的安装,该语言最常用于编写与FS交互的脚本和代码:

dnf install lua lua-devel -y

安装这些软件包是为了编译mod_memcache模块,该模块在某些类型的数据库查询中用作缓存:

dnf install memcached memcached-devel libmemcached libmemcached-devel -y --skip-broken

最后,LIBSRTP 库允许通过 SRTP 协议(RFC3711)和 FS 使用的 SIP 堆栈(SIP SOFIA)在 FreeSWITCH 中实现媒体流加密:

dnf install libsrtp libsrtp-devel sofia-sip* -y

以及 Jansson 库来支持mod_verto模块用作 WebRTC 的信号系统:

dnf install jansson jansson-devel -y

最后,您必须安装一些库,这些库将允许您安装更多模块,并以这种方式获得 FreeSWITCH 及其模块的几乎完整安装:

dnf install portaudio portaudio-devel python2-devel perl-devel erlang ldns-devel libedit-devel diffutils signalwire-client-c -y

fs编译安装

服务器准备好后,就开始安装FreeSWITCH;下载 1.10 分支的最新可用版本:

cd /usr/src

git clone -b v1.10.7 https://github.com/signalwire/freeswitch.git

进入创建的文件夹:

cd freeswitch

chmod 775 -R ./*

并准备好源代码进行编译:

./bootstrap.sh -j

./configure -C --enable-portable-binary \

--with-gnu-ld --with-python=/usr/bin/python2 --with-erlang --with-openssl \

--enable-core-odbc-support --enable-zrtp \

--enable-core-pgsql-support \

--enable-static-v8 --disable-parallel-build-v8

make

make install

空间优化

dnf autoremove

dnf clean all

package-cleanup --quiet --leaves | xargs dnf remove -y

package-cleanup --quiet --dupes | xargs dnf remove -y

dnf remove -y devtoolset-9-gcc scl-utils scl-utils-build yum-utils centos-release-scl centos-release-scl-rh rpmdevtools yum-plugin-ovl

rm -rf /var/cache/dnf/*

rm -rf /root/*

rm -rf /usr/local/share/*

手动模式简版

rockylinux准备

docker hub拉取rockylinux镜像。

sudo docker pull rockylinux:8

启动docker容器,版本使用rockylinux8。

sudo docker run -itd --name rockylinux.8-fs.1.10-compile rockylinux:8

sudo docker exec -it rockylinux.8-fs.1.10-compile bash

以下步骤均为docker容器“rockylinux.8-fs.1.10-compile”内部操作。

alias

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -f

cd

vi .bashrc

alias ll='ls -l'

依赖库

需要先安装fs官方仓库,访问官方仓库需要鉴权。

dnf install 'dnf-command(config-manager)' -y

dnf config-manager --set-enabled powertools

echo "signalwire" > /etc/yum/vars/signalwireusername

echo "TOKEN" > /etc/yum/vars/signalwiretoken

dnf install -y https://$(< /etc/yum/vars/signalwireusername):$(< /etc/yum/vars/signalwiretoken)@freeswitch.signalwire.com/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm

dnf install -y epel-release -y

dnf makecache

dnf update

dnf remove -y spandsp-devel spandsp

dnf install -y sofia-sip-devel spandsp3-devel libks signalwire-client-c erlang postgresql-devel libtool python2-devel gcc-c++ zlib-devel libpng-devel sqlite-devel libcurl-devel pcre-devel speex-devel speexdsp-devel ldns-devel libedit-devel ilbc2-devel opus-devel lua-devel libsndfile-devel

dnf install -y which tzdata yasm git

fs编译安装

服务器准备好后,就开始安装FreeSWITCH;下载 1.10 分支的最新可用版本:

cd

##git clone -b v1.10.7 https://github.com/signalwire/freeswitch.git

进入创建的文件夹:

cd freeswitch

chmod 775 -R ./*

并准备好源代码进行编译:

./bootstrap.sh -j

./configure

cd /root/freeswitch/src/mod/codecs/mod_g729/

make

cd -

make

make install

空间优化

dnf autoremove

dnf clean all

package-cleanup --quiet --leaves | xargs dnf remove -y

package-cleanup --quiet --dupes | xargs dnf remove -y

dnf remove -y devtoolset-9-gcc scl-utils scl-utils-build yum-utils centos-release-scl centos-release-scl-rh rpmdevtools yum-plugin-ovl

rm -rf /var/cache/dnf/*

rm -rf /root/freeswitch

rm -rf /usr/share/icons /usr/share/themes/ /usr/share/doc /usr/share/man

镜像操作

制作镜像。

sudo docker commit -m="rockylinux.8-fs.1.10-release" -a="zr" rockylinux.8-fs.1.10-compile 10.55.55.136:5000/zr/rockylinux.8-fs.1.10-release:v1.2

上传镜像到registry。

sudo docker images

sudo docker push 10.55.55.136:5000/zr/rockylinux.8-fs.1.10-release:v1.2

下载镜像。

sudo docker pull 10.55.55.136:5000/zr/rockylinux.8-fs.1.10-release:v1.2

启动容器release。

sudo docker run -itd --net=host -v /usr/local/freeswitch/conf:/usr/local/freeswitch/conf -v /usr/local/freeswitch/log:/usr/local/freeswitch/log -v /usr/local/freeswitch/recordings:/usr/local/freeswitch/recordings --name rockylinux.8-fs.1.10-sbc 10.55.55.136:5000/zr/rockylinux.8-fs.1.10-release:v1.2 /usr/local/freeswitch/bin/freeswitch -nonat -nosql -nonatmap -nocal -nort

sudo docker logs rockylinux.8-fs.1.10-sbc

sudo docker exec -it rockylinux.8-fs.1.10-sbc /usr/local/freeswitch/bin/fs_cli -x status

sudo docker rm -f rockylinux.8-fs.1.10-sbc

总结

fs.1.10版本比1.6版本的安装依赖要更多,最终产生的镜像大小也更大。

后续继续整理fs.1.10镜像的dockerfile模式。

空空如常

求真得真

fs.1.10 ON rockylinux8 docker镜像制作的更多相关文章

  1. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  2. docker研究-4 docker镜像制作

    这次实验以centos镜像为基础镜像进行相关docker镜像制作. 1. 下载centos镜像 [root@localhost ~]# docker pull centosUsing default ...

  3. 《Docekr入门学习篇》——Docker镜像制作

    Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...

  4. Docker 镜像制作教程:针对不同语言的精简策略

    本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...

  5. Nginx+PHP7.3.9 Docker镜像制作

    最近因项目需要制作了多个版本的php docker镜像,制作过程可谓是一波三折,因基于yum的方式安装php的方式在安装扩展插件时很不方便,不容易找到插件对应的yum源,所以PHP在docker镜像中 ...

  6. docker镜像制作Dockerfile

    使用 Dockerfile 定制镜像 从刚才的 docker commit 的学习中,我们可以了解到,镜像的定制实际上就是 定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作 的 ...

  7. doris 0.9.0版本docker镜像制作与使用

    1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1  Dockerfi ...

  8. presto-gateway 试用以及docker 镜像制作

    presto-gateway 是 lyft 团队开源 的prestodb 的工具.以下是一个简单的试用,以及碰到问题的解决 还有就是docker 镜像的制作 Dockerfile 很简单,本地构建然后 ...

  9. 实战【docker 镜像制作与使用】

    一.制作docker 镜像 使用spring boot 构建一个简单的web 项目,返回 “Hello,World ”字符串,使用 Maven 打成 jar 包,使用的Linux 环境是 Centos ...

  10. docker镜像制作及发布

    以centos为例. 主要内容:安装docker,制作镜像,发布镜像. 安装docker 1. 安装docker yum install -y docker 等待一会,安装成功,查看安装列表 2. 启 ...

随机推荐

  1. git合并某分支上的单次提交(cherry-pick)

    1. 查找提交对应的hash值 git log 查看 d 查看下一页,q退出 vscode通过gitlens插件查看 2.合并提交 git cherry-pick hahs值

  2. 力扣602(MySQL)-好友申请Ⅱ:谁有最多的好友(中等)

    题目: 在 Facebook 或者 Twitter 这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请. RequestAccepted 表: (requester_id, accepte ...

  3. 基于IoT全链路实时质量-魔洛哥

    简介: 通过基于IoT的全链路实时质量,业务使用狄仁杰进行全链路埋点后,可一键接入魔洛哥平台,实现终端问题的实时感知和链路分析,以及智能终端系统业务场景的全链路实时质量.整体方案接入成本低(分钟级别接 ...

  4. Spring Boot Admin 集成诊断利器 Arthas 实践

    简介: Arthas 是 Alibaba 开源的 Java 诊断工具,具有实时查看系统的运行状况:查看函数调用参数.返回值和异常:在线热更新代码:秒解决类冲突问题:定位类加载路径:生成热点:通过网页诊 ...

  5. [ML] 数据预处理 - 特性归一化的目的

    简而言之,归一化的目的就是使得预处理的数据被限定在一定的范围内(比如[0,1]或者[-1,1]), 从而消除奇异样本数据导致的不良影响. 是否归一化主要在于是否关心变量取值. Tool:ChatAI ...

  6. [FAQ] Error: com.mysql.jdbc.Driver not loaded. :jdbc_driver_library

    以上问题出现在 logstash.conf 未配置好 MySQL 的 JDBC 驱动时导致的错误提示. 首先,下载好 MySQL JDBC 驱动库,可以放到 logstash.conf 所在当前目录或 ...

  7. WPF 已知问题 在 ObservableCollection 的 CollectionChanged 修改集合内容将让 UI 显示错误

    本文记录一个 WPF 已知问题,在 ObservableCollection 的 CollectionChanged 事件里面,绕过 ObservableCollection 的异常判断逻辑,强行修改 ...

  8. dotnet C# 获取当前设备可移动磁盘

    本文告诉大家如何获取当前设备的可移动磁盘 在我的 WPF 应用里面,期望获取到 U 盘的所在盘进行一些有趣的逻辑.可以通过 DriveInfo 类的 GetDrives 获取当前所有的驱动器磁盘 再通 ...

  9. Fastbin attack&&Double free和Unsortbin leak的综合使用

    Fastbin attack&&Double free和Unsortbin leak的综合使用 今天做一个综合题目,包括利用Fastbin attack实现多指针指向一个地址,以及利用 ...

  10. 开源相机管理库Aravis例程学习(六)——camera-features

    目录 简介 例程代码 函数说明 arv_camera_get_integer arv_camera_get_string 简介 本文针对官方例程中的:04-camera-features做简单的讲解. ...