Chef Soloでrubyのバージョンを2.0.0-p195にする方法 ~Debian、Ubuntu編~

VagrantやChefが流行っているので、自分も試しにやってみようと思いました。

Herokuと同じような環境を作ってみたいと思い、Debian環境にruby2,0とRails4を入れることを目標に進めています。

参考サイト

今回参考にしたのは以下のエントリーです。

お手軽環境構築 !chefでrubyのバージョンを2.0.0-p195にする方法 ~CentOS~

CentOS環境にChefでruby2.0を導入する方法が丁寧に書かれています。

今回の記事は、この投稿を一部Debian,Ubuntuように書き換えたものになります。

ソースコード

最終的には以下のようになりました。

#
# site-cookbooks/ruby2/recipes/default.rb
#
git "/usr/local/rbenv" do
 repository "git://github.com/sstephenson/rbenv.git"
 reference "master"
 action :sync
end

%w{/usr/local/rbenv/shims /usr/local/rbenv/versions}.each do |dir|
 directory dir do
 action :create
 end
end

git "/usr/local/ruby-build" do
 repository "git://github.com/sstephenson/ruby-build.git"
 reference "master"
 action :sync
end

bash "install_ruby_build" do
 cwd "/usr/local/ruby-build"
 code <<-EOH
 ./install.sh
 EOH
end

template "rbenv.sh" do
 path "/etc/profile.d/rbenv.sh"
 owner "root"
 group "root"
 mode "0644"
 source "rbenv.sh.erb"
end

%w{make gcc zlib1g-dev libssl-dev libreadline5-dev ncurses-dev libgdbm-dev libdb4.8-dev libffi-dev tk-dev libyaml-dev}.each do |pkg|
 apt_package pkg do
 action :install
 end
end

execute "rbenv install 2.0.0-p195" do
 command "/usr/local/rbenv/bin/rbenv install 2.0.0-p195"
 action :run
 not_if { ::File.exists?("/home/vagrant/.rbenv/versions/2.0.0-p195") }
end

execute "rbenv rehash" do
 command "/usr/local/rbenv/bin/rbenv rehash"
 action :run
end

execute "rbenv global 2.0.0-p195" do
 command "/usr/local/rbenv/bin/rbenv global 2.0.0-p195"
 action :run
end

ポイント

パッケージ名

CentOS系とDebian系ではパッケージ名が異なります。(CentOSならhttpd、Debianならapache2など)

Chefはそのへんの違いは吸収してくれないっぽく、そのままだと以下の様なエラーが出まくります。

Chef::Exceptions::Package: No version specified, and no candidate version available for XXXX

そこで、CentOS向けのパッケージの名前を全部書き換えました。以下の部分ですね。


%w{make gcc zlib-devel openssl-devel readline-devel ncurses-devel gdbm-devel db4-devel libffi-devel tk-devel libyaml-devel}.each

rdenvのパス

なぜか

Error executing actionrunon resource ‘execute[rbenv install 2.0.0-p195]‘

となってしまったので、rdenvのパスをフルパスにしました。

execute "rbenv global 2.0.0-p195" do
  command "/usr/local/rbenv/bin/rbenv global 2.0.0-p195"
  action :run
end

ここは理由がよく分かっていません。。。

終わりに

まだVagrantもChefも触り始めですが、nigoblog さんには他にも参考になりそうな記事が多数あったので、引き続きお世話になろうと思います。

間違ってる部分等あったらアドバイスを頂けると嬉しいですm(_ _)m