ARMアーキテクチャ用ZabbixのRPMパッケージをSRPMから作る
はじめに
こんにちは、技術部のTUです!
今回はARMアーキテクチャ用のZabbixのRPMパッケージを、公式に配布されているSRPM(ソースを含んだパッケージ)から作ってみようと思います!
CPUのアーキテクチャとは
そもそもCPUのアーキテクチャとは何か、という所ですが、同じCPUという計算装置でも「設計が違う」という事になります。
例えば家を建てる場合、「1スパン(1区切り)を1mとするメーターモジュール」と、「1スパンを910mmとする尺モジュール」の設計が存在します。
同じドアを買った場合でもモジュール設計が違うと設置が出来ず、せっかく建てた家でもドア使えなくなってしまいます。
RPMパッケージは、RedHat系のLinuxで利用されているソフトウェアの配布用パッケージになりますが、同じOS/バージョンでも、x86(x86-64)用のRPMパッケージとARM(aarch64)用のRPMパッケージでは、モジュール設計が違うドアと同じく、互換性がありません。
その為、ARM系CPUで稼働しているサービスでは、x86用のパッケージをそのまま使う事が出来なくなっています。
ARMアーキテクチャの特徴
WindowsOSは元々x86系アーキテクチャ用の設計となっており、Linuxサーバーもx86系のCPUのシェアが高い状態です。
ARMアーキテクチャのCPUは、パフォーマンスに対して消費電力が少ない傾向がある為、特にスマートフォンのAndroidOS(これもLinuxOSです)では、ARMアーキテクチャのCPUを使ったものが多数を占めています。
また最近ではAppleが自社設計のM1CPUを発表していますが、これもARMアーキテクチャを採用しています。
更にGoogle Cloud、AWS、Azure共に、より廉価に高性能なインスタンスが利用できる、という謳い文句で、ARMアーキテクチャのインスタンスが利用できるようになっています。
アーキテクチャが違うCPUへの対応方法
ではRedHat系Linuxで、yum(dnf)リポジトリで提供されていないx86-64用に作られたソフトウェアを、ARM系CPUのサーバー上で利用する時は、どうしたらいいのでしょうか。
ソースインストール
一般的な選択の1つとして、導入したいソフトウェアがオープンソースとなる際は、公開されているソースをダウンロードした上で、ARM系CPU用にコンパイル・インストールする事が出来ます。
対象のソフトウェアの最新バージョンが欲しい時や、詳細なカスタマイズをしたい際に非常に便利ですが、インストールには都度のコンパイルが必要となり、大量のサーバーへの一斉適用等には向かない場合があります。
SRPMからRPMパッケージを作る
ソフトウェアのベンダーによっては、RPMパケージの配布と併せて、「ソースコードを含んだRPMパッケージ」となるSRPMを配布している場合があります。
SRPMであれば、rpmbuildコマンドで再構築を行う事で、サーバー上のCPUアーキテクチャに沿ったRPMパケージを簡単に作る事が出来ます。
また作成したRPMパッケージは、通常のRPMパッケージと同様に、コンパイル無くyumコマンド/dnfコマンドでインストールが可能になるので、同じCPUアーキテクチャのOS/バージョンのサーバーに一斉に導入する際等に、非常に便利になります。
今回はこちらの方法で対応をしてみたいと思います。
rpmbuildを使ってZabbixのSRPMからRPMを作成する
という訳で、今回はZabbixのRPMパッケージを、SRPMから作ってみようと思います。
作業環境の確認
検証環境として、AWSのt4g.smallインスタンス、OSはAmazonLinux2を用意しました。
・CPUの確認
[ec2-user@arm-amazon ~]$ lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Model: 1
BogoMIPS: 243.75
L1d cache: 64K
L1i cache: 64K
L2 cache: 1024K
L3 cache: 32768K
NUMA node0 CPU(s): 0,1
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
・OSの確認
[ec2-user@arm-amazon ~]$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Zabbixの配布パッケージの確認
Amazon Linux 2 はRedHat7系のOSです。
それでは、Zabbix5.0LTSのRedHat7系レポジトリのURLを覗いてみましょう。
https://repo.zabbix.com/zabbix/5.0/rhel/7/
Index of /zabbix/5.0/rhel/7/
../
SRPMS/ 19-Sep-2022 10:23 –
x86_64/ 19-Sep-2022 10:24 –
https://repo.zabbix.com/zabbix/5.0/rhel/7/SRPMS/
Index of /zabbix/5.0/rhel/7/SRPMS/
../
repodata/ 19-Sep-2022 10:23 –
zabbix-5.0.0-1.el7.src.rpm 11-May-2020 12:06 18190535
zabbix-5.0.1-1.el7.src.rpm 28-May-2020 09:47 18310532
zabbix-5.0.10-1.el7.src.rpm 29-Mar-2021 10:44 19889582
https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/
Index of /zabbix/5.0/rhel/7/x86_64/
../
debuginfo/ 19-Sep-2022 10:23 –
frontend/ 19-Sep-2022 10:23 –
repodata/ 19-Sep-2022 10:24 –
zabbix-agent-5.0.0-1.el7.x86_64.rpm 11-May-2020 12:06 451020
zabbix-agent-5.0.1-1.el7.x86_64.rpm 28-May-2020 09:47 452484
zabbix-agent-5.0.10-1.el7.x86_64.rpm 29-Mar-2021 10:44 467820
zabbix-agent-5.0.11-1.el7.x86_64.rpm 26-Apr-2021 08:59 468336
残念ながらRPMパッケージはx86_64系アーキテクチャ向けのみの用意となりますが、SRPMの用意もある事が確認出来ます。
SRPMのダウンロードと準備
それでは、SRPMのダウンロードと、事前準備をしておきます。
・SRPMのダウンロード
[ec2-user@arm-amazon ~]$ curl -O https://repo.zabbix.com/zabbix/5.0/rhel/7/SRPMS/zabbix-5.0.28-1.el7.src.rpm
[ec2-user@arm-amazon ~]$ ls -l
total 20652
-rw-rw-r-- 1 ec2-user ec2-user 21146664 Oct 12 12:11 zabbix-5.0.28-1.el7.src.rpm
・rpmbuildコマンドのインストール
[ec2-user@arm-amazon ~]$ sudo yum install rpm-build
・GCCのインストール
[ec2-user@arm-amazon ~]$ sudo yum install gcc
・対象のSRPMが依存するパッケージのインストール
[ec2-user@arm-amazon ~]$ sudo yum-builddep zabbix-5.0.28-1.el7.src.rpm
SRPMからRPMパッケージの作成
あとはコマンドを打って、しばらく待つだけです。
・RPMパッケージの作成
[ec2-user@arm-amazon ~]$ rpmbuild --rebuild zabbix-5.0.28-1.el7.src.rpm
~略
Processing files: zabbix-debuginfo-5.0.28-1.amzn2.aarch64
Provides: zabbix-debuginfo = 5.0.28-1.amzn2 zabbix-debuginfo(aarch-64) = 5.0.28-1.amzn2
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/ec2-user/rpmbuild/BUILDROOT/zabbix-5.0.28-1.el7.aarch64
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-agent-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-get-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-sender-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-js-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-proxy-mysql-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-proxy-pgsql-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-proxy-sqlite3-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-server-mysql-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-server-pgsql-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-japanese-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-deps-scl-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-deps-scl-php73-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-mysql-scl-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-mysql-scl-php73-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-pgsql-scl-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-web-pgsql-scl-php73-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-apache-conf-scl-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/noarch/zabbix-nginx-conf-scl-5.0.28-1.amzn2.noarch.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-java-gateway-5.0.28-1.amzn2.aarch64.rpm
Wrote: /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-debuginfo-5.0.28-1.amzn2.aarch64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.aS5O85
+ umask 022
+ cd /home/ec2-user/rpmbuild/BUILD
+ cd zabbix-5.0.28
+ rm -rf /home/ec2-user/rpmbuild/BUILDROOT/zabbix-5.0.28-1.el7.aarch64
+ exit 0
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.rjrcIp
+ umask 022
+ cd /home/ec2-user/rpmbuild/BUILD
+ rm -rf zabbix-5.0.28
+ exit 0
これでARMアーキテクチャ用のRPMが作成されました。
・作成されたRPMパッケージの一覧
[ec2-user@arm-amazon ~]$ ls -l /home/ec2-user/rpmbuild/RPMS/aarch64/
total 24204
-rw-rw-r-- 1 ec2-user ec2-user 496464 Oct 12 12:22 zabbix-agent-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 12225612 Oct 12 12:23 zabbix-debuginfo-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 348028 Oct 12 12:22 zabbix-get-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 953752 Oct 12 12:23 zabbix-java-gateway-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 522040 Oct 12 12:22 zabbix-js-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 1126596 Oct 12 12:22 zabbix-proxy-mysql-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 1127068 Oct 12 12:22 zabbix-proxy-pgsql-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 1067328 Oct 12 12:22 zabbix-proxy-sqlite3-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 383500 Oct 12 12:22 zabbix-sender-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 3263260 Oct 12 12:22 zabbix-server-mysql-5.0.28-1.amzn2.aarch64.rpm
-rw-rw-r-- 1 ec2-user ec2-user 3248328 Oct 12 12:23 zabbix-server-pgsql-5.0.28-1.amzn2.aarch64.rpm
作成されたRPMをインストール
あとは導入したいパッケージを指定してインストールするだけです!
・RPMを指定してZabbixエージェントのインストール
[ec2-user@arm-amazon ~]$ sudo yum install /home/ec2-user/rpmbuild/RPMS/aarch64/zabbix-agent-5.0.28-1.amzn2.aarch64.rpm
~略
Dependencies Resolved
================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================
Installing:
zabbix-agent aarch64 5.0.28-1.amzn2 /zabbix-agent-5.0.28-1.amzn2.aarch64 1.8 M
Transaction Summary
================================================================================================================================================
Install 1 Package
Total size: 1.8 M
Installed size: 1.8 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : zabbix-agent-5.0.28-1.amzn2.aarch64 1/1
Verifying : zabbix-agent-5.0.28-1.amzn2.aarch64 1/1
Installed:
zabbix-agent.aarch64 0:5.0.28-1.amzn2
Complete!
・自動起動の有効化と起動
[ec2-user@arm-amazon ~]$ sudo systemctl enable --now zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
・ステータスの確認
[ec2-user@arm-amazon ~]$ sudo systemctl status zabbix-agent
● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-12 12:26:11 UTC; 5s ago
Process: 1201 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 1203 (zabbix_agentd)
CGroup: /system.slice/zabbix-agent.service
tq1203 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
tq1204 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
tq1205 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
tq1206 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
tq1207 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
mq1208 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
Oct 12 12:26:11 arm-amazon systemd[1]: Starting Zabbix Agent...
Oct 12 12:26:11 arm-amazon systemd[1]: Started Zabbix Agent.
めちゃくちゃ簡単に出来ましたね!
最後に
AmazonLinux2の場合、一般的なパッケージはExtras Library等でRPMパッケージを配布してくれている事が多いのですが、原稿の作成時点ではZabbix5.0以上の配布が無い様だった為、ARMアーキテクチャの紹介と併せ、今回はSRPMから、RPMパッケージを作る方法を紹介させて頂きました。
せっかくARMアーキテクチャのサーバーにしたのに、入れたいソフトウェアのRPMパッケージ配布が無い・・・等とお悩みの際は、参考にして頂けますと幸いです。
最後までお読み頂き、有難うございました!