読者です 読者をやめる 読者になる 読者になる

元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

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 しない…