[comment]: # ({55fd3f33-22c598e9})
# 2 WindowsでのZabbixエージェント2のビルド

[comment]: # ({/55fd3f33-22c598e9})

[comment]: # ({3f913083-84651997})
#### 概要

このセクションでは、Zabbixエージェント2 (Windows)をソースコードからビルドする方法を説明します。

[comment]: # ({/3f913083-84651997})

[comment]: # ({84193c91-0c4c3de2})
#### vcpkg を使用した Zabbix エージェント 2 のビルド

このセクションでは、C++ プロジェクトにおける依存関係の管理と統合を簡素化するパッケージマネージャー [vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/overview) を使用して、Zabbix エージェントをビルドする手順を説明します。

1\. [Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022) をダウンロードしてインストールします。  
インストール時には、vcpkg パッケージマネージャーを含む *Desktop development with C++* ワークロードを必ず選択してください。

2\. [Go](https://go.dev/dl/) をダウンロードしてインストールします（MSI インストーラーを利用できます）。  
インストール時には、インストール先フォルダーとして `C:\Zabbix\Go` を指定してください。

3\. Microsoft Visual C ランタイムライブラリを使用する [MinGW ディストリビューション](https://github.com/niXman/mingw-builds-binaries/releases) をダウンロードします。例:

- 64 ビットビルド用: `x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z`
- 32 ビットビルド用: `i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z`

その後、これを `C:\Zabbix\mingw64` に展開します（32 ビットビルドの場合は `C:\Zabbix\mingw32`）。

4\. vcpkg を初期化し、Zabbix エージェント 2 のビルドに必要な依存関係をインストールします（これにはしばらく時間がかかる場合があります）。

```bash
cd C:\Zabbix

set PATH=%PATH%;"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\vcpkg"
vcpkg new --application
vcpkg add port pcre2
vcpkg add port libiconv
vcpkg add port openssl

# For 64-bit builds:
set PATH=C:\Zabbix\mingw64\bin;%PATH%
vcpkg install --triplet x64-mingw-static --x-install-root=x64

# For 32-bit builds:
set PATH=C:\Zabbix\mingw32\bin;%PATH%
vcpkg install --triplet x86-mingw-static --x-install-root=x86
```

5\. [Zabbix ソースアーカイブ](https://www.zabbix.com/download_sources#74) をダウンロードし、`C:\Zabbix\zabbix-7.4.0` に展開します。

6\. Zabbix のビルドディレクトリ (`C:\Zabbix\zabbix-7.4.0\build\mingw`) に移動し、以下の `build.bat` スクリプトを作成します。

- 64 ビットビルド用:

```bash
:: Add MinGW and Go to the system `PATH` variable for the current session:
set PATH=C:\Zabbix\mingw64\bin;%PATH%
set PATH=C:\Zabbix\Go\bin;%PATH%

:: Set vcpkg installation path:
set vcpkg="C:\Zabbix\x64\x64-mingw-static"

:: Set linker flags for Crypt32 library:
SET CGO_LDFLAGS="-lCrypt32"

:: Run the build process:
mingw32-make GOFLAGS="-buildvcs=false" ARCH=AMD64 ^
    PCRE2="%vcpkg%" ^
    OPENSSL="%vcpkg%" ^
    all
```

- 32 ビットビルド用:

```bash
:: Add MinGW and Go to the system `PATH` variable for the current session:
set PATH=C:\Zabbix\mingw32\bin;%PATH%
set PATH=C:\Zabbix\Go\bin;%PATH%

:: Set vcpkg installation path:
set vcpkg="C:\Zabbix\x86\x86-mingw-static"

:: Set linker flags for Crypt32 library:
SET CGO_LDFLAGS="-lCrypt32"

:: Run the build process:
mingw32-make GOFLAGS="-buildvcs=false" ARCH=x86 ^
    PCRE2="%vcpkg%" ^
    OPENSSL="%vcpkg%" ^
    all
```

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

```bash
build.bat
```

コンパイル後、Zabbix エージェント 2 のバイナリは `C:\Zabbix\zabbix-7.4.0\bin\win64`（64 ビットビルドの場合）または `C:\Zabbix\zabbix-7.4.0\bin\win32`（32 ビットビルドの場合）に配置されます。  
Zabbix エージェント 2 の設定ファイルは `C:\Zabbix\zabbix-7.4.0\src\go\conf` にあります。

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

```bash
mkdir C:\Zabbix\agent2

# For 64-bit builds:
copy C:\Zabbix\zabbix-7.4.0\bin\win64\zabbix_agent2.exe C:\Zabbix\agent2\

# For 32-bit builds:
copy C:\Zabbix\zabbix-7.4.0\bin\win32\zabbix_agent2.exe C:\Zabbix\agent2\

copy C:\Zabbix\zabbix-7.4.0\src\go\conf\zabbix_agent2.win.conf C:\Zabbix\agent2\
xcopy /E /I C:\Zabbix\zabbix-7.4.0\src\go\conf\zabbix_agent2.d C:\Zabbix\agent2\zabbix_agent2.d\

C:\Zabbix\agent2\zabbix_agent2.exe -c C:\Zabbix\agent2\zabbix_agent2.win.conf
```

必要に応じて、Zabbix エージェント 2 の [ロード可能プラグイン](/manual/extensions/plugins#loadable-plugins) のコンパイルに進んでください。

[comment]: # ({/84193c91-0c4c3de2})

[comment]: # ({d1a31b47-83a3edaf})
##### Zabbix エージェント 2 のロード可能なプラグインのコンパイル

1\. お使いの Zabbix エージェント 2 のバージョンに一致する [Zabbix プラグインのソース](https://cdn.zabbix.com/zabbix-agent2-plugins/sources/)（例: `zabbix-agent2-plugin-postgresql-7.4.0.tar.gz`）をダウンロードし、`C:\Zabbix` に展開します。

::: noteimportant
プラグインをインストールする前に、README ファイルを確認してください。
固有の要件やインストール手順が記載されている場合があります。
:::

2\. 展開したプラグインディレクトリに移動し、プラグインをコンパイルします。

```bash
cd C:\Zabbix\zabbix-agent2-plugin-ember-plus-7.4.0

# 64 ビットビルドの場合:
mingw32-make ARCH=AMD64

# 32 ビットビルドの場合:
mingw32-make ARCH=x86
```

コンパイル後、Zabbix エージェント 2 プラグインのバイナリとその設定ファイルは、同じプラグインディレクトリに配置されます。

プラグインの実行ファイルは、Zabbix エージェント 2 からロード可能である限り、任意の場所に配置できます。
プラグイン設定ファイルで、プラグインバイナリへのパスを指定してください。たとえば、[PostgreSQL](/manual/appendix/config/zabbix_agent2_plugins/postgresql_plugin) プラグインの postgresql.conf では次のように指定します。

```ini
Plugins.PostgreSQL.System.Path=/path/to/executable/zabbix-agent2-plugin-postgresql
```

プラグイン設定ファイルへのパスは、Zabbix エージェント 2 設定ファイルの [Include](/manual/appendix/config/zabbix_agent2_win#include) パラメータで指定する必要があります。

```ini
Include=/path/to/plugin/configuration/file/postgresql.conf
```

プラグインの設定の詳細については、[セットアップ](/manual/extensions/plugins#configuring-plugins) に進んでください。

[comment]: # ({/d1a31b47-83a3edaf})

[comment]: # ({b486021f-87d14870})
#### Zabbixエージェント2を手動でビルドする

::: noteimportant
このZabbixエージェント2のビルド方法は、ビルド環境を完全に制御する必要があるユーザー、または[vcpkgの使用](#building-zabbix-agent-with-vcpkg)が不可能な制限された環境にいるユーザーに適しています。
:::

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

[comment]: # ({/b486021f-87d14870})

[comment]: # ({964e64d3-2a4da91c})
#### MinGWコンパイラのインストール

1\. SJLJ (set jump/long jump)例外処理と Windowsスレッドを備えたMinGW-w64をダウンロードします (例: *x86\_64-8.1.0-release-win32-sjlj-rt\_v6-rev0.7z*)\
2. 解凍して、*c:\\mingw*へ移動します。\
3. 環境変数の設定をします。

    @echo off
    set PATH=%PATH%;c:\mingw\bin
    cmd

コンパイル時に、MinGWが提供するMSYSターミナルの代わりにWindowsプロンプトを使用します。

[comment]: # ({/964e64d3-2a4da91c})

[comment]: # ({e5544a26-822e5b3f})
##### OpenSSLのインストール

::: noteclassic
TLSサポートなしでZabbixエージェントをコンパイルする場合は、[PCRE2のインストール](#installing-pcre2)セクションに進んでください。
:::

1\. 管理者権限でMSYS2 MSYSターミナルを開き、次のコマンドを実行します。

```bash
pacman -S perl-Locale-Maketext-Simple
pacman -S nasm
pacman -S make
pacman -S cmake
```

2\. [OpenSSLソースアーカイブ](https://openssl-library.org/source/)をダウンロードし、`C:\Zabbix\openssl-3.5.0` に展開します。

3\. 展開したOpenSSLディレクトリに移動し、次の `build.sh` スクリプトを作成します。

- 64ビットビルドの場合:

```bash
#!/usr/bin/env bash

export PATH="/c/Zabbix/mingw64/bin:$PATH"
export d="/c/Zabbix/x64/OpenSSL-Win64-350-static"

perl Configure mingw64 no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method thread_scheme=winthreads --api=1.1.0 --prefix=$d --openssldir=$d

make
make install
```

- 32ビットビルドの場合:

```bash
#!/usr/bin/env bash

export PATH="/c/Zabbix/mingw32/bin:$PATH"
export d="/c/Zabbix/x86/OpenSSL-Win64-350-static"

perl Configure mingw no-shared no-capieng no-winstore no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method thread_scheme=winthreads --api=1.1.0 --prefix=$d --openssldir=$d

make
make install
```

::: noteimportant
`C:\Zabbix\x64\OpenSSL-Win64-350-static` ディレクトリに対する非管理者ユーザーの書き込み権限を必ず取り消してください。
そうしないと、エージェントが権限のないユーザーによって変更可能なパスから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ドキュメント](https://github.com/openssl/openssl/blob/master/INSTALL.md#configuration-options)を参照してください。

4\. スクリプトを実行してOpenSSLを設定およびインストールします（これにはしばらく時間がかかる場合があります）。

```bash
cd /c/Zabbix/openssl-3.5.0
./build.sh
```

[comment]: # ({/e5544a26-822e5b3f})

[comment]: # ({418b9da1-bf2f316b})
##### PCRE2のインストール

1\. [PCRE2ソースアーカイブ](https://github.com/PCRE2Project/pcre2/releases/latest)をダウンロードし、`C:\Zabbix\pcre2-10.45` に展開します。

2\. 管理者権限でMSYS2 MSYSターミナルを開きます。
次に、展開したPCRE2ディレクトリ内に `build` ディレクトリを作成し、そこに移動します。

```bash
mkdir /c/Zabbix/pcre2-10.45/build
cd /c/Zabbix/pcre2-10.45/build
```

3\. PCRE2を設定します。

```bash
# 64ビットビルドの場合:
export PATH="/c/Zabbix/mingw64/bin:$PATH"
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-O2 -g" -DCMAKE_INSTALL_PREFIX="/c/Zabbix/x64/PCRE2" ..

# 32ビットビルドの場合:
export PATH="/c/Zabbix/mingw32/bin:$PATH"
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-m32 -O2 -g" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-mi386pe" -DCMAKE_INSTALL_PREFIX="/c/Zabbix/x86/PCRE2" ..
```

::: noteclassic
エラーが発生した場合は、CMakeビルドプロセスを再実行する前にCMakeキャッシュを削除することを推奨します。
キャッシュ（`CMakeCachecache.txt`）は、展開したPCRE2ディレクトリのbuildディレクトリにあります。
:::

4\. PCRE2をインストールします。

```bash
make install
```

[comment]: # ({/418b9da1-bf2f316b})

[comment]: # ({58b36992-1d340ab8})
##### Zabbixエージェント 2のコンパイル

1\. [Zabbixソースアーカイブ](https://www.zabbix.com/download_sources#74)をダウンロードし、`C:\Zabbix\zabbix-7.4.0` に展開します。

生のソースリポジトリからソースアーカイブを生成する必要がある場合（例: カスタムパッチを適用する場合や、最新のソースコードからビルドする場合）は、[Go](https://go.dev/) がインストールされた **Linux** マシン上で以下のコマンドを実行してください（Zabbixエージェント 2の設定に必要です）。

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

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

2\. 管理者権限でコマンドプロンプトを開きます。  
次に、Zabbixのビルドディレクトリに移動してZabbixエージェントをコンパイルします。  
OpenSSL および PCRE2 がインストールされているディレクトリを正しく指定してください。

- 64ビットビルドの場合:

```bash
cd C:\Zabbix\zabbix-7.4.0\build\mingw
set PATH=C:\Zabbix\mingw64\bin;%PATH%
mklink /D C:\Zabbix\x64\OpenSSL-Win64-350-static\lib C:\Zabbix\x64\OpenSSL-Win64-350-static\lib64

# With TLS support:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2" OPENSSL="C:\Zabbix\x64\OpenSSL-Win64-350-static"

# Without TLS support:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2"
```

- 32ビットビルドの場合:

```bash
cd C:\Zabbix\zabbix-7.4.0\build\mingw
set PATH=C:\Zabbix\mingw32\bin;%PATH%

# With TLS support:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2" OPENSSL="C:\Zabbix\x86\OpenSSL-Win64-350-static"

# Without TLS support:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2"
```

コンパイル後、Zabbixエージェント 2 のバイナリは `C:\Zabbix\zabbix-7.4.0\bin\win64` に配置されます（32ビットビルドの場合は `C:\Zabbix\zabbix-7.4.0\bin\win32`）。  
Zabbixエージェント 2 の設定ファイルは `C:\Zabbix\zabbix-7.4.0\src\go\conf` にあります。

エージェントを実行するには、`zabbix_agent2.exe` バイナリとその設定ファイルを専用フォルダ（例: `C:\Zabbix\agent2`）にコピーしてから、エージェントを実行します。

```bash
mkdir C:\Zabbix\agent2
copy C:\Zabbix\zabbix-7.4.0\bin\win64\zabbix_agent2.exe C:\Zabbix\agent2\
copy C:\Zabbix\zabbix-7.4.0\src\go\conf\zabbix_agent2.win.conf C:\Zabbix\agent2\
xcopy /E /I C:\Zabbix\zabbix-7.4.0\src\go\conf\zabbix_agent2.d C:\Zabbix\agent2\zabbix_agent2.d\

C:\Zabbix\agent2\zabbix_agent2.exe -c C:\Zabbix\agent2\zabbix_agent2.win.conf
```

必要に応じて、[Zabbixエージェント 2 のロード可能プラグインのコンパイル](#compiling-zabbix-agent-2-loadable-plugins)に進んでください。

[comment]: # ({/58b36992-1d340ab8})
