Open3

[記事未満] zabbix エージェントを SRPM からビルドしてみる

mnodmnod

Rocky Linux 9 aarch64 に zabbix エージェントをインストールする

下記を参考に、ソースパッケージからインストールします。

参考: https://www.netassist.ne.jp/techblog/25643/

環境

$ uname -a
Linux localhost.localdomain 5.14.0-162.6.1.el9_1.aarch64 #1 SMP PREEMPT_DYNAMIC Tue Nov 15 20:52:32 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

$ cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.1 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.1"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.1 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.1"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.1"

zabbix のリポジトリ からソースパッケージをダウンロードする。

# curl -o zabbix-6.4.1-release1.el9.src.rpm https://repo.zabbix.com/zabbix/6.4/rhel/9/SRPMS/zabbix-6.4.1-release1.el9.src.rpm

必要なパッケージをインストールする

# yum install rpm-build
# yum install gcc

依存パッケージをインストールする

# yum builddep zabbix-6.4.1-release1.el9.src.rpm
Last metadata expiration check: 0:03:25 ago on Fri Apr  7 07:53:00 2023.
No matching package to install: 'OpenIPMI-devel >= 2'
Package make-1:4.3-7.el9.aarch64 is already installed.
Package systemd-250-12.el9_1.aarch64 is already installed.
No matching package to install: 'unixODBC-devel'
Not all dependencies satisfied
Error: Some packages could not be found.

エラーが表示されるので、Rocky linux のリポジトリから必要なパッケージを個別にインストールする。

# rpm -Uvh https://ftp.iij.ad.jp/pub/linux/rocky/9/CRB/aarch64/os/Packages/o/OpenIPMI-devel-2.0.32-3.el9.aarch64.rpm
Retrieving https://ftp.iij.ad.jp/pub/linux/rocky/9/CRB/aarch64/os/Packages/o/OpenIPMI-devel-2.0.32-3.el9.aarch64.rpm
error: Failed dependencies:
        OpenIPMI(aarch-64) = 2.0.32-3.el9 is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        OpenIPMI-lanserv(aarch-64) = 2.0.32-3.el9 is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        OpenIPMI-libs(aarch-64) = 2.0.32-3.el9 is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libIPMIlanserv.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMI.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMIcmdlang.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMIglib.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMIposix.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMIpthread.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMIui.so.1()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        libOpenIPMIutils.so.0()(64bit) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64
        pkgconfig(ncurses) is needed by OpenIPMI-devel-2.0.32-3.el9.aarch64

# yum install OpenIPMI OpenIPMI-libs OpenIPMI-lanserv ncurses-devel
# rpm -Uvh https://ftp.iij.ad.jp/pub/linux/rocky/9/CRB/aarch64/os/Packages/o/OpenIPMI-devel-2.0.32-3.el9.aarch64.rpm
# rpm -Uvh https://ftp.iij.ad.jp/pub/linux/rocky/9/CRB/aarch64/os/Packages/u/unixODBC-devel-2.3.9-4.el9.aarch64.rpm
Retrieving https://ftp.iij.ad.jp/pub/linux/rocky/9/CRB/aarch64/os/Packages/u/unixODBC-devel-2.3.9-4.el9.aarch64.rpm
error: Failed dependencies:
        libesoobS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libmimerS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libnn.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbc.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbccr.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbcdrvcfg1S.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbcdrvcfg2S.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbcinst.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbcminiS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbcnnS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libodbctxtS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        liboplodbcS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        liboraodbcS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libsapdbS.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        libtemplate.so.2()(64bit) is needed by unixODBC-devel-2.3.9-4.el9.aarch64
        unixODBC(aarch-64) = 2.3.9-4.el9 is needed by unixODBC-devel-2.3.9-4.el9.aarch64

# yum install unixODBC
# rpm -Uvh https://ftp.iij.ad.jp/pub/linux/rocky/9/CRB/aarch64/os/Packages/u/unixODBC-devel-2.3.9-4.el9.aarch64.rpm

あらためて依存パッケージのインストールを実行する

# yum builddep zabbix-6.4.1-release1.el9.src.rpm

ビルドを実行する

# rpmbuild --rebuild zabbix-6.4.1-release1.el9.src.rpm

ビルド結果を確認し、zabbix エージェントをインストールする

# ls -lR rpmbuild
# yum install rpmbuild/RPMS/aarch64/zabbix-agent-6.4.1-release1.el9.aarch64.rpm 

テスト実行してみる

# zabbix_agentd -h
# zabbix_agentd --test "system.cpu.load[all,avg1]"
# zabbix_agentd --test "vm.memory.size[free]"
# zabbix_agentd --test "net.tcp.port[,22]"
# zabbix_agentd --test "vfs.file.cksum[/etc/passwd]"
# zabbix_agentd --test "proc.num[zabbix_agentd,zabbix]"

設定ファイルを編集

# vi /etc/zabbix/zabbix_agentd.conf 

Server ServerActive Hostname などを変更する

サービスを起動する

# systemctl status zabbix-agent
# systemctl start zabbix-agent
# systemctl status zabbix-agent
# systemctl enable zabbix-agent
# systemctl status zabbix-agent

ログを確認。テスト実行してみる。

# less /var/log/zabbix/zabbix_agentd.log 
# zabbix_agentd --test "proc.num[zabbix_agentd,zabbix]"
mnodmnod

zabbix エージェントは 10050/tcp を利用する。ポートをテストして、以下のようになれば正常。

# curl 192.168.11.21:10050
curl: (52) Empty reply from server

以下のようになる場合、ポートが閉じている場合がある。

# curl 192.168.11.21:10050
curl: (7) Failed to connect to 192.168.11.21 port 10050: No route to host

tcpdump port 10050 で確認して、パケットを受け取ってるのに、応答パケットを返してない場合は、ポートが閉じている可能性がある。

参考: https://okisanjp.hatenablog.jp/entry/archives/1142

firewalld を確認

# firewall-cmd --get-default-zone
public

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s1
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

10050/tcp が許可されていないので許可する

# firewall-cmd --add-port=10050/tcp
success

結果を確認する。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s1
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 10050/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# firewall-cmd --list-port
10050/tcp

curl、tcpdump で確認して、問題が解決されたらポート許可の永続設定を行う。

# firewall-cmd --add-port=10050/tcp --permanent
success
mnodmnod

zabbix エージェントの動作を確認するために、zabbix サーバを docker で用意する。

参考: https://www.zabbix.com/documentation/6.0/jp/manual/installation/containers
Webサーバは nginx/apache、DBは postgresql/mysql に対応しているが、ここでは、nginx + postgresql を利用する。

まず、必要なイメージを pull

# docker pull postgres:alpine
# docker pull zabbix/zabbix-server-pgsql:alpine-trunk
# docker pull zabbix/zabbix-web-nginx-pgsql:alpine-trunk

最初に postgresql を起動する

# docker run --name postgres --rm -p 5432:5432 -v /root/docker/postgres:/var/lib/postgres/data -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -d postgres:alpine

ロールとデータベースを作成する

# docker exec -it postgres psql -U postgres
postgres=# CREATE ROLE zabbix WITH LOGIN PASSWORD 'zabbixpass';
CREATE ROLE
postgres=#
postgres=# CREATE DATABASE zabbix OWNER zabbix;
CREATE DATABASE

zabbix サーバを起動する

# docker run --name zabbix-server-pgsql -t -e DB_SERVER_HOST=192.168.11.100 -e POSTGRES_USER=zabbix -e POSTGRES_PASSWORD=zabbixpass -e POSTGRES_DB=zabbix -p 10051:10051 -d zabbix/zabbix-server-pgsql:alpine-trunk
# docker run --name zabbix-web-nginx-pgsql -t -e ZBX_SERVER_HOST=192.168.11.100 -e DB_SERVER_HOST=192.168.11.100 -e POSTGRES_USER=zabbix -e POSTGRES_PASSWORD=zabbixpass -e POSTGRES_DB=zabbix -p 443:8443 -p 80:8080 -d zabbix/zabbix-web-nginx-pgsql:alpine-trunk

Webブラウザで http://zabbixサーバのアドレス(80番ポート)/ にアクセスする。
初期ユーザのユーザ・パスワードは通常どおり。