1 在Windows上构建Zabbix agent
概述
本节演示如何从源代码构建带或不带TLS的Zabbix Windows agent二进制文件
编译OpenSSL
以下步骤将帮助您在MS Windows 10(64位)系统上从源码编译OpenSSL。
- 在Windows机器上编译OpenSSL需要准备:
- C编译器(例如VS 2017 RC),
- NASM(https://www.nasm.us/),
- Perl(例如从http://strawberryperl.com/获取Strawberry Perl),
- Perl模块Text::Template(通过cpan Text::Template安装).
- 从https://www.openssl.org/获取OpenSSL源码。本文使用OpenSSL 1.1.1版本。
- 解压OpenSSL源码,例如解压到E:\openssl-1.1.1目录。
- 打开命令行窗口,例如VS 2017 RC的x64 Native Tools Command Prompt。
- 进入OpenSSL源码目录,例如E:\openssl-1.1.1。
- 验证NASM是否可用:
e:\openssl-1.1.1> nasm --version NASM version 2.13.01 compiled on May 1 2017
- 验证NASM是否可用:
-
配置OpenSSL,用于
example:
e:\openssl-1.1.1> perl E:\openssl-1.1.1\Configure VC-WIN64A no-shared no-capieng no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method --api=1.1.0 --prefix=C:\OpenSSL-Win64-111-static --openssldir=C:\OpenSSL-Win64-111-static
请确保撤销非管理员用户对OpenSSL安装目录(C:\OpenSSL-Win64-111-static)的写入权限。否则,Zabbix agent会从可能被非特权用户修改的路径加载SSL设置,导致潜在的安全漏洞。
- 注意'no-shared'选项:如果使用'no-shared',则OpenSSL静态库libcrypto.lib和libssl.lib将具备'自包含性',生成的Zabbix二进制文件将内置OpenSSL,无需外部OpenSSL DLL。优点:Zabbix二进制文件可以复制到没有OpenSSL库的其他Windows机器上。缺点:当新的OpenSSL修复version发布时,需要重新编译和重新安装Zabbix agent。
- 如果不使用'no-shared',则静态库libcrypto.lib和libssl.lib将在运行时使用OpenSSL DLL。优点:当新的OpenSSL修复version发布时,可能只需升级OpenSSL DLL而无需重新编译Zabbix agent。缺点:将Zabbix agent复制到其他机器时也需要复制OpenSSL DLL。
- 编译OpenSSL,run测试,安装:
e:\openssl-1.1.1> nmake e:\openssl-1.1.1> nmake test ... All tests successful. Files=152, Tests=1152, 501 wallclock secs ( 0.67 usr + 0.61 sys = 1.28 CPU) Result: PASS e:\openssl-1.1.1> nmake install_sw'install_sw'仅安装软件组件(即库文件和头文件,不包括文档)。如需完整安装,请使用"nmake install"。
- 编译OpenSSL,run测试,安装:
- 如果不使用'no-shared',则静态库libcrypto.lib和libssl.lib将在运行时使用OpenSSL DLL。优点:当新的OpenSSL修复version发布时,可能只需升级OpenSSL DLL而无需重新编译Zabbix agent。缺点:将Zabbix agent复制到其他机器时也需要复制OpenSSL DLL。
编译PCRE
- 下载PCRE或PCRE2(Zabbix 6.0起支持)库(https://pcre.org/)。
- 解压到目录E:\pcre2-10.39。
- 从https://cmake.org/download/安装CMake,安装过程中选择:并确保cmake\bin在您的路径中(测试版本version 3.9.4)。
- 创建一个新的空构建目录,最好是源代码目录的子目录。例如,E:\pcre2-10.39\build。
- 打开命令行窗口,例如VS 2017的x64 Native Tools Command Prompt,并从该shell环境run cmake-gui。不要尝试从Windows开始菜单启动Cmake,这可能导致错误。
- 分别输入E:\pcre2-10.39和E:\pcre2-10.39\build作为源代码和构建目录。
- 点击"Configure"按钮。
- 在指定此项目的生成器时选择"NMake Makefiles"。
- 创建一个新的空安装目录。例如,E:\pcre2-10.39-install。
- GUI将列出多个配置选项。确保选择以下选项:
- PCRE_SUPPORT_UNICODE_PROPERTIES ON
- PCRE_SUPPORT_UTF ON
- CMAKE_INSTALL_PREFIX E:\pcre2-10.39-install
- 再次点击"Configure"。相邻的"Generate"按钮现在应该处于活动状态。
- 点击"Generate"。
- 如果出现错误,建议在尝试重复CMake构建过程之前delete CMake缓存。在CMake GUI中,可以通过选择"File > Delete Cache"来删除缓存。
- 构建目录现在应包含一个可用的构建系统 - Makefile。
- 打开命令行窗口,例如VS 2017的x64 Native Tools Command Prompt,并导航到上述Makefile。
- 运行NMake命令:
E:\pcre2-10.39\build> nmake install
编译Zabbix
以下步骤将帮助您在MS Windows 10(64位)系统上从源代码编译Zabbix。无论是否启用TLS支持,编译Zabbix的主要区别仅体现在第4步。
- 在Linux机器上检出源代码:
$ git clone https://git.zabbix.com/scm/zbx/zabbix.git $ cd zabbix $ ./bootstrap.sh $ ./configure --enable-agent --enable-ipv6 --prefix=`pwd` $ make dbschema $ make dist - 将生成的压缩包(例如zabbix-4.4.0.tar.gz)复制到Windows机器并解压。
- 假设源代码位于e:\zabbix-4.4.0目录。打开命令行窗口(例如VS 2017 RC的x64 Native Tools Command Prompt),进入E:\zabbix-4.4.0\build\win32\project目录。
- 编译zabbix_get、zabbix_sender和zabbix_agent:
- 不启用TLS:
E:\zabbix-4.4.0\build\win32\project> nmake /K PCREINCDIR=E:\pcre2-10.39-install\include PCRELIBDIR=E:\pcre2-10.39-install\lib - 启用TLS:
E:\zabbix-4.4.0\build\win32\project> nmake /K -f Makefile_get TLS=openssl TLSINCDIR=C:\OpenSSL-Win64-111-static\include TLSLIBDIR=C:\OpenSSL-Win64-111-static\lib PCREINCDIR=E:\pcre2-10.39-install\include PCRELIBDIR=E:\pcre2-10.39-install\lib E:\zabbix-4.4.0\build\win32\project> nmake /K -f Makefile_sender TLS=openssl TLSINCDIR="C:\OpenSSL-Win64-111-static\include TLSLIBDIR="C:\OpenSSL-Win64-111-static\lib" PCREINCDIR=E:\pcre2-10.39-install\include PCRELIBDIR=E:\pcre2-10.39-install\lib E:\zabbix-4.4.0\build\win32\project> nmake /K -f Makefile_agent TLS=openssl TLSINCDIR=C:\OpenSSL-Win64-111-static\include TLSLIBDIR=C:\OpenSSL-Win64-111-static\lib PCREINCDIR=E:\pcre2-10.39-install\include PCRELIBDIR=E:\pcre2-10.39-install\lib
- 不启用TLS:
- 新生成的二进制文件位于e:\zabbix-4.4.0\bin\win64目录。由于OpenSSL是以'no-shared'选项编译的,Zabbix二进制文件已内置OpenSSL,可复制到未安装OpenSSL的其他机器上运行。
使用LibreSSL编译Zabbix
该过程与使用OpenSSL编译类似,但需要对位于build\win32\project目录中的文件进行小幅修改:
- 在Makefile_tls delete
/DHAVE_OPENSSL_WITH_PSK中,即查找:
and replace it with
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
```- 在Makefile_common.inc中添加`/NODEFAULTLIB:LIBCMT`,即查找:
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb /NODEFAULTLIB:LIBCMT
[comment]: # ({/f29d84a2-c8fe4039})