動態

詳情 返回 返回

rtpengine 源碼centos7編譯運行【master版本: 2024-6-13】 - 動態 詳情

簡介

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

Add a new 評論

Some HTML is okay.