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

概要

このページでは、Windows 10 (64bit)上でZabbixエージェントをソースからビルドする方法を説明します。

これらの手順は、Visual Studio 2022をサポートするWindowsバージョンに適用されます。

Zabbixエージェントのビルドには以下が必要です:

  • Cコンパイラ (Visual Studio 2022のビルドツールに含まれています)
  • OpenSSL (Zabbixの暗号化機能用)
  • PCRE2 (Perl互換正規表現。Zabbixの正規表現パターンマッチング機能用)

Zabbixエージェントは、以下のいずれかの方法でビルドできます:

  • vcpkgを使用 - C++パッケージマネージャーを使用して依存関係管理を簡素化する自動化アプローチ。
  • 手動ビルド - エージェントをコンパイルする前にすべての依存関係をインストールする必要がある手動アプローチ。

監視のニーズによっては、追加のライブラリが必要になる場合があります。詳細については、要件を参照してください。

ビルドプロセスを開始する前に、以下の点にご注意ください:

  • コマンドを実行するには、x64 Native Toolsコマンドプロンプト(Build Tools for Visual Studio 2022に含まれています)を使用してください。コマンドプロンプトは、保護されたフォルダーへの書き込み権限を持つユーザーによって起動されます。
  • すべてのソースファイルとビルドフォルダー用の作業ディレクトリをC:\Zabbixに作成することをお勧めします。ただし、コンパイル済みのコンポーネントはC:\Program Files\Zabbix\x64にインストールする必要があります。

vcpkg を使用した Zabbix エージェントのビルド

このセクションでは、C++ プロジェクトにおける依存関係の管理と統合を簡素化するパッケージマネージャー vcpkg を使用して、Zabbix エージェントをビルドする手順を説明します。

1. Build Tools for Visual Studio 2022 をダウンロードしてインストールします。
インストール時には、vcpkg を使用してエージェントをビルドするために必要なツールを含む Desktop development with C++ ワークロードを必ず選択してください。

  • C コンパイラ (Microsoft Visual C++)
  • NMake コマンドラインツール
  • vcpkg パッケージマネージャー
  • x64 Native Tools Command Prompt

2. vcpkg を初期化し、Zabbix エージェントのビルドに必要な依存関係をインストールします(この処理には時間がかかる場合があります)。

cd C:\Zabbix
vcpkg new --application
vcpkg add port pcre2
vcpkg add port openssl
vcpkg install --triplet x64-windows-static --x-install-root="C:\Program Files\Zabbix\x64"

3. Zabbix ソースアーカイブ をダウンロードし、C:\Zabbix\zabbix-7.4.0 に展開します。

4. Zabbix のビルドディレクトリ (C:\Zabbix\zabbix-7.4.0\build\win32\project) に移動し、以下の build.bat スクリプトを作成します。
OpenSSL と PCRE2 がインストールされているディレクトリを正しく指定してください。

:: Set vcpkg installation path:
set vcpkg=C:\Program Files\Zabbix\x64\x64-windows-static

:: Run the build process:
nmake -f Makefile CPU=AMD64 ^
    PCRE2INCDIR="%vcpkg%\include" ^
    PCRE2LIBDIR="%vcpkg%\lib" ^
    TLS=openssl ^
    TLSINCDIR="%vcpkg%\include" ^
    TLSLIBDIR="%vcpkg%\lib" ^
    LIBS="$(LIBS) Crypt32.lib" ^
    all

5. スクリプトを実行して Zabbix エージェントをコンパイルします。

build.bat

コンパイル後、Zabbix コンポーネントのバイナリは C:\Zabbix\zabbix-7.4.0\bin\win64 に配置されます。
Zabbix エージェントの設定ファイルは C:\Zabbix\zabbix-7.4.0\conf にあります。

エージェントを実行するには、zabbix_agent.exe とその設定ファイルを専用フォルダ(例: C:\Zabbix\agent)にコピーしてから、エージェントを実行します。

mkdir C:\Zabbix\agent
copy C:\Zabbix\zabbix-7.4.0\bin\win64\zabbix_agent.exe C:\Zabbix\agent\
copy C:\Zabbix\zabbix-7.4.0\conf\zabbix_agent.win.conf C:\Zabbix\agent\

C:\Zabbix\agent\zabbix_agent.exe -c C:\Zabbix\agent\zabbix_agent.win.conf

Zabbixエージェントを手動でビルドする

このZabbixエージェントのビルド方法は、ビルド環境を完全に制御する必要があるユーザー、またはusing vcpkgが利用できない制限された環境にいるユーザーに適しています。

このセクションでは、必要なビルドツールおよび依存関係(Perl、OpenSSL、PCRE2)のインストールと、その後のエージェントのコンパイルを含む、Zabbixエージェントを手動でビルドする手順について説明します。

ビルドツールのインストール

1. Build Tools for Visual Studio 2022 をダウンロードしてインストールします。 インストール中に、手動でエージェントをビルドするために必要なツールが含まれている Desktop development with C++ ワークロードを必ず選択してください。

  • Cコンパイラ(Microsoft Visual C++)
  • NMake コマンドラインツール
  • x64 Native Tools Command Prompt
OpenSSLのインストール

TLSサポートなしでZabbixエージェントをコンパイルする場合は、PCRE2のインストールセクションに進んでください。

1. Strawberry Perl をダウンロードしてインストールします(MSIインストーラーとして提供されています)。 インストール中に、インストール先フォルダとして C:\Zabbix\Strawberry を指定してください。

2. Text::Template Perlモジュールをインストールします:

cpanm Text::Template

3. Strawberry Perlのインストール時に、Netwide Assembler(NASM。OpenSSLのコンパイルに必要)がコンパイルされていることを確認します:

nasm -v
# NASM version 2.16.01 compiled on May  3 2024

NASMがコンパイルされていない場合は、手動でインストールしてください。詳細については、NASM documentation を参照してください。

4. OpenSSLソースアーカイブ をダウンロードし、C:\Zabbix\openssl-3.5.0 に展開します。

5. 展開したディレクトリに移動し、OpenSSLを設定します。例:

cd C:\Zabbix\openssl-3.5.0
perl Configure VC-WIN64A no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method --api=1.1.0 --prefix="C:\Program Files\Zabbix\x64\OpenSSL" --openssldir="C:\Program Files\Zabbix\x64\OpenSSL"

WindowsでZabbixエージェントをコンパイルする際に、OpenSSL用のカスタムディレクトリ(例: C:\zabbix または C:\openssl-64bit)を選択する場合は、このディレクトリに対する非管理者ユーザーの書き込みアクセス権を必ず取り消してください。 そうしないと、エージェントが権限のないユーザーによって変更可能なパスからSSL設定を読み込むことになり、潜在的なセキュリティ脆弱性につながります。

  • no-shared オプションを指定すると、libcrypto.lib と libssl.lib のOpenSSL静的ライブラリが自己完結型になり、Zabbixバイナリに外部DLLを必要とせずOpenSSLが含まれます。 これは、OpenSSLライブラリがなくてもZabbixバイナリを他のWindowsマシンにコピーできることを意味します。ただし、新しいOpenSSLのバグ修正版がリリースされた場合は、Zabbixエージェントを再コンパイルする必要があります。
  • no-shared オプションを指定しない場合、Zabbixは実行時にOpenSSL DLLに依存します。 これは、OpenSSLの更新時にZabbixエージェントの再コンパイルが不要になる可能性があることを意味します。ただし、他のマシンにコピーする場合は、OpenSSL DLLも一緒にコピーする必要があります。

その他のOpenSSL設定オプションの詳細については、OpenSSL documentation を参照してください。

6. OpenSSLをコンパイルし、テストを実行します(これには時間がかかる場合があります):

テストは管理者権限なしで実行してください。そうしないと、予期しない結果やセキュリティリスクにつながる可能性があります。 一部のテストが失敗した場合は、トラブルシューティングについて OpenSSL documentation を参照してください。

nmake
nmake test
...
All tests successful.
Files=325, Tests=3101, 822 wallclock secs ( 4.81 usr +  0.81 sys =  5.62 CPU)
Result: PASS

7. OpenSSLをインストールします:

nmake install

ソフトウェアコンポーネントのみ(ライブラリ、ヘッダーファイル。ドキュメントは除く)をインストールするには、nmake install_sw を使用できます。

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エージェントのコンパイル

1. Zabbixソースアーカイブをダウンロードし、C:\Zabbix\zabbix-7.4.0 に展開します。

生のソースリポジトリからソースアーカイブを生成する必要がある場合(例: カスタムパッチを適用する場合や、最新のソースコードからビルドする場合)は、Linux マシンで次のコマンドを実行します。

git clone https://git.zabbix.com/scm/zbx/zabbix.git
cd zabbix
./bootstrap.sh
./configure --enable-agent --enable-ipv6 --prefix=`pwd`
make dist

これによりソースアーカイブが作成され、その後 Windows マシンにコピーできます。

2. Zabbix のビルドディレクトリに移動し、Zabbixエージェント(またはその他のコンポーネント)をコンパイルします。
OpenSSL および PCRE2 がインストールされているディレクトリを正しく指定してください。

cd C:\Zabbix\zabbix-7.4.0\build\win32\project

# TLS サポートあり:
nmake /K -f Makefile_agent PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib" TLS=openssl TLSINCDIR="C:\Program Files\Zabbix\x64\OpenSSL\include" TLSLIBDIR="C:\Program Files\Zabbix\x64\OpenSSL\lib"
nmake /K -f Makefile_get PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib" TLS=openssl TLSINCDIR="C:\Program Files\Zabbix\x64\OpenSSL\include" TLSLIBDIR="C:\Program Files\Zabbix\x64\OpenSSL\lib"
nmake /K -f Makefile_sender PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib" TLS=openssl TLSINCDIR="C:\Program Files\Zabbix\x64\OpenSSL\include" TLSLIBDIR="C:\Program Files\Zabbix\x64\OpenSSL\lib"

# TLS サポートなし:
nmake /K -f Makefile_agent PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib"
nmake /K -f Makefile_get PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib"
nmake /K -f Makefile_sender PCRE2INCDIR="C:\Program Files\Zabbix\x64\PCRE2\include" PCRE2LIBDIR="C:\Program Files\Zabbix\x64\PCRE2\lib"

コンパイル後、Zabbix コンポーネントのバイナリは C:\Zabbix\zabbix-7.4.0\bin\win64 に配置されます。
Zabbixエージェントの設定ファイルは C:\Zabbix\zabbix-7.4.0\conf にあります。

エージェントを実行するには、zabbix_agent.exe とその設定ファイルを専用フォルダ(例: C:\Zabbix\agent)にコピーしてから、エージェントを実行します。

mkdir C:\Zabbix\agent
copy C:\Zabbix\zabbix-7.4.0\bin\win64\zabbix_agentd.exe C:\Zabbix\agent\
copy C:\Zabbix\zabbix-7.4.0\conf\zabbix_agentd.win.conf C:\Zabbix\agent\

C:\Zabbix\agent\zabbix_agentd.exe -c C:\Zabbix\agent\zabbix_agentd.win.conf -f