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.

Compileren van OpenSSL

De volgende stappen helpen je bij het compileren van OpenSSL vanuit bronnen op Windows 10 (64-bits).

  1. Voor het compileren van OpenSSL heb je het volgende nodig op je Windows-machine:

    1. C-compiler (bijv. VS 2017 RC),
    2. NASM (https://www.nasm.us/),
    3. Perl (bijv. Strawberry Perl van http://strawberryperl.com/),
    4. Perl-module Text::Template (cpan Text::Template).
  2. Haal de bronnen van OpenSSL op via https://www.openssl.org/. Hier wordt OpenSSL 1.1.1 gebruikt.

  3. Pak de bronnen van OpenSSL uit, bijvoorbeeld in E:\openssl-1.1.1.

  4. Open een opdrachtregelvenster, zoals de x64 Native Tools Command Prompt voor VS 2017 RC.

  5. Ga naar de map met de broncode van OpenSSL, bijvoorbeeld E:\openssl-1.1.1.

    1. Controleer of NASM kan worden gevonden: e:\openssl-1.1.1> nasm --version NASM version 2.13.01 compiled on May 1 2017
  6. Configureer OpenSSL, bijvoorbeeld: 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

    • Let op de optie 'no-shared': als 'no-shared' wordt gebruikt, worden de statische bibliotheken van OpenSSL libcrypto.lib en libssl.lib 'zelfvoorzienend' en bevatten de resulterende Zabbix-binaries OpenSSL zelf, er is geen behoefte aan externe OpenSSL DLL's. Voordeel: Zabbix-binaries kunnen naar andere Windows-machines worden gekopieerd zonder OpenSSL-bibliotheken. Nadeel: wanneer er een nieuwe bugfix-versie van OpenSSL wordt uitgebracht, moet de Zabbix-agent opnieuw worden gecompileerd en geïnstalleerd.
    • Als 'no-shared' niet wordt gebruikt, gebruiken de statische bibliotheken libcrypto.lib en libssl.lib OpenSSL DLL's tijdens runtime. Voordeel: wanneer er een nieuwe bugfix-versie van OpenSSL wordt uitgebracht, kun je waarschijnlijk alleen de OpenSSL DLL's upgraden, zonder de Zabbix-agent opnieuw te compileren. Nadeel: bij het kopiëren van de Zabbix-agent naar een andere machine moeten ook OpenSSL DLL's worden gekopieerd.
  7. Compileer OpenSSL, voer tests uit en installeer: 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' installeert alleen softwarecomponenten (bijv. bibliotheken, kopteksten, maar geen documentatie). Als je alles wilt, gebruik dan "nmake install".`

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.

Compilatie van Zabbix met LibreSSL

Het proces is vergelijkbaar met het compileren met OpenSSL, maar je moet kleine wijzigingen aanbrengen in bestanden die zich bevinden in de map build\win32\project:

  • In Makefile_tls verwijder /DHAVE_OPENSSL_WITH_PSK, dat wil zeggen, zoek:
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /DHAVE_OPENSSL_WITH_PSK

en vervang het door

CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
  • In Makefile_common.inc voeg /NODEFAULTLIB:LIBCMT toe, dat wil zeggen, zoek:
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb

en vervang het door

/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb /NODEFAULTLIB:LIBCMT