[comment]: # aside: 8

[comment]: # ({0535e4cb-0535e4cb})
# Compilando o agent Zabbix no macOS

[comment]: # ({/0535e4cb-0535e4cb})

[comment]: # ({161fafaa-161fafaa})
#### Visão geral

Esta seção demonstra como compilar os binários do agent Zabbix para macOS a partir do código-fonte com ou sem TLS.

[comment]: # ({/161fafaa-161fafaa})

[comment]: # ({ad36333f-7e7224fc})
#### Pré-requisitos

Você precisará das ferramentas de desenvolvedor de linha de comando (Xcode não é necessário),
Automake, pkg-config e PCRE (v8.x) ou PCRE2 (v10.x). Se quiser compilar binários do agent
com TLS, também precisará de OpenSSL ou GnuTLS.

Para instalar o Automake e o pkg-config, você precisará do gerenciador de pacotes
Homebrew em <https://brew.sh/>. Para instalá-lo, abra o terminal e execute
o seguinte comando:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Em seguida, instale o Automake e o pkg-config:

    brew install automake
    brew install pkg-config

A preparação das bibliotecas PCRE, OpenSSL e GnuTLS depende da forma como elas
serão vinculadas ao agent.

Se você pretende executar os binários do agent em uma máquina macOS que já tenha
essas bibliotecas, pode usar bibliotecas pré-compiladas fornecidas pelo
Homebrew. Normalmente, essas são máquinas macOS que usam o Homebrew para
compilar binários do Zabbix agent ou para outros fins.

Se os binários do agent forem usados em máquinas macOS que não tenham a
versão compartilhada das bibliotecas, você deverá compilar bibliotecas estáticas
a partir do código-fonte e vincular o Zabbix agent a elas.

[comment]: # ({/ad36333f-7e7224fc})

[comment]: # ({8ee327a1-5e97a918})
#### Compilando binários do agent com bibliotecas compartilhadas

Instale o PCRE2 (substitua *pcre2* por *pcre* nos comandos abaixo, se necessário):

    brew install pcre2

Ao compilar com TLS, instale OpenSSL e/ou GnuTLS:

    brew install openssl
    brew install gnutls

Baixe o código-fonte do Zabbix:

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

Compile o agent sem TLS:

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

Compile o agent com OpenSSL:

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

Compile o agent com 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

[comment]: # ({/8ee327a1-5e97a918})

[comment]: # ({d64f422c-90fe7eb9})
#### Compilando binários do agent com bibliotecas estáticas sem TLS

Vamos supor que as bibliotecas estáticas do PCRE serão instaladas em
`$HOME/static-libs`. Usaremos o PCRE2 10.39.

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

Baixe e compile o PCRE com suporte a propriedades 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

Baixe o código-fonte do Zabbix e compile o 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

[comment]: # ({/d64f422c-90fe7eb9})

[comment]: # ({8ba21217-b985c38b})
#### Compilando binários do agent com bibliotecas estáticas com OpenSSL

Ao compilar o OpenSSL, é recomendável executar `make test` após a
compilação bem-sucedida. Mesmo que a compilação tenha sido bem-sucedida, os testes às vezes
falham. Se este for o caso, os problemas devem ser pesquisados e resolvidos
antes de continuar.

Vamos supor que as bibliotecas estáticas do PCRE e do OpenSSL serão instaladas em
`$HOME/static-libs`. Usaremos PCRE2 10.39 e OpenSSL 1.1.1a.

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

Vamos compilar as bibliotecas estáticas em `static-libs-source`:

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

Baixe e compile o PCRE com suporte a propriedades 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 ..

Baixe e compile o 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 ..

Baixe o código-fonte do Zabbix e compile o 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

[comment]: # ({/8ba21217-b985c38b})

[comment]: # ({d90d667e-8165604b})
#### Compilando binários do agent com bibliotecas estáticas com GnuTLS

O GnuTLS depende do backend criptográfico Nettle e da biblioteca aritmética GMP.
Em vez de usar a biblioteca GMP completa, este guia usará o mini-gmp, que está
incluído no Nettle.

Ao compilar o GnuTLS e o Nettle, é recomendável executar `make check`
após a compilação bem-sucedida. Mesmo que a compilação tenha sido bem-sucedida, os testes
às vezes falham. Se este for o caso, os problemas devem ser pesquisados e
resolvidos antes de continuar.

Vamos supor que as bibliotecas estáticas do PCRE, Nettle e GnuTLS serão
instaladas em `$HOME/static-libs`. Usaremos PCRE2 10.39, Nettle 3.4.1
e 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"

Vamos compilar as bibliotecas estáticas em `static-libs-source`:

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

Baixe e compile o 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 ..

Baixe e compile o 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 ..

Baixe o código-fonte do Zabbix e compile o 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

[comment]: # ({/d90d667e-8165604b})
