Сборка Zabbix агента на macOS

Обзор

Этот раздел демонстрирует как собрать бинарные файлы Zabbix macOS агента из исходного кода с или без TLS.

Предварительные требования

Вам потребуются средства разработки командной строки (Xcode не потребуется), Automake, pkg-config and PCRE (v8.x). Если вы хотите собирать бинарные файла агента с TLS, вам также понадобится OpenSSL или GnuTLS.

Чтобы установить средства разработки командной строки, откройте терминал и выполните svn команду. Вместо того, чтобы отобразить короткое сообщение помощи, вам отобразится информационное сообщение об отсутствующих средствах разработки командной строки и откроется новое GUI окно, чтобы установить эти средства. В этом окне диалога нажмите "Установить".

Чтобы установить Automake и pkg-config, вам потребуется менеджер пакетов Homebrew с https://brew.sh/. Чтобы его установить, откройте терминал и выполните следующую команду:

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

Затем установите Automake и pkg-config:

$ brew install automake
       $ brew install pkg-config

Подготовка библиотек PCRE, OpenSSL и GnuTLS зависит от того, каким образом они будут скомпонованы с агентом.

Если вы намереваетесь запускать бинарные файлы агента на компьютере MacOS, на котором уже имеются эти библиотеки, вы можете использовать уже скомпилированные библиотеки, которые поставляются Homebrew. Обычно это машины macOS, которые используют Homebrew для сборки бинарных файлов Zabbix агента или для других целей.

Если бинарные файлы агента будут использоваться на компьютерах macOS, на которых отсутствуют разделяемые версии библиотек, вам потребуется скомпилировать статические версии этих библиотек из исходных кодов и скомпоновать Zabbix агента с ними.

Сбора бинарных файлов агента с разделяемыми библиотеками

Установите PCRE:

$ brew install pcre

При сборке с TLS, установите OpenSSL и / или GnuTLS:

$ brew install openssl
       $ brew install gnutls

Загрузите исходный код Zabbix:

$ svn export svn://svn.zabbix.com/trunk zabbix-source

Соберите агента без TLS:

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

Соберите агента с OpenSSL:

$ cd zabbix-source/
       $ ./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

Сборка бинарных файлов агента со статическими библиотеками без TLS

Давайте предположим, что статическая библиотека PCRE будут установлены в $HOME/static-libs. Мы будем использовать PCRE 8.42.

$ PCRE_PREFIX="$HOME/static-libs/pcre-8.42"

Загрузите и соберите PCRE с поддержкой Юникод свойств:

$ mkdir static-libs-source
       $ cd static-libs-source
       $ curl --remote-name https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
       $ tar xf pcre-8.42.tar.gz
       $ cd pcre-8.42
       $ ./configure --prefix="$PCRE_PREFIX" --disable-shared --enable-static --enable-unicode-properties
       $ make
       $ make check
       $ make install

Загрузите исходный код Zabbix и соберите агента:

$ svn export svn://svn.zabbix.com/trunk zabbix-source
       $ cd zabbix-source/
       $ ./bootstrap.sh
       $ ./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-libpcre="$PCRE_PREFIX"
       $ make
       $ make install

Сборка бинарных файлов агента со статическими библиотеками с OpenSSL

После успешной сборки OpenSSL рекомендуется выполнить make test. Даже, если сборка прошла успешно, тесты иногда завершаются с ошибками. Если это как раз ваш случай, тогда проблемы необходимо исследовать и решить перед тем как продолжить.

Давайте предположим, что статические библиотеки PCRE и OpenSSL будут установлены в $HOME/static-libs. Мы будем использовать PCRE 8.42 и OpenSSL 1.1.1a.

$ PCRE_PREFIX="$HOME/static-libs/pcre-8.42"
       $ OPENSSL_PREFIX="$HOME/static-libs/openssl-1.1.1a"

Давайте собирать статические библиотеки в static-libs-source:

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

Загрузите и соберите PCRE с поддержкой Юникод свойств:

$ curl --remote-name https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
       $ tar xf pcre-8.42.tar.gz
       $ cd pcre-8.42
       $ ./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 и соберите агента:

$ svn export svn://svn.zabbix.com/trunk zabbix-source
       $ cd zabbix-source/
       $ ./bootstrap.sh
       $ ./configure --sysconfdir=/usr/local/etc/zabbix --enable-agent --enable-ipv6 --with-libpcre="$PCRE_PREFIX" --with-openssl="$OPENSSL_PREFIX"
       $ make
       $ make install

Сборка бинарных файлов агента со статическими библиотеками с GnuTLS

GnuTLS зависит от крипто серверной библиотеки Nettle и арифметической библиотеки GMP. Вместо использования полной библиотеки GMP, в этом руководстве используется mini-gmp, которая включена в Nettle.

После успешной сборки GnuTLS и Nettle рекомендуется выполнить make check. Даже, если сборка прошла успешно, тесты иногда завершаются с ошибками. Если это как раз ваш случай, тогда проблемы необходимо исследовать и решить перед тем как продолжить.

Давайте предположим, что статические библиотеки PCRE, Nettle и GnuTLS будут установлены в $HOME/static-libs. Мы будем использовать PCRE 8.42, Nettle 3.4.1 и GnuTLS 3.6.5.

$ PCRE_PREFIX="$HOME/static-libs/pcre-8.42"
       $ 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 и соберите агента:

$ svn export svn://svn.zabbix.com/trunk zabbix-source
       $ cd zabbix-source/
       $ ./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-libpcre="$PCRE_PREFIX" --with-gnutls="$GNUTLS_PREFIX"
       $ make
       $ make install