[comment]: # aside: 5

[comment]: # ({22c598e9-22c598e9})
# Сборка Zabbix агент 2 в Windows

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

[comment]: # ({3f913083-84651997})
#### Обзор

На этой странице показано, как собрать Zabbix агент 2 из исходных кодов в Windows 10 (64-разрядной или 32-разрядной).

И 32-разрядные, и 64-разрядные версии можно собрать на 64-разрядной платформе, но на 32-разрядной платформе можно собрать только 32-разрядную версию.

Для сборки Zabbix агент 2 требуется:

- инструменты сборки MinGW
- язык программирования Go
- OpenSSL (для возможностей [шифрования](/manual/encryption) в Zabbix)
- PCRE2 (Perl Compatible Regular Expressions; для возможностей сопоставления с образцом с использованием регулярных выражений в Zabbix)

Вы можете собрать Zabbix агент 2 одним из следующих способов:

- [С использованием vcpkg](#building-zabbix-agent-2-with-vcpkg) — автоматизированный подход, упрощающий управление зависимостями с помощью менеджера пакетов C++.
- [Ручная сборка](#building-zabbix-agent-2-manually) — ручной подход, требующий установки всех зависимостей перед компиляцией агента.

::: noteimportant
Перед началом процесса сборки обратите внимание на следующее:<br><br>

- Для выполнения команд используйте командную строку, запущенную пользователем с достаточными правами для записи в защищённые папки. Однако при установке [OpenSSL](#installing-openssl) и [PCRE2](#installing-pcre2) используйте терминал MSYS2.
- Рекомендуется создать рабочий каталог `C:\Zabbix` для всех исходных файлов и папок сборки. Однако скомпилированные компоненты следует устанавливать в `C:\Zabbix\x64` (или `C:\Zabbix\x86` для 32-разрядных сборок).

:::

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

[comment]: # ({6a456e90-0c4c3de2})
#### Сборка Zabbix agent 2 с помощью vcpkg

В этом разделе приведены инструкции по сборке Zabbix agent с использованием [vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/overview) — менеджера пакетов, который упрощает управление зависимостями и интеграцию с проектами на C++.

1\. Скачайте и установите [Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022).
Во время установки обязательно выберите рабочую нагрузку *Desktop development with C++*, которая включает менеджер пакетов vcpkg.

2\. Скачайте и установите [Go](https://go.dev/dl/) (доступен в виде MSI-установщика).
Во время установки обязательно укажите `C:\Zabbix\Go` в качестве папки установки.

3\. Скачайте [дистрибутив MinGW](https://github.com/niXman/mingw-builds-binaries/releases), использующий библиотеку времени выполнения Microsoft Visual C; например:

- Для 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`

::: noteimportant
Версия MinGW должна соответствовать [минимальным требованиям](https://go.dev/wiki/MinimumRequirements#cgo).
:::

Затем распакуйте его в `C:\Zabbix\mingw64` (или в `C:\Zabbix\mingw32` для 32-разрядных сборок).

4\. Инициализируйте vcpkg и установите зависимости, необходимые для сборки Zabbix agent 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#pre-release) и распакуйте его в `C:\Zabbix\zabbix-8.0.0`.

6\. Перейдите в каталог сборки Zabbix (`C:\Zabbix\zabbix-8.0.0\build\mingw`) и создайте следующий сценарий `build.bat`:

- Для 64-разрядных сборок:

```bash
:: Добавьте MinGW и Go в системную переменную `PATH` для текущего сеанса:
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
:: Добавьте MinGW и Go в системную переменную `PATH` для текущего сеанса:
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 agent 2, выполнив сценарий:

```bash
build.bat
```

После компиляции двоичный файл Zabbix agent 2 будет находиться в `C:\Zabbix\zabbix-8.0.0\bin\win64` (для 64-разрядных сборок) или в `C:\Zabbix\zabbix-8.0.0\bin\win32` (для 32-разрядных сборок).
Файлы конфигурации Zabbix agent 2 находятся в `C:\Zabbix\zabbix-8.0.0\src\go\conf`.

Чтобы запустить агент, скопируйте `zabbix_agent2.exe` и его файлы конфигурации в отдельную папку (например, `C:\Zabbix\agent2`), а затем запустите агент:

```bash
mkdir C:\Zabbix\agent2

# Для 64-разрядных сборок:
copy C:\Zabbix\zabbix-8.0.0\bin\win64\zabbix_agent2.exe C:\Zabbix\agent2\

# Для 32-разрядных сборок:
copy C:\Zabbix\zabbix-8.0.0\bin\win32\zabbix_agent2.exe C:\Zabbix\agent2\

copy C:\Zabbix\zabbix-8.0.0\src\go\conf\zabbix_agent2.win.conf C:\Zabbix\agent2\
xcopy /E /I C:\Zabbix\zabbix-8.0.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 agent 2 [загружаемых плагинов](/manual/concepts/agent2/loadable-plugins).

[comment]: # ({/6a456e90-0c4c3de2})

[comment]: # ({e4d7bbb2-83a3edaf})
##### Компиляция загружаемых плагинов Zabbix agent 2

1\. Скачайте [исходный код плагина Zabbix](https://cdn.zabbix.com/zabbix-agent2-plugins/sources/), соответствующий версии вашего Zabbix agent 2 (например, `zabbix-agent2-plugin-postgresql-8.0.0.tar.gz`), и распакуйте его в `C:\Zabbix`.

::: noteimportant
Перед установкой плагина обязательно ознакомьтесь с файлом README.
Он может содержать особые требования и инструкции по установке.
:::

2\. Перейдите в распакованный каталог плагина и скомпилируйте плагин:

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

# Для 64-разрядных сборок:
mingw32-make ARCH=AMD64

# Для 32-разрядных сборок:
mingw32-make ARCH=x86
```

После компиляции двоичный файл плагина Zabbix agent 2 и его файл конфигурации будут находиться в том же каталоге плагина.

Исполняемый файл плагина может быть размещен в любом месте, если он может быть загружен Zabbix agent 2.
Укажите путь к двоичному файлу плагина в файле конфигурации плагина, например в postgresql.conf для плагина [PostgreSQL](/manual/concepts/agent2/agent2_params_plugin/postgresql_plugin):

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

Путь к файлу конфигурации плагина должен быть указан в параметре [Include](/manual/concepts/agent2/agent2_params_win#include) файла конфигурации Zabbix agent 2:

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

Перейдите к разделу [настройка](/manual/concepts/agent2/agent2_params_plugin#plugin-configuration-principles) для получения дополнительных сведений о настройке плагинов.

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

[comment]: # ({b486021f-87d14870})
#### Сборка Zabbix агент 2 вручную

::: noteimportant
Этот метод сборки Zabbix агент 2 подходит для пользователей, которым требуется полный контроль над средой сборки, или которые работают в ограниченной среде, где [использование vcpkg](#building-zabbix-agent-with-vcpkg) невозможно.
:::

В этом разделе содержатся инструкции по ручной сборке Zabbix агент 2, включая установку необходимых инструментов сборки и зависимостей, а затем компиляцию агента.

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

[comment]: # ({9af55055-2a4da91c})
##### Настройка инструментов сборки

1\. Скачайте и установите [MSYS2](https://www.msys2.org/) (доступен в виде MSI-установщика).
Во время установки обязательно укажите `C:\Zabbix\msys64` в качестве папки установки.

2\. Скачайте и установите [Go](https://go.dev/dl/) (доступен в виде MSI-установщика; см. текущие поддерживаемые [версии Go](/manual/installation/requirements#agent-2)).
Во время установки обязательно укажите `C:\Zabbix\Go` в качестве папки установки.

3\. Скачайте [дистрибутив MinGW](https://github.com/niXman/mingw-builds-binaries/releases), который использует библиотеку времени выполнения Microsoft Visual C; например:

- Для 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`

::: noteimportant
Версия MinGW должна соответствовать [минимальным требованиям](https://go.dev/wiki/MinimumRequirements#cgo).
:::

Затем распакуйте его в `C:\Zabbix\mingw64` (или `C:\Zabbix\mingw32` для 32-разрядных сборок).

[comment]: # ({/9af55055-2a4da91c})

[comment]: # ({e5544a26-822e5b3f})
##### Установка OpenSSL

::: noteclassic
Чтобы скомпилировать агент Zabbix без поддержки TLS, перейдите к разделу [Установка 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` делает статические библиотеки OpenSSL libcrypto.lib и libssl.lib самодостаточными, поэтому двоичные файлы Zabbix включают OpenSSL без необходимости во внешних DLL.
  Это означает, что двоичные файлы Zabbix можно копировать на другие компьютеры Windows без библиотек OpenSSL; однако при выпуске новой версии OpenSSL с исправлениями ошибок потребуется повторно скомпилировать агент Zabbix.
- Без параметра `no-shared` Zabbix использует DLL OpenSSL во время выполнения.
  Это означает, что обновления OpenSSL могут не требовать повторной компиляции агента Zabbix; однако при копировании на другие компьютеры DLL OpenSSL также необходимо будет скопировать.

Для получения дополнительной информации о других параметрах конфигурации 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 с правами администратора.
Затем создайте каталог `build` в распакованном каталоге PCRE2 и перейдите в него:

```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`) может находиться в каталоге build распакованного каталога PCRE2.
:::

4\. Установите PCRE2:

```bash
make install
```

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

[comment]: # ({ffffd3cc-1d340ab8})
##### Компиляция Zabbix агент 2

1\. Загрузите [архив с исходным кодом Zabbix](https://www.zabbix.com/download_sources#pre-release) и распакуйте его в `C:\Zabbix\zabbix-8.0.0`.

Если вам нужно создать архив с исходным кодом из необработанного репозитория исходного кода (например, чтобы применить пользовательские патчи или выполнить сборку из последней версии исходного кода), выполните следующие команды на машине с **Linux** и установленным [Go](https://go.dev/) (требуется для настройки 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-8.0.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-8.0.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-8.0.0\bin\win64` (или `C:\Zabbix\zabbix-8.0.0\bin\win32` для 32-битных сборок).
Файлы конфигурации Zabbix агент 2 находятся в `C:\Zabbix\zabbix-8.0.0\src\go\conf`.

Чтобы запустить агент, скопируйте исполняемый файл `zabbix_agent2.exe` и его файлы конфигурации в отдельную папку (например, `C:\Zabbix\agent2`), а затем запустите агент:

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