VirtualBox、Vagrant、knifeによる開発環境作成をやってみる。(5)

knife-soloのインストール

下記のコマンドでインストール。

>gem install knife-solo

バージョンは0.3.0、また一緒にインストされたChefのバージョンは11.6.0だった。また、後からおこなう「knife solo init chef-repo」の時に色々怒られる(ERROR)ので、下記のコマンドも実行しておく。

>gem install win32-process --no-ri --no-rdoc 
>gem install ffi --no-ri --no-rdoc
>gem install windows-pr --no-ri --no-rdoc
>gem install net-ssh -v 2.6.5

レシピを準備する

下記で、レシピのテンプレートが作られる。このchef-repoというディレクトリにレシピを作成する。

>knife solo init chef-repo

次に、下記を実行する。

>cd chef-repo
>knife solo prepare -i "C:\Users\[ユーザー名]\.vagrant.d\insecure_private_key" -p 2222 vagrant@127.0.0.1

knife solo prepare を実行すると、VMにchefをインストールしてくれているみたい。ちなみに、事前に ssh が通るように ~/.ssh/config にどのキーを使うかを書いておいたほうが、毎回-iオプションを入力せずにすむらしい。書式はこんなん。

Host 127.0.0.1
    HostName        127.0.0.1
    Port            2222
    IdentityFile    C:\Users\k-ohyama\.vagrant.d\insecure_private_key
    User            vagrant

rsyncsshのパスを通す

Windowsの場合rsyncがないので、インストールする必要がある。knife-soloのREADME.rdocのページを見てみる。すると、下記のサイトを見てrsyncをインストールせよ、と書かれていた。
https://github.com/thbar/rsync-windows
しかし面倒臭いので、ここ(https://www.itefix.no/i2/cwrsync-get?quicktabs_7=1)からインストーラーを入手して、インストール先にパスを通す。

レシピの編集

initで作ったフォルダ構成は下記のようになっている。

cookbooks
├[サービス名]/recipes/default.rb → レシピの内容
├data_bags
├nodes
│ └xx.xx.xx.xx.json → レシピを実行するノードに対して、実行するレシピが書かれたファイル。
├roles
├site-cookbooks
└solo.rb

レシピのひな形は下記のコマンドで作成する。

>knife cookbook create [recipe名] -o cookbooks

このコマンドでcookbooks/[recipe名]が作られる。
たとえば、VMjavaをインストールするというレシピの場合、まず下記でjavaという名前のcookbookを作る。

>knife cookbook create java -o cookbooks

そしてcookbooks/ java/recipes/default.rbを編集する。
下記は、インストールを行うレシピ。

%w{java-1.7.0-openjdk}.each do |pkg|
  package pkg do
    action :install
  end
end

nodes/127.0.0.1.jsonを下記のように編集する。

{
   "run_list":["recipe[java]"]
 }

これで実行できるはず。
今回は、Java7+GlassFish3.1.2.2+PostgreSQL9.2.6のレシピで行う。
レシピはこちら

レシピを実行する

>knife solo cook -i "C:\Users\[User名]\.vagrant.d\insecure_private_key" -p 2222 vagrant@127.0.0.1