LoginSignup
24
24

More than 5 years have passed since last update.

Windows 7 + Vagrant 1.4.2 でCentOS7のboxが起動できなかったので調べた

Last updated at Posted at 2015-08-10

背景

急に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デバッグしか知らない

vagrant-1.7.2\plugins\kernel_v2\config\vm.rb
      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...

/vagranthostpath'.'である定義がないとデフォルトで定義するらしい(?)から無視してもよさそう。ドキュメント英語で読めない。

では/home/vagrant/syncはどこから来たんだろう?
vagrantのソースをgrepしても出ないし、自分のVagrantfileにもそんな定義はない。

答えはboxのVagrantfileにあった。

../.vagrant.d/boxes/centos-VAGRANTSLASH-7/1505.01/virtualbox
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に書いてやれば上書きできるのでは?と思った。

とりあえず解決

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しか使えない人には優しくない世界ですなぁ・・・明日からも頑張ろう。

24
24
1

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