1 在 Windows 上构建 Zabbix agent

概述

本页面介绍如何在 Windows 10(64 位)上从源代码构建 Zabbix agent。

这些说明适用于支持 Visual Studio 2022 的 Windows 版本。

构建 Zabbix agent 需要:

  • C 编译器(包含在 Visual Studio 2022 的 Build Tools 中)
  • OpenSSL(用于 Zabbix 的加密功能)
  • PCRE2(Perl 兼容正则表达式;用于 Zabbix 的正则表达式模式匹配功能)

您可以使用以下任一方法构建 Zabbix agent:

  • 使用 vcpkg——使用 C++ 软件包管理器简化依赖项管理的自动化方法。
  • 手动构建——在编译 agent 之前手动安装所有依赖项的方法。

根据您的监控需求,可能还需要其他库。 有关更多信息,请参阅要求

开始构建过程前,请注意以下事项:

  • 要执行命令,请使用“x64 Native Tools Command Prompt”(包含在 Visual Studio 2022 的 Build Tools 中),并由具有足够权限向受保护文件夹写入内容的用户启动。
  • 建议在 C:\Zabbix 创建工作目录,用于存放所有源文件和构建文件夹。 但是,编译后的组件应安装在 C:\Program Files\Zabbix\x64 中。

使用 vcpkg 构建 Zabbix agent

本节介绍如何使用 vcpkg 构建 Zabbix agent。vcpkg 是一个可简化依赖项管理以及与 C++ 项目集成的软件包管理器。

1. 下载并安装 Visual Studio 2022 生成工具。 安装过程中,请确保选择 使用 C++ 的桌面开发 工作负载,其中包含使用 vcpkg 构建 agent 所需的工具:

  • C 编译器(Microsoft Visual C++)
  • NMake 命令行工具
  • vcpkg 软件包管理器
  • “x64 Native Tools Command Prompt”

2. 以管理员权限打开 cmd.exe,初始化 vcpkg,并安装构建 Zabbix agent 所需的依赖项(请注意,这可能需要一些时间):

cd C:\Zabbix
vcpkg new --application
vcpkg add port pcre2
vcpkg add port openssl
vcpkg install --triplet x64-windows-static --x-install-root="C:\Program Files\Zabbix\x64"

3. 下载 Zabbix 源代码存档,并将其解压到 C:\Zabbix\zabbix-7.4.0

4. 导航到 Zabbix 构建目录(C:\Zabbix\zabbix-7.4.0\build\win32\project),并创建以下 build.bat 脚本;确保正确指定 OpenSSL 和 PCRE2 的安装目录:

:: Set vcpkg installation path:
set vcpkg=C:\Program Files\Zabbix\x64\x64-windows-static

:: Run the build process:
nmake -f Makefile CPU=AMD64 ^
    PCRE2INCDIR="%vcpkg%\include" ^
    PCRE2LIBDIR="%vcpkg%\lib" ^
    TLS=openssl ^
    TLSINCDIR="%vcpkg%\include" ^
    TLSLIBDIR="%vcpkg%\lib" ^
    LIBS="$(LIBS) Crypt32.lib" ^
    all

5. 打开“x64 Native Tools Command Prompt”,执行脚本以编译 Zabbix agent:

cd C:\Zabbix\zabbix-7.4.0\build\win32\project
build.bat

如果打开的是其他命令提示符,请先初始化 Visual Studio 构建环境:

"%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
cd C:\Zabbix\zabbix-7.4.0\build\win32\project
build.bat

包含空格的路径必须用引号括起来。

编译完成后,Zabbix 组件二进制文件将位于 C:\Zabbix\zabbix-7.4.0\bin\win64。 Zabbix agent 配置文件位于 C:\Zabbix\zabbix-7.4.0\conf

要运行 agent,请将 zabbix_agent.exe 及其配置文件复制到专用文件夹(例如 C:\Zabbix\agent),然后运行 agent:

mkdir C:\Zabbix\agent
copy C:\Zabbix\zabbix-7.4.0\bin\win64\zabbix_agent.exe C:\Zabbix\agent\
copy C:\Zabbix\zabbix-7.4.0\conf\zabbix_agent.win.conf C:\Zabbix\agent\

C:\Zabbix\agent\zabbix_agent.exe -c C:\Zabbix\agent\zabbix_agent.win.conf

手动构建 Zabbix agent

这种构建 Zabbix agent 的方法适用于需要完全控制构建环境的用户,或处于受限环境中而无法使用 vcpkg的用户。

本节包含手动构建 Zabbix agent 的说明,包括安装所需的构建工具和依赖项(Perl、OpenSSL、PCRE2),然后编译 agent。

安装构建工具

1. 下载并安装 Visual Studio 2022 的生成工具。 安装过程中,请确保选择 使用 C++ 的桌面开发 工作负载,其中包含手动构建 agent 所需的工具:

  • C 编译器(Microsoft Visual C++)
  • NMake 命令行工具
  • “x64 Native Tools Command Prompt”
安装 OpenSSL

要在不支持 TLS 的情况下编译 Zabbix agent,请继续参阅安装 PCRE2部分。

1. 下载并安装 Strawberry Perl(提供 MSI 安装程序)。 安装期间,请确保将 C:\Zabbix\Strawberry 指定为安装文件夹。

2. 安装 Text::Template Perl 模块:

cpanm Text::Template

3. 验证 Netwide Assembler(NASM;编译 OpenSSL 所需)是否已在安装 Strawberry Perl 期间完成编译:

nasm -v
# NASM version 2.16.01 compiled on May  3 2024

如果 NASM 未完成编译,请手动安装。 有关更多信息,请参阅 NASM 文档

4. 下载 OpenSSL 源代码存档,并将其解压到 C:\Zabbix\openssl-3.5.0

5. 导航到解压后的目录并配置 OpenSSL,例如:

cd C:\Zabbix\openssl-3.5.0
perl Configure VC-WIN64A no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method --api=1.1.0 --prefix="C:\Program Files\Zabbix\x64\OpenSSL" --openssldir="C:\Program Files\Zabbix\x64\OpenSSL"

如果在 Windows 上编译 Zabbix agent 时为 OpenSSL 选择自定义目录(例如 C:\zabbixC:\openssl-64bit),请确保撤销非管理员用户对该目录的写入权限。 否则,agent 将从可由非特权用户修改的路径加载 SSL 设置,从而可能导致安全漏洞。

  • no-shared 选项会使 libcrypto.lib 和 libssl.lib OpenSSL 静态库自包含,因此 Zabbix 二进制文件无需外部 DLL 即可包含 OpenSSL。 这意味着可以将 Zabbix 二进制文件复制到其他 Windows 计算机,而无需 OpenSSL 库;但是,发布新的 OpenSSL bugfix 版本时,需要重新编译 Zabbix agent。
  • 不使用 no-shared 选项时,Zabbix 在运行时依赖 OpenSSL DLL。 这意味着更新 OpenSSL 可能无需重新编译 Zabbix agent;但是,将其复制到其他计算机时,也必须复制 OpenSSL DLL。

有关其他 OpenSSL 配置选项的更多信息,请参阅 OpenSSL 文档

6. 编译 OpenSSL 并运行测试(请注意,这可能需要一些时间):

请在没有管理员权限的情况下运行测试;否则可能导致意外结果或安全风险。 如果某些测试失败,请参阅 OpenSSL 文档进行故障排除。

nmake
nmake test
...
All tests successful.
Files=325, Tests=3101, 822 wallclock secs ( 4.81 usr +  0.81 sys =  5.62 CPU)
Result: PASS

7. 安装 OpenSSL:

nmake install

如果只需安装软件组件(库、头文件,但不包括文档),可以使用 nmake install_sw

安装 PCRE2

1. 下载并安装 CMake(提供 MSI 安装程序)。 在安装过程中,请确保将安装文件夹指定为 C:\Zabbix\CMake,并选择 Add CMake to the PATH environment variable 选项。

2. 下载 PCRE2 源代码归档,并将其解压到 C:\Zabbix\pcre2-10.45

3. 在解压后的 PCRE2 目录中创建 build 目录,并进入该目录:

mkdir C:\Zabbix\pcre2-10.45\build
cd C:\Zabbix\pcre2-10.45\build

4. 配置 PCRE2:

cmake -G "NMake Makefiles" -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="C:\Program Files\Zabbix\x64\PCRE2" "C:\Zabbix\pcre2-10.45"

如果发生任何错误,建议在尝试重新执行 CMake 构建过程之前删除 CMake 缓存。 缓存(CMakeCachecache.txt)位于解压后的 PCRE2 目录中的 build 目录内。

5. 使用 NMake 构建 PCRE2:

nmake

6. 安装 PCRE2:

cmake --install .
编译 Zabbix agent

1. 下载 Zabbix 源代码归档,并将其解压到 C:\Zabbix\zabbix-7.4.0

如果需要从原始源代码仓库生成源代码归档(例如,应用自定义补丁或从最新源代码构建),请在 Linux 计算机上运行以下命令:

git clone https://git.zabbix.com/scm/zbx/zabbix.git
cd zabbix
./bootstrap.sh
./configure
make dist

这将创建一个源代码归档,之后可以将其复制到 Windows 计算机。

2. 导航到 Zabbix 构建目录,打开“x64 Native Tools Command Prompt”,然后编译 Zabbix agent(或其他组件);请确保正确指定 OpenSSL 和 PCRE2 的安装目录:

# 如果打开的是其他命令提示符,请先初始化 Visual Studio 构建环境:
"%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64

cd C:\Zabbix\zabbix-7.4.0\build\win32\project

# 支持 TLS:
nmake /K -f Makefile_agent PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib" TLS=openssl TLSINCDIR="C:\Program Files\Zabbix\x64\OpenSSL\include" TLSLIBDIR="C:\Program Files\Zabbix\x64\OpenSSL\lib"
nmake /K -f Makefile_get PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib" TLS=openssl TLSINCDIR="C:\Program Files\Zabbix\x64\OpenSSL\include" TLSLIBDIR="C:\Program Files\Zabbix\x64\OpenSSL\lib"
nmake /K -f Makefile_sender PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib" TLS=openssl TLSINCDIR="C:\Program Files\Zabbix\x64\OpenSSL\include" TLSLIBDIR="C:\Program Files\Zabbix\x64\OpenSSL\lib"

# 不支持 TLS:
nmake /K -f Makefile_agent PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib"
nmake /K -f Makefile_get PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib"
nmake /K -f Makefile_sender PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib"

包含空格的路径必须使用引号括起来。

编译完成后,Zabbix 组件二进制文件将位于 C:\Zabbix\zabbix-7.4.0\bin\win64

Zabbix agent 配置文件位于 C:\Zabbix\zabbix-7.4.0\conf

要运行 agent,请将 zabbix_agent.exe 及其配置文件复制到专用文件夹(例如 C:\Zabbix\agent),然后运行 agent:

mkdir C:\Zabbix\agent
copy C:\Zabbix\zabbix-7.4.0\bin\win64\zabbix_agentd.exe C:\Zabbix\agent\
copy C:\Zabbix\zabbix-7.4.0\conf\zabbix_agentd.win.conf C:\Zabbix\agent\

C:\Zabbix\agent\zabbix_agentd.exe -c C:\Zabbix\agent\zabbix_agentd.win.conf -f