OpenEuler 20.03构建zabbix7.0 rpm包

张开发
2026/4/4 0:24:27 15 分钟阅读
OpenEuler 20.03构建zabbix7.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包以备操作系统环境发生改变是非常有必要的。为什么不直接源代码编译由于采用的是sever-proxy-agent的多层架构server只有一台但是proxy有几十台agent更是上千每一台都用源代码编译工作量大大增加。源代码编译的软件在一些例如配置文件、启停命令上与rpm版本有差异如果混布增加了运维复杂度。有没有预编译好的rpm包在OpenEuler的官方社区的软件中心有社区成员自行构建的rpm包可以尝试找找有无符合自己要求的版本。二、准备工作2.1 添加repo源如果OpenEuler缺少默认的repo源需要自己添加在/etc/yum.repos.d/openEuler_x86_64.repo中添加如下内容[OS] nameopenEuler-$releasever - OS baseurlhttps://repo.openeuler.openatom.cn/openEuler-20.03-LTS-SP4/OS/$basearch/ enabled1 gpgcheck1 gpgkeyhttps://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下载srpmrpm -ivh zabbix-7.0.23-release1.el8.src.rpm此时在/root/rpmbuild目录下的SOURCES目录下会产生源代码压缩包、补丁和配置文件SPECS目录会产生spec文件。但是此spec文件是Centos8版本的与OpenEuler不完全契合需要修改一下。三、安装依赖包3.1 BuildRequires要求的依赖包依赖包要求的版本dnf安装的版本makemariadb-connector-c-develpostgresql-devel 12.010.5sqlite-develnet-snmp-developenldap-develunixODBC-develcurl-devel 7.13.17.66.0OpenIPMI-devel 22.0.29libssh-devel 0.9.00.9.4java-develjava-1.8.0-openjdk-devel 1.6.01.8.0.392.b08libxml2-devellibevent-develpcre2-developenssl-devel 1.0.11.1.1fsystemdpolicycoreutils-develselinux-policy-develc-ares-devel 1.19.01.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-devel3.2 golang配置版本更新zabbix agent2和web_service是使用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使用go version命令查看更新是否生效配置代理在构建中会自动下载go的工具链toolchain但是由于网络缘故无法访问默认的代理地址proxy.golang.org导致构建失败使用命令go env -w GOPROXYhttps://goproxy.cn,direct改用七牛云的goproxy使用命令go env GOPROXY测试是否生效。四、修改spec文件修改好的spec文件见https://files.cnblogs.com/files/blogs/745793/zabbix.zip?t1771123185downloadtrue4.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五、构建使用rpmbuild -bb zabbix.spec命令进行构建需要比较长的时间。

更多文章