PIYO - Tech & Life -

VagrantとChef Soloの超入門

Chef Vagrant Ruby

Vagrant、Chefあたりが気になったので初めて使ってみました。どういうことができるのかわかりませんが使いながら探ってみたいと思います。そんな程度の知識しかないので書いている内容や解釈に間違いがある可能性があります。

vagrant

vagrant、多分読みはベイグラント。VirtualBoxの仮想マシンをコマンドラインから作成・起動したり、ログインしたりすることできるツールのようです。naoya氏のエントリーで存在を知りました。

インストール

1.1系からはgemで管理できなくなったらしいので、ここからdmgを拾ってきてインストールしました。

Vagrant - Downloads

初期化から起動まで

仮想マシンを生成するためのテンプレートのようなものを指定することで仮想マシンをサクっと作ることができるみたいですね。ここでいろいろ選ぶことができます。

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本は購入しておきました。

参考