自主创建snmptt rpm包

一、说明

1.1 背景

在上一篇文章《OpenEuler 22.03 安装 snmptt 1.5》中介绍了手工安装snmptt的方法,可以看出过程非常简单,由于是perl脚本,连源代码编译都不涉及,基本上只涉及文件的操作,并且依赖的包也不多。

事实上只需要一个bash脚本就可以完成snmptt的安装,不过rpm包可能是更符合用户习惯的办法。在更早的文章《使用rpmbuild将源代码制成rpm包》中介绍了rpmbuild的使用,本文将介绍如何将snmptt源代码制作成rpm包。

1.2 环境

  • 操作系统:OpenEuler 22.03
  • snmptt:1.5

二、创建

2.1 准备源代码压缩包

首先从Github主页下载snmptt的源代码压缩包snmptt_1.5.tgz,压缩包中包含了全量perl脚本工具。按照rpmbuild的习惯,需要先解压压缩包,对文件夹改名后重新压缩。

复制代码
tar -zxf snmptt_1.5.tgz
cp -r snmptt_1.5 snmptt-1.5
tar -zcf snmptt-1.5.tar.gz snmptt-1.5/

2.2 准备rpmbuild目录

由于snmptt的安装过程中涉及创建用户和不少系统文件操作,因此需要root权限。在root用户下使用rpmdev-setuptree命令,创建/root/rpmbuild目录,将源代码压缩包放入SOURCES目录下

复制代码
mv snmptt-1.5.tar.gz ~/rpmbuild/SOURCES/

2.3 编辑spec文件

编辑SPECS/snmptt.spec

复制代码
Name:           snmptt
Version:        1.5 
Release:        1%{?dist}
Summary:        SNMPTT (SNMP Trap Translator) is an SNMP trap handler written in Perl for use with the Net-SNMP / UCD-SNMP snmptrapd program
License:        GPLv3+ 
Source0:        %{name}-%{version}.tar.gz
BuildRequires:        net-snmp, perl-Config-IniFiles, perl-Net-IP, perl-Text-ParseWords, perl-Time-HiRes, perl-Text-Balanced

%description
SNMPTT (SNMP Trap Translator) is an SNMP trap handler written in Perl for use with the Net-SNMP / UCD-SNMP snmptrapd program

%prep
%setup -q

%build

%install
%__mkdir_p $RPM_BUILD_ROOT/%{_sbindir}
%__install -m 0755 %{name} $RPM_BUILD_ROOT/%{_sbindir}/
%__mkdir_p $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}
%__chown -R %{name}:%{name} $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}
%__chmod 755 $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}
%__install -m 0644 %{name}.ini $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/
%__install -m 0644 examples/%{name}.conf.generic $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/%{name}.conf
%__mkdir_p $RPM_BUILD_ROOT/%{_localstatedir}/log/%{name}
%__chown -R %{name}:%{name} $RPM_BUILD_ROOT/%{_localstatedir}/log/%{name}
%__chmod -R 750 $RPM_BUILD_ROOT/%{_localstatedir}/log/%{name}
%__mkdir_p $RPM_BUILD_ROOT/%{_localstatedir}/spool/%{name}
%__chown -R %{name}:%{name} $RPM_BUILD_ROOT/%{_localstatedir}/spool/%{name}
%__chmod -R 750 $RPM_BUILD_ROOT/%{_localstatedir}/spool/%{name}
%__mkdir_p $RPM_BUILD_ROOT/%{_unitdir}
%__install -m 0644 %{name}.service $RPM_BUILD_ROOT/%{_unitdir}/
%__mkdir_p $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/
%__install -m 0644 %{name}.logrotate $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/%{name}
%__install -m 0755 snmptthandler $RPM_BUILD_ROOT/%{_sbindir}/snmptthandler

%pre
adduser -r %{name} > /dev/null 2>&1 || :

%files
%attr(0755, %{name}, %{name}) %{_sbindir}/%{name}
%attr(0755, %{name}, %{name}) %{_sbindir}/snmptthandler
%attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/%{name}.ini
%attr(0644, %{name}, %{name}) %{_sysconfdir}/%{name}/%{name}.conf
%attr(0644, %{name}, %{name}) %{_unitdir}/%{name}.service
%attr(0644, %{name}, %{name}) %{_sysconfdir}/logrotate.d/%{name}
%attr(0750, %{name}, %{name}) %{_localstatedir}/spool/%{name}
%attr(0750, %{name}, %{name}) %{_localstatedir}/log/%{name}

%post
systemctl daemon-reload

%preun
if [ $1 -eq 0 ]; then
    systemctl stop snmptt > /dev/null 2>&1 || :
    systemctl disable snmptt > /dev/null 2>&1 || :
fi

%postun
if [ $1 -eq 0 ]; then
    userdel snmptt > /dev/null 2>&1 || :
fi

2.4 创建

至此可以使用rpmbuild命令进行rpm包的创建,但是如果直接运行会报错空 %files 文件 /root/rpmbuild/BUILD/snmptt-1.5/debugfiles.list

网络上提供了两种方案解决:

  1. rpmbuild -bb SPECS/snmptt.spec --nodebuginfo
  2. echo "%debug_package %{nil}" >> /usr/lib/rpm/macros
    我使用了第一种方法解决。

三、测试

创建完成后使用rpm -ivh命令进行安装。

可以按照上一篇文章《OpenEuler 22.03 安装 snmptt 1.5》的方案进行测试。

注意由于snmptt会写入文件,为了方便,可以直接关闭selinux:setenforce 0

  1. 修改snmptrapd.conf、snmptrapd.service、snmptrapd.service、snmptt.conf文件
  2. 启动snmptrapd和snmptt服务
  3. 应用snmptrap命令发送测试报文,检查/var/log/snmptt/snmptt.log日志是否生成并且内容正确。

如果测试正确,可以再使用rpm -e命令卸载,检查有无卸载干净。

四、笔记

snmptt安装过程中进行的创建文件操作,对应手工删除命令如下:

复制代码
rm -f /usr/sbin/snmptt
rm -f /usr/sbin/snmptthandler
rm -rf /etc/snmptt/
rm -rf /var/log/snmptt/
rm -rf /var/spool/snmptt/
rm -f /usr/lib/systemd/system/snmptt.service
rm -f /etc/logrotate.d/snmptt
userdel snmptt
相关推荐
.柒宇.1 天前
Zabbix7.0部署完整指南
linux·运维·zabbix·监控
东风微鸣9 天前
可观测性不是孤岛:团队协作与文化变革
监控·团队协作·可观察性·文化变革
PieroPc10 天前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
科技风向标go12 天前
**2026年Q2中国消费级监控摄像头市场观察:存量时代的竞争逻辑重构**
网络·安全·监控·户外安防
夫礼者13 天前
【极简监控】综合实战篇:1+1>>10 的降维打击!联动底层工具,暴力提取 SkyWalking“断头链路”
java·监控
无所事事O_o17 天前
【监控报警体系建设】监控标准与最佳实践
java·架构·监控
可观测性用观测云19 天前
基于观测云 DataKit 实现 H3C 路由器有源 Ping 链路质量监控
监控
kyriewen22 天前
你的网页慢,用户不说直接走——前端性能监控教你“读心术”
前端·性能优化·监控
七夜zippoe23 天前
DolphinDB实时监控大屏:数据可视化实战
信息可视化·可视化·监控·大屏·dolphindb
梵得儿SHI1 个月前
(第二篇)Spring AI 架构设计与优化:可观察性体系,打造全链路可视化的 AI 运维方案
人工智能·微服务·grafana·prometheus·监控·可观察性·spring ai