自主创建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
相关推荐
SkyWalking中文站14 小时前
认识 Horizon UI · 17/17:安装与迁移
运维·监控·自动化运维
SkyWalking中文站14 小时前
认识 Horizon UI · 16/17:八种语言的本地化
运维·监控·自动化运维
七夜zippoe15 小时前
DolphinDB生产指标监控:KPI实时计算
监控·生产指标·kpi·dolphindb·实时 计算
SkyWalking中文站18 小时前
认识 Horizon UI · 15/17:用模板定制控制台
运维·监控·自动化运维
笨鸟先飞的橘猫2 天前
skynet监控实践
监控·skynet
SkyWalking中文站3 天前
认识 Horizon UI · 11/17:运行时规则与实时调试
运维·监控·自动化运维
SkyWalking中文站4 天前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
SkyWalking中文站5 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站6 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控