ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

Chef SoloでVagrant上にrbenv環境をつくったけどgem installがうまくいかない場合の対処法

以前、Chef SoloでVagrant上にrbenvの環境をつくりました。

ただ、この方法では、rbenv/versionsのグループがrootとなります。 そのため、vagrantユーザでgem installしてもこうなってしまいます。。。

[vagrant@localhost ~]$ gem install bundler
Fetching: bundler-1.3.5.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/local/rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0 directory.

これを解決してみます。

解決方法

権限を変更する

上のエラー文では、「rbenv/versions/〜に書き込み権限がないよ!」と言われているようです(適当)。

じゃあ、とりあえず変えてみましょう。 /usr/local/rbenv下すべてのグループをrbenvグループにして、さらにrbenvグループに書き込み権限を与えます。

$ sudo chown -R :rbenv /usr/local/rbenv
$ sudo chmod -R 775 /usr/local/rbenv

gem installする

以上でOKです。 これで、試しにgem install bundlerすると……。

[vagrant@localhost ~]$ gem install bundler
Fetching: bundler-1.3.5.gem (100%)
Successfully installed bundler-1.3.5
Parsing documentation for bundler-1.3.5
Installing ri documentation for bundler-1.3.5
1 gem installed

きたこれ!

補足:Chefのレシピで書く

これをChefでやると、以下のようになると思います。 何度も実行しないように、rbenv/versionsのグループがrbenvじゃないときだけ実行するようにnot_ifなどを書いてみます。

execute 'change owner and mode' do
  not_if "ls -ld /usr/local/rbenv/versions | awk '{ print $4 }' | grep rbenv"
  command 'chown -R :rbenv /usr/local/rbenv; chmod -R 775 /usr/local/rbenv'
end

以上なのです。