Chefのcookbookを管理するツール「Berkshelf」が良さそうだったため、Windowsで試してみた時のメモ。
環境
ホストOS
- Windows7 SP1
- Vagrant 1.3.5
- Berkshelf 2.0.10
- VirtualBox 4.2.18
事前準備
前回作ったBoxをVagrantにadd
忘れないようにaddしておきます。
d:\veewee\veewee>vagrant box add ubuntu120403 ubuntu120403.box
Downloading or copying the box...
Extracting box...ate: 336M/s, Estimated time remaining: --:--:--)
Successfully added box 'ubuntu120403' with provider 'virtualbox'!
流れ
今回使う、Berkshelf用のフォルダを作成・移動
d:\>mkdir berkshelf
d:\>cd berkshelf
Berkshelfのインストール
d:\berkshelf>gem install berkshelf --no-ri --no-rdoc
# 略
Successfully installed berkshelf-2.0.10
25 gems installed
BerkshelfのVagrantプラグインをインストール
VagrantとBerkshelfを連携させるために追加します。
d:\berkshelf>vagrant plugin install vagrant-berkshelf
Installing the 'vagrant-berkshelf' plugin. This can take a few minutes...
Installed the plugin 'vagrant-berkshelf (1.3.4)'!
ゲストOSのChefを最新版にするためのVagrantプラグインをインストール
念のために入れておきます。
d:\berkshelf>vagrant plugin install vagrant-omnibus
Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
Installed the plugin 'vagrant-omnibus (1.1.2)'!
初期化
今回はhogeという環境を作ります。
d:\berkshelf>berks cookbook hoge
create hoge/files/default
create hoge/templates/default
create hoge/attributes
create hoge/definitions
create hoge/libraries
create hoge/providers
create hoge/recipes
create hoge/resources
create hoge/recipes/default.rb
create hoge/metadata.rb
create hoge/LICENSE
create hoge/README.md
create hoge/Berksfile
create hoge/Thorfile
create hoge/chefignore
create hoge/.gitignore
run git init from "./hoge"
create hoge/Gemfile
create hoge/Vagrantfile
Berksfileの修正
Berksfileに必要な各種cookbookを記載します。
site :opscode
metadata
cookbook 'apt'
cookbook 'git'
cookbook 'ruby_build'
cookbook 'rbenv', github: "fnichol/chef-rbenv"
Vagrantfileの修正
chef-rbenvのREADME.mdではnode.defalutで指定していますが、Vagrantで使うため、chef.jsonのところに直接記載します。
- config.vm.hostname = "hoge"
- config.vm.box = "ubuntu120403" # 上記でVagrantにaddしたbox
- config.vm.box_url のコメントアウト
- config.ssh.max_tries のコメントアウト
- config.ssh.timeout のコメントアウト
- config.vm.provision の修正
- 2.0.0-p247には、BundlerとPadrino
- 1.9.3-p448には、BundlerとRuboto
なお、Vagrant内のChefにて、rbenvでglobalのRubyバージョンを指定する方法は、以下を参考にしました。
chef - Rbenv vagrant global ruby version unchanged - Stack Overflow
また、実際の「Berksfile」と「Vagrantfile」は、Gistに置いておきました。
Berkshelf で rbenv + Ruby 環境を作成する時の Berksfile と Vagrantfile
できあがったゲストOSの環境を確認
「Vagrant ssh」を使ってできあがった環境を確認します。rbenvの内容とデフォルトのRubyのバージョンは以下のとおりです。
d:\berkshelf\hoge>vagrant ssh
Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic i686)
vagrant@hoge:~$ rbenv versions
system
1.9.3-p448
* 2.0.0-p247 (set by /home/vagrant/.rbenv/version)
vagrant@hoge:~$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
Ruby 2.0系環境にインストールされているgemの確認
*** LOCAL GEMS ***
activesupport (3.2.15)
bigdecimal (1.2.0)
bundler (1.3.5)
http_router (0.11.0)
i18n (0.6.5)
io-console (0.4.2)
json (1.7.7)
mail (2.5.4)
mime-types (1.25)
minitest (4.3.2)
multi_json (1.8.2)
padrino (0.11.4)
padrino-admin (0.11.4)
padrino-cache (0.11.4)
padrino-core (0.11.4)
padrino-gen (0.11.4)
padrino-helpers (0.11.4)
padrino-mailer (0.11.4)
polyglot (0.3.3)
psych (2.0.0)
rack (1.5.2)
rack-protection (1.5.1)
rake (0.9.6)
rdoc (4.0.0)
sinatra (1.4.4)
test-unit (2.0.0.0)
thor (0.17.0)
tilt (1.4.1)
treetop (1.4.15)
url_mount (0.2.1)
環境を切り替えて、Ruby 1.9系環境にインストールされているgemの確認
vagrant@hoge:~$ rbenv global 1.9.3-p448
vagrant@hoge:~$ gem list*** LOCAL GEMS ***
arrayfields (4.9.0)
bigdecimal (1.1.0)
bundler (1.3.5)
chronic (0.10.2)
fattr (2.2.1)
io-console (0.3)
json (1.5.5)
main (5.2.0)
map (6.5.1)
minitest (2.5.1)
rake (0.9.2.2)
rdoc (3.9.5)
ruboto (0.15.0)
以上より、ゲストOSにセットアップできていることが確認できました。