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].json
のrun_list
に追記して、knife solo cook
すればruby
のインストールが完了します!
だいぶレシピの書き方が分かってきた……ような、気が、するだけ、ですね。。。