zabbix6.0安装教程(四):构建 Zabbix agent



一、在 macOS 上构建 Zabbix agent

1. 概述

本节演示如何从包含或不包含 TLS 的源代码构建 Zabbix macOS agent 二进制文件。

2. 必要条件

您将需要命令行开发人员工具(不需要Xcode),Automake,pkg-config和PCRE(v8.x)或PCRE2(v10.x)。如果要使用TLS构建 agent 二进制文件,则还需要 OpenSSL 或 GnuTLS。

要安装 Automake 和 pkg-config ,您将需要来自 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 库取决于它们如何链接到 agent。 如果您打算在已具有这些库的 macOS 计算机上运行代理二进制文件,则可以使用 Homebrew 提供的预编译库。这些通常是 macOS 机器,它们使用 Homebrew 来构建 Zabbix agent 二进制文件或用于其他目的。

如果 agent 的二进制文件将在没有共享版本的库的 macOS 计算机上使用,则应从源代码编译静态库,并将 Zabbix agent与它们链接。

3. 使用共享库构建 agent 二进制文件

安装 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 构建 agent:

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

使用 OpenSSL 构建 agent:

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

使用 GnuTLS 构建 agent:

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

4. 使用不带 TLS 的静态库构建 agent 二进制文件

让我们假设PCRE静态库将安装在 $HOME/static-libs 中,我们将使用 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 源代码并构建 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

5. 使用 OpenSSL 构建带有静态库的 agent 二进制文件

构建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 源代码并构建 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

6. 使用带有 GnuTLS 的静态库构建 agent 二进制文件

GnuTLS 依赖于 Nettle 加密后端 和 GMP 算法库。 本文将使用 Nettle 中包含的 mini-gmp,而不是使用完整的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 源代码并构建 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

二、在Windows上构建Zabbix agent

1. 概述

本节将演示如何从有或没有TLS的源构建 Zabbix Windows agent二进制文件。

2. 编译OpenSSL

接下来的步骤将助你在MS Windows 10(64位)的源中编译OpenSSL。

1.编译OpenSSL你需要在Windows机器上安装:

1.C compiler (e.g. VS 2017 RC),
2.NASM (https://www.nasm.us/)
3.Perl (e.g. Strawberry Perl from http://strawberryperl.com/).
4.Perl module Text::Template (cpan Text::Template).

2.获取 OpenSSL 源代码 https://www.openssl.org/。这里用OpenSSL 1.1.1 版本。

3.解压 OpenSSL 源,例如,解压在 E:\openssl-1.1.1。

4.打开命令行窗口。例如,VS 2017 RC的 x64 原生工具命令提示符。

5.至 OpenSSL 源目录, 例如,E:\openssl-1.1.1。

#验证 NASM 能被找到:
e:\openssl-1.1.1> nasm --version 
	NASM version 2.13.01 compiled on May 1 2017

6.配置OpenSSL,例如:

e:\openssl-1.1.1> perl E:\openssl-1.1.1\Configure VC-WIN64A no-shared no-capieng no-srp no-gost no-dgram no-dtls1-method no-dtls1_2-method --api=1.1.0 --prefix=C:\OpenSSL-Win64-111-static --openssldir=C:\OpenSSL-Win64-111-static
  • 请注意选项 ‘no-shared’:如果使用 ‘no-shared’ 那么OpenSSL静态库
    libcrypto.lib和libssl.lib 将 ‘自给自足’,生成的Zabbix二进制文件本身将包含OpenSSL,不需要外部的OpenSSL DLLs。 优点: Zabbix二进制文件可以复制到其他没有OpenSSL库的Windows机器上。 缺点:当新的OpenSSL bugfix 版本发布时,需要重新编译并安装Zabbix agent。
  • 如果不使用’no-shared’,那么静态库 libcrypto.lib和 libssl.lib 会在运行时使用OpenSSL DLLs。
  • 优点:当新的OpenSSL bugfix版本发布时,你可能只需要升级OpenSSL DLLs不用重新编译Zabbix agent。
  • 缺点:复制Zabbix agent到另一个机器时,需要同时复制OpenSSL DLLs。

7.编译OpenSSL,运行测试,安装:

e:\openssl-1.1.1> nmake 
e:\openssl-1.1.1> nmake test ... All tests successful. Files=152, Tests=1152, 501 wallclock secs ( 0.67 usr + 0.61 sys = 1.28 CPU) Result: PASS 
e:\openssl-1.1.1> nmake install_sw'install_sw'

仅安装软件组件(例如 库,头文件,但不安装文档)。如果你希望安装所有的文件,请用 nmake install

3. 编译PCRE

1.从 pcre.org (https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.zip) 存储库中下载PCRE 或 PCRE2 (Zabbix 6.0以上支持) 库:

2.提取到目录E:\pcre2-10.39

3.从https://cmake.org/download/ 安装CMake,安装过程中选择: 确保 cmake\bin 在你的路径的 (测试版本3.9.4).

4.创建一个新的空的构建目录,最好是源目录的子目录。例如E:\pcre2-10.39\build.

5.打开命令行窗口,例如 VS 2017上的x64原生工具命令提示符 ,并且从该外部环境运行cmake-gui。不要试图从窗口开始菜单启动Cmake,因为这可能会导致错误。

6.分别为源目录和构建目录输入 E:\pcre2-10.39 E:\pcre2-10.39\build

7.点击 “Configure” 按钮。

8.为此项目指定生成器时,请选择 “NMake Makefiles”。

9.创建一个新的空的安装目录。例如,E:\pcre2-10.39-install

10.GUI 将列出几个配置选项。确保选择了以下几个选项:

  • PCRE_SUPPORT_UNICODE_PROPERTIES ON
  • PCRE_SUPPORT_UTF ON
  • CMAKE_INSTALL_PREFIX E:\pcre2-10.39-install

11.再次点击 “Configure” 。相邻的"Generate"按钮需要启用。

12.点击 “Generate”.

13.如果出现错误,建议在尝试重复构建CMake的过程中删除CMake缓存。 在CMake GUI中,缓存可以通过选择 "File > Delete Cache"来删除。

14.构建目录现在应该包含了一个可用的构建系统 - Makefile.

15.打开命令行窗口,例如 VS 2017上的x64原生工具命令提示符 ,导航到上面提到的 Makefile 。

16.运行 NMake 命令:

 E:\pcre2-10.39\build> nmake install

4. 编译 Zabbix

以下步骤将助你从MS Windows 10 (64位)上的源码中编译Zabbix。在编译有或没有TLS支持的Zabbix时,唯一显著的区别在步骤4。

1.在Linux机器上,检查git源代码:

$ git clone https://git.zabbix.com/scm/zbx/zabbix.git 
$ cd zabbix 
$ ./bootstrap.sh 
$ ./configure --enable-agent --enable-ipv6 --prefix=`pwd`
$ make dbschema 
$ make dist.

2.在Windows机器上复制和解压归档文件,例如 zabbix-4.4.0.tar.gz。

3.我们假设源代码在 e:\zabbix-4.4.0中。打开命令行窗口,例如 VS 2017 RC中的 x64原生工具命令提示符。转至 E:\zabbix-4.4.0\build\win32\project。

4.编译 zabbix_get, zabbix_sender 和 zabbix_agent。

  • 无TLS:
E:\zabbix-4.4.0\build\win32\project> nmake /K
  PCREINCDIR=E:\pcre2-10.39-install\include
  PCRELIBDIR=E:\pcre2-10.39-install\lib
  • 有TLS:
E:\zabbix-4.4.0\build\win32\project> nmake /K -f Makefile_get
  TLS=openssl TLSINCDIR=C:\OpenSSL-Win64-111-static\include
  TLSLIBDIR=C:\OpenSSL-Win64-111-static\lib
  PCREINCDIR=E:\pcre2-10.39-install\include
  PCRELIBDIR=E:\pcre2-10.39-install\lib
  E:\zabbix-4.4.0\build\win32\project> nmake /K -f Makefile_sender
  TLS=openssl TLSINCDIR="C:\OpenSSL-Win64-111-static\include
  TLSLIBDIR="C:\OpenSSL-Win64-111-static\lib"
  PCREINCDIR=E:\pcre2-10.39-install\include
  PCRELIBDIR=E:\pcre2-10.39-install\lib
  E:\zabbix-4.4.0\build\win32\project> nmake /K -f Makefile_agent
  TLS=openssl TLSINCDIR=C:\OpenSSL-Win64-111-static\include
  TLSLIBDIR=C:\OpenSSL-Win64-111-static\lib
  PCREINCDIR=E:\pcre2-10.39-install\include
  PCRELIBDIR=E:\pcre2-10.39-install\lib

5.新的二进制文件位于 e:\zabbix-4.4.0\bin\win64。由于 OpenSSL 是用 ‘no-shared’ 选项编译的,Zabbix二进制文件本身包含OpenSSL,可以复制到其他没有OpenSSL的机器中。

5. 用LibreSSL编译Zabbix

该过程类似于使用OpenSSL编译,但是你需要对位于build\win32\project 目录中的文件进行一些小的改变:

  * In ''Makefile_tls'' delete ''/DHAVE_OPENSSL_WITH_PSK''. i.e. find <code>

CFLAGS = $(CFLAGS) /DHAVE_OPENSSL /DHAVE_OPENSSL_WITH_PSK</code>
然后用
CFLAGS = $(CFLAGS) /DHAVE_OPENSSL
进行替换

  * In ''Makefile_common.inc'' add ''/NODEFAULTLIB:LIBCMT'' i.e. find <code>

/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE /PDB:$(TARGETDIR)\$(TARGETNAME).pdb</code>
然后用
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DYNAMICBASE:NO /PDB:$(TARGETDIR)\$(TARGETNAME).pdb /NODEFAULTLIB:LIBCMT
进行替换

三、在Windows中构建Zabbix agent 2

1. 概述

本节将演示如何从源代码构建Zabbix agent 2 (Windows)。

2. 安装MinGW编译器

  1. 下载带有SJLJ (设置跳转/长跳转) 异常处理和窗口线程的MinGW-w64 (例如 x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0.7z)
  2. 提取并移动到 c:\mingw
  3. 设置环境变量
@echo offset PATH=%PATH%;c:\mingw\bincmd

编译时使用Windows提示符代替MinGW提供的MSYS终端。

3. 编译 PCRE 开发库

以下说明将编译并安装c:\dev\pcre中的64位PCRE 库和c:\dev\pcre32 的32位库:

  1. 从 pcre.org(http://ftp.pcre.org/pub/pcre/) 下载PCRE 8.XX 版本库,然后提取
  2. 打开 cmd 并导航到提取的源

构建64位 PCRE

  1. 删除就配置/缓存(如果有):
del CMakeCache.txtrmdir /q /s CMakeFiles
  1. 运行 cmake (CMake 可从这里安装https://cmake.org/download/):
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-O2 -g" -DCMAKE_CXX_FLAGS="-O2 -g" -DCMAKE_INSTALL_PREFIX=c:\dev\pcre
  1. 接下来,运行:
mingw32-make clean
mingw32-make install

构建32位PCRE

  1. 运行:
mingw32-make clean
  1. 删除 CMakeCache.txt:
del CMakeCache.txtrmdir /q /s CMakeFiles
  1. 运行cmake:
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-m32 -O2 -g" -DCMAKE_CXX_FLAGS="-m32 -O2 -g" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-mi386pe" -DCMAKE_INSTALL_PREFIX=c:\dev\pcre32
  1. 接下来,运行:
mingw32-make install

安装OpenSSL开发库

  1. https://curl.se/windows/下载32和64位版本
  2. 相应地将文件提取到c:\dev\openssl32 和c:\dev\openssl。
  3. 然后删除提取的**.dll.a* (dll call wrapper libraries) ,因为MinGW在静态库前会优先考虑它们。
    编译Zabbix agent 2
    32位
    打开 MinGW 环境(Windows命令提示符)并导航至Zabbix源树中的build/mingw 目录。
    运行:
mingw32-make clean
mingw32-make ARCH=x86 PCRE=c:\dev\pcre32 OPENSSL=c:\dev\openssl32

64位
打开MinGW环境(Windows命令提示符)并导航至Zabbix源树目录中的build/mingw。
运行:

mingw32-make clean
mingw32-make PCRE=c:\dev\pcre OPENSSL=c:\dev\openssl

32和64位 版本都可以构建在64位的平台上,但是32位平台只能构建32位版本。 在32位平台上运行时,请遵循64位版本在64位平台上运行的步骤。


排版: 何鹏辉
初审: 玩具熊
复审: 二月二

本篇教程来源乐维社区|专注IT运维技术分享乐维社区|专注IT运维技术分享,经本工作室二次编辑,如有侵权,请联系我们。
参考资料:
1.在 macOS 上构建 Zabbix agent
2.在Windows上构建Zabbix agent
3.在Windows中构建Zabbix agent 2

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐