在 Windows 上构建 Zabbix agent 2

概述

本页演示如何在 Windows 10(64 位或 32 位)上从源码构建 Zabbix agent 2。

32 位和 64 位版本都可以在 64 位平台上构建,但在 32 位平台上只能构建 32 位版本。

构建 Zabbix agent 2 需要:

  • MinGW 构建工具
  • Go 编程语言
  • OpenSSL(用于 Zabbix 中的加密功能)
  • PCRE2(Perl Compatible Regular Expressions;用于 Zabbix 中的正则表达式模式匹配功能)

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

  • 使用 vcpkg——一种自动化方法,通过 C++ 包管理器简化依赖管理。
  • 手动构建——一种手动方法,需要在编译 agent 之前安装所有依赖项。

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

  • 要执行命令,请使用命令提示符,并由具有足够权限可写入受保护文件夹的用户启动。但是,在安装 OpenSSLPCRE2 时,请使用 MSYS2 终端。
  • 建议在 C:\Zabbix 中为所有源文件和构建文件夹创建一个工作目录。但是,编译后的组件应安装到 C:\Zabbix\x64(对于 32 位构建,则为 C:\Zabbix\x86)。

使用 vcpkg 构建 Zabbix agent 2

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

1. 下载并安装 Build Tools for Visual Studio 2022
安装过程中,请确保选择 Desktop development with C++ 工作负载,其中包含 vcpkg 包管理器。

2. 下载并安装 Go(提供 MSI 安装程序)。
安装过程中,请确保将 C:\Zabbix\Go 指定为安装目录。

3. 下载使用 Microsoft Visual C 运行时库的 MinGW 发行版;例如:

  • 对于 64 位构建:x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z
  • 对于 32 位构建:i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z

然后,将其解压到 C:\Zabbix\mingw64(32 位构建则解压到 C:\Zabbix\mingw32)。

4. 初始化 vcpkg 并安装构建 Zabbix agent 2 所需的依赖项(请注意,这可能需要一些时间):

cd C:\Zabbix

set PATH=%PATH%;"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\vcpkg"
vcpkg new --application
vcpkg add port pcre2
vcpkg add port libiconv
vcpkg add port openssl

# For 64-bit builds:
set PATH=C:\Zabbix\mingw64\bin;%PATH%
vcpkg install --triplet x64-mingw-static --x-install-root=x64

# For 32-bit builds:
set PATH=C:\Zabbix\mingw32\bin;%PATH%
vcpkg install --triplet x86-mingw-static --x-install-root=x86

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

6. 进入 Zabbix 构建目录(C:\Zabbix\zabbix-8.0.0\build\mingw),并创建以下 build.bat 脚本:

  • 对于 64 位构建:
:: Add MinGW and Go to the system `PATH` variable for the current session:
set PATH=C:\Zabbix\mingw64\bin;%PATH%
set PATH=C:\Zabbix\Go\bin;%PATH%

:: Set vcpkg installation path:
set vcpkg="C:\Zabbix\x64\x64-mingw-static"

:: Set linker flags for Crypt32 library:
SET CGO_LDFLAGS="-lCrypt32"

:: Run the build process:
mingw32-make GOFLAGS="-buildvcs=false" ARCH=AMD64 ^
    PCRE2="%vcpkg%" ^
    OPENSSL="%vcpkg%" ^
    all
  • 对于 32 位构建:
:: Add MinGW and Go to the system `PATH` variable for the current session:
set PATH=C:\Zabbix\mingw32\bin;%PATH%
set PATH=C:\Zabbix\Go\bin;%PATH%

:: Set vcpkg installation path:
set vcpkg="C:\Zabbix\x86\x86-mingw-static"

:: Set linker flags for Crypt32 library:
SET CGO_LDFLAGS="-lCrypt32"

:: Run the build process:
mingw32-make GOFLAGS="-buildvcs=false" ARCH=x86 ^
    PCRE2="%vcpkg%" ^
    OPENSSL="%vcpkg%" ^
    all

7. 执行以下脚本以编译 Zabbix agent 2:

build.bat

编译完成后,Zabbix agent 2 二进制文件将位于 C:\Zabbix\zabbix-8.0.0\bin\win64(64 位构建)或 C:\Zabbix\zabbix-8.0.0\bin\win32(32 位构建)。
Zabbix agent 2 配置文件位于 C:\Zabbix\zabbix-8.0.0\src\go\conf

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

mkdir C:\Zabbix\agent2

# For 64-bit builds:
copy C:\Zabbix\zabbix-8.0.0\bin\win64\zabbix_agent2.exe C:\Zabbix\agent2\

# For 32-bit builds:
copy C:\Zabbix\zabbix-8.0.0\bin\win32\zabbix_agent2.exe C:\Zabbix\agent2\

copy C:\Zabbix\zabbix-8.0.0\src\go\conf\zabbix_agent2.win.conf C:\Zabbix\agent2\
xcopy /E /I C:\Zabbix\zabbix-8.0.0\src\go\conf\zabbix_agent2.d C:\Zabbix\agent2\zabbix_agent2.d\

C:\Zabbix\agent2\zabbix_agent2.exe -c C:\Zabbix\agent2\zabbix_agent2.win.conf

如有需要,可继续编译 Zabbix agent 2 的可加载插件

编译 Zabbix agent 2 可加载插件

1. 下载与您的 Zabbix agent 2 版本匹配的 Zabbix 插件源码(例如 zabbix-agent2-plugin-postgresql-8.0.0.tar.gz),并将其解压到 C:\Zabbix

安装插件前,请先查看其 README 文件。 其中可能包含特定要求和安装说明。

2. 进入解压后的插件目录并编译插件:

cd C:\Zabbix\zabbix-agent2-plugin-ember-plus-8.0.0

# 64 位构建:
mingw32-make ARCH=AMD64

# 32 位构建:
mingw32-make ARCH=x86

编译完成后,Zabbix agent 2 插件二进制文件及其配置文件将位于同一插件目录中。

插件可执行文件可以放置在任何位置,只要 Zabbix agent 2 能够加载它即可。 在插件配置文件中指定插件二进制文件的路径,例如,对于 PostgreSQL 插件,在 postgresql.conf 中设置:

Plugins.PostgreSQL.System.Path=/path/to/executable/zabbix-agent2-plugin-postgresql

必须在 Zabbix agent 2 配置文件的 Include 参数中指定插件配置文件的路径:

Include=/path/to/plugin/configuration/file/postgresql.conf

有关配置插件的更多详细信息,请继续参阅 setup

手动构建 Zabbix agent 2

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

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

设置构建工具

1. 下载并安装 MSYS2(提供 MSI 安装程序)。 在安装过程中,请务必将 C:\Zabbix\msys64 指定为安装目录。

2. 下载并安装 Go(提供 MSI 安装程序;请参见当前受支持的 Go versions)。 在安装过程中,请务必将 C:\Zabbix\Go 指定为安装目录。

3. 下载使用 Microsoft Visual C 运行时库的 MinGW 发行版;例如:

  • 对于 64 位构建:x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z
  • 对于 32 位构建:i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z

然后,将其解压到 C:\Zabbix\mingw64(对于 32 位构建,则解压到 C:\Zabbix\mingw32)。

安装 OpenSSL

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

1. 以管理员权限打开 MSYS2 MSYS 终端,并运行以下命令:

pacman -S perl-Locale-Maketext-Simple
pacman -S nasm
pacman -S make
pacman -S cmake

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

3. 进入解压后的 OpenSSL 目录,并创建以下 build.sh 脚本:

  • 用于 64 位构建:
#!/usr/bin/env bash

export PATH="/c/Zabbix/mingw64/bin:$PATH"
export d="/c/Zabbix/x64/OpenSSL-Win64-350-static"

perl Configure mingw64 no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method thread_scheme=winthreads --api=1.1.0 --prefix=$d --openssldir=$d

make
make install
  • 用于 32 位构建:
#!/usr/bin/env bash

export PATH="/c/Zabbix/mingw32/bin:$PATH"
export d="/c/Zabbix/x86/OpenSSL-Win64-350-static"

perl Configure mingw no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method thread_scheme=winthreads --api=1.1.0 --prefix=$d --openssldir=$d

make
make install

请确保撤销非管理员用户对 C:\Zabbix\x64\OpenSSL-Win64-350-static 目录的写入权限。
否则,agent 将从可被非特权用户修改的路径加载 SSL 设置,从而导致潜在的安全漏洞。

  • no-shared 选项会使 libcrypto.lib 和 libssl.lib 这两个 OpenSSL 静态库自包含,因此 Zabbix 二进制文件会包含 OpenSSL,而无需外部 DLL。 这意味着 Zabbix 二进制文件可以在没有 OpenSSL 库的情况下复制到其他 Windows 机器上;但是,当发布新的 OpenSSL 缺陷修复版本时,需要重新编译 Zabbix agent。
  • 如果不使用 no-shared 选项,Zabbix 会在运行时依赖 OpenSSL DLL。 这意味着 OpenSSL 更新时可能不需要重新编译 Zabbix agent;但是,在将其复制到其他机器时,也必须一并复制 OpenSSL DLL。

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

4. 通过执行该脚本来配置并安装 OpenSSL(请注意,这可能需要一些时间):

cd /c/Zabbix/openssl-3.5.0
./build.sh
安装 PCRE2

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

2. 以管理员权限打开 MSYS2 MSYS 终端。 然后,在已解压的 PCRE2 目录中创建一个 build 目录并进入该目录:

mkdir /c/Zabbix/pcre2-10.45/build
cd /c/Zabbix/pcre2-10.45/build

3. 配置 PCRE2:

# For 64-bit builds:
export PATH="/c/Zabbix/mingw64/bin:$PATH"
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-O2 -g" -DCMAKE_INSTALL_PREFIX="/c/Zabbix/x64/PCRE2" ..

# For 32-bit builds:
export PATH="/c/Zabbix/mingw32/bin:$PATH"
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-m32 -O2 -g" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-mi386pe" -DCMAKE_INSTALL_PREFIX="/c/Zabbix/x86/PCRE2" ..

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

4. 安装 PCRE2:

make install
编译 Zabbix agent 2

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

如果您需要从原始源码仓库生成源代码归档(例如,为了应用自定义补丁或基于最新源代码进行构建),请在已安装 GoLinux 机器上运行以下命令(配置 Zabbix agent 2 时需要 Go):

git clone https://git.zabbix.com/scm/zbx/zabbix.git
cd zabbix
./bootstrap.sh
./configure --enable-agent2 --enable-ipv6 --prefix=`pwd`
make dist

这将创建一个源代码归档,随后可将其复制到 Windows 机器上。

2. 以管理员权限打开命令提示符。 然后,导航到 Zabbix 构建目录并编译 Zabbix agent; 请确保正确指定 OpenSSL 和 PCRE2 的安装目录:

  • 对于 64 位构建:
cd C:\Zabbix\zabbix-8.0.0\build\mingw
set PATH=C:\Zabbix\mingw64\bin;%PATH%
mklink /D C:\Zabbix\x64\OpenSSL-Win64-350-static\lib C:\Zabbix\x64\OpenSSL-Win64-350-static\lib64

# 启用 TLS 支持:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2" OPENSSL="C:\Zabbix\x64\OpenSSL-Win64-350-static"

# 不启用 TLS 支持:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2"
  • 对于 32 位构建:
cd C:\Zabbix\zabbix-8.0.0\build\mingw
set PATH=C:\Zabbix\mingw32\bin;%PATH%

# 启用 TLS 支持:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2" OPENSSL="C:\Zabbix\x86\OpenSSL-Win64-350-static"

# 不启用 TLS 支持:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2"

编译完成后,Zabbix agent 2 二进制文件将位于 C:\Zabbix\zabbix-8.0.0\bin\win64(对于 32 位构建,则位于 C:\Zabbix\zabbix-8.0.0\bin\win32)。 Zabbix agent 2 配置文件位于 C:\Zabbix\zabbix-8.0.0\src\go\conf

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

mkdir C:\Zabbix\agent2
copy C:\Zabbix\zabbix-8.0.0\bin\win64\zabbix_agent2.exe C:\Zabbix\agent2\
copy C:\Zabbix\zabbix-8.0.0\src\go\conf\zabbix_agent2.win.conf C:\Zabbix\agent2\
xcopy /E /I C:\Zabbix\zabbix-8.0.0\src\go\conf\zabbix_agent2.d C:\Zabbix\agent2\zabbix_agent2.d\

C:\Zabbix\agent2\zabbix_agent2.exe -c C:\Zabbix\agent2\zabbix_agent2.win.conf

如有需要,请继续参考编译 Zabbix agent 2 可加载插件