本节展示了如何从源代码构建带有或不带有TLS的Zabbix Windows agent二进制文件。
以下步骤将帮助您在 MS Windows 10(64 位)上从源代码编译 OpenSSL。
在继续之前,请检查 Windows 计算机是否具有:
从https://www.openssl.org/获取 OpenSSL 源代码。本示例使用 OpenSSL 1.1.1。
解压缩 OpenSSL 源代码,例如,到 E:\openssl-1.1.1。
打开命令行窗口,例如 VS 2017 RC 的 x64 Native Tools 命令提示符。
进入 OpenSSL 源代码目录(在本教程中为 E:\\openssl-1.1.1
),并验证是否可以找到 NASM:
e:\openssl-1.1.1> nasm --version
NASM version 2.13.01 compiled on May 1 2017
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
e:\openssl-1.1.1> nmake
e:\openssl-1.1.1> nmake test
...
所有测试成功。
文件=152,测试=1152,501 墙钟秒(0.67 usr + 0.61 sys = 1.28 CPU)
结果:通过
e:\openssl-1.1.1> nmake install_sw
install_sw
仅安装软件组件(即库、头文件,但不包括文档)。 要安装所有内容,请使用 nmake install
。
下载 PCRE 或 PCRE2 库 (https://pcre.org/).
解压缩到目录 E:\pcre2-10.39.
从 https://cmake.org/download/ 安装 CMake,在安装过程中选择:并确保 cmake\bin 在您的路径中(测试版本 3.9.4)。
创建一个新的、空的构建目录,最好是源目录的子目录。 例如,E:\pcre2-10.39\build。
打开命令行窗口,例如 VS 2017 的 x64 本机工具命令提示符,从该 shell 环境运行 cmake-gui。 不要尝试从 Windows 开始菜单启动 Cmake,因为这可能会导致错误。
分别输入 E:\pcre2-10.39 和 E:\pcre2-10.39\build 作为源目录和构建目录。
点击“配置”按钮。
在为该项目指定生成器时,选择“NMake Makefiles”。
创建一个新的、空的安装目录。例如,E:\pcre2-10.39-install。
GUI 将列出几个配置选项。确保选中以下选项:
再次点击“配置”。旁边的“生成”按钮现在应该是活动的。
点击“生成”。
如果出现任何错误,建议在尝试重复 CMake 构建过程之前删除 CMake 缓存。 在 CMake GUI 中,可以通过选择“文件 > 删除缓存”来删除缓存。
构建目录现在应该包含一个可用的构建系统 - Makefile。
打开命令行窗口,例如 VS 2017 的 x64 本机工具命令提示符,然后导航到上面提到的 Makefile。
运行 NMake 命令:
E:\pcre2-10.39\build> nmake install
以下步骤将帮助您在 MS Windows 10(64位)上从源代码编译 Zabbix。 编译 Zabbix 时,无论是否包含 TLS 支持,唯一的显著差异在于步骤 4。
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
在 Windows 机器上复制并解压缩归档文件,例如 zabbix-7.0.0.tar.gz
。
假设源代码位于 E:\zabbix-7.0.0。打开命令行窗口,例如 VS 2017 RC 的 x64 Native Tools Command Prompt。进入:
E:\\zabbix-7.0.0\\build\\win32\\project
不包含 TLS:
E:\zabbix-7.0.0\build\win32\project> nmake /K PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
包含 TLS:
E:\zabbix-7.0.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 PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
E:\zabbix-7.0.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" PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
E:\zabbix-7.0.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 PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
该过程与使用OpenSSL编译类似,但你需要对位于build\win32\project
目录下的文件进行微小的修改:
/DHAVE_OPENSSL_WITH_PSK
要做到这一点,找到:
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /DHAVE_OPENSSL_WITH_PSK
并将其替换为
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
/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