タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

Vagrant VMware Workstation Provider 設定メモ

こんな感じで使ってる。

# PROJECT_DIR/vagrant/Vagrantfile
VAGRANTFILE_API_VERSION = '2'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = 'chef/centos-6.5'
  config.vm.network :forwarded_port, guest: 1080, host: 1080 # MailCatcher
  config.vm.network :forwarded_port, guest: 3000, host: 3000 # Rails
  config.vm.provider :vmware_workstation do |v|
    v.gui = true
    v.vmx["memsize"]    = '2048'
    v.vmx["numvcpus"]   = '4'
    v.vmx["vhv.enable"] = 'True'
  end
  config.vm.provider :virtualbox do |vb|
    vb.customize ['modifyvm', :id, '--memory', '2048']
    vb.customize ['modifyvm', :id, '--natdnsproxy1', 'off']
    vb.customize ['modifyvm', :id, '--natdnshostresolver1', 'off']
    vb.customize ['modifyvm', :id, '--cpus', '4']
    vb.customize ['modifyvm', :id, '--ioapic', 'on']
  end
  config.berkshelf.enabled = true
  config.berkshelf.berksfile_path = '../Berksfile'
  config.vm.provision :chef_solo do |chef|
    chef.log_level = :debug
    chef.run_list = %w(mysql::server mysql::client ruby_build rbenv::user base::default)
    chef.json = {
        'mysql' => {
            'server_root_password' => '',
        },
        'rbenv' => {
            'user_installs' => [
                {
                    'user' => 'vagrant',
                    'rubies' => [
                        '2.1.5'
                    ],
                    'global' => '2.1.5',
                    'gems' => {
                        '2.1.5' => [
                            {
                                'name' => 'bundler',
                                'version' => '1.7.9'
                            }
                        ]
                    }
                }
            ]
        }
    }
  end
  config.omnibus.chef_version = '11.16.4'
  config.ssh.forward_agent = true
  config.vm.synced_folder '../', '/vagrant'
  config.vm.boot_timeout = 300
end

VMware Provider のここがよい

同期フォルダが高速

嵌まりどころ

Timeout

PS D:\uzuki05\Documents\IdeaProjects\myapp\vagrant> vagrant up
Bringing machine 'default' up with 'vmware_workstation' provider...
==> default: Checking if box 'chef/centos-6.5' is up to date...
==> default: Verifying vmnet devices are healthy...
Skipping Berkshelf with --no-provision
==> default: Preparing network adapters...
==> default: Starting the VMware VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 192.168.112.134:22
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
SocketError: getaddrinfo: �����������z�X�g���s�������B

対策

  config.vm.boot_timeout = 300

タイムアウトを長めにとる。

Timeoutが発生してしまったら、しばらく待ってからhalt。 すぐやってもエラーになるが、諦めずしばらく待ってから実行するとうまくいく。

PS D:\uzuki05\Documents\IdeaProjects\myapp\vagrant> vagrant halt
==> default: Attempting graceful shutdown of VM...

手動でVMware Workstationで落としたりすると、次回 vagrant up 時に起動できなくなるなど

vagrant reload できない

できない…

対策

reload しない…