背景
急にCentos7が使いたくなったのでWindows7環境に入れたまま埃を被っていたvagrantにcentos/7のboxをvagrant up
してみたが、以下のようなエラーが出て起動できなかった。
Bringing machine 'test' up with 'virtualbox' provider...
==> test: Checking if box 'centos/7' is up to date...
"rsync" could not be found on your PATH. Make sure that rsync
is properly installed on your system and available on the PATH.
エラーメッセージ通りで、rsync入れれば良いのだけど、これ以上何か入れるのは面倒だったので、設定で回避できないかな、と模索することにした。
調査
まずは--debug
でデバッグログ出してどこでこけているか調べたが、スタックトレースはあんまり役に立たなかった。ただsynced_folder
で起きているということはわかった。
Vagrantfileを調べるとコメントアウトされた設定があったので、デフォルトの設定が悪さしてるんじゃないか、と思った。
読み込むところは最初にやっているはずだし、デフォルトの設定があったとしても何らかのメソッドで共通でやっているだろうとか適当に思って、それらしいところがないかsynced_folder
でgrepしたらすぐ出てきた。
さっそくputsを書いて眺める。printデバッグしか知らない
def synced_folder(hostpath, guestpath, options=nil)
# --- 省略 ---
puts "#{hostpath} : #{guestpath} => " << options[:disabled].to_s
@__synced_folders[options[:guestpath]] = options
end
するとこうなった。
. : /vagrant => false
. : /vagrant => false
. : /vagrant => false
. : /home/vagrant/sync => false
Bringing machine 'default' up with 'virtualbox' provider...
/vagrant
はhostpath
が'.'
である定義がないとデフォルトで定義するらしい(?)から無視してもよさそう。ドキュメント英語で読めない。
では/home/vagrant/sync
はどこから来たんだろう?
vagrantのソースをgrepしても出ないし、自分のVagrantfileにもそんな定義はない。
答えはboxのVagrantfileにあった。
Vagrant.configure("2") do |config|
config.vm.base_mac = "525400730fb1"
config.vm.synced_folder ".", "/home/vagrant/sync", type: "rsync"
end
vagrant upすると食わせるようになっているっぽい?
上記のvm.rb
で@__synced_folders[options[:guestpath]] = options
とやっているから、同じguestpath
の定義を持つsynced_folder
をVagrantfileに書いてやれば上書きできるのでは?と思った。
とりあえず解決
Vagrant.configure(2) do |config|
config.vm.synced_folder ".", "/home/vagrant/sync", disabled: true
# 略
end
. : /home/vagrant/sync => true
. : /home/vagrant/sync => false
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/7' is up to date...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
.....
やったぜ。
. : /vagrant => false
の表示が一切消えたけど、hostpath
が"."
な設定を書いたからそちらが優先されたんだろう。
でも、毎回boxの内容を見てこの行を書き足すとか考えると、馬鹿馬鹿しいので、やっぱりrsync入れたほうが良いですね・・・
Windowsしか使えない人には優しくない世界ですなぁ・・・明日からも頑張ろう。