在 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 构建 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。
如果您需要从原始源码仓库生成源代码归档(例如,为了应用自定义补丁或基于最新源代码进行构建),请在已安装 Go 的 Linux 机器上运行以下命令(配置 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 可加载插件。