OpenEuler 20.03构建zabbix rpm包
一、说明
为什么要自己构建?
由于centos从7版本之后改为stream,工作环境由centos转向OpenEuler。zabbix官网上有各大主流操作系统预编译的rpm包,但是Openeuler相对小众,自然没有制作好的包。即使是centos系统,7版本也过于陈旧了,从zabbix 6.0开始,centos 7已经不提供server的rpm包了,只剩下proxy和agent,到了7.0版本,连proxy都没有了。学会自己创建rpm包,以备操作系统环境发生改变是非常有必要的。
为什么不直接源代码编译
- 由于采用的是sever-proxy-agent的多层架构,server只有一台,但是proxy有几十台,agent更是上千,每一台都用源代码编译工作量大大增加。
- 源代码编译的软件,在一些例如配置文件、启停命令上与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
四、修改spec文件
4.1 删除%{rhel}和%{?amzn}宏
%{rhel}和%{?amzn}两个宏分别标识了redhat和amazon系linux的大版本号,在OpenEuler中为空,在spec文件中被定义为0,如果直接使用会影响构建,所以需要进行删除。
与OpenEuler相对接近的是Centos8,修改时当做centos8处理。
例如:
%if ( 0%{?rhel} >= 7 && 0%{?amzn} == 0 ) || 0%{?amzn} >= 2023
%{!?build_agent2: %global build_agent2 1}
%endif
直接修改为
%{!?build_agent2: %global build_agent2 1}
4.2 修改BuildRequires版本要求
由于官网repo源的postgresql-devel版本不达标,暂时将postgresql-devel的>= 12.0要求删除
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命令进行构建。
顺利完成。

浙公网安备 33010602011771号