chefでrpmファイルからのインストールが失敗する

chefでrpmファイルで配布されているファイルからブツをインストール。
ファイルが幾つかあるので、attributeにリストを書いて、それでループしてcookbook_fileで転送してpackageでインストールというレシピを記述。ところがいざ走らせてみるとファイルは転送してくれるものの、rpmの実行がエラーになってる。

エラーはこんな感じ。

Generated at 2015-02-27 13:38:52 +0900
Chef::Exceptions::Exec: package[hoge] (hoge::default line 13) had an error: Chef::Exceptions::Exec: rpm  -i /tmp/hoge.rpm returned 1, expected 0
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/mixin/command.rb:158:in `handle_command_failures'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/mixin/command.rb:104:in `run_command_and_return_stdout_stderr'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/mixin/command.rb:79:in `run_command'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/mixin/command.rb:171:in `run_command_with_systems_locale'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/provider/package/rpm.rb:95:in `install_package'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/provider/package.rb:82:in `block in action_install'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.16.4/lib/chef/mixin/why_run.rb:52:in `call'

レシピの文法的なエラーじゃなくて、rpmを実行した結果、戻り値がエラーになっている。なんでだ。

--testをつけて実行してみる

rpmだと--testをつけるとテストしてくれるとのこと。じゃあってことでやってみる。

# rpm -i --test /tmp/hoge.rpm
#

なにもでない。正常なのかな。

--testをつけないでやってみる

rpm -i /tmp/hoge.rpm
エラー: アーカイブの伸長に失敗: ファイル /usr/lib/hoge/fuga.so.12.1;54eff700: cpio: read

ん、エラーになるな。

rpmファイルをチェック

じっくり見てみるとサイズが全然オリジナルと違う。ダウンロード中にセッションがきれたのかな。ふーん、チェックサムがついてないからわからなかったな。

再度ダウンロード

もう一回ダウンロードしてknifeで実行。こんどはちゃんと動作しました。