简介
本次编译包括rtpengine-deamon+kernel-module+ recording-deamon+utils。
rtpengine-deamon: rtpengine的主服务
kernel-module: rtpengine的内核模式
recording-deamon: rtpengine的录音服务
utils: rtpengine的工具服务包括:rtpengine-ctl, rtpengine-get-table等。
前期准备
1. 如果要使用rptengine的内核模式,linux的内核要升级到4.4以后。uname -r 查看内核版本
内核的升级可参考: https://blog.csdn.net/MssGuo/article/details/127184206
此过程需要重启机器。
2. gcc版本要升级到11之后,不建议使用gcc源码编译安装,比较耗时间一般1-2小时。使用yum更快:
yum -y install centos-release-scl
yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
echo "source /opt/rh/devtoolset-11/enable" >>/etc/profile (版本生效)
gcc --version 查看版本信息
安装依赖
- 基础依赖,不要看比较多,但是基本上都是必须安装的依赖。
yum install -y epel-release && yum install -y kernel-devel kernel-headers pcre2 pcre2-devel xmlrpc-c-devel libogg-devel \
glib glib-devel zlib zlib-devel openssl openssl-devel glibc-devel file cpanminus\
pcre pcre-devel libcurl libcurl-devel xmlrpc-c xmlrpc-c-devel libjpeg-turbo-devel \
libevent-devel glib2-devel json-glib-devel gperf libpcap-devel git perl-IPC-Cmd libtool \
mariadb mariadb-devel mariadb-libs iptables iptables-devel pandoc libtiff-devel\
wget bzip2 tar zip unzip hiredis hiredis-devel jansson jansson-devel libwebsockets libwebsockets-devel opus opus-devel \
spandsp spandsp-devel libuv libuv-devel libnftnl libnftnl-devel libmnl libmnl-devel bcg729 bcg729-devel ncurses-devel ncurses
- 第三方依赖安装:
2.1 ffmpeg:
yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm -y && yum install ffmpeg ffmpeg-devel -y
2.2 curl升级(options, 供recording-deamon 编译使用)
city-fan.repo
[CityFan]
name=City Fan Repo
baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch/
enabled=1
gpgcheck=0
cp city-fan.repo /etc/yum.repos.d/ && yum clean all -y && yum update curl -y
2.3 kernel-module编译
kernel-module的编译要使用内核的功能,所以要指定内核头文件位置,很重要,不然kernel编译不过:
mkdir -p /lib/modules/$(uname -r) && cd /lib/modules/$(uname -r) && ln -fs /usr/src/kernels/$(uname -r) build
此命令的意思的在/lib/modules/xxxx/下,创建build 软连接指向linux内核的头文件。以我的设备为例:
uname -r
5.4.277-1.el7.elrepo.x86_64
内核的文件在:/usr/src/kernels/,此目录下可能有多个内核目录,因为我的设备是在3.10.0的版本上升级到5.4.227的,之前的内核也没删除,所有会有多个。
ll
总用量 12
drwxr-xr-x. 22 root root 4096 3月 18 15:14 3.10.0-1160.108.1.el7.x86_64
drwxr-xr-x. 22 root root 4096 3月 18 15:14 3.10.0-957.el7.x86_64
drwxr-xr-x 22 root root 4096 6月 14 09:58 5.4.277-1.el7.elrepo.x86_64
2.4 rtpengine-ctl 依赖
安装perl相关依赖,不然rtpengine-ctl运行会报错。cpanm Config::Tiny
开始编译
git clone https://github.com/sipwise/rtpengine.git
如果只使用rtpengine-deamon,可以cd rtpengine/daemon && make 即可,当然也可以在rtpengine下make,这会编译除了kernel-module之外的所有模块, make with-kernel 会编译包括kernel-module在内的所有模块。 如果上面的依赖都安装成功的话,就不会报错。
make install with-kernel 安装
kernel-module
内核模块编译成功之后会生成xt_RTPENGINE.ko, 想要运行的话,
- 内核加载模块insmod xt_RTPENGINE.ko, 查看是否加载成功:lsmod |grep xt_RTPENGINE
rmmod xt_RTPENGINE.ko 卸载模块 - iptables 转发udp数据到xt_RTPENGINE模块上,所以内核模式下rtpengine要独占一台机器。
echo 'add 8' > /proc/rtpengine/control
iptables -I INPUT -p udp -j RTPENGINE --id 8
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。