テックブログ

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パッケージ配布が無い・・・等とお悩みの際は、参考にして頂けますと幸いです。

最後までお読み頂き、有難うございました!

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください