OpenEuler 20.03构建zabbix8.0 rpm包

一、说明

为什么要自己构建?

由于centos从7版本之后改为stream,工作环境由centos转向OpenEuler。zabbix官网上有各大主流操作系统预编译的rpm包,但是Openeuler相对小众,自然没有制作好的包。即使是centos系统,7版本也过于陈旧了,从zabbix 6.0开始,centos 7已经不提供server的rpm包了,只剩下proxy和agent,到了7.0版本,连proxy都没有了。学会自己创建rpm包,以备操作系统环境发生改变是非常有必要的。

为什么不直接源代码编译

  1. 由于采用的是sever-proxy-agent的多层架构,server只有一台,但是proxy有几十台,agent更是上千,每一台都用源代码编译工作量大大增加。
  2. 源代码编译的软件,在一些例如配置文件、启停命令上与rpm版本有差异,如果混布增加了运维复杂度。

有没有预编译好的rpm包

在OpenEuler的官方社区的软件中心,有社区成员自行构建的rpm包,可以尝试找找有无符合自己要求的版本。

二、准备工作

2.1 添加repo源

如果OpenEuler缺少默认的repo源,需要自己添加

在/etc/yum.repos.d/openEuler_x86_64.repo中添加如下内容:

复制代码
[OS]
name=openEuler-$releasever - OS
baseurl=https://repo.openeuler.openatom.cn/openEuler-20.03-LTS-SP4/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.openatom.cn/openEuler-20.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler

另外再添加everything的源,可以提供更多的包。

复制代码
dnf config-manager --add-repo https://repo.openeuler.org/openEuler-20.03-LTS/everything/x86_64

使用dnf clean all && dnf makecache命令更新。

2.2 准备构建rpm包环境

之前的文章里已经介绍了构建rpm包的基本方法,这里不再赘述。root用户下运行命令如下:

复制代码
dnf install -y rpm-build
dnf install -y rpmdevtools
rpmdev-setuptree

下载srpm包( http://repo.zabbix.com/zabbix/7.0/rhel/8/SRPMS/zabbix-7.0.23-release1.el8.src.rpm ) ,这里以rhel8版本的srpm文件为例:

复制代码
rpm -ivh zabbix-7.0.23-release1.el8.src.rpm

此时,在/root/rpmbuild目录下的SOURCES目录下会产生源代码压缩包、补丁和配置文件,SPECS目录会产生spec文件。但是此spec文件是Centos8版本的,与OpenEuler不完全契合,需要修改一下。

三、安装依赖包

3.1 BuildRequires要求的依赖包

依赖包 要求的版本 dnf安装的版本
make
mariadb-connector-c-devel
postgresql-devel >= 12.0 10.5
sqlite-devel
net-snmp-devel
openldap-devel
unixODBC-devel
curl-devel >= 7.13.1 7.66.0
OpenIPMI-devel >= 2 2.0.29
libssh-devel >= 0.9.0 0.9.4
java-devel(java-1.8.0-openjdk-devel) >= 1.6.0 1.8.0.392.b08
libxml2-devel
libevent-devel
pcre2-devel
openssl-devel >= 1.0.1 1.1.1f
systemd
policycoreutils-devel
selinux-policy-devel
c-ares-devel >= 1.19.0 1.16.1
安装全部依赖:
复制代码
dnf install -y make mariadb-connector-c-devel postgresql-devel sqlite-devel net-snmp-devel openldap-devel unixODBC-devel curl-devel OpenIPMI-devel libssh-devel java-1.8.0-openjdk-devel libxml2-devel libevent-devel pcre2-devel openssl-devel systemd policycoreutils-devel selinux-policy-devel c-ares-devel

3.2 其他依赖包

zabbix agent2是使用GO语言编写的,并且使用的语法对版本还有要求,OpenEuler 20.03默认repo源的版本为1.15,需要安装一个较新版本的。

首先下载golang的压缩包并解压

复制代码
tar -C /usr/local -xzf go1.24.8.linux-amd64.tar.gz

配置PATH变量并生效

复制代码
tee /etc/profile.d/go.sh <<EOL
export GO_HOME=/usr/local/go
export PATH=\$PATH:\$GO_HOME/bin
EOL
source /etc/profile

但是实际上agent2和web_service并未构建成功,见4.3小节

四、修改spec文件

修改好的spec文件见:https://files.cnblogs.com/files/blogs/745793/zabbix.zip?t=1771123185&download=true

4.1 删除%{rhel}和%{?amzn}宏

%{rhel}和%{?amzn}两个宏分别标识了redhat和amazon系linux的大版本号,用于构建时一些配置方式的选择。由于这两个宏在OpenEuler中为空,在spec文件中会被全局定义为0,直接使用会影响构建,需要全部进行处理。

与OpenEuler相对接近的是Centos8,把%{?rhel}当做"8"处理,%{?amzn}直接删除。

示例1:

复制代码
%if ( 0%{?rhel} >= 7 && 0%{?amzn} == 0 ) || 0%{?amzn} >= 2023
%{!?build_agent2: %global build_agent2 1}
%endif

由于08 >= 7,直接修改为

复制代码
%{!?build_agent2: %global build_agent2 1}

示例2:

复制代码
%if 0%{rhel} >= 9 || 0%{?amzn} >= 2023
BuildRequires: selinux-policy-devel
BuildRequires: c-ares-devel >= 1.19.0
%endif

由于不满足 08 >= 9 ,直接删除

4.2 修改BuildRequires版本要求

官网repo源的postgresql-devel版本不达标,直接进行构建会报错。

postgresql官网没有OpenEuler的预编译rpm包,想要满足要求必须自行从源代码进行编译。

本文仅为演示,将postgresql-devel >= 12.0修改为postgresql-devel

4.3 去除agent2和web_service

agent3和web_service都使用了GO语言,由于网络问题导致两者的创建会出错,直接删除以下内容:

复制代码
%ifarch x86_64 aarch64
%if ( 0%{?rhel} >= 7 && 0%{?amzn} == 0 ) || 0%{?amzn} >= 2023
%{!?build_agent2: %global build_agent2 1}
%endif
%if 0%{?rhel} >= 8 || 0%{?amzn} >= 2023
%{!?build_web_service: %global build_web_service 1}
%endif
%endif

本次构建不包括两者,想要解决可能必须使用魔法了

五、构建

使用rpmbuild -bb zabbix.spec命令进行构建,需要比较长的时间。

完成后在/root/rpmbuild/RPMS目录下就会生成编译好的rpm包。

相关推荐
qq_349447953 天前
Zabbix自助发现监控机器配置
zabbix
mwmbfh3 天前
zabbix图表(图形/监控图)中文显示为方框/方块的解决办法
zabbix
江南风月4 天前
WGCLOUD保姆级教程最新版整理
运维·zabbix·运维开发·prometheus·日志审计
ElevenS_it1885 天前
Nginx日志监控告警实战:access_log解析+5xx突增+慢请求+异常IP自动告警完整方案(Filebeat+Zabbix)
运维·网络·tcp/ip·nginx·zabbix
IT WorryFree5 天前
Zabbix 7.4 API 可同步全量参数清单(同步第三方系统专用)
java·开发语言·zabbix
江南风月5 天前
Hermes Agent 接入WGCLOUD实战:打造团队 AI 智能运维解决方案
运维·zabbix·运维开发·prometheus
IT WorryFree5 天前
Zabbix7.4 + Grafana 天蝎(Zabbix 官方插件数据源)完整配置 + 解决 412 报错
zabbix·grafana
骑上单车去旅行6 天前
openEuler 22.03 离线源码编译 Zabbix 7.0.27 完整最终整合手册
linux·运维·服务器·zabbix
子慕琴风7 天前
zabbix数据太多,卡顿,分表,存储过程
zabbix
风曦Kisaki7 天前
#Linux监控与安全Day02:Zabbix 自动发现,Zabbix 报警机制,Zabbix 主动监控,监控 Nginx 服务
linux·运维·nginx·安全·自动化·云计算·zabbix