概要
Packer を利用して VirtualBox で利用可能な Windows7 のイメージを作成する
packer 実行の流れ
1. Packer の Download 設置
下記の Packer Download URL から Packer 本体を Download し解凍後、Directory を ~/ 以下に packer に名前を変更して設置
2. Packer の実行ファイルの Download
本家から Fork した Packer 実行ファイルを git clone
1
| $ git clone https://github.com/ryoogata/packer-windows.git
|
3. Windows iso イメージの設置
利用する Windows iso イメージの md5 の値を取得し、必要に応じて windows_7.json を修正
1
2
| $ md5 windows7.iso
MD5 (windows7.iso) = 69cc2d20bd2c15490f40d34e52d79290
|
1
2
3
4
5
| :
"iso_url": "iso/windows7.iso",
"iso_checksum_type": "md5",
"iso_checksum": "69cc2d20bd2c15490f40d34e52d79290",
:
|
clone した packer-windows Directory 内の iso Directory に Windows の iso イメージを設置
4. image の作成
1
2
3
| $ export PATH=~/packer:$PATH
$ cd packer-windows
$ packer build -only=virtualbox-iso windows_7.json
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| :
==> virtualbox-iso (vagrant): Creating Vagrant box for 'virtualbox' provider
virtualbox-iso (vagrant): Copying from artifact: output-virtualbox-iso/packer-virtualbox-iso-1413034723-disk1.vmdk
virtualbox-iso (vagrant): Copying from artifact: output-virtualbox-iso/packer-virtualbox-iso-1413034723.ovf
virtualbox-iso (vagrant): Renaming the OVF to box.ovf...
virtualbox-iso (vagrant): Using custom Vagrantfile: vagrantfile-windows_7.template
virtualbox-iso (vagrant): Compressing: Vagrantfile
virtualbox-iso (vagrant): Compressing: box.ovf
virtualbox-iso (vagrant): Compressing: metadata.json
virtualbox-iso (vagrant): Compressing: packer-virtualbox-iso-1413034723-disk1.vmdk
Build 'virtualbox-iso' finished.
==> Builds finished. The artifacts of successful builds are:
--> virtualbox-iso: 'virtualbox' provider box: windows_7_virtualbox.box
|
Tips
packer コマンド実行中に実行される Script
packer コマンド実行中、windows_7.json に記載がある下記の script が実行される
1
2
3
4
5
6
7
8
9
| "scripts": [
"./scripts/vm-guest-tools.bat",
"./scripts/chef.bat",
"./scripts/vagrant-ssh.bat",
"./scripts/disable-auto-logon.bat",
"./scripts/enable-rdp.bat",
"./scripts/compile-dotnet-assemblies.bat",
"./scripts/compact.bat"
]
|
TimeZone の変更
answer_files/7/Autounattend.xml の修正
1
| <TimeZone>Pacific Standard Time</TimeZone>
|
1
| <TimeZone>Tokyo Standard Time</TimeZone>
|
ComputerName の変更
answer_files/7/Autounattend.xml の修正
1
| <ComputerName>vagrant-2012</ComputerName>
|
1
| <ComputerName>vagrant-win7</ComputerName>
|
ComputerName は 15 文字以内
で指定する
Headless の設定
Packer 実行ファイルのデバック時などは VirtualBox の Window が表示される方が便利。Default では Headless なので、必要に応じて変更する。
windows_7.json の修正
true の場合、Headless になり、packer 実行中の VirtualBox の Window が表示されない
Windows の日本語化
answer_files/7/Autounattend.xml の修正
en-US の箇所を ja-JP に変更
1
2
3
4
5
6
| <UILanguage>en-US</UILanguage>
<InputLocale>en-US</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback>en-US</UILanguageFallback>
<UserLocale>en-US</UserLocale>
|
1
2
3
4
5
6
| <UILanguage>ja-JP</UILanguage>
<InputLocale>ja-JP</InputLocale>
<SystemLocale>ja-JP</SystemLocale>
<UILanguage>ja-JP</UILanguage>
<UILanguageFallback>ja-JP</UILanguageFallback>
<UserLocale>ja-JP</UserLocale>
|
Image 作成中の Windows Update の停止
Packer 実行中、Windows Update を実施しないようにする
answer_files/7/Autounattend.xml の修正
1
2
3
4
5
6
7
8
| <!-- WITHOUT WINDOWS UPDATES -->
<!--
:
-->
<!-- END WITHOUT WINDOWS UPDATES -->
<!-- WITH WINDOWS UPDATES -->
:
<!-- END WITH WINDOWS UPDATES -->
|
1
2
3
4
5
6
7
8
| <!-- WITHOUT WINDOWS UPDATES -->
:
<!-- END WITHOUT WINDOWS UPDATES -->
<!-- WITH WINDOWS UPDATES -->
<!--
:
-->
<!-- END WITH WINDOWS UPDATES -->
|
トラブルシュート
「応答ファイルは無効です」エラー
エラーログ
1
| パス[specialize]の無人応答ファイル[C:\Windows\Panther\unattend.xml]を解析または処理できませんでした。応答ファイルは無効です。
|
原因
ComputerName が文字数制限の 15 文字
を超えている文字列を指定していた。
1
2
3
| Autounattend.xml
<ComputerName>vagrant-windows7</ComputerName>
|
Error uploading guest additions
エラーログ
1
2
3
4
| Build 'virtualbox-iso' errored: Error uploading guest additions: Process exited with: 1. Reason was: ()
==> Some builds didn't complete successfully and had errors:
--> virtualbox-iso: Error uploading guest additions: Process exited with: 1. Reason was: ()
|
原因
仮想メディアマネージャの光学ディスクのところに VBoxWindowsAdditions が入っていないとダメかも。適当な Windows OS に VBoxWindowsAdditions を Mount して、再度 packer コマンドを実行したらとりあえず解決できた。
compact.bat の sdelete.exe コマンド実行後に固まる
エラーログ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| cmd /c C:\Windows\Temp\sdelete.exe -z C:
virtualbox-iso: SDelete - Secure Delete v1.61
virtualbox-iso: Copyright (C) 1999-2012 Mark Russinovich
virtualbox-iso: Sysinternals - www.sysinternals.com
virtualbox-iso:
virtualbox-iso: SDelete is set for 1 pass.
virtualbox-iso: Zeroing free space on C:\: 0%
==> virtualbox-iso: Provisioning with shell script: /var/folders/c0/mrt_fmsx6l1b_kjl7pbstr2h0000gn/T/packer-shell022007924
virtualbox-iso: rm: cannot remove `/tmp/TMP0000000149D9D38AB494459F': Device or resource busy
==> virtualbox-iso: Unregistering and deleting virtual machine...
==> virtualbox-iso: Deleting output directory...
Build 'virtualbox-iso' errored: Script exited with non-zero exit status: 1
==> Some builds didn't complete successfully and had errors:
--> virtualbox-iso: Script exited with non-zero exit status: 1
==> Builds finished but no artifacts were created.
:
:
|
原因
packer-windows 実行ファイルの ver 1.23 で修正済み。 1.22 以前のバージョンでは修正の必要あり
本家 packer-windows URL
windows_7.json の下記を修正
1
2
3
4
5
| "type": "shell",
"inline": [
"rm -rf /tmp/*"
]
}
|
1
2
3
4
5
| "type": "shell",
"inline": [
"rm -rf /tmp/* || ! false"
]
}
|
参照 URL