3 Compilando Zabbix agent en macOS

Descripción general

Esta sección muestra como compilar los binarios del Zabbix macOS agent desde el código fuente con o sin TLS.

Prerrequisitos

Va a necesitar herramientas de desarrollador de línea de comandos (Xcode no es necesario), Automake, pkg-config y PCRE (v8.x) o PCRE2 (v10.x). Si quiere compilar binarios para el agent con TLS, también requerirá OpenSSL o GnuTLS.

Para instalar Automake y pkg-config, ser requerirá el administrador de paquetes Homebrew de https://brew.sh/. Para instalarlo, abra una terminal y ejecute el siguiente comando:

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

Después instale Automake y pkg-config:

$ brew install automake
       $ brew install pkg-config

La preparación de las librerías PCRE, OpenSSL y GnuTLS depende de la manera en cómo serán ligadas al agent.

Si usted tiene la intención de ejecutar los binarios del agent en una máquina macOS que ya cuenta con estas librerías, es posible utilizar las librerías pre-compiladas provistas por Homebrew. Por lo general estas son maquinas macOS que utilizan Homebrew para compilar los binarios de Zabbix agent para otros propósitos.

Si los binarios del agent van a ser utilizados en máquinas macOS que no cuentan con la versión compartida de las librerías, será necesario compilar librerías estáticas desde el código fuente y ligar Zabbix agent a ellas.

Compilando binarios del agente con librerías compartidas

Instale PCRE2 (en caso de ser necesario, reemplace pcre2 con pcre en los siguientes comandos):

$ brew install pcre2

Cuando se compila con TLS, instale OpenSSL y/o GnuTLS:

$ brew install openssl
       $ brew install gnutls

Descargue el código fuente de Zabbix:

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

Compilar el agente sin TLS:

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

Compilar el agente con OpenSSL:

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

Compilar el agente con 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

Compilando binarios del agent con librerías estáticas sin TLS

Asumamos que las librerías estáticas de PCRE serán instaladas en $HOME/static-libs. Utilizaremos PCRE2 10.39.

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

Descargue y compile PCRE con soporte para propiedades 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

Descargue el código fuente Zabbix y compile el 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

Compilando binarios del agent con librerías estáticas y OpenSSL

Cuando compilamos OpenSSL, es recomendado ejecutar make test tras una compilación exitosa. Incluso cuando nuestra compilación fue exitosa, las pruebas en ocasiones fallan. Si este fuese el caso, los problemas tendrán que ser investigados y resueltos antes de continuar.

Asumamos que las librerías estáticas de PCRE y OpenSSL serán instaladas en $HOME/static-libs. Usaremos PCRE2 10.39 y OpenSSL 1.1.1a.

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

Ahora compilaremos las librerías estáticas en static-libs-source:

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

Descargar y compilar PCRE con soporte a propiedades 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 ..

Descargar y compilar 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 ..

Descargar el código fuente Zabbix y compilar el 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

Compilando binarios del agent con librerías estáticas y GnuTLS

GnuTLS depende de las librerías Nettle crypto backend y GMP arithmetic. En lugar de usar todas las librerías GMP, esta guia usará mini-gmp que es incluido en Nettle.

Cuando compulamos GnuTLS y Nettle, es recomendado ejecutar make check después de una compilación exitosa. Incluso cuando nuestra compilación fue exitosa, las pruebas en ocasiones fallan. Si este fuese el caso, los problemas tendrán que ser investigados y resueltos antes de continuar.

Asumamos que las librerías estáticas de PCRE, Nettle y GnuTLS serán instaladas en $HOME/static-libs. Utilizaremos PCRE2 10.39, Nettle 3.4.1 y 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"

Ahora compilaremos las librerías estáticas en static-libs-source:

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

Descargar y compilar 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 ..

Descargar y compilar 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 ..

Descargar el código fuente Zabbix y compilar el 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