Windows7でBerkshelf + Vagrantを使って、Ubuntu12.04.3に rbenv + Ruby + Padrino/Ruboto を入れてみた

Chefのcookbookを管理するツール「Berkshelf」が良さそうだったため、Windowsで試してみた時のメモ。

環境

ホストOS
ゲストOS
  • 前回の記事で作ったveeweeのBoxを元にVagrantで作成
  • rbenv + Rubyで 1.9系 と 2.0系 の設定を行う。
    • 2.0.0-p247 + Bundler + Padrino
    • 1.9.3-p448 + Bundler + Ruboto

事前準備

前回作った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のところに直接記載します。


なお、Vagrant内のChefにて、rbenvでglobalのRubyバージョンを指定する方法は、以下を参考にしました。
chef - Rbenv vagrant global ruby version unchanged - Stack Overflow


また、実際の「Berksfile」と「Vagrantfile」は、Gistに置いておきました。
Berkshelf で rbenv + Ruby 環境を作成する時の Berksfile と Vagrantfile



Vagrantで起動

d:\berkshelf\hoge>vagrant up

できあがったゲスト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の確認

vagrant@hoge:~$ gem list

*** 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にセットアップできていることが確認できました。



その他

Vagrantの詳細なログを残すには、環境変数をセットした後、リダイレクトでログファイルなどに出力しておきます。

d:\berkshelf\hoge>set VAGRANT_LOG=debug
d:\berkshelf\hoge>vagrant up >> log.txt 2>&1