azukipochette's weblog

memory dump (mini)

Packer で Windows の Box (vmware-iso) を作成するまで

はじめに

Packer を Windows の Box 作成に利用するには、Packer 用のテンプレート ファイル (json 形式) を作成しなければなない。 最初から作成するにはかなり大変なので、GitHub 上で開発が進められている Packer-Windows というすばらしいプロジェクトから設定ファイル一式を取得すると良い。

MSDN ライブラリの ISO イメージを使用するようにする

README.MD に書かれている通り、既定では評価版の OS イメージ (英語) を MSDN 経由でダウンロードするように書かれているので、MSDN サブスクリプションで提供されている ISO イメージなどを使用する場合には、カスタマイズが必要となる (MSDN サブスクライブ会員でない場合は、そのまま評価版を使いましょう :))。

下記に実際に設定を変更した部分を示す。

"type": "vmware-iso",
"iso_url": "./iso/ja_windows_8_1_enterprise_x86_dvd_2791652.iso",
"iso_checksum_type": "md5",
"iso_checksum": "1A490A9F17FAD5B4C684BE915438399F",

iso_url が、ISO ファイルが実際に配置されている場所を示す。既定ではネットワーク経由でダウンロードする方法が記載されているが、README.MD の指示通りに別途 MSDN サブスクライバからダウンロード後、Packer-Windows の iso フォルダに配置している。iso_checksum_type は、その ISO が正しいものであるかどうかを示すためのハッシュ値である。 本来は、改ざんなどがされいない正しい ISO が選択されていることを確認するためのものなので、iso_checksum_typesha1 にし、MSDN サブスクライバー ダウンロード時の [詳細情報] に記載されている SHA1 のハッシュ値を入れるのが正しい。 ただ、自分が持っている ISO ファイルから必要なハッシュを計算する方法を念のため、記載しておく (MD5 の例)。

Get-FileHash C:\works\packer-windows\iso\ja_windows_8_1_enterprise_x86_dvd_2791652.iso -Algorithm MD5

Box の作成経過を確認する

Box の作成経過を確認するには、テンプレートの headless を false にする。 通常、Packer はひっそりと Box を作るようになっているが、false にすることで VMWare Workstation が起動し、実際の進捗状況が見えるようになる。正常に作成する場合にはあえて false にする必要がないが、途中でレスポンスが帰ってこない場合は期待しない動作になっている可能性があるので、テンプレートを修正した場合は 1 度は false にして進捗状況を確認した方が良いだろう。

"headless": false,

Autounattend.xml ファイルを編集する

残念ながら、json ファイルを書き換えただけでは、自動インストールしてくれないことがある。これは、Autounattend.xml (応答ファイルと呼ばれるもの) の設定が正しくないためだ。下記の MSDN ライブラリの記載などを確認して、Autounattend.xml を対象の Windows 向けに変更する。

デバッグする

もし、セットアップ中に期待しない動作になった場合 (セットアップに失敗/ハングするなど) は、デバッグするしかない。一般的なセットアップ時のデバッグ方法について記載しておく。

コマンド プロンプトを起動したい

下記のサポート技術情報にこのように記載があるので、その通りにすればよい。

GUI モードのセットアップを実行中にコマンド プロンプトを使用するには、Shift + F10 キーを押します。

カーネル デバッグをしたい

カーネルでバッグをするには、テンプレート (json) ファイルの vmx_data に下記の設定を追加する (名前付きパイプによる通信の設定)。

"serial0.present": "TRUE",
"serial0.fileType": "pipe",
"serial0.startConnected": "TRUE",
"serial0.yieldOnMsrRead": "TRUE",
"serial0.fileName": "\\\\.\\pipe\\com_1",
"serial0.tryNoRxLoss": "TRUE"

この上で、Windows の ISO ファイルを Windows ADK (AIX) を使用して展開、編集、ISO化する。詳しい手順は、下記のサポート技術情報のやり方を参考にすると良い (注意: 展開、ISO 部分だけを参考にすること)。

展開後、C:\boot\bcd の配下にある bcd ファイルを bcdedit で変更する。変更方法は、次の TechNet ライブラリの記載を確認すること。

コマンドの設定例を参考情報として以下に示す。

 bcdedit /store C:\boot\bcd\bcd /set {default} debug on

おまけ

もし、"Getting Device Ready xx%" のところで止まっているようならば、guset_os_type の設定を見直した方が良い。 この設定が正しくないと、VMWare は対象の OS がわからず、その OS 向けの対処をしなくなってしまう。

私はこの設定を VMWare workstation だから設定は別に "other" いいのかな?なんて思ってしまい、2 日ほどデバッグしてしまった。

参考情報

Packer のイメージを作成する場合は、次のドキュメントを参考にして作成すること。