20
20

More than 5 years have passed since last update.

VagrantのShell Provisionで、nvmをインストールする際に気をつけること

Last updated at Posted at 2013-12-01

要点

 nvmのインストールに限った話ではなくて、provisionをshellで行うとき(※たぶんchefとかのときも?)に共通して言えること。

 ついつい先入観でprovisionはvagrant(ユーザ)権限で実行されると思いがち(自分だけ?)だけど、実際にはroot権限で実行されるため、

  • なにがしかのスクリプトの中で$HOMEを参照している
  • provision中に/home/vagrant下にファイルやディレクトリを生成する

ような場合には注意が必要です。

では、nvmのインストールでの具体例を…

Install script じゃダメ

Shell Provision はroot権限で実行されるので

curl https://raw.github.com/creationix/nvm/master/install.sh | sh
# or
wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh

は使えない。

install.sh$HOME を参照しているため、/root.nvm が生成されてしまう。

というわけで…

Manual inatall する

でも、単純にREADMEのコピペじゃダメ

/home/vagrant にインストールしたいので、~/.nvm
/home/vagrant/.nvm と読み替えるのを忘れずに。

ついでに汎用化して

init_nvm.sh
#!/bin/bash

home=/home/$1
node_version=$2

# install nvm
git clone https://github.com/creationix/nvm.git $home/.nvm

# install node
source $home/.nvm/nvm.sh
nvm install $node_version

# ログインシェルに登録
cat << _EOT_ >> $home/.bashrc
source ~/.nvm/nvm.sh
nvm use $node_version > /dev/null
_EOT_

Vagrantfile には

Vagrantfile
config.vm.provision :shell, inline: <<-EOT

  # install git
  yum -y install git

  # install nvm/node 
  sh /path/to/init_nvm.sh "vagrant" "0.10.22"

  # -----------------------
  # 実はこれが一番重要かも
  # -----------------------
  # provisionの最後とかに、/home/vagrant/*の権限をvagrantに変更する。
  # - 上述の通り、shell provisionはroot権限で実行され、
  # - provision中に生成されたファイルの権限はrootになっているので。
  chown vagrant.vagrant -R /home/vagrant

EOT

これで vagrant up --provision 後に vagrant ssh して

[vagrant@localhost ~]$ node -v
v0.10.22

であればOK!

20
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
20
20