簡介
本次編譯包括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