[comment]: # aside: 5

[comment]: # ({22c598e9-22c598e9})
# Compilation de l'agent Zabbix 2 sous Windows

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

[comment]: # ({3f913083-84651997})
#### Aperçu

Cette page montre comment compiler Zabbix agent 2 à partir des sources sous Windows 10 (64 bits ou 32 bits).

Les versions 32 bits et 64 bits peuvent toutes deux être compilées sur une plateforme 64 bits, mais seule la version 32 bits peut être compilée sur une plateforme 32 bits.

La compilation de Zabbix agent 2 nécessite :

- les outils de compilation MinGW
- le langage de programmation Go
- OpenSSL (pour les fonctionnalités de [chiffrement](/manual/encryption) dans Zabbix)
- PCRE2 (Perl Compatible Regular Expressions ; pour les fonctionnalités de correspondance de motifs par expressions régulières dans Zabbix)

Vous pouvez compiler Zabbix agent 2 en utilisant l’une des méthodes suivantes :

- [Utilisation de vcpkg](#building-zabbix-agent-2-with-vcpkg) — une approche automatisée qui simplifie la gestion des dépendances à l’aide d’un gestionnaire de paquets C++.
- [Compilation manuelle](#building-zabbix-agent-2-manually) — une approche manuelle qui nécessite l’installation de toutes les dépendances avant de compiler l’agent.

::: noteimportant
Avant de commencer le processus de compilation, veuillez garder à l’esprit ce qui suit :<br><br>

- Pour exécuter les commandes, utilisez l’invite de commandes, lancée par un utilisateur disposant de permissions suffisantes pour écrire dans des dossiers protégés. Toutefois, lors de l’installation de [OpenSSL](#installing-openssl) et de [PCRE2](#installing-pcre2), utilisez le terminal MSYS2.
- Il est recommandé de créer un répertoire de travail dans `C:\Zabbix` pour tous les fichiers source et dossiers de compilation. Toutefois, les composants compilés doivent être installés dans `C:\Zabbix\x64` (ou `C:\Zabbix\x86` pour les compilations 32 bits).

:::

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

[comment]: # ({6a456e90-0c4c3de2})
#### Compilation de Zabbix agent 2 avec vcpkg

Cette section contient des instructions pour compiler Zabbix agent avec [vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/overview), un gestionnaire de paquets qui simplifie la gestion des dépendances et l'intégration avec les projets C++.

1\. Téléchargez et installez [Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022).
Pendant l'installation, veillez à sélectionner la charge de travail *Desktop development with C++*, qui inclut le gestionnaire de paquets vcpkg.

2\. Téléchargez et installez [Go](https://go.dev/dl/) (disponible sous forme d'installateur MSI).
Pendant l'installation, veillez à spécifier `C:\Zabbix\Go` comme dossier d'installation.

3\. Téléchargez la distribution [MinGW](https://github.com/niXman/mingw-builds-binaries/releases) qui utilise la bibliothèque d'exécution Microsoft Visual C ; par exemple :

- Pour les compilations 64 bits : `x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z`
- Pour les compilations 32 bits : `i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z`

::: noteimportant
La version de MinGW doit satisfaire aux [exigences minimales](https://go.dev/wiki/MinimumRequirements#cgo).
:::

Ensuite, extrayez-la dans `C:\Zabbix\mingw64` (ou `C:\Zabbix\mingw32` pour les compilations 32 bits).

4\. Initialisez vcpkg et installez les dépendances requises pour compiler Zabbix agent 2 (notez que cela peut prendre un certain temps) :

```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\. Téléchargez l'[archive des sources Zabbix](https://www.zabbix.com/download_sources#pre-release) et extrayez-la dans `C:\Zabbix\zabbix-8.0.0`.

6\. Accédez au répertoire de compilation de Zabbix (`C:\Zabbix\zabbix-8.0.0\build\mingw`) et créez le script `build.bat` suivant :

- Pour les compilations 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
```

- Pour les compilations 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\. Compilez Zabbix agent 2 en exécutant le script :

```bash
build.bat
```

Après la compilation, le binaire de Zabbix agent 2 se trouvera dans `C:\Zabbix\zabbix-8.0.0\bin\win64` (pour les compilations 64 bits) ou `C:\Zabbix\zabbix-8.0.0\bin\win32` (pour les compilations 32 bits).
Les fichiers de configuration de Zabbix agent 2 se trouvent dans `C:\Zabbix\zabbix-8.0.0\src\go\conf`.

Pour exécuter l'agent, copiez `zabbix_agent2.exe` et ses fichiers de configuration dans un dossier dédié (par exemple, `C:\Zabbix\agent2`), puis lancez l'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
```

Si nécessaire, poursuivez avec la compilation des [plugins chargeables](/manual/concepts/agent2/loadable-plugins) de Zabbix agent 2.

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

[comment]: # ({e4d7bbb2-83a3edaf})
##### Compilation des plugins chargeables de Zabbix agent 2

1\. Téléchargez le [code source du plugin Zabbix](https://cdn.zabbix.com/zabbix-agent2-plugins/sources/) correspondant à votre version de Zabbix agent 2 (par exemple, `zabbix-agent2-plugin-postgresql-8.0.0.tar.gz`) et extrayez-le dans `C:\Zabbix`.

::: noteimportant
Avant d'installer un plugin, veuillez consulter son fichier README.
Il peut contenir des exigences spécifiques et des instructions d'installation.
:::

2\. Accédez au répertoire du plugin extrait et compilez le plugin :

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

# Pour les compilations 64 bits :
mingw32-make ARCH=AMD64

# Pour les compilations 32 bits :
mingw32-make ARCH=x86
```

Après la compilation, le binaire du plugin Zabbix agent 2 et son fichier de configuration se trouveront dans le même répertoire du plugin.

L'exécutable du plugin peut être placé n'importe où, à condition qu'il puisse être chargé par Zabbix agent 2.
Spécifiez le chemin vers le binaire du plugin dans le fichier de configuration du plugin, par exemple dans postgresql.conf pour le plugin [PostgreSQL](/manual/concepts/agent2/agent2_params_plugin/postgresql_plugin) :

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

Le chemin vers le fichier de configuration du plugin doit être spécifié dans le paramètre [Include](/manual/concepts/agent2/agent2_params_win#include) du fichier de configuration de Zabbix agent 2 :

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

Passez à la [configuration](/manual/concepts/agent2/agent2_params_plugin#plugin-configuration-principles) pour plus de détails sur la configuration des plugins.

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

[comment]: # ({b486021f-87d14870})
#### Compilation manuelle de Zabbix agent 2

::: noteimportant
Cette méthode de compilation de Zabbix agent 2 convient aux utilisateurs qui ont besoin d’un contrôle total sur l’environnement de compilation ou qui se trouvent dans un environnement restreint où [l’utilisation de vcpkg](#building-zabbix-agent-with-vcpkg) n’est pas possible.
:::

Cette section contient des instructions pour compiler manuellement Zabbix agent 2, notamment l’installation des outils de compilation et des dépendances requis, puis la compilation de l’agent.

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

[comment]: # ({9af55055-2a4da91c})
##### Configuration des outils de compilation

1\. Téléchargez et installez [MSYS2](https://www.msys2.org/) (disponible sous forme d'installateur MSI).
Pendant l'installation, veillez à spécifier `C:\Zabbix\msys64` comme dossier d'installation.

2\. Téléchargez et installez [Go](https://go.dev/dl/) (disponible sous forme d'installateur MSI ; voir les [versions de Go](/manual/installation/requirements#agent-2) actuellement prises en charge).
Pendant l'installation, veillez à spécifier `C:\Zabbix\Go` comme dossier d'installation.

3\. Téléchargez la [distribution MinGW](https://github.com/niXman/mingw-builds-binaries/releases) qui utilise la bibliothèque d'exécution Microsoft Visual C ; par exemple :

- Pour les compilations 64 bits : `x86_64-15.1.0-release-win32-seh-msvcrt-rt_v12-rev0.7z`
- Pour les compilations 32 bits : `i686-15.1.0-release-win32-dwarf-msvcrt-rt_v12-rev0.7z`

::: noteimportant
La version de MinGW doit satisfaire aux [exigences minimales](https://go.dev/wiki/MinimumRequirements#cgo).
:::

Ensuite, extrayez-la dans `C:\Zabbix\mingw64` (ou `C:\Zabbix\mingw32` pour les compilations 32 bits).

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

[comment]: # ({e5544a26-822e5b3f})
##### Installation d’OpenSSL

::: noteclassic
Pour compiler l’agent Zabbix sans prise en charge de TLS, passez à la section [Installation de PCRE2](#installing-pcre2).
:::

1\. Ouvrez le terminal MSYS2 MSYS avec des privilèges d’administrateur et exécutez les commandes suivantes :

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

2\. Téléchargez l’[archive des sources OpenSSL](https://openssl-library.org/source/) et extrayez-la dans `C:\Zabbix\openssl-3.5.0`.

3\. Accédez au répertoire OpenSSL extrait et créez le script `build.sh` suivant :

- Pour les compilations 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
```

- Pour les compilations 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
Assurez-vous de révoquer les droits d’écriture des utilisateurs non administrateurs sur le répertoire `C:\Zabbix\x64\OpenSSL-Win64-350-static`.
Sinon, l’agent chargera les paramètres SSL depuis un chemin pouvant être modifié par des utilisateurs non privilégiés, ce qui entraînera une vulnérabilité de sécurité potentielle.
:::

- L’option `no-shared` rend autonomes les bibliothèques statiques OpenSSL libcrypto.lib et libssl.lib, de sorte que les binaires Zabbix incluent OpenSSL sans nécessiter de DLL externes.
  Cela signifie que les binaires Zabbix peuvent être copiés sur d’autres machines Windows sans les bibliothèques OpenSSL ; toutefois, lorsqu’une nouvelle version corrective d’OpenSSL est publiée, l’agent Zabbix devra être recompilé.
- Sans l’option `no-shared`, Zabbix s’appuie sur les DLL OpenSSL à l’exécution.
  Cela signifie que les mises à jour d’OpenSSL peuvent ne pas nécessiter la recompilation de l’agent Zabbix ; toutefois, lors de la copie vers d’autres machines, les DLL OpenSSL doivent également être copiées.

Pour plus d’informations sur les autres options de configuration d’OpenSSL, consultez la [documentation OpenSSL](https://github.com/openssl/openssl/blob/master/INSTALL.md#configuration-options).

4\. Configurez et installez OpenSSL en exécutant le script (notez que cela peut prendre un certain temps) :

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

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

[comment]: # ({418b9da1-bf2f316b})
##### Installation de PCRE2

1\. Téléchargez [l’archive source de PCRE2](https://github.com/PCRE2Project/pcre2/releases/latest) et extrayez-la dans `C:\Zabbix\pcre2-10.45`.

2\. Ouvrez le terminal MSYS2 MSYS avec les privilèges d’administrateur.
Ensuite, créez un répertoire `build` dans le répertoire PCRE2 extrait et accédez-y :

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

3\. Configurez PCRE2 :

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

# For 32-bit builds:
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
Si des erreurs se produisent, il est recommandé de supprimer le cache CMake avant de tenter de répéter le processus de compilation CMake.
Le cache (`CMakeCachecache.txt`) se trouve dans le répertoire build du répertoire PCRE2 extrait.
:::

4\. Installez PCRE2 :

```bash
make install
```

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

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

1\. Téléchargez l’[archive des sources de Zabbix](https://www.zabbix.com/download_sources#pre-release) et extrayez-la dans `C:\Zabbix\zabbix-8.0.0`.

Si vous devez générer une archive des sources à partir du dépôt de sources brut (par exemple, pour appliquer des correctifs personnalisés ou compiler à partir du code source le plus récent), exécutez les commandes suivantes sur une machine **Linux** avec [Go](https://go.dev/) installé (requis pour configurer 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
```

Cela créera une archive des sources, qui pourra ensuite être copiée sur une machine Windows.

2\. Ouvrez l’invite de commandes avec les privilèges administrateur.
Ensuite, accédez au répertoire de compilation de Zabbix et compilez Zabbix agent ;
veillez à spécifier correctement les répertoires où OpenSSL et PCRE2 sont installés :

- Pour les compilations 64 bits :

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

# Avec prise en charge de TLS :
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2" OPENSSL="C:\Zabbix\x64\OpenSSL-Win64-350-static"

# Sans prise en charge de TLS :
mingw32-make ARCH=AMD64 PCRE2="C:\Zabbix\x64\PCRE2"
```

- Pour les compilations 32 bits :

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

# Avec prise en charge de TLS :
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2" OPENSSL="C:\Zabbix\x86\OpenSSL-Win64-350-static"

# Sans prise en charge de TLS :
mingw32-make ARCH=x86 PCRE2="C:\Zabbix\x86\PCRE2"
```

Après la compilation, le binaire de Zabbix agent 2 se trouvera dans `C:\Zabbix\zabbix-8.0.0\bin\win64` (ou `C:\Zabbix\zabbix-8.0.0\bin\win32` pour les compilations 32 bits).
Les fichiers de configuration de Zabbix agent 2 se trouvent dans `C:\Zabbix\zabbix-8.0.0\src\go\conf`.

Pour exécuter l’agent, copiez le binaire `zabbix_agent2.exe` et ses fichiers de configuration dans un dossier dédié (par exemple, `C:\Zabbix\agent2`), puis exécutez l’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
```

Si nécessaire, poursuivez avec la [compilation des plugins chargeables de Zabbix agent 2](#compiling-zabbix-agent-2-loadable-plugins).

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