[comment]: # aside: 5

[comment]: # ({22c598e9-22c598e9})
# Compilando o Zabbix agent 2 no Windows

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

[comment]: # ({3f913083-84651997})
#### Visão geral

Esta página demonstra como compilar o Zabbix agent 2 a partir do código-fonte no Windows 10 (64 bits ou 32 bits).

As versões de 32 bits e 64 bits podem ser compiladas em uma plataforma de 64 bits, mas apenas a versão de 32 bits pode ser compilada em uma plataforma de 32 bits.

A compilação do Zabbix agent 2 requer:

- Ferramentas de compilação MinGW
- Linguagem de programação Go
- OpenSSL (para recursos de [criptografia](/manual/encryption) no Zabbix)
- PCRE2 (Expressões Regulares Compatíveis com Perl; para recursos de correspondência de padrões de expressões regulares no Zabbix)

Você pode compilar o Zabbix agent 2 usando um dos seguintes métodos:

- [Usando vcpkg](#building-zabbix-agent-2-with-vcpkg)—uma abordagem automatizada que simplifica o gerenciamento de dependências usando um gerenciador de pacotes C++.
- [Compilação manual](#building-zabbix-agent-2-manually)—uma abordagem manual que requer a instalação de todas as dependências antes de compilar o agent.

::: noteimportant
Antes de iniciar o processo de compilação, por favor, tenha em mente:<br><br>

- Para executar comandos, use o Prompt de Comando, iniciado por um usuário com permissões suficientes para gravar em pastas protegidas. No entanto, ao instalar o [OpenSSL](#installing-openssl) e o [PCRE2](#installing-pcre2), use o terminal MSYS2.
- Recomenda-se criar um diretório de trabalho em `C:\Zabbix` para todos os arquivos-fonte e pastas de compilação. No entanto, os componentes compilados devem ser instalados em `C:\Zabbix\x64` (ou `C:\Zabbix\x86` para compilações de 32 bits).

:::

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

[comment]: # ({6a456e90-0c4c3de2})
#### Compilando o Zabbix agent 2 com vcpkg

Esta seção contém instruções para compilar o Zabbix agent com [vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/overview), um gerenciador de pacotes que simplifica o gerenciamento de dependências e a integração com projetos C++.

1\. Baixe e instale o [Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022).
Durante a instalação, certifique-se de selecionar a carga de trabalho *Desktop development with C++*, que inclui o gerenciador de pacotes vcpkg.

2\. Baixe e instale o [Go](https://go.dev/dl/) (disponível como instalador MSI).
Durante a instalação, certifique-se de especificar `C:\Zabbix\Go` como pasta de instalação.

3\. Baixe a [distribuição MinGW](https://github.com/niXman/mingw-builds-binaries/releases) que usa a biblioteca de runtime Microsoft Visual C; por exemplo:

- Para compilações de 64 bits: `x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z`
- Para compilações de 32 bits: `i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z`

::: noteimportant
A versão do MinGW deve atender aos [requisitos mínimos](https://go.dev/wiki/MinimumRequirements#cgo).
:::

Em seguida, extraia-o para `C:\Zabbix\mingw64` (ou `C:\Zabbix\mingw32` para compilações de 32 bits).

4\. Inicialize o vcpkg e instale as dependências necessárias para compilar o Zabbix agent 2 (observe que isso pode levar algum tempo):

```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\. Baixe o [arquivo-fonte do Zabbix](https://www.zabbix.com/download_sources#pre-release) e extraia-o para `C:\Zabbix\zabbix-8.0.0`.

6\. Navegue até o diretório de compilação do Zabbix (`C:\Zabbix\zabbix-8.0.0\build\mingw`) e crie o seguinte script `build.bat`:

- Para compilações de 64 bits:

```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
```

- Para compilações de 32 bits:

```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\. Compile o Zabbix agent 2 executando o script:

```bash
build.bat
```

Após a compilação, o binário do Zabbix agent 2 estará localizado em `C:\Zabbix\zabbix-8.0.0\bin\win64` (para compilações de 64 bits) ou `C:\Zabbix\zabbix-8.0.0\bin\win32` (para compilações de 32 bits).
Os arquivos de configuração do Zabbix agent 2 estão localizados em `C:\Zabbix\zabbix-8.0.0\src\go\conf`.

Para executar o agent, copie `zabbix_agent2.exe` e seus arquivos de configuração para uma pasta dedicada (por exemplo, `C:\Zabbix\agent2`) e então execute o agent:

```bash
mkdir C:\Zabbix\agent2

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

# For 32-bit builds:
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
```

Se necessário, continue com a compilação dos [plugins carregáveis](/manual/concepts/agent2/loadable-plugins) do Zabbix agent 2.

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

[comment]: # ({e4d7bbb2-83a3edaf})
##### Compilando plugins carregáveis do Zabbix agent 2

1\. Baixe o [código-fonte do plugin Zabbix](https://cdn.zabbix.com/zabbix-agent2-plugins/sources/) que corresponda à sua versão do Zabbix agent 2 (por exemplo, `zabbix-agent2-plugin-postgresql-8.0.0.tar.gz`) e extraia-o para `C:\Zabbix`.

::: noteimportant
Antes de instalar um plugin, verifique o arquivo README dele.
Ele pode conter requisitos específicos e instruções de instalação.
:::

2\. Navegue até o diretório do plugin extraído e compile o plugin:

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

# Para builds de 64 bits:
mingw32-make ARCH=AMD64

# Para builds de 32 bits:
mingw32-make ARCH=x86
```

Após a compilação, o binário do plugin do Zabbix agent 2 e seu arquivo de configuração estarão localizados no mesmo diretório do plugin.

O executável do plugin pode ser colocado em qualquer local, desde que possa ser carregado pelo Zabbix agent 2.
Especifique o caminho para o binário do plugin no arquivo de configuração do plugin, por exemplo, em postgresql.conf para o plugin [PostgreSQL](/manual/concepts/agent2/agent2_params_plugin/postgresql_plugin):

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

O caminho para o arquivo de configuração do plugin deve ser especificado no parâmetro [Include](/manual/concepts/agent2/agent2_params_win#include) do arquivo de configuração do Zabbix agent 2:

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

Acesse [configuração](/manual/concepts/agent2/agent2_params_plugin#plugin-configuration-principles) para mais detalhes sobre a configuração de plugins.

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

[comment]: # ({b486021f-87d14870})
#### Compilando o Zabbix agent 2 manualmente

::: noteimportant
Este método de compilação do Zabbix agent 2 é adequado para usuários que precisam de controle total sobre o ambiente de compilação ou estão em um ambiente restrito onde [usar o vcpkg](#building-zabbix-agent-with-vcpkg) não é possível.
:::

Esta seção contém instruções para compilar o Zabbix agent 2 manualmente, o que inclui instalar as ferramentas de compilação e dependências necessárias e, em seguida, compilar o agent.

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

[comment]: # ({9af55055-2a4da91c})
##### Configurando as ferramentas de build

1\. Baixe e instale [MSYS2](https://www.msys2.org/) (disponível como instalador MSI).
Durante a instalação, certifique-se de especificar `C:\Zabbix\msys64` como a pasta de instalação.

2\. Baixe e instale [Go](https://go.dev/dl/) (disponível como instalador MSI; veja as [versões do Go](/manual/installation/requirements#agent-2) atualmente suportadas).
Durante a instalação, certifique-se de especificar `C:\Zabbix\Go` como a pasta de instalação.

3\. Baixe a [distribuição MinGW](https://github.com/niXman/mingw-builds-binaries/releases) que usa a biblioteca de runtime Microsoft Visual C; por exemplo:

- Para builds de 64 bits: `x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z`
- Para builds de 32 bits: `i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z`

::: noteimportant
A versão do MinGW deve atender aos [requisitos mínimos](https://go.dev/wiki/MinimumRequirements#cgo).
:::

Em seguida, extraia-o para `C:\Zabbix\mingw64` (ou `C:\Zabbix\mingw32` para builds de 32 bits).

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

[comment]: # ({e5544a26-822e5b3f})
##### Instalando o OpenSSL

::: noteclassic
Para compilar o agent do Zabbix sem suporte a TLS, vá para a seção [Instalando o PCRE2](#installing-pcre2).
:::

1\. Abra o terminal MSYS2 MSYS com privilégios de administrador e execute os seguintes comandos:

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

2\. Baixe o [arquivo de origem do OpenSSL](https://openssl-library.org/source/) e extraia-o para `C:\Zabbix\openssl-3.5.0`.

3\. Navegue até o diretório extraído do OpenSSL e crie o seguinte script `build.sh`:

- Para builds de 64 bits:

```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
```

- Para builds de 32 bits:

```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
Certifique-se de revogar o acesso de gravação de usuários não administradores ao diretório `C:\Zabbix\x64\OpenSSL-Win64-350-static`.
Caso contrário, o agent carregará as configurações SSL de um caminho que pode ser modificado por usuários sem privilégios, resultando em uma potencial vulnerabilidade de segurança.
:::

- A opção `no-shared` faz com que as bibliotecas estáticas libcrypto.lib e libssl.lib do OpenSSL sejam autossuficientes, de modo que os binários do Zabbix incluam o OpenSSL sem precisar de DLLs externas.
  Isso significa que os binários do Zabbix podem ser copiados para outras máquinas Windows sem as bibliotecas do OpenSSL; no entanto, quando uma nova versão de correção de bug do OpenSSL for lançada, o agent do Zabbix precisará ser recompilado.
- Sem a opção `no-shared`, o Zabbix depende das DLLs do OpenSSL em tempo de execução.
  Isso significa que as atualizações do OpenSSL podem não exigir a recompilação do agent do Zabbix; no entanto, ao copiá-lo para outras máquinas, as DLLs do OpenSSL também devem ser copiadas.

Para mais informações sobre outras opções de configuração do OpenSSL, consulte a [documentação do OpenSSL](https://github.com/openssl/openssl/blob/master/INSTALL.md#configuration-options).

4\. Configure e instale o OpenSSL executando o script (observe que isso pode levar algum tempo):

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

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

[comment]: # ({418b9da1-bf2f316b})
##### Instalando o PCRE2

1\. Baixe o [arquivo fonte do PCRE2](https://github.com/PCRE2Project/pcre2/releases/latest) e extraia para `C:\Zabbix\pcre2-10.45`.

2\. Abra o terminal MSYS2 MSYS com privilégios de administrador.
Em seguida, crie um diretório `build` no diretório extraído do PCRE2 e navegue até ele:

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

3\. Configure o PCRE2:

```bash
# Para builds 64-bit:
export PATH="/c/Zabbix/mingw64/bin:$PATH"
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-O2 -g" -DCMAKE_INSTALL_PREFIX="/c/Zabbix/x64/PCRE2" ..

# Para builds 32-bit:
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
Se ocorrerem erros, recomenda-se excluir o cache do CMake antes de tentar repetir o processo de build do CMake.
O cache (`CMakeCachecache.txt`) pode ser localizado no diretório build do diretório extraído do PCRE2.
:::

4\. Instale o PCRE2:

```bash
make install
```

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

[comment]: # ({ffffd3cc-1d340ab8})
##### Compilando o Zabbix agent 2

1\. Baixe o [arquivo fonte do Zabbix](https://www.zabbix.com/download_sources#pre-release) e extraia-o para `C:\Zabbix\zabbix-8.0.0`.

Se você precisar gerar um arquivo fonte a partir do repositório de código-fonte bruto (por exemplo, para aplicar patches personalizados ou compilar a partir do código-fonte mais recente), execute os seguintes comandos em uma máquina **Linux** com o [Go](https://go.dev/) instalado (necessário para configurar o Zabbix agent 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
```

Isso criará um arquivo fonte, que pode então ser copiado para uma máquina Windows.

2\. Abra o Prompt de Comando com privilégios de administrador.
Em seguida, navegue até o diretório de build do Zabbix e compile o Zabbix agent;
certifique-se de especificar corretamente os diretórios onde o OpenSSL e o PCRE2 estão instalados:

- Para builds 64-bit:

```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

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

# Sem suporte a TLS:
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2"
```

- Para builds 32-bit:

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

# Com suporte a TLS:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2" OPENSSL="C:\Zabbix\x86\OpenSSL-Win64-350-static"

# Sem suporte a TLS:
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2"
```

Após a compilação, o binário do Zabbix agent 2 estará localizado em `C:\Zabbix\zabbix-8.0.0\bin\win64` (ou `C:\Zabbix\zabbix-8.0.0\bin\win32` para builds 32-bit).
Os arquivos de configuração do Zabbix agent 2 estão localizados em `C:\Zabbix\zabbix-8.0.0\src\go\conf`.

Para executar o agent, copie o binário `zabbix_agent2.exe` e seus arquivos de configuração para uma pasta dedicada (por exemplo, `C:\Zabbix\agent2`) e então execute o agent:

```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
```

Se necessário, continue com a [compilação dos plugins carregáveis do Zabbix agent 2](#compiling-zabbix-agent-2-loadable-plugins).

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