Vagrant、Chefあたりが気になったので初めて使ってみました。どういうことができるのかわかりませんが使いながら探ってみたいと思います。そんな程度の知識しかないので書いている内容や解釈に間違いがある可能性があります。
vagrant
vagrant、多分読みはベイグラント。VirtualBoxの仮想マシンをコマンドラインから作成・起動したり、ログインしたりすることできるツールのようです。naoya氏のエントリーで存在を知りました。
インストール
1.1系からはgemで管理できなくなったらしいので、ここからdmgを拾ってきてインストールしました。
初期化から起動まで
仮想マシンを生成するためのテンプレートのようなものを指定することで仮想マシンをサクっと作ることができるみたいですね。ここでいろいろ選ぶことができます。
A list of base boxes for Vagrant - Vagrantbox.es
$ vagrant box add タイトル 選んだBoxのURL
$ vagrant init 上で指定したタイトル
$ vagrant up
$ vagrant ssh # ログイン
普通にSSHできるようにしてみる
このあとchef関係のセットアップのところでsshを使った処理が走るので、vagrant sshではなく、sshコマンドでログインできるようにしておくといいです。
Vagrantfileに次の一行を追加してブリッジ接続を有効にします。
config.vm.network :private_network, ip: "192.168.33.10" ←コメントをはずす
こうすることでVMにLANのIPが振られます。
$ vagrant reload
$ vagrant ssh
[vagrant@localhost ~]$ ifconfig
...
192.168.xxx.yyyというIPがあるはずなので控えておきます。
ログインのためのキーファイルが~/.vagrand.d/insecure_private_keyにあるのでそれを指定すればsshログインができます。毎回ファイルを指定するのは面倒なので~/.ssh/configに設定を書いておくと楽。
Host 192.168.xxx.*
IdentityFile ~/.vagrand.d/insecure_private_key
これで次のコマンドを叩けばログインできるようになりました。
$ ssh vagrant@192.168.xxx.yyy
その他
$ vagrant halt # 仮想マシン停止
$ vagrant destroy # 仮想マシンを削除?
$ vagrant status # 仮想マシンの状態を見る
他にもサンドボックスモードや複製などいろいろできるみたいですね。 強力だわ。
Chef
環境構築とかを自動で流せるものだという認識です。
インストール
$ gem install chef
Ruby 2.0.0での注意
Ruby2ではchef-soloが動きません。
$ chef-solo -v
Users/hiromasa/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- rubygems/format (LoadError)
Ruby 2.0.0系からrubygemsディレクトリの中にformat.rbがなくなったみたいです。
[~/.rbenv/versions/2.0.0-p0]
$ find . -name format.rb
./lib/ruby/2.0.0/date/format.rb
./lib/ruby/gems/2.0.0/gems/activemodel-3.2.13/lib/active_model/validations/format.rb
./lib/ruby/gems/2.0.0/gems/activemodel-4.0.0.beta1/lib/active_model/validations/format.rb
[~/.rbenv/versions/1.9.3-p374]
$ find . -name format.rb
./lib/ruby/1.9.1/date/format.rb
./lib/ruby/1.9.1/rubygems/format.rb # ← こいつがない
./lib/ruby/gems/1.9.1/gems/activemodel-3.2.1/lib/active_model/validations/format.rb
./lib/ruby/gems/1.9.1/gems/activemodel-3.2.11/lib/active_model/validations/format.rb
./lib/ruby/gems/1.9.1/gems/activemodel-3.2.12/lib/active_model/validations/format.rb
./lib/ruby/gems/1.9.1/gems/activemodel-3.2.13/lib/active_model/validations/format.rb
./lib/ruby/gems/1.9.1/gems/activemodel-3.2.8/lib/active_model/validations/format.rb
~/.rbenv/versions/2.0.0-p0/lib/ruby/2.0.0/rubygems/format.rb という空のダミーファイルを作ることでchef-soloのエラーを回避できます。
VM上でchef-soloが動くようにする
knife-soloというものを使うらしい。
knife-soloをインストールし、初期化しておきます。
$ gem install knife-solo
$ knife configure # 質問にはデフォルトで答えておけば大丈夫
対象のVMを起動しておきます。
$ vagrant up
VMのアドレスをしてknifeによるセットアップを行います。これでVM上でchef-soloを実行できるようになるらしいです。まじかよ。
$ knife solo init chef-repo
$ cd chef-repo
$ knife solo prepare vagrant@192.168.33.10
Bootstrapping Chef...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
101 6471 101 6471 0 0 6483 0 --:--:-- --:--:-- --:--:-- 38289
Downloading Chef for el...
Installing Chef
warning: /tmp/tmp.zYlbwTed/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing... ########################################### [100%]
1:chef ########################################### [100%]
Thank you for installing Chef!
Generating node config 'nodes/192.168.24.71.json'...
VMにRecipeを適用!
helloという名前でレシピを新規作成します。
# さっき作ったchef-repoにいるとする
$ knife cookbook create hello -o cookbooks
cookbooks/hello/recipes/default.rbを編集します。
package "apache2" do
action :install
end
package "apache2" do
action :start
end
さらにnodes/192.168.33.10.jsonを編集します。
$ {"run_list":["recipe[hello]"]}
あとは実行!
$ knife solo cook vagrant@192.168.33.10
VMに入ってみるとどうやらapacheが入ったっぽいですね。早速ブラウザで192.168.33.10にアクセスしてみると……あれ?表示されません。
諦める
どうやらiptablesで弾かれているみたいでした。 このあといろいろ試しましたがなかなかhtmlを表示させるところまでいけない。疲れたからとりあえず断念。多分chefのせいではなさそうなんだけど。
とはいえ、いろいろ良くわからないのでnaoyaさんのchef本は購入しておきました。