本节演示如何从源代码构建带或不带TLS的Zabbix Windows agent二进制文件
以下步骤将帮助您在MS Windows 10(64位)系统上从源码编译OpenSSL。
在Windows机器上编译OpenSSL需要准备:
从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。
e:\openssl-1.1.1> nasm --version NASM version 2.13.01 compiled on May 1 2017
配置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设置,导致潜在的安全漏洞。
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"。E:\pcre2-10.39\build> nmake install
以下步骤将帮助您在MS Windows 10(64位)系统上从源代码编译Zabbix。无论是否启用TLS支持,编译Zabbix的主要区别仅体现在第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
E:\zabbix-4.4.0\build\win32\project> nmake /K 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_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
该过程与使用OpenSSL编译类似,但需要对位于build\win32\project
目录中的文件进行小幅修改:
/DHAVE_OPENSSL_WITH_PSK
中,即查找:CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /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 ```