今更Vagrantを始めることになったので、メモ。 環境はOS-X
brew cask install virtualboxでbrew cask install vagrantbrew cask install vagrant-managervagrant box add https://vagrantcloud.com/ubuntu/boxes/xenial64vagrant box add https://atlas.hashicorp.com/freebsd/boxes/FreeBSD-10.3-RELEASEvagrant box list でリストを確認vagrant init ubuntu/xenial64 (Ubuntuの場合)vagrant upvagrant 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*にする方法もあるらしいのだが、試していない
書きかけ