オープンソースこねこね

Webプログラミングなどについてあれこれ。

RVMをインストールするとchefが"Could not find chef"となってしまう場合の対処方法

chefがOmnibus Installationで/opt/chef/配下に組み込みRubyと一緒にインストールされている環境にて、別途RVMのRubyを入れると、以下のようなエラーが表示されて動作しなくなりました。

# chef-solo -c /var/chef/config/solo.rb -j /var/chef/nodes/devel.localdomain.json

/opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find chef (>= 0) amongst [bundler-1.3.5, bundler-unload-1.0.1, rake-10.1.0, rubygems-bundler-1.2.0, rvm-1.11.3.8] (Gem::LoadError)
        from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems.rb:1231:in `gem'
        from /opt/chef/bin/chef-solo:22:in `<main>'

そんでちょっと調べてみたら、公式サイトにもこの現象について書かれています。

http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac

OmnibusのGemよりRVMのGemを先に探しに行くらしいのでエラーになるらしい。

対処法ですが、sudosudo -sを使って実行すれば、/etc/profile.d/rvm.shをロードしなくなるのでRVMの影響をさけることができ、Omunibusの閉じた環境で実行してくれます。

# sudo chef-solo -c /var/chef/config/solo.rb -j /var/chef/nodes/devel.localdomain.json

現在のログインユーザがrootでもsudoするのがミソです。

RVMでRuby2.0をCentOS6にインストールする

Ruby2.0のインストールなのですが、最初はcheckinstallでソースからRPM化しようとしてみたものの、いろいろ無理があったりうまく行かなかったりしたので見送り。rvmを使います。

rvm公式サイト

ユーザごとの独立した環境

最近はユーザのHOMEディレクトリ配下の独立した環境にインストールするのが流行りらしいです。 個人的には一人でサーバー管理やっていて、常時rootユーザでオペレーションしている身なので、システム(/usr/local配下)にインストールするのがいつものスタイルです。ですが、ここでは推奨される方法にしたがってみます。

依存パッケージのインストール

epelリポジトリを入れておく(いくつかの依存パッケージが標準のリポジトリにないため)

# wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

依存パッケージをインストール

# yum install gcc-c++ patch readline readline-devel
# yum install zlib zlib-devel libffi-devel
# yum install openssl-devel make bzip2 autoconf automake libtool bison
# yum install gdbm-devel tcl-devel tk-devel
# yum install libxslt-devel libxml2-devel
# yum install --enablerepo=epel libyaml-devel

rvmをインストール

以下のコマンドを叩く。

$ curl -L https://get.rvm.io | bash -s stable

ちなみにシステム(/usr/local配下)にインストールするときはrootユーザで作業するか、以下のようにsudoで実行します。

$ curl -L https://get.rvm.io | sudo bash -s stable

rvmのパスを設定するための記述が以下のファイルに追記されるので、確認しておく

$ vim .bash_profile
$ vim .bashrc

再ログインしてbash_profile.bashrcの変更をロードする。

rvmの確認

バージョン確認

$ rvm -v

対応しているRubyの一覧

$ rvm list known

Ruby2.0.0をインストール

以下のコマンドを叩く。

$ rvm install 2.0.0

RubyGemsのインストールでエラーが出力される

Extracting rubygems-2.0.3 ...
Removing old Rubygems files...
Installing rubygems-2.0.3 for ruby-2.0.0-p0.............................................................................................................................
Error running 'env GEM_PATH=/home/kohkimakimoto/.rvm/gems/ruby-2.0.0-p0:/home/kohkimakimoto/.rvm/gems/ruby-2.0.0-p0@global:/home/kohkimakimoto/.rvm/gems/ruby-2.0.0-p0:/home/kohkimakimoto/.rvm/gems/ruby-2.0.0-p0@global GEM_HOME=/home/kohkimakimoto/.rvm/gems/ruby-2.0.0-p0 /home/kohkimakimoto/.rvm/rubies/ruby-2.0.0-p0/bin/ruby -d /home/kohkimakimoto/.rvm/src/rubygems-2.0.3/setup.rb --verbose',
please read /home/kohkimakimoto/.rvm/log/ruby-2.0.0-p0/rubygems.install.log
Installation of rubygems did not complete successfully.

が、害はないらしいので、よしとする。以下参考サイト

バージョン確認しておしまい。

$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]