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

概要

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

OpenSSLのコンパイル

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

  1. 先に進む前に、Windowsマシンに次のものがあることを確認してください。

  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)に移動し、NASM が見つかることを確認します。

e:\openssl-1.1.1> nasm --version
          NASM version 2.13.01 compiled on May    1 2017
  1. 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もコピーする必要があります。
  1. 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またはPCRE2ライブラリをダウンロードします (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
  1. Windowsマシン上で、アーカイブをコピーして解凍します。例: zabbix-7.0.0.tar.gz。

  2. ソースがe:\zabbix-7.0.0にあると仮定します。コマンドラインウィンドウ、例えばx64 Native Tools Command Prompt for VS 2017を開き、次へ移動します。

E:\\zabbix-7.0.0\\build\\win32\\project
  1. zabbix_get、zabbix_sender、zabbix_agentをコンパイルします。
    • TLSなしの場合:
    E:\zabbix-7.0.0\build\win32\project> nmake /K PCRE2INCDIR=E:\pcre2-10.39-install\include PCRE2LIBDIR=E:\pcre2-10.39-install\lib
    • TLSありの場合:
    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
  2. 新しいバイナリはe:\zabbix-7.0.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