This is a translation of the original English documentation page. Help us make it better.

1 Zabbix-agent bouwen op Windows

Overzicht

Dit gedeelte laat zien hoe je Zabbix Windows-agent binairies kunt compileren vanuit bronnen met of zonder TLS.

Building Zabbix agent with vcpkg

This section contains instructions for building Zabbix agent with vcpkg, a package manager that simplifies dependency management and integration with C++ projects.

1. Download and install Build Tools for Visual Studio 2022. During installation, make sure to select the Desktop development with C++ workload, which includes the tools required for building the agent with vcpkg:

  • C compiler (Microsoft Visual C++)
  • NMake command-line tool
  • vcpkg package manager
  • x64 Native Tools Command Prompt

2. Initialize vcpkg and install the dependencies required for building Zabbix agent (note that this may take some time):

cd C:\Zabbix
       vcpkg new --application
       vcpkg add port pcre2
       vcpkg add port openssl
       vcpkg install --triplet x64-windows-static --x-install-root="C:\Program Files\Zabbix\x64"

3. Download the Zabbix source archive and extract it to C:\Zabbix\zabbix-7.0.0.

4. Navigate to the Zabbix build directory (C:\Zabbix\zabbix-7.0.0\build\win32\project) and create the following build.bat script; make sure to correctly specify the directories where OpenSSL and PCRE2 are installed:

:: Set vcpkg installation path:
       set vcpkg=C:\Program Files\Zabbix\x64\x64-windows-static
       
       :: Run the build process:
       nmake -f Makefile CPU=AMD64 ^
           PCRE2INCDIR="%vcpkg%\include" ^
           PCRE2LIBDIR="%vcpkg%\lib" ^
           TLS=openssl ^
           TLSINCDIR="%vcpkg%\include" ^
           TLSLIBDIR="%vcpkg%\lib" ^
           LIBS="$(LIBS) Crypt32.lib" ^
           all

5. Compile Zabbix agent by executing the script:

build.bat

After compilation, Zabbix component binaries will be located in C:\Zabbix\zabbix-7.0.0\bin\win64. Zabbix agent configuration file is located in C:\Zabbix\zabbix-7.0.0\conf.

To run the agent, copy zabbix_agent.exe and its configuration file to a dedicated folder (e.g., C:\Zabbix\agent) and then run the agent:

mkdir C:\Zabbix\agent
       copy C:\Zabbix\zabbix-7.0.0\bin\win64\zabbix_agent.exe C:\Zabbix\agent\
       copy C:\Zabbix\zabbix-7.0.0\conf\zabbix_agent.win.conf C:\Zabbix\agent\
       
       C:\Zabbix\agent\zabbix_agent.exe -c C:\Zabbix\agent\zabbix_agent.win.conf

Building Zabbix agent manually

This method of building Zabbix agent is suitable for users who require full control over the build environment or are in a restricted environment where using vcpkg is not possible.

This section contains instructions for building Zabbix agent manually, which includes installing the required build tools and dependencies (Perl, OpenSSL, PCRE2), and then compiling the agent.

Installing build tools

1. Download and install Build Tools for Visual Studio 2022. During installation, make sure to select the Desktop development with C++ workload, which includes the tools required for building the agent manually:

  • C compiler (Microsoft Visual C++)
  • NMake command-line tool
  • x64 Native Tools Command Prompt
Installing OpenSSL

To compile Zabbix agent without TLS support, proceed to the Installing PCRE2 section.

1. Download and install Strawberry Perl (available as an MSI installer). During installation, make sure to specify C:\Zabbix\Strawberry as the installation folder.

2. Install the Text::Template Perl module:

cpanm Text::Template

3. Verify that the Netwide Assembler (NASM; required for compiling OpenSSL), was compiled during the installation of Strawberry Perl:

nasm -v
       # NASM version 2.16.01 compiled on May  3 2024

If NASM is not compiled, install it manually. For more information, refer to NASM documentation.

4. Download the OpenSSL source archive and extract it to C:\Zabbix\openssl-3.5.0.

5. Navigate to the extracted directory and configure OpenSSL, for example:

cd C:\Zabbix\openssl-3.5.0
       perl Configure VC-WIN64A no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method --api=1.1.0 --prefix="C:\Program Files\Zabbix\x64\OpenSSL" --openssldir="C:\Program Files\Zabbix\x64\OpenSSL"

If you choose a custom directory for OpenSSL when compiling Zabbix agent on Windows (e.g., C:\zabbix or C:\openssl-64bit), make sure to revoke write access from non-administrator users to this directory. Otherwise, the agent will load SSL settings from a path that can be modified by unprivileged users, resulting in a potential security vulnerability.

  • The no-shared option makes libcrypto.lib and libssl.lib OpenSSL static libraries self-contained, so Zabbix binaries include OpenSSL without needing external DLLs. This means that Zabbix binaries can be copied to other Windows machines without OpenSSL libraries; however, when a new OpenSSL bugfix version is released, Zabbix agent will need to be recompiled.
  • Without the no-shared option, Zabbix relies on OpenSSL DLLs at runtime. This means that OpenSSL updates may not require recompiling Zabbix agent; however, when copying it to other machines, the OpenSSL DLLs must be also be copied.

For more information about other OpenSSL configuration options, refer to OpenSSL documentation.

6. Compile OpenSSL and run tests (note that this may take some time):

Run the tests without administrative privileges; otherwise, it may lead to unexpected results or security risks. If some tests fail, refer to OpenSSL documentation for troubleshooting.

nmake
       nmake test
       ...
       All tests successful.
       Files=325, Tests=3101, 822 wallclock secs ( 4.81 usr +  0.81 sys =  5.62 CPU)
       Result: PASS

7. Install OpenSSL:

nmake install

To install only software components (libraries, header files, but no documentation), you may use nmake install_sw.

Compileren van PCRE

  1. Download de PCRE of PCRE2-bibliotheek (ondersteund sinds Zabbix 6.0) (https://pcre.org/).
  2. Pak het uit naar de map E:\pcre2-10.39.
  3. Installeer CMake vanaf https://cmake.org/download/. Tijdens de installatie, zorg ervoor dat cmake\bin in je pad staat (geteste versie 3.9.4).
  4. Maak een nieuwe, lege buildmap aan, bij voorkeur een submap van de bronmap. Bijvoorbeeld E:\pcre2-10.39\build.
  5. Open een opdrachtregelvenster, bijvoorbeeld de x64 Native Tools Command Prompt voor VS 2017, en voer vanuit die shellomgeving cmake-gui uit. Probeer Cmake niet te starten vanuit het Windows Start-menu, omdat dit fouten kan veroorzaken.
  6. Voer E:\pcre2-10.39 en E:\pcre2-10.39\build in voor respectievelijk de bron- en buildmappen.
  7. Klik op de knop "Configure".
  8. Selecteer bij het specificeren van de generator voor dit project "NMake Makefiles".
  9. Maak een nieuwe, lege installatiemap aan. Bijvoorbeeld E:\pcre2-10.39-install.
  10. De GUI toont vervolgens verschillende configuratieopties. Zorg ervoor dat de volgende opties zijn geselecteerd:
    • PCRE_SUPPORT_UNICODE_PROPERTIES ON
    • PCRE_SUPPORT_UTF ON
    • CMAKE_INSTALL_PREFIX E:\pcre2-10.39-install
  11. Klik nogmaals op "Configure". De naastgelegen knop "Generate" zou nu actief moeten zijn.
  12. Klik op "Generate".
  13. Als er fouten optreden, wordt aanbevolen dat je de CMake-cache verwijdert voordat je het CMake-buildproces opnieuw probeert uit te voeren. In de CMake GUI kan de cache worden verwijderd door "File > Delete Cache" te selecteren.
  14. De buildmap moet nu een bruikbaar buildsysteem bevatten - Makefile.
  15. Open een opdrachtregelvenster, bijvoorbeeld de x64 Native Tools Command Prompt voor VS 2017, en navigeer naar de eerder genoemde Makefile.
  16. Voer het NMake-commando uit: E:\pcre2-10.39\build> nmake install

Compileren van Zabbix

De volgende stappen helpen je bij het compileren van Zabbix vanuit bronnen op Windows 10 (64-bits). Het enige significante verschil bij het compileren van Zabbix met/zonder TLS-ondersteuning bevindt zich in stap 4.

  1. Op een Linux-machine haal je de broncode op via git:$ 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
  2. Kopieer en pak het archief uit, bijvoorbeeld zabbix-4.4.0.tar.gz, op een Windows-machine.
  3. Laten we aannemen dat de bronnen zich bevinden in e:\zabbix-4.4.0. Open een opdrachtregelvenster, bijvoorbeeld de x64 Native Tools Command Prompt voor VS 2017 RC. Ga naar E:\zabbix-4.4.0\build\win32\project.
  4. Compileer zabbix_get, zabbix_sender en zabbix_agent.
    • zonder 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
    • met 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
  5. De nieuwe binaires bevinden zich in e:\zabbix-4.4.0\bin\win64. Omdat OpenSSL is gecompileerd met de 'no-shared' optie, bevatten de Zabbix binaires OpenSSL binnenin en kunnen ze worden gekopieerd naar andere machines die geen OpenSSL hebben.