Edited at

今日作りたくなる簡単cookbook [Kim'sキッチン] rbenv

More than 5 years have passed since last update.

以下全ても●みち風に書いたメモ

皆さんおはようございます。

ryurock@githubです。


ペケポン(38歳)

rbenvをセットアップしたいっす。

方法を教えてください。

今日はそんなrbenvが大好きな方に簡単なcookbookをknife-soloでご紹介したいと思います。


レシピ作成時間

約5分


環境


  • mac-osx(ホストOS)

  • centos6.4-x86-minimal (ゲストOS)


事前準備に必要なもの


参考にしたサイト(書籍)


[その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


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のバージョンも書いてます。(これは後で使う)


chef-repo/ruby/attributes/default.rb

default["user"] = "root"

default["build"] = "1.9.3-p392"


[その4]profileファイルのテンプレートファイルの作成

template "/etc/profile.d/rbenv.sh" do

.
.

のテンプレートの中身です


chef-repo/rbenv/templates/default/rbenv.sh.erb

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のダウンロード&コンパイルです


chef-repo/rbenv/recipes/install.rb

# 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でエラーになりました。


chef-repo/rbenv/recipes/install.rb

# 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などちょっと使ってますが内容はさほど難しくありませんので、是非使ってみてください。

使ったChef Resources