ちょっと話題の記事

Amazon Linuxのリリースバージョンを固定する

2014.09.24

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

ども、大瀧です。
日本時間の今朝方、Amazon Linux 2014.09がリリースされました!アップデート内容については弊社鈴木の記事をご覧ください。
個人的には、PostgreSQL 9.3サポートが嬉しいですね、これでやっとRDS for PostgreSQLとバージョンの整合性が取れるようになりました。

さて、新機能や新バージョンに心ウキウキする一方で、既存のインスタンスを運用している場合はバージョンアップをどうするかが課題になると思います。Amazon Linuxのアップグレードで良くあるトラブルが、「気づいたら最新バージョンになっていた」や、「yum updateしたら勝手に最新バージョンになってしまった」というケースがあるので、その対処方法として、リリースバージョンを固定する方法をご紹介します。

Amazon Linuxのリリースとバージョンアップポリシー

Red Hat系Linuxディストリビューションの場合、yum updateによるパッケージアップデートでサポートするのはアップデートバージョン(バージョンX.YのY)で、メジャーバージョンをアップグレードするためにはOS再インストールを行うのが一般的です。 Amazon Linuxはそうではなく、継続的アップデートフローと呼ばれる常に最新リリースに合わせたパッケージ構成になっています。例えばAmazon Linux 2014.03のデフォルト設定でyum updateを実行すると、実行時点の最新リリースに合わせてパッケージがアップデートされます。

$ cat /etc/system-release
Amazon Linux AMI release 2014.03
$ sudo yum update -y
  : (略)
$ cat /etc/system-release
Amazon Linux AMI release 2014.09
$

依存パッケージ諸々のバージョン管理やリリースポリシーなどを考えると、このようなリポジトリ管理はなかなかできないスゴいことなのですが、既存インスタンスですといろいろな事情でパッケージのバージョンアップを極力少なくしたい場合もあると思います。そのためAmazon Linuxでは、設定でリリースバージョンを固定する方法があります。

リリースバージョンを固定する

Amazon Linuxでは、yumの設定ファイル(/etc/yum.conf)のreleaseverを変更し、リリースバージョンを固定することができます。Amazon LinuxのリリースバージョンであるYYYY.MM(年と月の組み合わせ)を指定します。

/etc/yum.conf

  : 
# by default the yum configuration will point to the latest release
# of Amazon Linux AMI. If you prefer not to automatically move to
# new releases, comment out this line.
releasever=2014.03
  :

過去にyum updateを実行済みの場合キャッシュが保持されているので、設定を変更したあとはyumのキャッシュをクリアしておきましょう。

$ sudo yum clean all
読み込んだプラグイン:priorities, update-motd, upgrade-helper
リポジトリーを清掃しています: amzn-main amzn-updates
Cleaning up everything
$

AWSのドキュメントでは「releaseverをコメントアウトしましょう」と書かれており、そちらでも同様のはたらきがあります。なお、releaseverはAmazonによるyumの独自拡張なので、他のディストリビューションでは動作しません。

2014/09/24 11:40追記
Twitterで@kenjiskywalkerさんから以下の情報をいただきました!

/etc/yum/vars/releaseverファイルを作成し、以下を記述することで/etc/yum.confの変更と同様の設定が可能です。こちらですとyumパッケージ自体のバージョンアップによる/etc/yum.confファイルの更新にもスムーズに対応できるのでベターですね。

/etc/yum/vars/releasever

2014.03

また、cloud-initという管理ソフトウェアによってインスタンスの初回起動時にセキュリティアップデートが実行されます。その時点でのリリースバージョンも固定したい場合は、ユーザーデータ(インスタンスの起動時パラメータ)に以下を指定することで対応できます。

#cloud-config
repo_releasever: 2014.03

ちなみに、上記設定をするとcloud-initによって/etc/yum.confが更新されるため、起動後に改めて編集する必要はありません。また、セキュリティアップデート自体の有無を制御することもできます。こちらの記事を参考にしてください。

まとめ

Amazon Linuxにおける、リリースバージョンの固定方法をご紹介しました。Amazon Linuxのシステム管理にお役立てください!

参考資料