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包。

相关推荐
程序员一点1 天前
第9章:软件包管理(DNF 与 RPM)
linux·运维·openeuler
Libra_bai2 天前
zabbix 7 监控 oracle 19c 方法 增加agent2监控需要的变量环境
zabbix
懒神降世2 天前
基于iVentoy的PXE服务器的部署实战指南
运维·服务器·开发语言·云原生·vmware·openeuler·iventoy
Sheffield5 天前
今天的CentOS 7如何配置Zabbix
linux·centos·zabbix
杭州吉网运维日记5 天前
zabbix监控docker下的nginx
nginx·docker·zabbix
黑蛋同志7 天前
Anolis OS 23安装zabbix
zabbix
CodeGolang7 天前
Docker容器化部署Zabbix监控系统完整指南
docker·容器·zabbix
tianyuanwo9 天前
Mock构建中RPM仓库校验和不匹配:深度解析与系统化解决方案
yum·rpm·checksum
小草cys9 天前
鲲鹏920服务器安装openEuler后无法联网,但物理网线已连接
运维·服务器·openeuler