今日作りたくなる簡単cookbook [Kim'sキッチン] rbenv
以下全ても●みち風に書いたメモ
皆さんおはようございます。
ryurock@githubです。
rbenvをセットアップしたいっす。
方法を教えてください。
今日はそんなrbenvが大好きな方に簡単なcookbookをknife-soloでご紹介したいと思います。
レシピ作成時間
約5分
環境
- mac-osx(ホストOS)
- centos6.4-x86-minimal (ゲストOS)
事前準備に必要なもの
- virtualbox
- ruby 1.9.3p327 (rbenv) ※1.9.3-p286でもいけた
- chef ※入れていない方は
gem install chef
とshellから打ってください - vagrant ※入れていない方はchef-soloで使用するvirtualbox(vagrant)をveeweeを使用して作るを参考に入れておいてください
- git
- knife-soloのセットアップ ※やっていない方は今日作りたくなる簡単cookbook [Kim'sキッチン] yumsetup(yum-fastestmirrorにyum update添え)の前準備を参考にしてやっておいてください。
参考にしたサイト(書籍)
[その1] レシピ名を決める
今回のレシピ名はrubyで行きましょう
cd chef-repo
knife cookbook create ruby -o site-cookbooks
[その2] chef-repo/ruby/recipes/default.rbをコピーする
cp chef-repo/ruby/recipes/default.rb chef-repo/ruby/recipes/rbenv.rb
# rbenvグループを作成して/usr/local/rbenvを実行権限のユーザーを追加する(今回はvagrantユーザーとveeweeユーザーを追加していますお好みによって変更してください)
group "rbenv" do
action :create
members "vagrant"
append true
end
# gitからrbenvを落としてくる(#{node.user}はrootです)
git "/usr/local/rbenv" do
repository "git://github.com/sstephenson/rbenv.git"
reference "master"
action :checkout
user "#{node.user}"
group "rbenv"
end
# ruby-build用のpluginフォルダを作成する
directory "/usr/local/rbenv/plugins" do
owner "#{node.user}"
group "rbenv"
mode "0755"
action :create
end
# rbenvのbash設定を追加
template "/etc/profile.d/rbenv.sh" do
owner "#{node.user}"
group "#{node.user}"
mode 0644
end
# ruby-buildを落としてくる
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
やっていることは
- rbenvグループを作る
- rbenvをgithubから落としてくる
- rbenvのプラグインフォルダを作成する
- rbenvのbinのPATHを反映させるprofileファイルを作成する
- ruby-buildをpluginフォルダにgitで落としてくる
です。
レシピとしては
rbenv入れるところとruby-buildを入れるところで分離してもいいかもしれません。
Chef Resourcesを使用した
で実行します。
[その3]attributesの追加
recipeで使用している#{node.user}の部分の定義です。
ついでにデフォルトで使用したいrubyのバージョンも書いてます。(これは後で使う)
default["user"] = "root"
default["build"] = "1.9.3-p392"
[その4]profileファイルのテンプレートファイルの作成
template "/etc/profile.d/rbenv.sh" do
.
.
のテンプレートの中身です
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
いつものrbenvインストールのPATHのprofile設定ですね。
[その5]installレシピの追加
recipes/default.rbはrbenvのインストールで
recipes/install.rbはrubyのダウンロード&コンパイルです
# ruby 1.9.3-p392をインストール
execute "ruby install" do
not_if "source /etc/profile.d/rbenv.sh; rbenv versions | grep #{node.build}"
command "source /etc/profile.d/rbenv.sh; rbenv install #{node.build}"
action :run
end
#globalの切り替え
execute "ruby change" do
command "source /etc/profile.d/rbenv.sh; rbenv global #{node.build};rbenv rehash"
action :run
end
先ほど定義したchef-repo/rbenv/attributes/default.rbのbuildを使用しています。これで設定かえるだけですきなrubyバージョンを変更できます。
ポイント
はじめ下記のように書いていたがrbenv install command not foundでエラーになりました。
# binのPATHを反映
execute "source export" do
command "source /etc/profile.d/rbenv.sh;"
action :run
end
# ruby 1.9.3-p392をインストール
execute "ruby install" do
not_if "rbenv versions | grep #{node.build}"
command "rbenv install #{node.build}"
action :run
end
一つのブロック空間でそれぞれ独立しているんですね。(きっと)
なのでこれでruby installの項目をやると
rbenv init
が実行されていない状態になります。
[その6]rbenv cookbookをリモート側で実行する設定を追加
vim chef-repo/nodes/{接続名称(任意)}.json
{"run_list":[
"rbenv::default",
"rbenv::install"
]}
run_listをすでに記載している場合は追記でお願いします。
またrbenvのインストールのみで問題ないならrbenvだけでも問題ないです。
[その7] リモート側に実行依頼をする
cd chef-repo
knife solo cook {接続名称(任意)}
Starting Chef Client, version 11.4.0
Compiling Cookbooks...
Converging 3 resources
Recipe: rbenv::default
今日はこれで決まり「rbenv」の完成です
template,attributesなどちょっと使ってますが内容はさほど難しくありませんので、是非使ってみてください。
Discussion