LoginSignup
36

More than 5 years have passed since last update.

VagrantのShell Provisionerはrootで実行される

Last updated at Posted at 2015-11-25

Vagrantのshellプロビジョニングでよくsudoを使ったスクリプトを見かけますが、Shell Provisionerはデフォルトではrootで実行されるので基本的にsudoは不要だったりします。
自分もつい最近までvagrantユーザで実行されるものだと思い込んでいて全部sudoで書いていました。
rootがsudoを使っても別にいいと思うので、どちらでも実行できるようにsudoで書いておくという考えもなくはないかもしれない)

Shell Scripts - Provisioning - Vagrant Documentation より:

privileged (boolean) - Specifies whether to execute the shell script as a privileged user or not (sudo). By default this is "true". This has no effect for Windows guests.

privilegedオプションがtrueだとrootで実行されるようです。そしてデフォルトはtrueと。

この辺を見ると(スクリプト自体が)sudoで実行されそうな感じが伝わってきます。
https://github.com/mitchellh/vagrant/blob/master/plugins/provisioners/shell/provisioner.rb#L87

こんな実験。

config.vm.provision "shell", inline: <<-SHELL
  whoami      #=> root
  echo $HOME  #=> /root
SHELL
config.vm.provision "shell", privileged: false, inline: <<-SHELL
  whoami      #=> vagrant
  echo $HOME  #=> /home/vagrant
SHELL

rootの時にsudoを実行してもたいして問題はありませんが、$HOMEを参照する際は注意が必要そうですね。というか/home/vagrantだと思い込んでいたのではまりました。

たぶん、デフォルトでこんなのが書かれているのが原因なんじゃないですかね。
(2016-07-22現在、sudoがない形にコメントのサンプルが修正されていました)

# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
#   sudo apt-get update
#   sudo apt-get install -y apache2
# SHELL

sudo使ってるし。

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
36