ChefでRuby2.0をソースからインストールしてみる

Vagrantの仮想マシンにChefを実行するための準備をする
の続き

Ruby2.0をインストールするためのCookbookを作成する。

$ cd chef-repoのディレクトリ
$ knife cookbook create ruby2 -o site-cookbooks

files/defaultのディレクトリに、Ruby2.0のソースをダウンロードしておく。

$ wget ftp://core.ring.gr.jp/pub/lang/ruby/2.0/ruby-2.0.0-p353.tar.gz -P site-cookbooks/ruby2/files/default

レシピを作成する。

$ vi site-cookbooks/ruby2/recipes/default.rb
%w{gcc gcc-c++ make openssl-devel zlib-devel readline-devel}.each do |p|
  package p do
    action :install
  end
end

cookbook_file "/tmp/ruby-2.0.0-p353.tar.gz" do
  source "ruby-2.0.0-p353.tar.gz"
  mode 0644
end

bash 'install_ruby' do
  user 'root'

  code <<-EOC
    cd /tmp
    tar xzf ruby-2.0.0-p353.tar.gz
    cd ruby-2.0.0-p353
    ./configure --with-opt-dir=/usr/local --enable-shared --enable-option-checking
    make
    make test
    make install
  EOC

  creates "/usr/local/bin/ruby"
end

gcc gcc-c++ make openssl-devel zlib-devel readline-devel
は無くても、Ruby2.0をインストールすることはできるが
後々必要になりそうなので入れておく。

not_if "which ruby"
だとうまく行かなかったので
creates "/usr/local/bin/ruby"
でインストール済みの場合はインストールしないようにした。よく分からない。

nodesのjsonを記述し、

$ vi nodes/centos.json
{
  "run_list": [
    "recipe[ruby2]"
  ]
}

Vagrant仮想マシンに反映する。

$ knife solo cook centos

ログインすると、Rubyの2.0がインストールされているのが確認できる。

$ ssh centos
centos$ ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]