概要
前回 Virtualbox 上で Windows Server 2016 の自動構築を行いました
今回は VMware ESXi 上でビルドして vmx + vmdk ファイルを作成してみたいと思います
環境
- ESXi 6.0.0 (Build 3620759)
- Ubuntu 16.0.4
- packer 1.0.4
事前準備
Windows Server 2016 の ISO は事前にダウンロードしておいてください
過去にダウンロードの仕方を紹介しているので参考にしてください
packer を実行するマシン (今回であれば Ubuntu を使っています) 上に配置してください
前回同様 Windows の自動構築の仕組みは Autounattend.xml を使います
これは前回使用したものをそのまま流用できます
Autounattend.xml は Windows の OS 自動インストールを行うための仕組みなので Virtualbox であろうが ESXi であろうが同じものが使えて当然です
そして、内部で使用している WinRM を有効にする Powershell スクリプトも前回と同じものを流用します
テンプレートファイルの準備
ESXi 上で実行するテンプレートファイルを新規で作成します
- win2016.json
{
"builders": [{
"type": "vmware-iso",
"vm_name": "win2016",
"guest_os_type": "windows8srv-64",
"vmx_data": {
"gui.fitguestusingnativedisplayresolution": "FALSE",
"memsize": "2048",
"numvcpus": "2",
"virtualHW.version": "10",
"scsi0.virtualDev": "lsisas1068",
"ethernet0.networkName": "VM Network",
"ethernet0.virtualDev": "e1000",
"ethernet0.present": "TRUE",
"ethernet0.connectionType": "custom",
"ethernet0.vnet": "vmnet8",
"ethernet0.startConnected": "TRUE"
},
"disk_size": 81920,
"disk_type_id": "thin",
"remote_type": "esx5",
"remote_host": "192.168.100.101",
"remote_datastore": "datastore12",
"remote_username": "esxi_user",
"remote_password": "esxi_password",
"headless": "false",
"iso_url": "/vol/win2016.ISO",
"iso_checksum": "18a4f00a675b0338f3c7c93c4f131beb",
"iso_checksum_type": "none",
"communicator": "winrm",
"winrm_username": "winuser1",
"winrm_password": "winpass123",
"winrm_timeout": "12h",
"floppy_files": [
"answer_files/Autounattend.xml",
"scripts/winrm.ps1"
]
}]
}
VirtualBox 時のテンプレートファイルと比較してポイントをいくつか説明します
まず type は vmware-iso を指定します
こうすることで VMware 環境 (今回は ESXi) 上でビルドを行うことができます
ESXi の情報は remote_type
, remote_host
, remote_datastore
, remote_username
, remote_password
で設定しています
guest_os_type は Windodws8 のものを使用しています
とりあえずこれでも動作します
vmx_data で VM の構成を設定します
ここが一番のポイントです
まず scsi0.virtualDev
は lsisas1068
を指定してください
これは LSI Logic SAS というドライバなのですが、これでないとハードディスクをうまく認識することができません
これ以外のドライバを使いたい場合は別途ドライバをインストールする必要があります
次に ethernet0.virtualDev
は e1000
を指定してください
これも e1000 にしないとネットワークアダプタがうまく認識されず IP アドレスが取得できません
IP アドレスが取得できないと WinRM で接続もできないためビルドが失敗します
あとは "iso_checksum_type": "none"
ですが、こうすることで ISO のアップロードを毎回行わないようにします
VirtualBox 時は md5 で指定していたのですが、md5 にするとなぜか ESXi に ISO を毎回アップロードしてしまいます
本来であればチェックサムの値が同じであれば既にアップロードしてある ESXi のデータストアにキャッシュされた ISO を使うのですが、なぜか使ってくれません
なので、ワークアラウンド的に none を指定しています
それ以外の項目に関しては前回の VirtualBox で使用したテンプレートとほぼ同じです
実行する
- packer build win2016.json
で実行しましょう
問題なくビルドが完了すると指定したデータストア上に「output-vmware-iso」というディレクトリが作成されその配下に vmx ファイルと vmdk ファイルが保存されます
今回のテンプレートの設定だとビルドが完了するとサーバは削除されてしまいます
最後に
packer を使って ESXi 上で Windows2016 をビルドしてみました
ハマったのは使用するドライバをテンプレートで指定する箇所で vmxnet3 や VMware Paravirtual (PVSCSI) を使用するとうまくデバイスが認識されませんでした
少し上記で述べましたが vmxnet3 にしていると Windows がネットワークアダプタを認識できず WinRM を使って packer から接続できずにビルドエラーとなります
ちなみに PVSCSI にしていると OS インストール時に Windows could not apply the unattend answer file's <DiskConfiguration> setting
というエラーが発生します
うまくハードディスクが認識されないためパーティションの作成と設定に失敗しています
この問題も頑張れば解決することができるらしいので解決できたらその方法を紹介したいと思います
0 件のコメント:
コメントを投稿