简介

本次编译包括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 查看版本信息 
 

安装依赖

  1. 基础依赖,不要看比较多,但是基本上都是必须安装的依赖。
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
  1. 第三方依赖安装:
    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, 想要运行的话,

  1. 内核加载模块insmod xt_RTPENGINE.ko, 查看是否加载成功:lsmod |grep xt_RTPENGINE
    rmmod xt_RTPENGINE.ko 卸载模块
  2. iptables 转发udp数据到xt_RTPENGINE模块上,所以内核模式下rtpengine要独占一台机器。
echo 'add 8' > /proc/rtpengine/control
iptables -I INPUT -p udp -j RTPENGINE --id 8

白沙云影
1 声望2 粉丝

一个专注于voip的频道