Compilation de l'agent Zabbix sur macOS

Aperçu

Cette section montre comment créer des binaires d'agent Zabbix macOS à partir de sources avec ou sans TLS.

Prérequis

Vous aurez besoin des outils de développement en ligne de commande (Xcode n’est pas requis), d’Automake, de pkg-config et de PCRE (v8.x) ou PCRE2 (v10.x). Si vous souhaitez compiler des binaires d’agent avec TLS, vous aurez également besoin d’OpenSSL ou de GnuTLS.

Pour installer Automake et pkg-config, vous aurez besoin du gestionnaire de paquets Homebrew disponible sur https://brew.sh/. Pour l’installer, ouvrez un terminal et exécutez la commande suivante :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Installez ensuite Automake et pkg-config :

brew install automake
brew install pkg-config

La préparation des bibliothèques PCRE, OpenSSL et GnuTLS dépend de la manière dont elles seront liées à l’agent.

Si vous prévoyez d’exécuter les binaires de l’agent sur une machine macOS qui dispose déjà de ces bibliothèques, vous pouvez utiliser les bibliothèques précompilées fournies par Homebrew. Il s’agit généralement de machines macOS qui utilisent Homebrew pour compiler les binaires de l’agent Zabbix ou à d’autres fins.

Si les binaires de l’agent doivent être utilisés sur des machines macOS qui ne disposent pas de la version partagée des bibliothèques, vous devez compiler des bibliothèques statiques à partir des sources et lier l’agent Zabbix avec celles-ci.

Compilation des binaires de l’agent avec des bibliothèques partagées

Installez PCRE2 (remplacez pcre2 par pcre dans les commandes ci-dessous, si nécessaire) :

brew install pcre2

Lors de la compilation avec TLS, installez OpenSSL et/ou GnuTLS :

brew install openssl
brew install gnutls

Téléchargez les sources de Zabbix :

git clone https://git.zabbix.com/scm/zbx/zabbix.git

Compilez l’agent sans TLS :

cd zabbix
./bootstrap.sh
./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6
make
make install

Compilez l’agent avec OpenSSL :

cd zabbix
./bootstrap.sh
./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-openssl=/usr/local/opt/openssl
make
make install

Compilez l’agent avec GnuTLS :

cd zabbix-source/
./bootstrap.sh
./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-gnutls=/usr/local/opt/gnutls
make
make install

Compilation des binaires de l'agent avec des bibliothèques statiques sans TLS

Supposons que les bibliothèques statiques PCRE seront installées dans $HOME/static-libs. Nous utiliserons PCRE2 10.39.

PCRE_PREFIX="$HOME/static-libs/pcre2-10.39"

Téléchargez et compilez PCRE avec la prise en charge des propriétés Unicode :

mkdir static-libs-source
cd static-libs-source
curl --remote-name https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.tar.gz
tar xf pcre2-10.39.tar.gz
cd pcre2-10.39
./configure --prefix="$PCRE_PREFIX" --disable-shared --enable-static --enable-unicode-properties
make
make check
make install

Téléchargez le code source de Zabbix et compilez l'agent :

git clone https://git.zabbix.com/scm/zbx/zabbix.git
cd zabbix
./bootstrap.sh
./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-libpcre2="$PCRE_PREFIX"
make
make install

Compilation des binaires de l'agent avec des bibliothèques statiques et OpenSSL

Lors de la compilation d'OpenSSL, il est recommandé d'exécuter make test après une compilation réussie. Même si la compilation a réussi, les tests échouent parfois. Si c'est le cas, les problèmes doivent être analysés et résolus avant de continuer.

Supposons que les bibliothèques statiques PCRE et OpenSSL seront installées dans $HOME/static-libs. Nous utiliserons PCRE2 10.39 et OpenSSL 1.1.1a.

PCRE_PREFIX="$HOME/static-libs/pcre2-10.39"
OPENSSL_PREFIX="$HOME/static-libs/openssl-1.1.1a"

Compilons les bibliothèques statiques dans static-libs-source :

mkdir static-libs-source
cd static-libs-source

Téléchargez et compilez PCRE avec la prise en charge des propriétés Unicode :

curl --remote-name https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.tar.gz
tar xf pcre2-10.39.tar.gz
cd pcre2-10.39
./configure --prefix="$PCRE_PREFIX" --disable-shared --enable-static --enable-unicode-properties
make
make check
make install
cd ..

Téléchargez et compilez OpenSSL :

curl --remote-name https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar xf openssl-1.1.1a.tar.gz
cd openssl-1.1.1a
./Configure --prefix="$OPENSSL_PREFIX" --openssldir="$OPENSSL_PREFIX" --api=1.1.0 no-shared no-capieng no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method darwin64-x86_64-cc
make
make test
make install_sw
cd ..

Téléchargez le code source de Zabbix et compilez l'agent :

git clone https://git.zabbix.com/scm/zbx/zabbix.git
cd zabbix
./bootstrap.sh
./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-libpcre2="$PCRE_PREFIX" --with-openssl="$OPENSSL_PREFIX"
make
make install

Compilation des binaires de l'agent avec des bibliothèques statiques avec GnuTLS

GnuTLS dépend du backend cryptographique Nettle et de la bibliothèque arithmétique GMP. Au lieu d'utiliser la bibliothèque GMP complète, ce guide utilisera mini-gmp, qui est incluse dans Nettle.

Lors de la compilation de GnuTLS et de Nettle, il est recommandé d'exécuter make check après une compilation réussie. Même si la compilation a réussi, les tests échouent parfois. Si c'est le cas, les problèmes doivent être analysés et résolus avant de continuer.

Supposons que les bibliothèques statiques PCRE, Nettle et GnuTLS seront installées dans $HOME/static-libs. Nous utiliserons PCRE2 10.39, Nettle 3.4.1 et GnuTLS 3.6.5.

PCRE_PREFIX="$HOME/static-libs/pcre2-10.39"
NETTLE_PREFIX="$HOME/static-libs/nettle-3.4.1"
GNUTLS_PREFIX="$HOME/static-libs/gnutls-3.6.5"

Compilons les bibliothèques statiques dans static-libs-source :

mkdir static-libs-source
cd static-libs-source

Téléchargez et compilez Nettle :

curl --remote-name https://ftp.gnu.org/gnu/nettle/nettle-3.4.1.tar.gz
tar xf nettle-3.4.1.tar.gz
cd nettle-3.4.1
./configure --prefix="$NETTLE_PREFIX" --enable-static --disable-shared --disable-documentation --disable-assembler --enable-x86-aesni --enable-mini-gmp
make
make check
make install
cd ..

Téléchargez et compilez GnuTLS :

curl --remote-name https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.5.tar.xz
tar xf gnutls-3.6.5.tar.xz
cd gnutls-3.6.5
PKG_CONFIG_PATH="$NETTLE_PREFIX/lib/pkgconfig" ./configure --prefix="$GNUTLS_PREFIX" --enable-static --disable-shared --disable-guile --disable-doc --disable-tools --disable-libdane --without-idn --without-p11-kit --without-tpm --with-included-libtasn1 --with-included-unistring --with-nettle-mini
make
make check
make install
cd ..

Téléchargez le code source de Zabbix et compilez l'agent :

git clone https://git.zabbix.com/scm/zbx/zabbix.git
cd zabbix
./bootstrap.sh
CFLAGS="-Wno-unused-command-line-argument -framework Foundation -framework Security" \
> LIBS="-lgnutls -lhogweed -lnettle" \
> LDFLAGS="-L$GNUTLS_PREFIX/lib -L$NETTLE_PREFIX/lib" \
> ./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-libpcre2="$PCRE_PREFIX" --with-gnutls="$GNUTLS_PREFIX"
make
make install