ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

Chef SoloでVagrant上にRubyをインストールする方法

ChefでVagrant上にrubyの実行環境を構築してみましたので、そのレシピを公開などしてみます。

ただ、基本的に以下の記事と同じような形になってしまいますた。。。

クックブックの内容

レシピを作成する

まずはサクッとレシピを作成しましょう。 名前はrubyにします。

$ knife cookbook create ruby -o site-cookbooks/

rbenvを準備する

rubyをインストールするには、まずrbenvをインストールします。 1ブロックずつ書いてcookしていけば、動きが分かってよいです。

$ vi /site-cookbooks/ruby/recipes/rbenv.rb

group 'rbenv' do
  action :create
  members 'vagrant'
  append true
end

git '/usr/local/rbenv' do
  repository 'git://github.com/sstephenson/rbenv.git'
  reference 'master'
  action :checkout
  user "#{node.user}"
  group 'rbenv'
end

directory '/usr/local/rbenv/plugins' do
  action :create
  owner "#{node.user}"
  group 'rbenv'
  mode 0755
end

template '/etc/profile.d/rbenv.sh' do
  owner "#{node.user}"
  group "#{node.user}"
  mode 0644
end

PackageやDSLが分からなくなったら、とりあえず公式ドキュメントを見ます!

ruby-buildを準備する

次にruby-buildをインストールします。 これはgitから持ってくるだけです。

$ vi /site-cookbooks/ruby/recipes/ruby-build.rb

git '/usr/local/rbenv/plugins/ruby-build' do
  repository 'git://github.com/sstephenson/ruby-build.git'
  reference 'master'
  action :checkout
  user "#{node.user}"
  group 'rbenv'
end

インストールする

あとは上記をinstallでインストールして、globalでバージョンを切り替えるだけです。

$ vi /site-cookbooks/ruby/recipes/install.rb

execute 'ruby install' do
  not_if "source /etc/profile.d/rbenv.sh; rbenv versions | grep #{node.ruby.version}"
  command "source /etc/profile.d/rbenv.sh; rbenv install #{node.ruby.version}"
  action :run
end

execute 'ruby change' do
  command "source /etc/profile.d/rbenv.sh; rbenv global #{node.ruby.version}; rbenv rehash"
  action :run
end

default.rbから呼び出す

上記の手順を明示的に実行するため、include_recipeを書きます。

$ vi /site-cookbooks/ruby/recipes/default.rb

include_recipe 'ruby::rbenv'
include_recipe 'ruby::ruby-build'
include_recipe 'ruby::install'

環境設定を書く

上記ファイルに#{node.user}#{node.ruby.version}といった変数があると思います。 これも設定します。

$ vi /site-cookbooks/ruby/attributes/default.rb

default['user'] = 'root'
default['ruby']['version'] = '2.0.0-p353'

実行

あとはnodes/[host].jsonrun_listに追記して、knife solo cookすればrubyのインストールが完了します! だいぶレシピの書き方が分かってきた……ような、気が、するだけ、ですね。。。