今更Vagrantを始めることになったので、メモ。 環境はOS-X
brew cask install virtualbox
でbrew cask install vagrant
brew cask install vagrant-manager
vagrant box add https://vagrantcloud.com/ubuntu/boxes/xenial64
vagrant box add https://atlas.hashicorp.com/freebsd/boxes/FreeBSD-10.3-RELEASE
vagrant box list
でリストを確認vagrant init ubuntu/xenial64
(Ubuntuの場合)vagrant up
vagrant ssh
で起動したVMにsshでloginするvagrant ssh-config
で起動したVMに読み込まれている設定が見られるvagrant halt
でVMを止めるvagrant reload
でVMを再起動するvagrant provision
でVMにProvisioningで記述した操作を適用する手元のVagrantは1.8.1で、1.7系では出ていないという話を聞いたが、同一のBoxを元にVMを二つ起動しようつするとVMのVirtualBox上での識別子が被ってしまい、起動できないという症状が出た。
config.vm.provider "virtualbox" do |vb| vb.name = "nginx" # これがVB上の識別子になるので、重複しないよう機器をつけること。 end
Ubuntu 16.04はNICの命名規則が変わっている(15.10以降かららしい) そのため、
config.vm.define "nginx" do |loop| loop.vm.network "private_network", ip: "192.168.1.11", virtualbox__intnet: "intra" loop.vm.network "private_network", ip: "192.168.2.11" loop.vm.provider "virtualbox" do |vb| vb.name = "nginx1" end end
のような記述をすると、eth0が見つからないと言って大騒ぎする 回避するには、
config.vm.define "nginx1" do |loop| loop.vm.network "forwarded_port", guest: 80, host: 2001 loop.vm.network "private_network", ip: "192.168.1.11", virtualbox__intnet: "intra", auto_config: false loop.vm.network "private_network", ip: "192.168.2.11", auto_config: false loop.vm.provider "virtualbox" do |vb| vb.name = "nginx1" end loop.vm.provision 'shell', inline: "/sbin/ifconfig enp0s8 192.168.1.11/24" loop.vm.provision 'shell', inline: "/sbin/ifconfig enp0s9 192.168.2.11/24" end
のように、network設定でauto_configをfalseに設定し、provisioningで取り急ぎのアドレスを割り当てる。 当然、2回目の起動からはアドレスが設定されなくなるので、システムにアドレス設定を記述する必要がある。
無論、旧来のようにDevice nameをeth*にする方法もあるらしいのだが、試していない
書きかけ