はじめに
サーバーワークスの くつなりょうすけ です。
Amazon Linux 2023が2023年3月にリリースされてから既に数カ月経過していますが、みなさんはAmazon Linux 2023をご利用でしょうか? Amazon Linux 2では利用できたEPELがAmazon Linux 2023では利用できずに困ってる方も多いのではないでしょうか?
この記事は、Amazon Linux 2023で追加パッケージを使うための提案になります。
Amazon Linux 2023への(EPELのような)追加パッケージ
Amazon Linux 2では利用できたEPELですが、Amazon Linux 2023では利用できないようです。
AWSのドキュメントにも、「CentOS7互換のAmazon Linux 2はEPEL7を利用できたが、AL2023はEPELリポジトリをサポートしない」とあります。 https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html#epel
でも考えてみてほしい。EPELが使えたとして、EPELから入手したパッケージは誰がサポートするの?問い合わせできるの?
そもそも、Amazon Linux 2は、CentOS7互換だったからEPELリポジトリをサポートできたと言いますが、これは「EPELリポジトリを使うことができますよ」という意味のサポートで、パッケージの不具合などの問い合わせなどをAWSが受けるわけではありません。
EPELは、もともとはFedoraプロジェクトの有志によるRHELの追加パッケージリポジトリです。
問い合わせなどはFedoraプロジェクトコミュニティの一員として問い合わせることはできるでしょうが、有償サポートと違って回答を得られるかは確実ではありませんし、バグがあったとしてパッチのあたったパッケージが提供される保証もありません。 https://fedoraproject.org/wiki/About_EPEL/ja
もちろん、redhatもサポートしません。 https://access.redhat.com/solutions/3358
注意: コミュニティリポジトリが信用できない、と言ってるわけではありません。 不具合やバグがあるならパッチ作って取り込んでもらいましょう。OSSの基本です。
では、Amazon Linux 2023では追加パッケージが使えないのか
そんなAmazon Linux 2023の追加パッケージ環境ですが、追加パッケージを利用できる手段があります。
そう、自分で作ることです。無いならば作ればいいじゃない。 そしてちゃんと保守すればいいじゃない。
RHELに含まれるパッケージはオープンソースソフトウェア(OSS)です。 EPELに含まれるパッケージもOSSです。 ソースコードがあるということはビルドができるということです。
Amazon Linux 2023でソースコードからビルドができれば動作する可能性があります。
追加パッケージを作れる根拠を示します。
まず、Amazon Linux 2023はFedoraをベースにしています。 FedoraはRHELの開発・検証版のポジションにあるコミュニティ版Linuxディストリビューションです。
AWSの資料には、「Amazon Linux 2023は、特定のFedoraバージョンと互換性があるわけではないが、Fedora 34, 35, 36あたりのコンポーネントを同梱している」とあります。 https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/relationship-to-fedora.html
Fedora 34は2021年4月、Fedora 35は2021年11月、Fedora 36は2022年5月にリリースされています。 そしてRHEL9は2022年5月にリリースされています。
Amazon Linux 2023は2023年3月....。
もうわかりますね? RHEL9向けEPELなら、ちょっとした修正でAmazon Linux 2023で利用できるかもしれないということです。
無いなら作ればいいじゃない
Amazon Linux 2023でどうしても動かしたいパッケージがあって、それがどこかにパッケージが落ちているならそれを利用しない手はありません。
全体の流れ
この記事の追加パッケージ作成の流れです。
- ソースパッケージを入手する。
- Amazon Linux 2023でビルドしてみる。
- Amazon Linux 2023にインストールしてみる。
- 動作確認して動けばラッキー。
注意: 動かない場合は調整を試みますが、この記事では扱いません。次回以降の著者の作品にご期待ください。
入手元
RHEL9のEPELは公開されています。この「sources」がビルド前のパッケージになります。 https://docs.fedoraproject.org/en-US/epel/
RHEL9用EPELのソースパッケージから望みのパッケージを探してみましょう。 https://dl.fedoraproject.org/pub/epel/9/Everything/source/tree/
目的のソースパッケージがあればダウンロードしてみましょう。 「.src.rpm」という拡張子のファイルがそうです。
構築環境を作る
Amazon Linux 2023の環境を用意します。 構築に必要なストレージ容量を考慮してEC2を作成しましょう。
そしてソースパッケージをビルドするためのパッケージをインストールします。
$ sudo dnf install rpm-build
ビルドしてみよう
rpm-buildをインストールしたAmazon Linux 2023にソースパッケージを配置します。 Amazon Linux 2023でダウンロードしてもいいし、ローカルからscpコマンドを使って転送してもよいです。(コマンドは割愛します)
RPMパッケージの詳細については今後気が向いたら記事を用意します。 今回はSource RPMをビルドするだけやってみましょう。
今回は、みんな大好き「sl」パッケージです。 ターミナルを蒸気機関車が走るだけのコマンドです。
ソースパッケージ「src.rpm」をビルドするだけなら「rpmbuild --rebuild [ソースパッケージ]」でビルドできます。
$ rpmbuild --rebuild sl-5.02-1.el9.src.rpm Installing sl-5.02-1.el9.src.rpm warning: sl-5.02-1.el9.src.rpm: Header V4 RSA/SHA256 Signature, key ID 3228467c: NOKEY warning: user mockbuild does not exist - using root warning: group mock does not exist - using root warning: user mockbuild does not exist - using root warning: group mock does not exist - using root setting SOURCE_DATE_EPOCH=1644796800 error: Failed build dependencies: gcc is needed by sl-5.02-1.amzn2023.x86_64 ncurses-devel is needed by sl-5.02-1.amzn2023.x86_64
「error」が出てしまいました。
slのソースパッケージをビルドするのに、gccとncurses-develに依存するとのことなので、これをインストールしておきます。
gccは「GNU Compiler Collection」のCコンパイラが入っているパッケージです。 ncurses-develは端末制御ライブラリのパッケージです。ターミナルで蒸気機関車を描画、アニメーションさせるバイナリファイルを作成するために必要なC言語ヘッダファイルやライブラリが含まれます。
二つのパッケージはAmazon Linux 2023で利用できるので以下のようにインストールします。
$ sudo dnf install gcc ncurses-devel
再度、slのソースパッケージをビルドしてみましょう。
$ rpmbuild --rebuild sl-5.02-1.el9.src.rpm Installing sl-5.02-1.el9.src.rpm warning: sl-5.02-1.el9.src.rpm: Header V4 RSA/SHA256 Signature, key ID 3228467c: NOKEY warning: user mockbuild does not exist - using root warning: group mock does not exist - using root warning: user mockbuild does not exist - using root warning: group mock does not exist - using root setting SOURCE_DATE_EPOCH=1644796800 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.QD2wXY + umask 022 + cd /home/ec2-user/rpmbuild/BUILD + cd /home/ec2-user/rpmbuild/BUILD <snip> Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/ec2-user/rpmbuild/BUILDROOT/sl-5.02-1.amzn2023.x86_64 Wrote: /home/ec2-user/rpmbuild/RPMS/x86_64/sl-debuginfo-5.02-1.amzn2023.x86_64.rpm Wrote: /home/ec2-user/rpmbuild/RPMS/x86_64/sl-5.02-1.amzn2023.x86_64.rpm Wrote: /home/ec2-user/rpmbuild/RPMS/x86_64/sl-debugsource-5.02-1.amzn2023.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.uBQ8fG + umask 022 + cd /home/ec2-user/rpmbuild/BUILD + cd sl-5.02 + /usr/bin/rm -rf /home/ec2-user/rpmbuild/BUILDROOT/sl-5.02-1.amzn2023.x86_64 + RPM_EC=0 ++ jobs -p + exit 0 Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.6p4vND + umask 022 + cd /home/ec2-user/rpmbuild/BUILD + rm -rf sl-5.02 + RPM_EC=0 ++ jobs -p + exit 0
「exit 0」が出力されたので、ビルドが成功しました。 「Wrote」行にこのビルドで生成されたバイナリパッケージのPATHが出力されているのがわかりますね。
インストールしてみよう
では出来たパッケージをインストールしてみましょう。 ビルドしたAmazon Linux 2023のホストで実施しても構いませんし、別のAmazon Linux 2023のホストでインストールしても構いません。
以下のようにインストールしてみましょう。
$ sudo rpm -ivh /home/ec2-user/rpmbuild/RPMS/x86_64/sl-5.02-1.amzn2023.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:sl-5.02-1.amzn2023 ################################# [100%]
無事、インストールできたようです。
使ってみよう
動いたよ! slパッケージぐらいなら動きますよね。
まとめ
Amazon Linux 2023で追加パッケージを用意する手段の提案になります。
今回は簡単にリビルドしてパッケージを作る方法を示しました。 次回以降、少しでもユーザのためになる追加パッケージを作れるかを模索していこうと思います。
注意: この記事を参考にして作成されたパッケージでの不具合については弊社、弊社メンバーやくつなりょうすけは一切責任を負いません。
次回予告
次にいつ記事をリリースできるか約束はできませんが、以下を予定しています。
- RPMの作り方。
- 依存性のあるパッケージのビルド方法をまとめるよ。
- 俺が考える最強リポジトリを作ろう。
ではまた、あでゅー!
沓名 亮典(執筆記事の一覧)
クラウドインテグレーション部 SRE1課
Linuxでのサーバ構築・保守業務をしてましたがクラウド業務をしたくて2021年12月に入社したネットワークエンジニア。 趣味でマラソン、トレラン、トライアスロン、ロードバイクやってる変態。