3 在Windows上安装Zabbix agent
概述
本节演示如何从包含或不包含TLS的源代码安装Zabbix agent二进制文件(Windows)
安装OpenSSL
以下步骤将帮助您从MS Windows 10(64位)上的源代码编译OpenSSL
要安装OpenSSL,您将需要在Windows计算机上:
C compiler (e.g. VS 2017 RC),
NASM (https://www.nasm.us/),
Perl (e.g. Strawberry Perl from http://strawberryperl.com/),
Perl module Text::Template (cpan Text::Template).
从https://www.openssl.org/获取OpenSSL源。 这里使用OpenSSL 1.1.1
解压缩OpenSSL源,例如在E:\openssl-1.1.1
打开命令行窗口,例如 VS 2017 RC的x64本机工具命令提示符
转到OpenSSL源目录,例如E:\openssl-1.1.1
验证是否可以找到NASM:
e:\openssl-1.1.1> nasm --version
NASM version 2.13.01 compiled on May 1 2017
例如,配置OpenSSL:
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
注意选项“ no-shared”:如果使用“ no-shared”,则OpenSSL静态库libcrypto.lib和libssl.lib将是“self-sufficient”,并且所产生的Zabbix二进制文件本身将包括OpenSSL,而无需外部 OpenSSL DLLs。 优点:Zabbix二进制文件无需OpenSSL库即可复制到其他Windows计算机。 缺点:发布新的OpenSSL错误修正版本时,Zabbix agent需要重新编译并重新安装
如果不使用“ no-shared”,则静态库libcrypto.lib和libssl.lib将在运行时使用OpenSSL DLLs。 优点:发布新的OpenSSL错误修正版本时,可能无需升级Zabbix agent即可仅升级OpenSSL DLLs。 缺点:将Zabbix agent复制到另一台计算机也需要复制OpenSSL DLLs
编译OpenSSL,运行安装,测试:
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”
编译PCRE
从pcre.org 8.XX版下载PCRE库(自Zabbix 4.0起为强制性库);不是pcre2(ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.zip)
提取到目录 E:\pcre-8.41
从https://cmake.org/download/安装CMake,在安装过程中选择:并确保cmake\bin在您的路径上(经过测试的版本3.9.4)
创建一个新的空构建目录,最好是源目录的子目录。 例如, E:\pcre-8.41\build
打开命令行窗口,例如 VS 2017的x64本机工具命令提示符,并从该Shell环境运行cmake-gui。 不要尝试从Windows“开始”菜单启动Cmake,因为这可能会导致错误
输入 E:\pcre-8.41 和 E:\pcre-8.41\build 作为源目录
点击“Configure”按钮
为该项目指定生成器时,选择“ NMake Makefiles”
创建一个新的空安装目录。 例如, E:\pcre-8.41-install
然后,GUI将列出几个配置选项。 确保选择以下选项:
PCRE_SUPPORT_UNICODE_PROPERTIES ON
PCRE_SUPPORT_UTF ON
CMAKE_INSTALL_PREFIX E:\pcre-8.41-install
再次点击“Configure”。 相邻的“Generate”按钮现在应该处于active状态。
点击“Generate”
如果发生错误,建议您在尝试重复CMake构建过程之前删除CMake缓存。 在CMake GUI中,可以通过选择“File > Delete Cache”来删除缓存
现在,构建目录应该包含一个可用的构建系统-Makefile
打开命令行窗口,例如 VS 2017的x64本机工具命令提示符,并导航到上面提到的Makefile
运行NMake命令:
E:\pcre-8.41\build> nmake install
编译Zabbix
以下步骤将帮助您从MS Windows 10(64位)上的源代码编译Zabbix。 当使用/不支持TLS编译Zabbix时,唯一的不同是在步骤4中
在Linux机器上,检查GIT的来源:
$ git clone https://git.zabbix.com/scm/zbx/zabbix.git
$ cd zabbix/
$ git checkout 5.0.1 -b 5.0.1 # replace 5.0.1 with the latest release available
$ ./bootstrap.sh
$ ./configure --enable-agent --enable-ipv6 --prefix=`pwd`
$ make dbschema
$ make dist
复制并解压缩存档,例如 Windows机器上为zabbix-5.0.0.tar.gz
假设源位于 e:\zabbix-5.0.0中。 打开命令行窗口,例如 VS 2017 RC的x64本机工具命令提示符。转到 E:\zabbix-5.0.0\build\win32\project
编译zabbix_get,zabbix_sender和zabbix_agent
不使用TLS:
E:\zabbix-5.0.0\build\win32\project> nmake /K PCREINCDIR=E:\pcre-8.41-install\include PCRELIBDIR=E:\pcre-8.41-install\lib
使用TLS:
E:\zabbix-5.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 PCREINCDIR=E:\pcre-8.41-install\include PCRELIBDIR=E:\pcre-8.41-install\lib
E:\zabbix-5.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" PCREINCDIR=E:\pcre-8.41-install\include PCRELIBDIR=E:\pcre-8.41-install\lib
E:\zabbix-5.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 PCREINCDIR=E:\pcre-8.41-install\include PCRELIBDIR=E:\pcre-8.41-install\lib
新的二进制文件位于e:\zabbix-5.0.0\bin\win64中。 由于OpenSSL是使用“ no-shared”选项编译的,因此Zabbix二进制文件本身包含OpenSSL,并且可以将其复制到其他没有OpenSSL的计算机上
使用LibreSSL编译Zabbix
该过程类似于使用OpenSSL进行编译,但是您需要对 build\win32\project
目录中的文件进行一些小的更改:
在
Makefile_tls
中删除/DHAVE_OPENSSL_WITH_PSK
. 即找到CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /DHAVE_OPENSSL_WITH_PSK
并替换为
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