1 WindowsでのZabbixエージェントのビルド

概要

このセクションでは、TLSの有無にかかわらず、ソースからZabbix Windowsエージェントのバイナリをビルドする方法を説明します。

OpenSSLのコンパイル

次の手順は、MS Windows 10 (64ビット)上のソースからOpenSSLをコンパイルするのに役立ちます。

  1. OpenSSLをコンパイルするには、Windowsマシンで次のものが必要です。
    1. Cコンパイラ (例: 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. コマンドラインウィンドウを開きます。例: the 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が含まれるため、外部OpenSSL DLLは必要ありません。 長所: Zabbixバイナリは、OpenSSLライブラリがなくても他のWindowsマシンにコピーできます。 短所: 新しいOpenSSLバグ修正バージョンがリリースされると、Zabbixエージェントを再コンパイルして再インストールする必要があります。
    • 'no-shared'が使用されない場合、静的ライブラリlibcrypto.libおよびlibssl.libは実行時にOpenSSL DLLを使用します。 長所: 新しいOpenSSLバグ修正バージョンがリリースされた場合、Zabbixエージェントを再コンパイルせずに、OpenSSL DLLのみをアップグレードできる可能性があります。 短所: 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' installs only software components (i.e. libraries, header files, but no documentation). If you want everything, use "nmake install".

PCREのコンパイル

  1. PCREまたはPCRE2 (Zabbix 6.0以降サポート) ライブラリをダウンロードします (https://pcre.org/)。
  2. ディレクトリE:\pcre2-10.39に解凍します。
  3. CMakeをhttps://cmake.org/download/からインストールします。インストール中に次を選択し、cmake\bin がパス上にあることを確認してください (テスト済みバージョン3.9.4)。
  4. 新しい空のビルドディレクトリ、できればソースディレクトリのサブディレクトリを作成します。例: E:\pcre2-10.39\build
  5. コマンドラインウィンドウを開きます。例えばx64 Native Tools Command Prompt for VS 2017を使用し、そのシェル環境からcmake-guiを実行します。エラーが発生する可能性があるため、WindowsのスタートメニューからCmakeを起動しないでください。
  6. ソースディレクトリとビルドディレクトリにそれぞれE:\pcre2-10.39E:\pcre2-10.39\buildを入力します。
  7. "Configure"ボタンを押します。
  8. このプロジェクトのジェネレーターを指定する場合は、"NMake Makefiles"を選択します。
  9. 新しい空のインストールディレクトリを作成します。例: E:\pcre2-10.39-install
  10. GUIにはいくつかの設定オプションがリストされます。次のオプションが選択されていることを確認してください。
    • PCRE_SUPPORT_UNICODE_PROPERTIES ON
    • PCRE_SUPPORT_UTF ON
    • CMAKE_INSTALL_PREFIX E:\pcre2-10.39-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:\pcre2-10.39\build> nmake install

Zabbixのコンパイル

次の手順は、MS Windows 10 (64bit)上のソースからZabbixをコンパイルするのに役立ちます。 TLSサポートの有無にかかわらずZabbixをコンパイルする場合、唯一の大きな違いはステップ4です。

  1. Linuxマシンで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. Windowsマシン上で、アーカイブをコピーして解凍します。例: zabbix-4.4.0.tar.gz。
  3. ソースがe:\zabbix-4.4.0にあると仮定します。コマンドラインウィンドウを開きます。例: the x64 Native Tools Command Prompt for VS 2017 RC。E:\zabbix-4.4.0\build\win32\projectへ移動します。
  4. zabbix_get、zabbix_sender、zabbix_agentをコンパイルします。
    • 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
    • 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. 新しいバイナリはe:\zabbix-4.4.0\bin\win64にあります。OpenSSLは'no-shared'オプションを使用してコンパイルされているため、ZabbixバイナリにはOpenSSLが含まれており、OpenSSLを持たない他のマシンにコピーできます。

LibreSSLを使用したZabbixのコンパイル

このプロセスはOpenSSLでのコンパイルに似ていますが、build\win32\projectディレクトリにあるファイルに小さな変更を加える必要があります。

  • Makefile_tlsで/DHAVE_OPENSSL_WITH_PSKを削除します。つまり、
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /DHAVE_OPENSSL_WITH_PSK

これを次のように置き換えます

CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
  • Makefile_common.incに/NODEFAULTLIB:LIBCMTを追加します。つまり、
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb

これを次のように置き換えます

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