何もいじってないのに急にVagrantのprovisionのchef-solo実行がエラーになった
久々にvagrant provisionしてみたらエラーでうまくプロヴィジョニングできず えいやーでvagrant destroyしてvagrant upし直してみてもうまくいかなくて 何もいじってないのになんでだよおおおってなることありませんか?あります。はい。 役立つことは少なそうですがせっかくなので対処したケースを載せておきます。
今回使っていたVirtualBoxのboxファイルはVagrantbox.esに載っているCentOS6.4 x86_64の以下のものです。
https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box
Vagrantって結構バグ踏むことが多いので、ハマりそうになると VagrantアップデートしてみようとかVirtualBoxアップデートしてみようとか 結構安易な対処法でも効くことがあります。 今回はアップデートをしてもboxファイルを取得し直してみても解決できず どうしたもんかなちゃんと調べるか、と重い腰を上げることにしました。
問題のエラーですが、vagrant up実行時のchef-soloのあるレシピが失敗しています。
Chef never successfully completed! Any errors should be visible in the output above. Please fix your recipes so that they properly complete.
さかのぼって詳細をみてみると
==> default: ---> Package systemtap-devel.x86_64 0:2.7-2.el6 will be installed │ ==> default: --> Processing Dependency: kernel-devel for package: systemtap-devel-2.7-2.el6.x86_64 │ ==> default: --> Finished Dependency Resolution │ ==> default: You could try using --skip-broken to work around the problem │ ==> default: You could try running: rpm -Va --nofiles --nodigest │ ==> default: STDERR: Error: Package: systemtap-devel-2.7-2.el6.x86_64 (base) │ ==> default: Requires: kernel-devel │ ==> default: ---- End output of yum -y groupinstall "Development Tools" ---- │ ==> default: Ran yum -y groupinstall "Development Tools" returned 1 │
"Development Tools"のインストールを行うレシピがあるのですが、そこでエラーとなっています。 どうやら依存しているkernel-develがインストールできないようです。 試しに単体でインストールしてみると
$ yum install kernel-devel Loaded plugins: fastestmirror, versionlock Loading mirror speeds from cached hostfile * base: ftp.jaist.ac.jp * epel: mirror01.idc.hinet.net * extras: ftp.jaist.ac.jp * updates: ftp.jaist.ac.jp Setting up Install Process No package kernel-devel available. Error: Nothing to do
へーーー、ないんだwwちょwww困ります。 困ったときはグーグル先生に聞きます。 kernel-develではなくkernelの方は2.6.32-358.23.2.el6がインストール済みだったので どうやらkernel-devel-2.6.32-358.23.2.el6.x86_64を手に入れる必要があるようです。 kernel-devel-`uname -r`ってことですね。 探してみるとcentosplusのリポジトリには存在しているようです。 http://vault.centos.org/6.4/centosplus/x86_64/Packages/kernel-devel-2.6.32-358.23.2.el6.centos.plus.x86_64.rpm
なぜこのバージョンが参照できないのか。最新版を探してみると
http://mirror.centos.org/centos/6/os/x86_64/Packages/kernel-devel-2.6.32-573.el6.x86_64.rpm
これが最新版のようで、日付を見れば24-Jul-2015 20:41
になっています。
ふむふむ。せっかくなので追ってみましょう。 redhatのサイトをたどると
File outdated by: RHSA-2015:1623 になってますね。
2015-08-13に更新されたようです。納得。
というわけで、前回いじっていたころから久々に起動するまでの間に kernel-develに脆弱性が見つかって古いバージョンのものがcentosリポジトリから消滅してしまったので 何もいじってないのにchef-soloの実行がエラーになってしまったというわけでした。 最終的にどう対処したかというと、今回はローカルで使う開発用のvmでvagrant shareするわけでもないので Development Toolsのインストールの前に、古い方のrpmをダウンロードしてきてインストールするようにしました。 あまりきれいな対処法ではないけれど。
remote_file "/tmp/#{node['kernel-devel']['rpm_file']}" do source "#{node['kernel-devel']['rpm_url']}" end package "kernel-devel" do action :install source "/tmp/#{node['kernel-devel']['rpm_file']}" end