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
以上なのです。