このページで
1 WindowsでのZabbixエージェントのビルド
概要
このセクションでは、TLSの有無にかかわらず、ソースからZabbix Windowsエージェントのバイナリをビルドする方法を説明します。
OpenSSLのコンパイル
次の手順は、MS Windows 10 (64bit)上のソースからOpenSSLをコンパイルするのに役立ちます。
- OpenSSLをコンパイルするには、Windowsマシンで次のものが必要です。
- Cコンパイラ (例: VS 2017 RC)
- NASM (https://www.nasm.us/)
- Perl (例: Strawberry Perl from http://strawberryperl.com/)
- Perl module Text::Template (cpan Text::Template)
- https://www.openssl.org/からOpenSSLソースを入手します。ここではOpenSSL 1.1.1が使用されます。
- OpenSSLソースをE:\openssl-1.1.1などに解凍します。
- コマンドラインウィンドウを開きます(the x64 Native Tools Command Prompt for VS 2017 RCなど)。
- OpenSSLソースディレクトリに移動します。例: E:\openssl-1.1.1
- NASMが見つかることを確認します。
e:\openssl-1.1.1> nasm --version NASM version 2.13.01 compiled on May 1 2017
- NASMが見つかることを確認します。
- 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
管理者以外のユーザーによるOpenSSLインストールディレクトリ(C:\OpenSSL-Win64-111-static)への書き込み権限を必ず無効にしてください。無効にしないと、Zabbixエージェント2は権限のないユーザーが変更できるパスからSSL設定を読み込み、潜在的なセキュリティ脆弱性が発生します。
- '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もコピーする必要があります。
- 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_swinstall_sw`はソフトウェアコンポーネントのみをインストールします(つまり、ライブラリ、ヘッダーファイル、しかしドキュメントはありません)。すべてが必要な場合は、"nmake install"を使用してください。
- OpenSSLのコンパイル、テストの実行、インストールをする:
PCREのコンパイル
- PCREまたはPCRE2 (Zabbix 6.0以降サポート) ライブラリをダウンロードします (https://pcre.org/)。
- ディレクトリE:\pcre2-10.39に解凍します。
- CMakeをhttps://cmake.org/download/からインストールします。インストール中に次を選択し、cmake\bin がパス上にあることを確認してください (テスト済みバージョン3.9.4)。
- 新しい空のビルドディレクトリ、できればソースディレクトリのサブディレクトリを作成します。例: E:\pcre2-10.39\build。
- コマンドラインウィンドウを開きます。例えばx64 Native Tools Command Prompt for VS 2017を使用し、そのシェル環境からcmake-guiを実行します。エラーが発生する可能性があるため、WindowsのスタートメニューからCmakeを起動しないでください。
- ソースディレクトリとビルドディレクトリにそれぞれE:\pcre2-10.39とE:\pcre2-10.39\buildを入力します。
- "Configure"ボタンをクリックします。
- このプロジェクトのジェネレーターを指定する場合は、"NMake Makefiles"を選択します。
- 新しい空のインストールディレクトリを作成します。例: E:\pcre2-10.39-install。
- GUIにはいくつかの設定オプションがリストされます。次のオプションが選択されていることを確認してください。
- PCRE_SUPPORT_UNICODE_PROPERTIES ON
- PCRE_SUPPORT_UTF ON
- CMAKE_INSTALL_PREFIX E:\pcre2-10.39-install
- もう一度"Configure"をクリックします。隣接する"Generate"ボタンがアクティブになるはずです。
- "Generate"をクリックします。
- エラーが発生した場合は、CMakeビルドプロセスを繰り返す前にCMakeキャッシュを削除することをお勧めします。CMake GUI では、"File > Delete Cache"を選択してキャッシュを削除できます。
- ビルドディレクトリには、使用可能なビルドシステムMakefileが含まれているはずです。
- コマンドラインウィンドウを開きます。例えばx64 Native Tools Command Prompt for VS 2017を使用し、上記のMakefileに移動します。
- NMakeコマンドを実行する。
E:\pcre2-10.39\build> nmake install
Zabbixのコンパイル
次の手順は、MS Windows 10 (64bit)上のソースからZabbixをコンパイルするのに役立ちます。 TLSサポートの有無にかかわらずZabbixをコンパイルする場合、唯一の大きな違いはステップ4です。
- 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 - Windowsマシン上で、アーカイブをコピーして解凍します。例: zabbix-4.4.0.tar.gz。
- ソースがe:\zabbix-4.4.0にあると仮定します。コマンドラインウィンドウ、例えばx64 Native Tools Command Prompt for VS 2017を開き、E:\zabbix-4.4.0\build\win32\projectへ移動します。
- 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
- TLSなしの場合:
- 新しいバイナリは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