[記事未満] zabbix エージェントを SRPM からビルドしてみる
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]"
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
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番ポート)/
にアクセスする。
初期ユーザのユーザ・パスワードは通常どおり。