また,デフォルトでは,Box を作成時に Windows Update を実行する設定となっている.README にある通り,この処理はマシンパワーと時間を必要とするので,今回は実行しない設定とする.Packer-Windows/answer_files/81/Autounattend.xml のWITH WINDOWS UPDATESセクションをコメントアウトし,WITHOUT WINDOWS UPDATESセクションのコメントアウトを外す.
変更後の該当箇所は以下のようになる.
<!-- WITHOUT WINDOWS UPDATES --><SynchronousCommandwcm:action="add"><CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\openssh.ps1 -AutoStart</CommandLine><Description>Install OpenSSH</Description><Order>99</Order><RequiresUserInput>true</RequiresUserInput></SynchronousCommand><!-- END WITHOUT WINDOWS UPDATES --><!-- WITH WINDOWS UPDATES --><!--
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c a:\microsoft-updates.bat</CommandLine>
<Order>98</Order>
<Description>Enable Microsoft Updates</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\win-updates.ps1</CommandLine>
<Description>Install Windows Updates</Description>
<Order>100</Order>
<RequiresUserInput>true</RequiresUserInput>
</SynchronousCommand>
--><!-- END WITH WINDOWS UPDATES -->
# coding: utf-8# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.configure(2)do|config|config.vm.boot_timeout=600config.vm.communicator="winrm"# Admin user name and passwordconfig.winrm.username="vagrant"config.winrm.password="vagrant"config.ssh.forward_agent=trueconfig.vm.guest=:windowsconfig.windows.halt_timeout=15config.vm.network:forwarded_port,guest:3389,host:3389,id:"rdp",auto_correct:trueconfig.vm.network:forwarded_port,guest:22,host:2222,id:"ssh",auto_correct:trueprivate_ip={win7:'192.168.252.20',win81:'192.168.252.21',win10:'192.168.252.22'}# --------------------------------------------------# windows_7# --------------------------------------------------config.vm.define'windows_7'do|win7|win7.vm.define"vagrant-windows-7"win7.vm.box=".//windows_7_virtualbox.box"win7.vm.network:private_network,ip:private_ip[:win7],auto_config:truevirtualbox_conf(win7,memory:"2048",cpu:"2")end# --------------------------------------------------# windows_81# --------------------------------------------------config.vm.define'windows_81'do|win81|win81.vm.define"vagrant-windows-81"win81.vm.box="./windows_81_virtualbox.box"win81.vm.network:private_network,ip:private_ip[:win81],auto_config:truevirtualbox_conf(win81,memory:"2048",cpu:"2")end# --------------------------------------------------# windows_10# --------------------------------------------------config.vm.define'windows_10'do|win10|win10.vm.define"vagrant-windows-10-preview"win10.vm.box="./windows_10_virtualbox.box"win10.vm.network:private_network,ip:private_ip[:win10],auto_config:truevirtualbox_conf(win10,memory:"2048",cpu:"2")enddefvirtualbox_conf(config,memory:"1024",cpu:"1",gui:true)config.vm.provider"virtualbox"do|vb|# Display the VirtualBox GUI when booting the machinevb.gui=gui# Customize the amount of memory on the VMvb.customize["modifyvm",:id,"--memory",memory,"--cpus",cpu,"--ioapic","on"]# VM DNS offvb.customize["modifyvm",:id,"--natdnsproxy1","off"]# Windowsvb.customize["setextradata","global","GUI/SuppressMessages","all"]endend
起動
1
vagrant up window_81
ssh や rdp もできるのがスバラッ!!
1
2
vagrant ssh window_81
vagrant rdp window_81
まとめ
Windows の Box ファイルを Packer を用いて作成しました.
Windows に対して,vagrant sshやvagrant rdpができるのは便利だと思います.
今回は,元々の Packer の設定ファイルに記述されているプロビジョニングしか行いませんでしたが,Packer は Ansible にも対応しているので,頑張ればゴールデンイメージを作成できるのではないかと思います. 夢が広がります.