Сборка бинарных файлов Windows агента с/без TLS

Обзор

Этот раздел демонстрирует как собрать бинарные файлы Windows агента из исходного кода с или без TLS.

Компиляция OpenSSL

Следующие шаги помогут вам в компилировании OpenSSL из исходного кода на MS Windows 10 (64-bit).

  1. Для компиляции OpenSSL вам потребуется Windows машина с:
    1. C компилятором (например, VS 2017 RC),
    2. NASM (https://www.nasm.us/),
    3. Perl (например, Strawberry Perl с http://strawberryperl.com/),
    4. Perl модуль Text::Template (cpan Text::Template).
  2. Наличие OpenSSL исходного кода с https://www.openssl.org/. Здесь использован OpenSSL 1.1.1.
  3. Разархивируйте исходный код OpenSSL, например, в E:\openssl-1.1.1.
  4. Откройте окно командной строки, например, x64 Native Tools Command Prompt for VS 2017 RC.
  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 будут 'самодостаточными' и в результате бинарные файлы Zabbix будут включать в себя OpenSSL, не потребуется внешних DLL от OpenSSL. Преимущество: бинарные файлы Zabbix можно копировать на другие Windows машины без библиотек OpenSSL. Недостаток: когда будет выпущена новая версия OpenSSL с исправлением ошибок, будет необходимо перекомпилировать и переустановить Zabbix агента.
    • Если 'no-shared' не используется, тогда статические библиотеки libcrypto.lib и libssl.lib будут использоваться во время выполнения DLL OpenSSL. Преимущество: когда будет выпущена новая версия OpenSSL с исправлением ошибок, возможно вы сможете обновить только OpenSSL DLL, без необходимости перекомпиляции Zabbix агента. Недостаток: при копировании Zabbix агента на другую машину необходимо также копировать OpenSSL DLL.
  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".

Компиляция PCRE

  1. Загрузите PCRE библиотеку (новая обязательная библиотека для Zabbix 4.0) from pcre.org, version 8.XX; не pcre2 (ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.zip)
  2. Извлеките в директорию E:\pcre-8.41
  3. Установите CMake с https://cmake.org/download/, в процессе установки выберите: и убедитесь, что cmake\bin находится в вашей директории (протестировано с версией 3.9.4).
  4. Создайте новую, пустую директорию для сборки, предпочтительно поддиректорию в директории с исходным кодом. Например, E:\pcre-8.41\build.
  5. Откройте окно командной строки, например x64 Native Tools Command Prompt for VS 2017 и из этой среды окружения выполните cmake-gui. Не пытайтесь запустить Cmake из меню Старт Windows, так как это может привести к ошибкам.
  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" теперь должна быть активна.
  12. Нажмите "Generate".
  13. В случае возникновения ошибок рекомендуется удалить CMake кэш перед попыткой повторения процесса сборки CMake. В CMake GUI кэш можно удалить выбрав "File > Delete Cache".
  14. Директория сборки теперь должна содержать пригодный для использования систему сборки - Makefile.
  15. Откройте окно командной строки, например, x64 Native Tools Command Prompt for VS 2017 и перейдите к упомянутому выше Makefile.
  16. Запустите команду NMake: E:\pcre-8.41\build> nmake install

Компиляция Zabbix

Следующие шаги помогут вам в компилировании Zabbix из исходного кода на MS Windows 10 (64-bit). При компиляции Zabbix с/без поддержки TLS единственное существенное отличие отражено в 4 шаге.

Поддержка OpenSSL 1.1.1 добавлена в 4.0.1, несколько дополнительных исправлений - в 4.0.2rc1.

  1. На Linux машине скачайте исходный код с git:$ git clone https://git.zabbix.com/scm/zbx/zabbix.git $ cd zabbix $ git checkout 4.0.22 -b 4.0.22 # замените 4.0.22 на последний доступный релиз $ ./bootstrap.sh $ ./configure --enable-agent --enable-ipv6 --prefix=`pwd` $ make dbschema $ make dist
  2. Скопируйте и распакуйте архив, например, zabbix-4.0.2.tar.gz, на Windows машине.
  3. Давайте предположим, что исходный код расположен в e:\zabbix-4.0.2. Откройте окно командной строки, например, x64 Native Tools Command Prompt for VS 2017 RC. Перейдите в e:\4.0.2\build\win32\project.
  4. Скомпилируйте zabbix_get, zabbix_sender и zabbix_agent.
    • без TLS: E:\zabbix-4.0.2\build\win32\project> nmake /K PCREINCDIR=E:\pcre-8.41-install\include PCRELIBDIR=E:\pcre-8.41-install\lib
    • с TLS: E:\zabbix-4.0.2\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-4.0.2\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-4.0.2\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-4.0.2\bin\win64. Поскольку OpenSSL был скомпилирован с опцией 'no-shared', бинарные файлы Zabbix содержат внутри себя OpenSSL и их можно копировать на другие машины, на которых нет OpenSSL.

Компиляция Zabbix с LibreSSL

Процесс схож с компилированием с поддержкой 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