Amazon Linux 2のyumリポジトリ構造を読み取る

2017.12.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
先日発表された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/awsregiondefaultがセットされます。興味深いのは、その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)でまた見えてくるところもあると思いますので、リリース後にバージョン固定方法などアップデートしてまたレポートしたいと思います!

参考URL