Rubyのインストールを行います。Itamaeのレシピを作っている時に色々なサイトで勉強していたのですが、なかなかサクっとうまい事いかなくてかなり悩みました。

なので、記事の中に書いた内容も自分の環境では今のところうまくいっていますが、もしかしたら別の環境ではうまくいかなかったりするかもしれません。あしからず👷

とりあえず必要なファイルをジェネレート。

$ itamae g ruby

で、とりあえず最後にはこんな感じのディレクトリ構成になります🌲

├── cookbooks
│   └── initialize
│       ├── default.rb
│       └── files
│           └── rbenv.sh
└── node.yml

ひとまず完成したdefault.rbはこんな感じです。

package "ruby-rdoc"
package "ruby-devel"
package "epel-release"
package "gcc"
package "gcc-c++"
package "make"
package "automake"
package "autoconf"
package "curl-devel"
package "openssl-devel"
package "libyaml-devel"
package "libxml2-devel"
package "libxslt-devel"
package "libffi-devel"
package "readline-devel"
package "zlib-devel"
package "httpd-devel"
package "sqlite-devel"
package "apr-util-devel"
package "bison"
package "flex"
package "git"
package 'nodejs'

RBENV_DIR = "/usr/local/rbenv"
RBENV_SCRIPT = "/etc/profile.d/rbenv.sh"
RUBY_VER = node["ruby"]["version"]

git RBENV_DIR do
  repository "git://github.com/rbenv/rbenv.git"
end

remote_file RBENV_SCRIPT do
  source "./files/rbenv.sh"
end

execute "set owner and mode for #{RBENV_SCRIPT} " do
  command "chown root: #{RBENV_SCRIPT}; chmod 644 #{RBENV_SCRIPT}"
  user "root"
end

execute "mkdir #{RBENV_DIR}/plugins" do
  not_if "test -d #{RBENV_DIR}/plugins"
end

git "#{RBENV_DIR}/plugins/ruby-build" do
  repository "git://github.com/rbenv/ruby-build.git"
end

git "#{RBENV_DIR}/plugins/rbenv-vars" do
  repository "git://github.com/rbenv/rbenv-vars.git"
end

execute "install ruby #{RUBY_VER}" do
  command "source #{RBENV_SCRIPT}; rbenv install #{RUBY_VER}"
  not_if "source #{RBENV_SCRIPT}; rbenv versions | grep #{RUBY_VER}"
end

execute "set global ruby #{RUBY_VER}" do
  command "source #{RBENV_SCRIPT}; rbenv global #{RUBY_VER}; rbenv rehash"
  not_if "source #{RBENV_SCRIPT}; rbenv global | grep #{RUBY_VER}"
end

node.ymlにはRubyのバージョンだけを書きます。複数のrubyのバージョンを書いてeachでいくつかインストールするレシピを結構見ますが、まあ1アプリケーション1サーバーな予定だし、ひとまず最新の2.3.0だけ入れる事に。

ruby:
  version: 2.3.0

で、filesディレクトリにあるrbenv.shの中身はいつもだったら.zshrcとか.bashrcとかに書く内容です。

export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

こいつをrbenvコマンドをItamaeで使うときに読み込んで使わないとうまくいかなかったです。

rbenv.shを転送する

必要なパッケージに関しては特別書く事ないのでスルー。

filesに用意したひとまずrbenv.shをサーバーに転送します。

RBENV_SCRIPT = "/etc/profile.d/rbenv.sh"
remote_file RBENV_SCRIPT do
  source "./files/rbenv.sh"
end

基本的なrbenvをgithubからクローンする

Ruby環境はrbenv+ruby-buildで作ります。で、rbenvはgitクローンしてきます。で、plugin用のディレクトリ作って他のプラグインをインストール。

RBENV_DIR = "/usr/local/rbenv"

git RBENV_DIR do
  repository "git://github.com/rbenv/rbenv.git"
end

execute "mkdir #{RBENV_DIR}/plugins" do
  not_if "test -d #{RBENV_DIR}/plugins"
end

git "#{RBENV_DIR}/plugins/ruby-build" do
  repository "git://github.com/rbenv/ruby-build.git"
end

git "#{RBENV_DIR}/plugins/rbenv-vars" do
  repository "git://github.com/rbenv/rbenv-vars.git"
end

で、rubyをインストール。

execute "install ruby #{RUBY_VER}" do
  command "source #{RBENV_SCRIPT}; rbenv install #{RUBY_VER}"
  not_if "source #{RBENV_SCRIPT}; rbenv versions | grep #{RUBY_VER}"
end

execute "set global ruby #{RUBY_VER}" do
  command "source #{RBENV_SCRIPT}; rbenv global #{RUBY_VER}; rbenv rehash"
  not_if "source #{RBENV_SCRIPT}; rbenv global | grep #{RUBY_VER}"
end

これでサーバーの再起動とかすれば、ひとまずrubyのインストールはできているはずです。

Itamae自分メモ

  • 基本的な設定とか準備
  • 必要なライブラリとsshとかportとか
  • Ruby(rbenv+ruby-build)のセットアップ
  • Postgresqlのインストールと設定
  • nginxのインストール&セットアップ