kamailio/openser/opensips 生成RPM包/RPM打包

本文档详细介绍了如何在Linux环境中使用rpm-build工具来打包kamailio(前身为openser)及其依赖,以生成RPM包。首先,你需要安装rpmforge-release和DAG's GPG key,接着安装rpm-build。然后,复制Kamailio的Spec文件并安装必要的依赖项。最后,执行命令生成RPM包,这个过程可能需要一些时间。成功时,系统会显示相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


使用RPM包进行安装部署可以节省许多时间,一些环境的配置都可以使用脚本完成,这样部署一台proxy服务器两步走,脚本配环境,RPM装程序。先说说标准流程,然后再说下如何加入自己开发的模块。

一.RPM环境配置
安装rpmforge,根据系统架构选择32位版还是64位版。

安装DAG's GPG key

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt.

安装下载的RPM包

rpm -ivh rpmforge-release-0.5.2-2.el5.rf.*.rpm

安装rpm-build,把命令复制来一起执行就行了。

yum install rpm-build
yum install redhat-rpm-config
cd
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

二.进行kamailio打包

cd kamailio源码目录
make FLAVOUR=kamailio tar

复制 Kamailio Spec Files

kamailio.default里面的参数可以把共享内存和私有内存调大一些。

cd
mv kamailio-3.1/kamailio/kamailio-3.1.2_src.tar.gz rpmbuild/SOURCES/
cp kamailio-3.1/kamailio/pkg/kamailio/rpm/kamailio.init rpmbuild/SOURCES/
cp kamailio-3.1/kamailio/pkg/kamailio/rpm/kamailio.default rpmbuild/SOURCES/
cp kamailio-3.1/kamailio/pkg/kamailio/rpm/kamailio.spec.CentOS rpmbuild/SPECS/

安装kamailio依赖

yum install make
yum install gcc
yum install flex
yum install bison
yum install mysql-devel
yum install openssl-devel
yum install pcre-devel
yum install postgresql-devel
yum install unixODBC-devel
yum install libxml2-devel
yum install radiusclient-ng-devel
yum install lm_sensors-devel
yum install net-snmp-devel
yum install curl-devel
yum install expat-devel
yum install libconfuse-devel
yum install libpurple-devel
yum install openldap-devel
yum install mod_perl-devel
yum install lua-devel
yum install python-devel
yum install yum install

现在生成RPM包

cd ~/rpmbuild/SPECS
rpmbuild -ba kamailio.spec.CenOS

等吧,这是一个比较费时的过程,当你看到以下信息就成功了。

...
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/kamailio-3.1.2-buildroot
Wrote: /home/cezar/rpmbuild/SRPMS/kamailio-3.1.2-0.src.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-mysql-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-postgres-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-unixodbc-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-utils-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-cpl-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-radius-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-snmpstats-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-presence-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-xmpp-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-tls-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-carrierroute-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-purple-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-ldap-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-perl-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-lua-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-python-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-geoip-3.1.2-0.i386.rpm
Wrote: /home/cezar/rpmbuild/RPMS/i386/kamailio-debuginfo-3.1.2-0.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.19156
+ umask 022
+ cd /home/cezar/rpmbuild/BUILD
+ cd kamailio-3.1.2
+ rm -rf /var/tmp/kamailio-3.1.2-buildroot
+ exit 0
三.添加自己开发的模块
这个主要是修改spec文件,比如我完成一个叫test的模块开发,而这个test的模块依赖了其他第三方库,比如protobuf。
1.先要让rpm会编译这个库
vi kamailio.spec.CenOS
在文件中找 make FLAVOUR=kamailio cfg 这一行,然后在此行最后加上include_modules="test"
make FLAVOUR=kamailio cfg prefix=/usr cfg_prefix=$RPM_BUILD_ROOT basedir=$RPM_BUILD_ROOT cfg_target=/%{_sysconfdir}/kamailio/ modules_dirs="modules modules_k" include_modules="db_mysql test"
2.让rpm包打包新增的库so
vi kamailio.spec.CenOS
找到这一段:%dir %{_libdir}/kamailio  从此开始下面都是库文件,在最后面加入以下行:
/usr/lib64/kamailio/test.so
3.解决依赖问题,一个简单+暴力的方法就是直接把这种依赖去掉。安装的时候就不会提示依赖问题,但是还得提前把依赖的那些库装好了程序才能运行。
vi kamailio.spec.CenOS
找到Conflicts开头的行,然后新增一行加入以下内容
AutoReq: no
参考文档:

kamailio/opensips 技术交流QQ群:118791050

# 看下tm.so的权限是否正确? # 目前系统无法加载tm.so ####### Modules Section ######## /* set paths to location of modules */ mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules/" root@flexusx-8b5d:/etc/kamailio# ls -l /usr/lib/x86_64-linux-gnu/kamailio/modules/*.so -rw-r--r-- 1 root root 104984 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/acc_diameter.so -rw-r--r-- 1 root root 56256 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/acc_json.so -rw-r--r-- 1 root root 209240 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/acc.so -rw-r--r-- 1 root root 44136 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/alias_db.so -rw-r--r-- 1 root root 749056 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/app_jsdt.so -rw-r--r-- 1 root root 597560 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/app_sqlang.so -rw-r--r-- 1 root root 64456 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/async.so -rw-r--r-- 1 root root 81184 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/auth_db.so -rw-r--r-- 1 root root 125576 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/auth_diameter.so -rw-r--r-- 1 root root 154560 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/auth_identity.so -rw-r--r-- 1 root root 155672 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/auth.so -rw-r--r-- 1 root root 56152 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/auth_xkeys.so -rw-r--r-- 1 root root 249576 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/avpops.so -rw-r--r-- 1 root root 106608 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/avp.so -rw-r--r-- 1 root root 44328 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/benchmark.so -rw-r--r-- 1 root root 24520 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/blst.so -rw-r--r-- 1 root root 80912 Feb 18 2022 /usr/lib/x86_64-linux-gnu/kamailio/modules/call_control.so -rw-r--r-- 1 root root 80856 Feb 18 2022 /usr/lib/x86_64-linux-gnu
最新发布
03-15
<think>好的,我现在需要解决用户提到的Kamailio中tm.so文件的权限问题以及系统无法加载该模块的问题。首先,我得回忆一下Kamailio的基本结构。Kamailio是一个SIP服务器,模块通常存放在类似/usr/lib/x86_64-linux-gnu/kamailio/modules/这样的目录下。tm.so是事务管理模块,对Kamailio的正常运行至关重要。 用户的问题可能涉及文件权限或路径配置错误。首先,我应该指导用户检查tm.so文件是否存在,使用ls命令查看。如果文件不存在,可能需要重新安装Kamailio或该模块。接着,文件权限是否正确?通常需要至少可读可执行,所属用户和组是否正确,比如kamailio或root。然后,检查Kamailio的配置文件kamailio.cfg,是否加载了tm模块,路径是否正确。如果路径不对,需要修改loadmodule行的路径。 另外,SELinux或AppArmor等安全模块可能会阻止访问,需要检查日志,如/var/log/syslog或journalctl -u kamailio,看看有没有权限拒绝的记录。如果是SELinux的问题,可能需要调整策略或禁用。还有,Kamailio进程的用户是否有权限访问tm.so及其目录?可能需要更改目录权限或用chown调整所属用户。 此外,确保所有依赖库都已安装,使用ldd tm.so检查是否有缺失的库。最后,配置文件语法是否正确,用kamailio -c检查配置,然后重启服务。 用户提供的引用[^1]提到了重启Kamailio服务的命令,所以最后一步重启是必要的。可能需要综合这些步骤逐步排查,从存在性、权限、配置到依赖项,逐一排除问题。</think>### Kamailio tm.so模块权限问题及加载失败的解决方案 #### 一、检查文件存在性与路径 1. 确认`tm.so`文件是否存在: ```bash ls -l /usr/lib/x86_64-linux-ginux/kamailio/modules/tm.so ``` - 若文件不存在,需重新安装kamailio或编译模块 #### 二、验证文件权限设置 1. 查看详细权限: ```bash ls -l /usr/lib/x86_64-linux-ginux/kamailio/modules/tm.so ``` - 要求权限:至少`-rw-r--r--`(644) - 修正权限命令: ```bash sudo chmod 644 tm.so ``` 2. 检查父目录权限: ```bash ls -ld /usr/lib/x86_64-linux-ginux/kamailio/modules/ ``` - 要求权限:至少`drwxr-xr-x`(755) #### 三、验证文件所有权 1. 确认文件归属: ```bash ls -l /usr/lib/x86_64-linux-ginux/kamailio/modules/tm.so ``` - 推荐所有者:`kamailio:kamailio`或`root:root` - 修改所有权命令: ```bash sudo chown kamailio:kamailio tm.so ``` #### 四、检查SELinux/AppArmor限制 1. 临时禁用SELinux测试: ```bash setenforce 0 ``` 2. 查看安全日志: ```bash grep avc /var/log/audit/audit.log | grep tm.so ``` #### 五、验证模块加载配置 1. 检查`kamailio.cfg`配置: ```cfg loadmodule "tm.so" ``` 2. 确认模块路径正确: ```cfg # 示例正确配置 mpath="/usr/lib/x86_64-linux-ginux/kamailio/modules/" ``` #### 六、依赖库检查 1. 使用ldd验证依赖: ```bash ldd /usr/lib/x86_64-linux-ginux/kamailio/modules/tm.so ``` #### 七、服务重启步骤 1. 语法检查: ```bash kamailio -c ``` 2. 重启服务: ```bash sudo systemctl restart kamailio ``` #### 八、日志分析 ```bash tail -f /var/log/syslog | grep -i tm journalctl -u kamailio --since "5 minutes ago" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值