exlar's IT note

ITやスマートデバイスを中心とした趣味情報の寄せ集め

OSXからCentOS6.5へknife soloしたい!発生したエラーと対策

随分前に少し使って放置していたChef実行環境(knife solo)を改めて使ってみる。

  • Client環境 (knife solo): OSX
  • Server環境: CentOS 6.5: インストールしてアップデートした程度の状況。ほぼ初期状態

まず最低限ということで、

  1. 接続先情報を初期化する knife solo prepare の実行完了
  2. recipeを実行する knife solo cook の実行完了

を最初の目標にする。recipeはユーザを作成する程度の簡単なものにした。

Chef & knife 関連はさすがに環境変化が激しく、Web検索で見つかる情報はどれも古く感じてしまうのが辛いところ。いろいろな情報をかき集めながら初期環境を構築した。正常パターンは追々メモすることとして、本記事ではハマったところのエラーを記録する。

関門1: Cookbook *** not found. が発生した時

knife solo prepare ***@hostname.local を実行したあと、 knife cook に入ろうとしたところで ERROR が発生してしまいなかなか前へ進めない。

Uploading the kitchen...

Generating solo config...

Running Chef...

Starting Chef Client, version 11.12.0
Compiling Cookbooks...

Running handlers:
[2014-10-27T21:35:08+09:00] ERROR: Running exception handlers
Running handlers complete

[2014-10-27T21:35:08+09:00] ERROR: Exception handlers complete
[2014-10-27T21:35:08+09:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 2.393915796 seconds
[2014-10-27T21:35:08+09:00] ERROR: Cookbook users not found. If you're loading users from another cookbook, make sure you configure the dependency in your metadata
[2014-10-27T21:35:08+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
ERROR: RuntimeError: chef-solo failed. See output above.

Cookbook users と記載されている部分は、今回適用しようと思った recipe の名前。これが見つからないとエラーになっている。

対処方法

CookbookへのPATHが通っていない。結果だけ見ると単純すぎる…

cookbook_path    ["cookbooks", "site-cookbooks"]

昔作った .chef/knife.rb の表現が古くなっていたようで、そちらのはこの記載が入っておらずなかなか気づかなかった。既存の .chef を削除した後、knife solo init . を実行すると新しいものが作られる。

関門2: metadata.rb内のlong_descriptionが邪魔する

Running handlers:
[2014-10-27T21:42:08+09:00] ERROR: Running exception handlers
Running handlers complete

[2014-10-27T21:42:08+09:00] ERROR: Exception handlers complete
[2014-10-27T21:42:08+09:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 2.06716861 seconds
[2014-10-27T21:42:08+09:00] ERROR: No such file or directory - /home/****/chef-solo/cookbooks-3/ssh/README.md
[2014-10-27T21:42:08+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
ERROR: RuntimeError: chef-solo failed. See output above.

対処方法

knifeコマンドでrecipeを作成すると自動生成されるmetadata.rb内には以下の記述がある。小規模・個人的な利用なので不要なファイルは削除してしまった為、ここでファイルが存在しないとエラーになっている様子。

long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))

long_descriptionは行ごとごっそり削除してしまうことにする。

関門3: SSLチェックのエラーが出る

[2014-10-27T21:56:04+09:00] WARN:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SSL validation of HTTPS requests is disabled. HTTPS connections are still
encrypted, but chef is not able to detect forged replies or man in the middle
attacks.

To fix this issue add an entry like this to your configuration file:

```
  # Verify all HTTPS connections (recommended)
  ssl_verify_mode :verify_peer

  # OR, Verify only connections to chef-server
  verify_api_cert true
```

To check your SSL configuration, or troubleshoot errors, you can use the
`knife ssl check` command like so:

```
  knife ssl check -c /home/****/chef-solo/solo.rb
```

* * * * * * * * * * * * * * * * * * * * * * * * * * 

対処方法

ここは素直にrecommendされている一行 ssl_verify_mode :verify_peer.chef/knife.rb に追加する。

そして成功へ

なんとか実行完了しました。黒いターミナルの上に輝く緑の文字が嬉しい。