[comment]: # translation:outdated

[comment]: # ({87c5d8fd-1f267b18})
# 3 在Windows上安装Zabbix agent

[comment]: # ({/87c5d8fd-1f267b18})

[comment]: # ({bb7ef33c-2cee80d5})
#### 概述

本节演示如何从包含或不包含TLS的源代码安装Zabbix agent二进制文件(Windows)

[comment]: # ({/bb7ef33c-2cee80d5})

[comment]: # ({880eef0a-8b346a36})
#### 安装OpenSSL

以下步骤将帮助您从MS Windows 10（64位）上的源代码编译OpenSSL

1.  要安装OpenSSL，您将需要在Windows计算机上：
    1.  C compiler (e.g. VS 2017 RC),
    2.  NASM (<https://www.nasm.us/>),
    3.  Perl (e.g. Strawberry Perl from <http://strawberryperl.com/>),
    4.  Perl module Text::Template (cpan Text::Template).
2.  从https://www.openssl.org/获取OpenSSL源。 这里使用OpenSSL 1.1.1
3.  解压缩OpenSSL源，例如在E:\\openssl-1.1.1
4.  打开命令行窗口，例如 VS 2017 RC的x64本机工具命令提示符
5.  转到OpenSSL源目录，例如E:\\openssl-1.1.1
    1.  验证是否可以找到NASM:`e:\openssl-1.1.1> nasm --version
        NASM version 2.13.01 compiled on May  1 2017
        `
6.  例如，配置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
7.  编译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”

[comment]: # ({/880eef0a-8b346a36})

[comment]: # ({490e09c5-0c2d9aa0})
#### 编译PCRE

1.  从pcre.org 8.XX版下载PCRE库（自Zabbix
    4.0起为强制性库）；不是pcre2（<ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.zip>）
2.  提取到目录 *E:\\pcre-8.41*
3.  从https://cmake.org/download/安装CMake，在安装过程中选择：并确保cmake\\bin在您的路径上（经过测试的版本3.9.4）
4.  创建一个新的空构建目录，最好是源目录的子目录。 例如，
    *E:\\pcre-8.41\\build*
5.  打开命令行窗口，例如 VS
    2017的x64本机工具命令提示符，并从该Shell环境运行cmake-gui。
    不要尝试从Windows“开始”菜单启动Cmake，因为这可能会导致错误
6.  输入 *E:\\pcre-8.41* 和 *E:\\pcre-8.41\\build* 作为源目录
7.  点击“Configure”按钮
8.  为该项目指定生成器时，选择“ NMake Makefiles”
9.  创建一个新的空安装目录。 例如， *E:\\pcre-8.41-install*
10. 然后，GUI将列出几个配置选项。 确保选择以下选项：
    -   **PCRE\_SUPPORT\_UNICODE\_PROPERTIES** ON
    -   **PCRE\_SUPPORT\_UTF** ON
    -   **CMAKE\_INSTALL\_PREFIX** *E:\\pcre-8.41-install*
11. 再次点击“Configure”。 相邻的“Generate”按钮现在应该处于active状态。
12. 点击“Generate”
13. 如果发生错误，建议您在尝试重复CMake构建过程之前删除CMake缓存。
    在CMake GUI中，可以通过选择“File > Delete Cache”来删除缓存
14. 现在，构建目录应该包含一个可用的构建系统-Makefile
15. 打开命令行窗口，例如 VS
    2017的x64本机工具命令提示符，并导航到上面提到的Makefile
16. 运行NMake命令: `E:\pcre-8.41\build> nmake install
    `

[comment]: # ({/490e09c5-0c2d9aa0})

[comment]: # ({6b81633e-3c4efc37})
#### 编译Zabbix

以下步骤将帮助您从MS Windows 10（64位）上的源代码编译Zabbix。
当使用/不支持TLS编译Zabbix时，唯一的不同是在步骤4中

1.  在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
     ``
2.  复制并解压缩存档,例如 Windows机器上为zabbix-5.0.0.tar.gz
3.  假设源位于 e:\\zabbix-5.0.0中。 打开命令行窗口，例如 VS 2017
    RC的x64本机工具命令提示符。转到
    E:\\zabbix-5.0.0\\build\\win32\\project
4.  编译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
        `
5.  新的二进制文件位于e:\\zabbix-5.0.0\\bin\\win64中。
    由于OpenSSL是使用“
    no-shared”选项编译的，因此Zabbix二进制文件本身包含OpenSSL，并且可以将其复制到其他没有OpenSSL的计算机上

[comment]: # ({/6b81633e-3c4efc37})

[comment]: # ({5240b854-c8fe4039})
#### 使用LibreSSL编译Zabbix

该过程类似于使用OpenSSL进行编译，但是您需要对 `build\win32\project`
目录中的文件进行一些小的更改:

      * 在 ''Makefile_tls'' 中删除 ''/DHAVE_OPENSSL_WITH_PSK''. 即找到 <code>

CFLAGS = $(CFLAGS) /DHAVE\_OPENSSL
/DHAVE\_OPENSSL\_WITH\_PSK</code>并替换为
`CFLAGS =    $(CFLAGS) /DHAVE_OPENSSL`

      * 在 ''Makefile_common.inc'' 中添加 ''/NODEFAULTLIB:LIBCMT''. 即找到 <code>

/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO
/PDB:$(TARGETDIR)\\$(TARGETNAME).pdb</code>并替换为
`/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb /NODEFAULTLIB:LIBCMT`

[comment]: # ({/5240b854-c8fe4039})
