自主创建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
相关推荐
鸿观工坊2 天前
第09篇 告警体系设计:Alertmanager 路由与告警治理
监控
做萤石二次开发的哈哈5 天前
视频解码器怎么对接?解码上墙、电视墙开窗与场景切换的ISAPI接入实战
人工智能·物联网·监控·视频编解码·大屏端·萤石开放平台·蓝海aiot一站式工作台
lisanmengmeng5 天前
nagios 图形化监控部署
监控·nagios
鸿观工坊6 天前
第5篇 Nginx 监控:流量、连接与性能指标
监控
鸿观工坊6 天前
第4篇 Spring Boot 应用监控:Micrometer 与 JVM 指标
监控
鸿观工坊6 天前
第1篇 Prometheus 监控体系全景与基础环境搭建
监控
苏渡苇14 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
行百里er14 天前
轻量级 Spring 监测工具——Spring Insight 发布了
spring boot·后端·监控
宋均浩15 天前
告警规则 243 砍到 27:Prometheus 降噪实战,日均打扰 47 次 → 3 次
云原生·监控·devops
小小ken16 天前
水星摄像头(MIPC552W)双摄版和乔安摄像头(JA-A12,JA-w1)接入easynvr具体步骤
监控·摄像头·nvr·easynvr·水星·乔安