読者です 読者をやめる 読者になる 読者になる

by the dreamland

夢の国の近くで暮らすエンジニア(おもにインフラ系)のブログ

【Chef】【ChefDK】Windows環境でChef+Vagrantを使う方法

職場でWindows7なのにChefを使うことになり、練習用の環境を作ろうと思ってかなりハマったのでメモします。

 

AWS EC2は使わないほうがいい、というか使えない(と思う)

まず、Chefではrubyを使用するしVMとの疎通もsshでやるため、Windowsrubysshのセットアップから始めるのはめんどくさいなと思いました。そこでAWSインスタンスを一つ立てて、そこにVirtualBoxとかVagrantとかを入れれば楽なのかな、、とか思ったら大間違いでした。

AWSでは仮想化にXenを使用しています。そしてVirtualBoxXenに対応していないらしいです。気になる人は実際にやってみてください。VirtualBoxをインストールした後、初期化かなんかのシェルを実行したら「Xenだから使えないよ」みたいなエラーが出てがっかりしました。

 

WindowsにChef環境を作るのは本当に疲れた

本当に面倒くさいです。

以下、簡単に手順メモ

2-1:virtualboxvagrantをインストール。

これは普通にインストールすれば良いです。

2-2:これが一番大事。ChefDKを使う!!!!!

rubyを入れて、ああして、こうして、、、、みたいなことが書いてある記事が多いですが、やめておいたほうがいいです。全部言ってることが違うから全く当てになりません。多分個々人の環境によってセットアップの方法も違うのでしょう。はまる危険性高いです。そんな時はこれ!!!

Chef Development Kit | Chef Downloads | Chef

これをまずインストールしましょう。

デフォルトでrubyとかssh設定が入ってます。

このChefDKのチュートリアルに従って試行錯誤すれば多分なんとか進めます。

 

2-3:最後の落とし穴はmingw用のrubyプログラムにあり。

Windows環境でChefやvagrantを使う際に何が大変かというと、コマンドプロンプトで「vagrant ssh」とかが気軽にできないことです。また、WindowsOSをホストOSとし、vagrantで立てたVMにchefコマンドで指令を送る時にもsshが必要になるのでまたここでもハードルがあります。そのため、chefDKがインストールされたディレクトリの下でいろいろとそのハードルをクリアするためのツールを入れていくのですが、、、、詳細はこちらのありがたいリンクをご覧あれ。ただしちょっと不正確なところもありますが、私はこれをみてなんとかなりました。

http://www.beeete2.com/blog/?p=908

 

他にも類似の記事が幾つかありますのでググってみてください。読めばわかるように結構面倒くさい、、、そしてこの後、私はさらに面倒な落とし穴にはまりました。それは、、、、「knife cookbook create」  というコマンドです。

 

2-4:knifeコマンドのサブコマンドが読み込まれない(T T)

VM側にもchefを入れて、windowsからのssh接続も問題なくできた、、、という段になって問題が起きました。いよいよホストOS側でクックブックを作成しようとするとできない!!!なぜか「FATAL: Cannot find sub command for:knife cookbook create」というエラーが出ます。

問題の切り分けとしては、knifeコマンド自体は正常に動作しているのでサブコマンドの読み込みで失敗しているという結論に達しました。そこでエラーメッセージでググって英語のページとかも漁っていたら、、、、ついに見つけた!!!!!git-hubのこの記事。

https://github.com/chef/chef/pull/3277/files

やっぱり同じエラーではまっていた人が世界にはいたようです。

C:\opscode\chefdk\(中略)\lib\chef\knife\core\subcommand_loader.rb
中略したところは記憶が曖昧なので、、すみません。ちなみにchefdkの中にsubcommand_loader.rbというファイルは複数ありますが、mingw-win32だったかそんな感じのディレクトリの下にあるファイルを修正します。私はこのファイルをgithubの記事の通りに修正したら無事にクックブック作れました泣
思わず職場なのに「おお!できた!」と普通に喋ってしまっていました。恥ずかしや。。。いずれにせよこんなことで丸一日潰してしまったのでした。

 引き続き頑張ります。それでは