Aquesta secció ensenya com crear binaris d'agent Zabbix Windows a partir de fonts amb o sense TLS.
Les passes següents us ajudaran a compilar OpenSSL des de la font a MS Windows 10 (64 bits).
Abans de procedir, verifiqueu que la màquina Windows té:
Obtingueu fonts OpenSSL de https://www.openssl.org/. Aquí s'empra OpenSSL 1.1.1.
Descomprimiu les fonts OpenSSL, per exemple, a E:\openssl-1.1.1.
Obriu una finestra de línia de comandes, per exemple Native Tools x64 Command Prompt per a VS 2017 RC.
Aneu al directori font d'OpenSSL (en aquest tutorial, E:\\openssl-1.1.1
) i verifiqueu que s'hi troba el NASM:
e:\openssl-1.1.1> nasm --version
NASM versió 2.13.01 compilada l'1 de maig de 2017
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
- Tingueu en compte l'opció "no-shared": si s'empra "no-shared", les biblioteques estàtiques d'OpenSSL libcrypto.lib i libssl.lib seran "autosuficients" i els binaris Zabbix resultants inclouran OpenSSL, no cal per a "DLL externa OpenSSL". Avantatge: els binaris Zabbix es poden copiar a altres màquines Windows sense biblioteques OpenSSL. Desavantatge: quan es publica una nova versió de correcció d'errors d'OpenSSL, cal recompilar i tornar a instal·lar l'agent Zabbix.
- Si no s'empra "no-shared", les biblioteques estàtiques libcrypto.lib i libssl.lib empraran DLL OpenSSL quan s'executen. Avantatge: quan es publica una nova versió de correcció d'errors d'OpenSSL, probablement només podreu actualitzar les DLL d'OpenSSL, sense recompilar l'agent Zabbix. Desavantatge: per copiar l'agent Zabbix a una altra màquina també cal copiar les DLL d'OpenSSL.
e:\openssl-1.1.1> nmake
e:\openssl-1.1.1> test nmake
...
All tests successful.
Fitxers=152, proves=1152, 501 segons de rellotge de paret (0,67 usr + 0,61 sys = 1,28 CPU)
Result: PASS
e:\openssl-1.1.1> nmake install_sw
install\_sw
només instal·la components de programari (és a dir, biblioteques, fitxers de capçalera, però sense documentació). Si ho voleu tot, empreu nmake install
.
E:\pcre2-10.39\build> nmake install
Les passes següents us ajudaran a compilar Zabbix des de la font a MS Windows 10 (64 bits). Quan es compila Zabbix amb/sense suport TLS, l'única diferència significativa es troba a la passa 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
Copieu i descomprimiu l'arxiu, p.e. zabbix-7.0.0.tar.gz, a una màquina Windows.
Suposem que les fonts són a e:\zabbix-7.0.0. Obriu una finestra de línia de comandes, com ara l'indicador d'ordres natiu de les eines x64 per a VS RC 2017. Aneu a
E:\\zabbix-4.4.0\\build\\win32\\project
E:\zabbix-7.0.0\build\win32\project> nmake /K PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
E:\zabbix-7.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 PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
E:\zabbix-7.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" PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
E:\zabbix-7.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 PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
El procés és similar a la compilació amb OpenSSL, però cal fer petits canvis als fitxers que es troben al directori build\win32\project
:
/DHAVE_OPENSSL_WITH_PSK
Per fer-ho, cerqueu:
CFLAGS = $(CFLAGS) /DHAVE\_OPENSSL /DHAVE\_OPENSSL\_WITH\_PSK
i substituïu per
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
/NODEFAULTLIB:LIBCMT
I cerqueu:
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\\$(TARGETNAME).pd
i substituïu per:
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb /NODEFAULTLIB:LIBCMT