Table of Contents
背景
Dockerイメージに使用しているAmazonLinux2のイメージからAmazonLinux2023への移行プロジェクトにおいてlsyncdがAmazonLinux2023にはdnf install
では普通にインストールできないため、力業でAmazonLinux2023への導入手順を備忘としてまとめておきます。
AmazonLinux2とAmazonLinux2023の違い
AmazonLinux2とAmazonLinux2023のリポジトリの違いを表にまとめると以下
項目 | AmazonLinux2 | AmazonLinux2023 |
---|---|---|
リポジトリ | amzn2-conre, epel, amazon-linux-extrasなど | amazonlinux |
EPEL(Extra Packages for Enterprise Linux) | 利用可能 (amazon-linux-extras経由でepel-releaseを導入) | デフォルトでは利用不可 |
パッケージのバージョン | RHEL7ベース | Redoraベース |
AmazonLinux2の特徴
amazon-linux-extras
を使用することでデフォルトでは提供されていない追加パッケージ(lsyncd)をインストールすることができた。
amazon-linux-extras
とはリポジトリ管理ツールであり、Amazonが提供する追加リポジトリです。
特定のパッケージ(今回でいえばlsyncdなど)を提供しており、AmazonLinux2ではyum install
で問題なくインストールすることができた。
※AmazonLinux2のデフォルトのリポジトリはamzn2-core
というリポジトリが設定されており、基本的なパッケージはそこからインストールすることが可能です。
AmazonLinux2023の特徴
AmazonLinux2でamazon-linux-extras
が提供されており、特定のパッケージをインストールすることが可能でしたが、AmazonLinux2023ではamazon-linux-extras
が完全に廃止されたため、lsyncdを普通にインストールすることができなくなってしまったということです。
amazon-linux-extras
は完全に廃止されたため、AmazonLinux2023のリポジトリはAmazonが提供する単一のリポジトリになってしまった。
つまり、AmazonLinux2はEPELベースAmazonLinux2023はRedoraベースでリポジトリがそもそも違うため、拾ってこれるパッケージも当然違いますよ、ということです。
ちなみにAWS公式のドキュメントのインストールされているパッケージの比較にはlsyncd
に関することは記載されていないため、少しハマりました。
まぁ、インストールされているパッケージの比較なのでデフォルトでインストールされていなければここにも書かれることはないので当たり前なのですが…
ただ、このドキュメントから読み取れるのはamazon-linux-extras
がインストールされているか、されていないかの比較が見て取れますので、ここを見てすぐにピンとくる人なら問題ないかと思います。
AmazonLinux2023へのlsyncdの導入方法
では、ここからが本題ですが、どうやってAmazonLinux2023(今回の場合コンテナ)に導入するのでしょうか?
結論
AmazonLinux2が利用可能だったEPELと同等のパッケージを提供しているRPM Fusion
のリポジトリをAmazonLinux2023に導入することです。
前提
RPM Fusion
リポジトリを導入するためには、Fedora36リポジトリの導入が前提となります。
方法
以下のようなDockerfileを準備し、実際に動作確認してみましょう。
# Amazon Linux ベースイメージ
FROM amazonlinux:2023.5.20241001.1
# 作業ディレクトリの設定
WORKDIR /tmp
# Fedora36リポジトリの導入
RUN echo -e "[fedora]\nname=Fedora 36 - \$basearch\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-36&arch=\$basearch\nenabled=1\ncountme=1\nmetadata_expire=7d\nrepo_gpgcheck=0\ntype=rpm\ngpgcheck=1\ngpgkey=https://getfedora.org/static/fedora.gpg\n https://src.fedoraproject.org/rpms/fedora-repos/raw/f36/f/RPM-GPG-KEY-fedora-36-primary\nskip_if_unavailable=False" > /etc/yum.repos.d/fedora.repo
# RPM Fusionリポジトリの導入
RUN echo -e "[rpmfusion-free]\nname=RPM Fusion for Fedora 36 - Free\nmetalink=https://mirrors.rpmfusion.org/metalink?repo=free-fedora-36&arch=\$basearch\nenabled=1\nmetadata_expire=14d\ntype=rpm-md\ngpgcheck=1\nrepo_gpgcheck=0\ngpgkey=https://rpmfusion.org/keys?action=AttachFile&do=view&target=RPM-GPG-KEY-rpmfusion-free-fedora-2020" > /etc/yum.repos.d/rpmfusion-free.repo
# lsyncdのインストール
RUN dnf --enablerepo=fedora install -y lsyncd
私の環境はWindowsのため、適当にユーザー配下にworkというフォルダを切ってその中にDockerfileを作成します。
以下コマンドでDockerイメージのビルドを実行します。
$ docker image build -t lsyncd-test .
buildのログは以下です。
[+] Building 236.0s (9/9) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.6s
=> => transferring dockerfile: 1.06kB 0.1s
=> [internal] load metadata for docker.io/library/amazonlinux:2023.5.20241001.1 5.5s
=> [internal] load .dockerignore 0.2s
=> => transferring context: 2B 0.0s
=> CACHED [1/5] FROM docker.io/library/amazonlinux:2023.5.20241001.1@sha256:019cf20c5b98efcd548952d31df1768377916bf8d57d70d979c6c92bfd5e744 0.0s
=> [2/5] WORKDIR /tmp 0.3s
=> [3/5] RUN echo -e "[fedora]\nname=Fedora 36 - $basearch\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-36&arch=$basear 5.2s
=> [4/5] RUN echo -e "[rpmfusion-free]\nname=RPM Fusion for Fedora 36 - Free\nmetalink=https://mirrors.rpmfusion.org/metalink?repo=free-fed 1.4s
=> [5/5] RUN dnf --enablerepo=fedora install -y lsyncd 212.8s
=> exporting to image 7.3s
=> => exporting layers 7.2s
=> => writing image sha256:b241f06d3c0d500c40a814346b5a3d2e54c3b7f3e701c7307adf45f66b82ede9 0.0s
=> => naming to docker.io/library/lsyncd-test 0.1s
View build details: docker-desktop://dashboard/build/default/default/vwmzqdemxuh6j7knarym1fsr0
少し時間はかかりますが、問題なくDockerイメージが出来上がりました。