LoginSignup
75
73

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-04-18

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

皆さんおはようございます。
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


75
73
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
73