AmazonLinuxのアップデートをした際に下記のようにエラーが発生しました。
$ sudo yum update 読み込んだプラグイン:priorities, update-motd, upgrade-helper amzn-main/latest | 2.1 kB 00:00 amzn-updates/latest | 2.3 kB 00:00 10 packages excluded due to repository priority protections 依存性の解決をしています --> トランザクションの確認を実行しています。 (省略) --> 依存性解決を終了しました。 エラー: パッケージ: python26-botocore-1.4.74-1.60.amzn1.noarch (amzn-updates) 要求: python26-jmespath = 0.9.0 インストール中: python26-jmespath-0.7.1-1.9.amzn1.noarch (amzn-main) python26-jmespath = 0.7.1-1.9.amzn1 エラー: パッケージ: aws-cli-1.11.17-1.43.amzn1.noarch (amzn-updates) 要求: python27-futures >= 2.2.0 エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.121-2.6.8.1.69.amzn1.x86_64 (amzn-updates) 要求: nss(x86-64) >= 3.21.0 削除中: nss-3.16.2-7.57.amzn1.x86_64 (@amzn-updates) nss(x86-64) = 3.16.2-7.57.amzn1 次のものにより更新された: : nss-3.19.1-5.73.amzn1.x86_64 (amzn-main) nss(x86-64) = 3.19.1-5.73.amzn1 エラー: パッケージ: aws-cli-1.11.17-1.43.amzn1.noarch (amzn-updates) 要求: python27-rsa >= 3.1.2-4.7 利用可能: python27-rsa-3.1.2-4.6.amzn1.noarch (amzn-main) python27-rsa = 3.1.2-4.6.amzn1 エラー: パッケージ: python27-botocore-1.4.74-1.60.amzn1.noarch (amzn-updates) 要求: python27-jmespath = 0.9.0 利用可能: python27-jmespath-0.7.1-1.9.amzn1.noarch (amzn-main) python27-jmespath = 0.7.1-1.9.amzn1 エラー: パッケージ: libcurl-7.47.1-9.66.amzn1.x86_64 (amzn-updates) 要求: nss(x86-64) >= 3.21.0 削除中: nss-3.16.2-7.57.amzn1.x86_64 (@amzn-updates) nss(x86-64) = 3.16.2-7.57.amzn1 次のものにより更新された: : nss-3.19.1-5.73.amzn1.x86_64 (amzn-main) nss(x86-64) = 3.19.1-5.73.amzn1 エラー: パッケージ: initscripts-9.03.49-1.35.amzn1.x86_64 (amzn-updates) 要求: sysvinit >= 2.87-6 インストール: sysvinit-2.87-5.dsf.14.amzn1.x86_64 (installed) sysvinit = 2.87-5.dsf.14.amzn1 エラー: パッケージ: aws-cli-1.11.17-1.43.amzn1.noarch (amzn-updates) 要求: python27-jmespath = 0.9.0 利用可能: python27-jmespath-0.7.1-1.9.amzn1.noarch (amzn-main) python27-jmespath = 0.7.1-1.9.amzn1 問題を回避するために --skip-broken を用いることができます。 これらを試行できます: rpm -Va --nofiles --nodigest
アップデートパッケージの依存関係がうまくできていません。
調査を進めるとそもそもとしてアップデート予定のAmazonLinux自体のバージョン古いものとなっていました。
ログインするときにバージョンアップ可能なOSが表示されます。
最新は「2016.09」のはずですが「2015.09」となっていました。
$ ssh servername Last login: Tue Nov 29 12:47:40 2016 from ip-10-253-40-45.ap-northeast-1.compute.internal __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ 65 package(s) needed for security, out of 217 available Run "sudo yum update" to apply all updates. Amazon Linux version 2015.09 is available.
この状態を解決する方法はyumの設定を変更することです。
yum.confを開き、「releasever」の項目を書き換えます。
デフォルトでは「latest」となっていますので最新のバージョンを指定するようにします。
$ vi /etc/yum.conf
[main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log distroverpkg=system-release exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=3 deltarpm=0 # 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=latest releasever=2016.09 # This is the default, if you make this bigger yum won't see if the metadata # is newer on the remote and so you'll "gain" the bandwidth of not having to # download the new metadata and "pay" for it by yum not having correct # information. # It is esp. important, to have correct metadata, for distributions like # Fedora which don't keep old packages around. If you don't like this checking # interupting your command line usage, it's much better to have something # manually check the metadata once an hour (yum-updatesd will do this). # metadata_expire=90m # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d
これでもう一度ログインしなおすと下記のようにアップデート可能なOSバージョンが更新されます。
$ ssh servername Last login: Tue Nov 29 13:07:41 2016 from ip-10-252-40-48.ap-northeast-1.compute.internal __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ 74 package(s) needed for security, out of 219 available Run "sudo yum update" to apply all updates. Amazon Linux version 2016.09 is available.
この状態でyum updateを実施したところパッケージの依存関係が解決でき、完了することができました。