Amazon LinuxでYUMを使う時に気をつけるポイント

アイキャッチ AWS EC2

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

クラメソダー市田です。
今回はAmazon Linuxに関する小ネタです。

結論

最初に結論から言うと、Amazon Linuxには「yum-plugin-priorities」が入ってるから気をつけましょう。これに尽きます。
この記事は、私のドタバタを記録したものになりますが、どなたかの参考になれば幸いです。

経緯

ある検証のために、とあるパッケージをAmazon Linux上でEPELリポジトリからインストールしたかったので、--enablerepo=epelオプションを指定してインストールしました。
インストール自体は何事もなく終わったのですが、インストール時に出る結果表示をきちんと確認せずに、検証作業を進めていました。

その為、検証作業の途中で「期待しているバージョンの動作と違う。。。」という事態になり、改めてバージョンを確認すると、epelで入るはずのバージョンよりも古いバージョンになっていることが分かりました。

「epelリポジトリを指定したのになぜ?」となって、その原因を調べてみた、というのが今回の経緯になります。

原因

最初に書いた通り、Amazon Linuxにはデフォルトでリポジトリの優先度を設定できるプラグインがインストールされていて、その設定が入っています。
実際に/etc/yum.repos.d/amzn-main.repoの内容を確認してみます。
priority=10という設定があるので、「yum-plugin-priorities」というプラグインがインストールされているはずです。

ソースコード
[amzn-main]
name=amzn-main-Base
mirrorlist=http://repo.$awsregion.$awsdomain/$releasever/main/mirror.list
mirrorlist_expire=300
metadata_expire=300
priority=10
failovermethod=priority
fastestmirror_enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-ga
enabled=1
retries=5
timeout=10
report_instanceid=yes

確認してみます。

$ rpm -q yum-plugin-priorities
yum-plugin-priorities-1.1.31-29.26.amzn1.noarch

やはり入ってました。

動作確認してみる

では、例として、amzon-mainとepelの両方のリポジトリにあるパッケージとして「openvpn」で確認してみます。
デフォルトのままでopenvpnのバージョンを確認すると、どちらのコマンドの場合でも同じリポジトリを参照していることが分かります。

# yum info openvpn
Version     : 2.3.6
Repo        : amzn-main/latest

# yum info --enablerepo=epel openvpn
Version     : 2.3.6
Repo        : amzn-main/latest

次にリポジトリの優先度を変更します。

Amazon Linuxのデフォルトの状態では、amzn-main.repoamzn-updates.repoのリポジトリ以外は無効化されている(enabled=0)ので、「amzn-main」の優先度をデフォルトの99に変更すれば、--enablerepoオプションで指定のリポジトリを参照するようになります。

次のようにamzn-main.repoを変更します。

-priority=10
+priority=99

この状態で先ほどと同じように確認してみます。

# yum info openvpn
Version     : 2.3.6
Repo        : amzn-main/latest
# yum info --enablerepo=epel openvpn
Version     : 2.3.11
Repo        : epel/x86_64

きちんと--enablerepoオプションでepelリポジトリを参照してくれました。

ということで、Amazon Linuxを使う時は、yum-plugin-prioritiesで優先度設定されていることに注意しましょう、という話でした。

以上になります。