Amazon Linux 2のyumリポジトリ構造を読み取る
ども、大瀧です。
先日発表されたAmazon Linux 2(以下AL2)では、従来のAmazon Linux(以下AL1)とは異なるサポートポリシーが採用されています。それに伴い、パッケージをアップデートするyumリポジトリの様子も変わってきているので、現時点で確認できているところをご紹介します。
動作確認環境
- Amazon Linux 2: LTS Candidate 2017.12.0.20171212.2
ローリングアップデートからLTS(Long-Term Support)へ
AL1ではディストリビューションとしてメジャーバージョンを定義せず、常に最新版へのアップデートパッケージが提供されるローリングアップデート方式が採用されていました。AL2では一般的なディストリビューションと同様、サポート期間5年のLTSが採用されます(まだGA前の段階なので5年経過後の次のバージョンがどうなるかなど、詳細は明かされていません)。
現時点で見えているところとしては、/etc/yum.repos.d/amzn2-core.repo
ファイルのmirrorlist
行から、リポジトリのディレクトリ構造が以下になっていることが確認できます。
- AL2:
http://amazonlinux.$awsregion.$awsdomain/$releasever/$product/$pointrelease/$basearch/mirror.list
- AL1:
http://repo.$awsregion.$awsdomain/$releasever/main/debuginfo/mirror.list
URLに含まれる変数について解説します。
$releasever
はAL1ではローリングアップデートに従って最新を指すlatest
が/etc/yum.conf
に直書きされていたのが、ファイルからは姿を消し、デフォルト値(system-release
パッケージのバージョン番号)から引っ張るようになっているようです。RCリリースでは2017.12
です。予想ですが、この2017.12
がLTS毎に異なるメジャーバージョンとして扱われ、後述のポイントリリースが同様のバージョン名でリリースされるとのことなので、Ubuntuと同様にポイントリリースのうちの一部がLTSになるイメージです。AL1ではローリングアップデートを避けるために、$releasever
を固定する運用手法がありましたが、AL2でLTS間のIn-placeアップデートが提供されないとしたら、$releasever
は変更しない運用になると思います。$product
は新しい変数で、/etc/yum/vars/product
ファイルに記述されているcore
がセットされます。他にどんな値が入るのかは現時点では不明です。$pointrelease
も新しい変数で、/etc/yum/vars/pointrelease
ファイルのlatest
がセットされます。mirrorlistのURLからのレスポンスでは2017.12.0
というパスに置換されて戻ってくるのでポイントリリースよりもう1レベル細かいリリース単位があるようです。
リリースごとのバージョンを固定するためにはForumでも案内されているように、AL2では/etc/yum/vars/pointrelease
ファイルを編集するスタイルのようですね。GAのタイミングで具体的にいくつに設定するべき、というアナウンスがあると思います。
オンプレミス向けイメージ
AL2ではEC2向けAMI(Amazon Machine Image)に加えて一般的な仮想マシンイメージが提供されています。そこで気になるのがリポジトリのリージョン指定(上記変数の$awsregion
)です。EC2では起動するリージョン名が/etc/yum/vars/awsregion
にセットされる部分です。
で、仮想マシンイメージでは/etc/yum/vars/awsregion
にdefault
がセットされます。興味深いのは、そのURLがCloudFrontに向いている点です。
$ host amazonlinux.default.amazonaws.com amazonlinux.default.amazonaws.com is an alias for d21lvh0gtuor4a.cloudfront.net. d21lvh0gtuor4a.cloudfront.net has address 54.192.127.147 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.35 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.129 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.198 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.220 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.153 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.204 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.118 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:7600:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:200:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:8000:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:600:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:4a00:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:9800:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:7000:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:1400:a:3144:5280:93a1 $
VagrantやDockerなどローカルで実行するツールを利用するときには、リポジトリがUSを向いていてダウンロードが遅いというトラブルがよくあるところですが、AL2については最寄りのCloudFrontエッジロケーションから提供されるので、その心配は必要なさそうです(^^
おまけとして、mirrorlistのURLのレスポンスを見るとcdn.amazonlinux.com
というドメインを利用しているようです。
$ curl amazonlinux.default.amazonaws.com/2017.12/core/latest/x86_64/mirror.list https://cdn.amazonlinux.com/2017.12/core/2017.12.0/x86_64/927093e40e1a2804722a5bf87899c68e2ae4f1381dab1be37c7f459a34dcdfc7 $
で、そのホスト先は前述と同じCloudFrontディストリビューションを向いているというオチでしたw
$ host cdn.amazonlinux.com cdn.amazonlinux.com is an alias for d21lvh0gtuor4a.cloudfront.net. d21lvh0gtuor4a.cloudfront.net has address 54.192.127.204 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.153 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.129 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.147 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.118 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.198 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.220 d21lvh0gtuor4a.cloudfront.net has address 54.192.127.35 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:e000:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:5e00:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:b400:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:d800:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:8c00:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:3e00:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:6200:a:3144:5280:93a1 d21lvh0gtuor4a.cloudfront.net has IPv6 address 2600:9000:202a:4c00:a:3144:5280:93a1 $
一方で、EC2では従来通りS3でリポジトリがホストされています。
$ host amazonlinux.ap-northeast-1.amazonaws.com amazonlinux.ap-northeast-1.amazonaws.com is an alias for s3.dualstack.ap-northeast-1.amazonaws.com. s3.dualstack.ap-northeast-1.amazonaws.com has address 52.219.0.88 s3.dualstack.ap-northeast-1.amazonaws.com has IPv6 address 2406:daa0:4060:c8:34db:43b:: $
S3の場合はVPCエンドポイントが利用できるという効能もあるので、一長一短というところですね。
まとめ
Amazon Linux 2のyumリポジトリ構造をご紹介しました。正式リリース(GA)でまた見えてくるところもあると思いますので、リリース後にバージョン固定方法などアップデートしてまたレポートしたいと思います!