自主创建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 天前
06-监控性能优化:数字工厂的“神经系统效率提升“
监控
迎仔3 天前
07-监控安全与合规:数字工厂的“安全防护系统“
监控
lemoncat87 天前
免费开源!Windows笔记本电池管家
监控·笔记本·电池
cyber_两只龙宝8 天前
haproxy--实现能7层负载均衡、基于cookie会话保持、状态页监控的高性能web服务器集群
linux·运维·负载均衡·监控·haproxy·会话保持·高性能集群
程序员羽毛9 天前
🚀 股票量化多策略盯盘哨兵 V3.0.0 涨停板监控+回测+回放+摸鱼全搞定
股票量化·监控·提醒·股票策略
少云清9 天前
【软件测试】9_性能测试实战 _性能测试监控
性能测试·监控
A-刘晨阳9 天前
Prometheus + Grafana + Alertmanager 实现邮件监控告警及配置告警信息
运维·云计算·grafana·prometheus·监控·邮件
盛世宏博北京11 天前
《合规 GB/T 50356:小型档案馆(100㎡)恒温恒湿自动化方案》
监控·档案温湿度
OpsEye11 天前
监控 100 问(五):监控数据的分析与可视化
运维·网络·信息可视化·it·监控·监控系统
玄德公笔记12 天前
Prometheus监控k8s的metric详解(第二版)-01-scrape 指标抓取
kubernetes·k8s·prometheus·监控·metric·scrape·k8s监控