[comment]: # translation:outdated

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

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

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

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

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

[comment]: # ({210ddd6a-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 パッケージマネージャーを含む *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

# 64 ビットビルドの場合:
set PATH=C:\Zabbix\mingw64\bin;%PATH%
vcpkg install --triplet x64-mingw-static --x-install-root=x64

# 32 ビットビルドの場合:
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#72) をダウンロードし、`C:\Zabbix\zabbix-7.2.0` に解凍します。

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

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

```bash
:: 現在のセッションのシステム `PATH` 変数に MinGW と Go を追加します。
set PATH=C:\Zabbix\mingw64\bin;%PATH%
set PATH=C:\Zabbix\Go\bin;%PATH%

:: vcpkg のインストールパスを設定します。
set vcpkg="C:\Zabbix\x64\x64-mingw-static"

:: Crypt32 ライブラリのリンカーフラグを設定します。
SET CGO_LDFLAGS="-lCrypt32"

:: ビルドプロセスを実行します。
mingw32-make GOFLAGS="-buildvcs=false" ARCH=AMD64 ^
    PCRE2="%vcpkg%" ^
    OPENSSL="%vcpkg%" ^
    all
```

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

```bash
:: 現在のセッションのシステム `PATH` 変数に MinGW と Go を追加します:
set PATH=C:\Zabbix\mingw32\bin;%PATH%
set PATH=C:\Zabbix\Go\bin;%PATH%

:: vcpkg のインストールパスを設定します:
set vcpkg="C:\Zabbix\x86\x86-mingw-static"

:: Crypt32 ライブラリのリンカーフラグを設定します:
SET CGO_LDFLAGS="-lCrypt32"

:: ビルドプロセスを実行します:
mingw32-make GOFLAGS="-buildvcs=false" ARCH=x86 ^
    PCRE2="%vcpkg%" ^
    OPENSSL="%vcpkg%" ^
    all
```

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

```bash
build.bat
```

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

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

```bash
mkdir C:\Zabbix\agent2

# 64ビットビルドの場合：
C:\Zabbix\zabbix-7.2.0\bin\win64\zabbix_agent2.exe を C:\Zabbix\agent2\ にコピーします。

# 32ビットビルドの場合：
C:\Zabbix\zabbix-7.2.0\bin\win32\zabbix_agent2.exe を C:\Zabbix\agent2\ にコピーします。

C:\Zabbix\zabbix-7.2.0\src\go\conf\zabbix_agent2.win.conf を C:\Zabbix\agent2\ にコピーします。
xcopy /E /I C:\Zabbix\zabbix-7.2.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のロード可能なプラグインのコンパイルを続行します。

[comment]: # ({/210ddd6a-0c4c3de2})

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

1\. ご利用の Zabbix エージェント 2 のバージョンに合った [Zabbix プラグインソース](https://cdn.zabbix.com/zabbix-agent2-plugins/sources/) (例: `zabbix-agent2-plugin-ember-plus-7.2.0.tar.gz`) をダウンロードし、`C:\Zabbix` に解凍します。

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

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

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

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

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

プラグインの実行ファイルは、Zabbixエージェント2がロードできる限り、どこにでも配置できます。
プラグインバイナリへのパスは、プラグイン設定ファイル（例：[Ember+プラグイン](/manual/appendix/config/zabbix_agent2_plugins/ember_plus_plugin)の場合はember.conf）に指定してください。

```ini
Plugins.EmberPlus.System.Path=/path/to/executable/zabbix-agent2-plugin-ember-plus
```

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

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

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

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

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

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

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

[comment]: # ({2a4da91c-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]: # ({/2a4da91c-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
```

::: 重要
管理者以外のユーザーによる`C:\Zabbix\x64\OpenSSL-Win64-350-static`ディレクトリへの書き込み権限を必ず無効にしてください。
無効にしないと、エージェントは権限のないユーザーが変更できるパスからSSL設定を読み込み、潜在的なセキュリティ脆弱性が発生します。
:::

- `no-shared` オプションを指定すると、libcrypto.lib および libssl.lib OpenSSL 静的ライブラリが自己完結的になるため、Zabbix バイナリには外部 DLL を必要とせずに OpenSSL が含まれます。
つまり、Zabbix バイナリは OpenSSL ライブラリがなくても他の 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 ディレクトリのビルドディレクトリにあります。
:::

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

```bash
make install
```

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

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

1\. [Zabbix ソースアーカイブ](https://www.zabbix.com/download_sources#72) をダウンロードし、`C:\Zabbix\zabbix-7.2.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.2.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

# TLS サポートあり:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2" OPENSSL="C:\Zabbix\x64\OpenSSL-Win64-350-static"

# TLS サポートなし:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2"
```

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

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

# TLSサポートあり:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2" OPENSSL="C:\Zabbix\x86\OpenSSL-Win64-350-static"

# TLSサポートなし:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2"
```

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

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

```bash
mkdir C:\Zabbix\agent2
copy C:\Zabbix\zabbix-7.2.0\bin\win64\zabbix_agent2.exe C:\Zabbix\agent2\
copy C:\Zabbix\zabbix-7.2.0\src\go\conf\zabbix_agent2.win.conf C:\Zabbix\agent2\
xcopy /E /I C:\Zabbix\zabbix-7.2.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]: # ({/22d5c8f4-1d340ab8})
