[comment]: # aside: 8

[comment]: # ({0535e4cb-0535e4cb})
# macOSでのZabbixエージェントのビルド

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

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

このセクションでは、TLSの有無にかかわらず、ソースからZabbix macOSエージェントのバイナリをビルドする方法を説明します。

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

[comment]: # ({ad36333f-7e7224fc})
#### 前提条件

コマンドライン開発ツール（Xcodeは不要）、Automake、pkg-config、PCRE（v8.x）またはPCRE2（v10.x）が必要です。TLS対応のエージェント
バイナリをビルドする場合は、OpenSSLまたはGnuTLSも必要です。

Automakeとpkg-configをインストールするには、<https://brew.sh/> のHomebrewパッケージ
マネージャーが必要です。インストールするには、ターミナルを開いて次のコマンドを実行
してください。

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

次に、Automakeとpkg-configをインストールします。

    brew install automake
    brew install pkg-config

PCRE、OpenSSL、GnuTLSライブラリの準備方法は、それらをエージェントにどのように
リンクするかによって異なります。

これらのライブラリがすでに存在するmacOSマシンでエージェントバイナリを実行する
予定であれば、Homebrewが提供するプリコンパイル済みライブラリを使用できます。
これは通常、Zabbixエージェントバイナリのビルドやその他の目的でHomebrewを使用している
macOSマシンです。

共有版のライブラリがないmacOSマシンでエージェントバイナリを使用する場合は、
ソースから静的ライブラリをコンパイルし、それらとZabbixエージェントをリンクする
必要があります。

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

[comment]: # ({8ee327a1-5e97a918})
#### 共有ライブラリを使用したエージェントバイナリのビルド

PCRE2をインストール (必要に応じて、以下のコマンドの*pcre2*を*pcre*に置き換えてください)。

    brew install pcre2

TLSでビルドする場合はOpenSSLとGnuTLSの両方、あるいはどちらかをインストール。

    brew install openssl
    brew install gnutls

Zabbixソースをダウンロード。

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

TLSなしでエージェントをビルド。

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

OpenSSLを使用してエージェントをビルド。

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

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})
#### TLSを使用しない静的ライブラリを使用したエージェントバイナリのビルド

`$HOME/static-libs`にPCRE静的ライブラリがインストールされると仮定します。PCRE2 10.39を使用します。

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

UnicodeプロパティをサポートするPCREをダウンロードしてビルドします。

    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

Zabbixソースとビルドエージェントをダウンロードします。

    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})
#### OpenSSLと静的ライブラリを使用してエージェントバイナリをビルドする

OpenSSLをビルドするとき、ビルドが成功した後に`make test`を実行することをお勧めします。
ビルドが成功した場合でも、テストが失敗することがあります。 この場合は、続行する前に問題を調査して解決する必要があります。

PCREとOpenSSLの静的ライブラリが`$HOME/static-libs`にインストールされると仮定します。PCRE2 10.39とOpenSSL 1.1.1aを使用します。

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

`static-libs-source`で静的ライブラリをビルドします。

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

UnicodeプロパティをサポートするPCREをダウンロードしてビルドする。

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

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

Zabbixソースとビルドエージェントをダウンロードする。

    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})
#### GnuTLSと静的ライブラリを使用してエージェントバイナリをビルドする

GnuTLSは、Nettle暗号バックエンドとGMP演算ライブラリに依存しています。
完全なGMPライブラリを使用する代わりに、このガイドでは、Nettleに含まれているmini-gmpを使用します。

GnuTLSとNettleをビルドするときは、ビルドが成功した後に`make check`を実行することをお勧めします。
ビルドが成功した場合でも、テストが失敗することがあります。 この場合は、続行する前に問題を調査して解決する必要があります。

PCRE、Nettle、およびGnuTLS静的ライブラリが`$HOME/static-libs`にインストールされると仮定します。
PCRE2 10.39、Nettle 3.4.1、および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"

`static-libs-source`で静的ライブラリをビルドします。

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

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

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

Zabbixソースとビルドエージェントをダウンロードをします。

    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})
