OpenEuler 22.03 安装zabbix-agent(源代码编译及自制rpm包)

一、说明

1.1 背景

由于centos停止支持的缘故,被迫从centos转换到了OpenEuler-22.03。最初抱着偷懒的想法,尝试直接安装centos7版本的zabbix-agent的rpm包,但是由于openssl版本过高导致无法安装。低版本的openssl本身就是一个安全隐患,既然系统预置的版本已经升级,那么自然没有降回去的道理。
虽然zabbix-agent通过源代码编译也很简单,但是需要安装的主机数量实在太多,逐台编译就显得很不现实,最终决定尝试将源代码打包为rpm,从而简化批量安装的工作。

1.2 环境

  • 操作系统:OpenEuler-22.03
  • zabbix版本:zabbix-6.0.19

二、准备工作

2.1 必要工具

  1. 安装编译所需工具:
yum install -y gcc
yum install -y pcre-devel
yum install -y make
  1. 安装构建rpm包所需工具:
yum install -y rpm-build
yum install -y rpmdevtools

2.2 获取源代码

从官网主页(https://www.zabbix.com/download_sources)可以直接下载各版本的最新源代码,例如6.0.42(截止目前最新)。
如果想要下载相对较旧的版本,例如6.0.19,可以在官网仓库(http://repo.zabbix.com/zabbix)根据操作系统和版本下载src.rpm包。相比之下,OpenEuler与centos7最为接近,我们下载对应的zabbix-6.0.19版本:http://repo.zabbix.com/zabbix/6.0/rhel/7/SRPMS/zabbix-6.0.19-release1.el7.src.rpm。
可以使用rpm2cpio package.src.rpm | cpio -idmv命令将tar.gz格式的源代码包解压到当前目录下。

三、编译安装

3.1 创建用户

groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

3.2 编译

  1. 默认配置编译
    命令如下:
./configure --enable-agent
make
make install

如果使用默认的编译命令,则配置文件默认为/usr/local/etc/zabbix_agentd.conf;可执行文件默认为:/usr/local/sbin/zabbix_agentd/usr/local/bin/zabbix_get/usr/local/bin/zabbix_sender;其他配置参考配置文件,例如日志文件根据配置文件中的配置,为默认值/tmp/zabbix-agent.log

  1. 自定义配置编译命令
    有时默认的配置不能满足需求,例如对文件的位置有要求,可以对一些配置进行修改。示例编译命令如下:
./configure --prefix=/opt/zabbix --sysconfdir=/etc/zabbix --enable-agent --disable-dependency-tracking
make
make install

以上配置,则zabbix-agent会被安装于/opt/zabbix目录下,可执行文件为该目录下的sbin目录和bin目录,配置文件为/etc/zabbix/zabbix_agentd.conf,日志则以zabbix_agentd.conf文件为准,需要注意的是,zabbix-agent是以zabbix用户身份运行的,所以日志目录必须对zabbix用户具备读写权限。

3.3 运行

3.3.1 修改配置文件

配置文件中有以下几个需要注意的参数:

参数 说明
Server server或proxy地址
ServerActive 如果agent为主动模式则填写server或proxy地址,如果为被动模式则注释掉
Hostname 与web界面主机名称一致
PidFile pid文件路径
LogFile log文件路径

这里因为只是测试编译是否成功,所以可以完全不改,只看进程能否正常启动即可。

3.3.2 运行

  1. 启动agent:默认配置编译,可以直接以root身份使用zabbix_agentd命令运行agent,如果编译时修改过安装目录,则运行此目录下/sbin目录的zabbix_agentd文件。
  2. 停止agent:先用ps -ef | grep zabbix_agentd命令查得主进程pid,然后使用kill -15 主进程pid命令

3.4 注册为服务

在/usr/lib/systemd/system/目录下新增文件zabbix-agent.service,示例内容为:

[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/usr/local/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/usr/local/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/usr/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target

注意,其中的Environment、PIDFile、ExecStart所涉及的目录,需要根据实际情况进行修改。
完成后即可用systemctl命令控制服务了:

chmod 644 zabbix-agent.service
systemctl daemon-reload
systemctl start zabbix-agent

四、自制rpm包安装(自制spec文件)

构建rpm包的相关内容,可以参考之前的文章:使用rpmbuild将源代码制成rpm包

4.1 创建SPEC文件

在~/rpmbuild/SPECS目录下创建zabbix.spec文件,内容如下:

Name:           zabbix
Version:        6.0.19
Release:        1%{?dist}
Summary:        The Enterprise-class open source monitoring solution
Group:          Applications/Internet
License:        GPLv2+
URL:            http://www.zabbix.com/
Source0:        zabbix-6.0.19.tar.gz
BuildRequires:  gcc, make, pcre-devel

%description
Zabbix is the ultimate enterprise-level software designed for real-time monitoring of millions of metrics collected from tens of thousands of servers, virtual machines and network devices.

%prep
%setup -q

%build
%configure --enable-agent
make %{?_smp_mflags}

%install
%make_install

%pre
/usr/sbin/groupadd --system zabbix
/usr/sbin/useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

%files
%attr(0644, zabbix, zabbix) %{_sysconfdir}/zabbix_agentd.conf
%attr(0755, zabbix, zabbix) %{_sbindir}/zabbix_agentd
%attr(0755, zabbix, zabbix) %{_bindir}/zabbix_get
%attr(0755, zabbix, zabbix) %{_bindir}/zabbix_sender
%attr(0644, zabbix, zabbix) %{_datadir}/man/man1/zabbix_get.1.gz
%attr(0644, zabbix, zabbix) %{_datadir}/man/man1/zabbix_sender.1.gz
%attr(0644, zabbix, zabbix) %{_datadir}/man/man8/zabbix_agentd.8.gz

%postun
if [ $1 -eq 0 ]; then
    /usr/sbin/userdel zabbix
fi

几个注意点:

  • %pre:创建用户和用户组,否则安装的时候会报错
  • %files:部署文件到系统中,如果文件有遗漏,编译的时候会报错
  • %postun:卸载完成后删除用户,由于会连组一起删除,因此就不需要另外删除用户组了

4.2 创建、安装及运行

  1. 创建rpm包:rpmbuild -bb ~/rpmbuild/SPECS/zabbix.spec
  2. 安装rpm包:以root运行rpm -ivh 用户主目录/rpmbuild/RPMS/x86_64/zabbix-6.0.19-1.x86_64.rpm
  3. 运行:以root直接运行zabbix_agentd即可

五、后记

5.1 存在问题

上述方法创建的rpm包,虽然能够安装使用,但是相比官方提供的rpm包,仍然存在不少问题:

  1. spec文件在健壮性上存在不足,例如创建用户之前没有检查用户是否已经存在,导致rpm包的移植性可能存在问题。如果操作系统环境本身存在一些修改,例如安全加固、定制化修改,那么最好进行适配后重新编译。
  2. 某些文件的位置有所不同:
编译安装 自制rpm包 官方rpm包
配置文件 /usr/local/etc/zabbix_agentd.conf /etc/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf
可执行文件 /usr/local/sbin/zabbix_agentd /usr/sbin/zabbix_agentd /usr/sbin/zabbix_agentd
默认日志文件 /tmp/zabbix-agent.log /tmp/zabbix-agent.log /varl/log/zabbix-agent.log
PID文件 /tmp/zabbix_agentd.pid /tmp/zabbix_agentd.pid /run/zabbix/zabbix_agentd.pid
  1. 官网rpm包安装之后,zabbix-agent已经注册为服务,可以用systemctl进行控制。

以上差异,是因为官方创建rpm包时,不仅是一个源代码压缩包,还有很多其他文件(例如配置文件、service文件和补丁文件),所以安装完成时,实际配置已经和源代码里的原始内容不一致了。
后期计划通过修改、简化官方的spec文件,使自己创造的rpm包尽量和官方包保持一致。

5.2 命令笔记

  • 测试用户:id zabbix
  • 测试用户组:getent group zabbix
  • 清理目录:为重新创建rpm包做准备rm -rf BUILD/* && rm -rf BUILDROOT/* && rm -rf RPMS/*
posted @ 2025-11-12 20:38  virtualzzf  阅读(11)  评论(0)    收藏  举报