LoginSignup
21
20

More than 5 years have passed since last update.

Vagrantでshell-provisioningする時のshell環境に関するメモ

Posted at

Vagrant の shell-provisioning で rbenv から ruby をインストールしようとしてハマったのでメモ。

以下のような rbenv.sh を作って、

#!/bin/bash

sudo apt-get install -y libssl-dev libreadline-dev

# Install rbenv, ruby-build
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
cd ~/.rbenv
mkdir shims versions plugins
git clone https://github.com/sstephenson/ruby-build.git plugins/ruby-build
git clone https://github.com/sstephenson/rbenv-default-gems.git plugins/rbenv-default-gems
cd

# Setting rbenv path
cat << '__EOF__' > ~/.bashrc.d/rbenv.sh
export RBENV_ROOT="$HOME/.rbenv"
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
__EOF__

# Setting default-gems
cat << '__EOF__' > ~/.rbenv/default-gems
rbenv-rehash
bundler
__EOF__

Vagarntfile ではこんな感じに指定する。

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "rbenv.sh", privileged: false
end

これで rbenv は使えるようになる。

ここからさらに ruby をインストールしたいので、rbenv.sh に追加。

# install ruby
rbenv install 2.1.1
rbenv global 2.1.1

rbenvコマンドが見つからない。

ssh で入ると普通に使えるんだけど、なぜか provisioning 時に PATH が設定出来てない。
これではどうか?

# set environmental-variables
source ~/.bashrc.d/rbenv.sh

# install ruby
rbenv install 2.1.1
rbenv global 2.1.1

・・・同じくrbenvコマンドが見つからない。

原因は .bashrc。
デフォルトの .bashrc の先頭の方にはこういう記述がある。

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

要するに、Vagrantが provisioning する時に使っている shell は non-interactive で、
non-interactive なアクセスの時には色々余計な事をしないように、ここ以降は読み込まれないようになっている。
だから PATH が設定さていなかったのだし、再度 source し直しても当然何も起こらない。

こうしたら動いた。

# set interactive environmental-valiables
PS1='$ '
source ~/.bashrc

# Install ruby
rbenv install 2.1.1
rbenv global 2.1.1

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20