このセクションでは、TLSの有無にかかわらず、ソースからZabbix Windowsエージェントのバイナリをビルドする方法を説明します。
次の手順は、MS Windows 10 (64bit)上のソースからOpenSSLをコンパイルするのに役立ちます。
先に進む前に、Windowsマシンに次のものがあることを確認してください。
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
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もコピーする必要があります。
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またはPCRE2ライブラリをダウンロードします (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にはいくつかの設定オプションがリストされます。次のオプションが選択されていることを確認してください。
もう一度"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
次の手順は、MS Windows 10 (64bit)上のソースからZabbixをコンパイルするのに役立ちます。 TLSサポートの有無にかかわらずZabbixをコンパイルする場合、唯一の大きな違いはステップ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
Windowsマシン上で、アーカイブをコピーして解凍します。例: zabbix-7.0.0.tar.gz。
ソースがe:\zabbix-7.0.0にあると仮定します。コマンドラインウィンドウ、例えばx64 Native Tools Command Prompt for VS 2017を開き、次へ移動します。
E:\\zabbix-7.0.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
このプロセスはOpenSSLでのコンパイルに似ていますが、build\win32\project
ディレクトリにあるファイルに小さな変更を加える必要があります。
/DHAVE_OPENSSL_WITH_PSK
を削除します。そのために次を見つけ、
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /DHAVE_OPENSSL_WITH_PSK
これを次のように置き換えます。
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
/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