[Vagrant](box作成) Windows10 Pro 64bit(日本語版)仮想マシン作成 (Packer使用)

## 概要
- Packerを使用して、Windows10 Pro 64bit(日本語版)仮想マシンのboxを作成
- https://github.com/StefanScherer/packer-windows <br> こちらのスクリプトを使用させてもらう。(ので詳しいことはちょっと...)
- `vagrant rdp`リモートデスクトップ接続する。
- (2017-01-30) packer 0.12.1にはWinRM関連にバグあるので、使わないこと.

## 環境
- ホスト: Windows 10 (64bit)
- [git](https://git-scm.com/download) for windows 2.10.0 (Unix関係のツールのため.. bashとか、dos2unixとか)
- [VirtualBox](https://www.virtualbox.org/wiki/Downloads) <del>5.1.6</del> 5.0.x と、拡張パック
- [Vagrant](https://www.vagrantup.com/downloads.html) 1.8.5
- [Vagrant Packer](https://www.packer.io/downloads.html) 0.10.1 - zipを解凍して、`vagrant.exe`とおなじ、`C:\HashiCorp\Vagrant\bin`におく。

- インストールDVDのISOイメージ `C:\Win10_1607_Japanese_x64.iso` におく。
    - https://www.microsoft.com/ja-jp/software-download/windows10ISO/ からダウンロード<br>`Win10_1607_Japanese_x64.iso`: 日本語版(ja-JP) `sha1=493aa01af9719edae702b65d4edd3e4f6f1e8c3f`
    - 一応、こちらもOK。パッチ当てるとき注意。(先に確認したのはこっち)<br>`Win10_1607_English_x64.iso`: 英語版(en-US) `sha1=99fd8082a609997ae97a514dca22becf20420891`

### 手順
1. ツール類インストール
    - git, VirtualBox(とExtensionPack), Vagrant をインストールして、再起動
    - `packer.exe`は、ダウンロードして、`C:\HashiCorp\Vagrant\bin\packer.exe`となるようにおく。

2. `Git Bash`を実行して,bashのコマンドウィンドウを開く. (適当なとこで、右クリックして、`Git Bash here`でもよい)
3. 以下、こぴぺ、実行。

    ```bash:bash上で実行
cd /
mkdir -p /c/vagrant/Win10
cd /c/vagrant/Win10
git clone https://github.com/StefanScherer/packer-windows.git
cd packer-windows/
git checkout 1c7339f4f328af7acc4bb814d56b130585d33d2c
#
# パッチ.
sed -i -e 's/NPPR9-FWDCX-D2C8J-H872K-2YT43/<Key>W269N-WFGWX-YVC9B-4J6C9-T83GX<\/Key>/g' -e 's/Enterprise\ Evaluation/Pro/g' ./answer_files/10/Autounattend.xml
sed -i -e '/guest_os_type/i \ \ \ \ \ \ "shutdown_timeout": "1h",'  ./windows_10.json
sed -i -e 's/windows8srv-64/windows9-64/g' -e 's/Windows81_64/Windows10_64/g' ./windows_10.json
#
# 日本語版へのパッチ.
sed -i -e 's/en-US/ja-JP/g' ./answer_files/10/Autounattend.xml
sed -i -e 's/High\ performance/高パフォーマンス/g' -e 's/[3]/[2]/g' ./scripts/set-powerplan.ps1
#
git diff | cat
#
time packer build -force -only=virtualbox-iso -var 'iso_url=c:/Win10_1607_Japanese_x64.iso' -var 'iso_checksum_type=sha1' -var 'iso_checksum=493aa01af9719edae702b65d4edd3e4f6f1e8c3f'  ./windows_10.json
#
#英語版なら
# time packer build -force -only=virtualbox-iso -var 'iso_url=c:/Win10_1607_English_x64.iso' -var 'iso_checksum_type=sha1' -var 'iso_checksum=99fd8082a609997ae97a514dca22becf20420891'  ./windows_10.json
```

4. 待つ。

    ```shell-session
..
..
Build 'virtualbox-iso' finished.

    ==> Builds finished. The artifacts of successful builds are:
--> virtualbox-iso: 'virtualbox' provider box: windows_10_virtualbox.box

    real    38m58.514s
user    0m0.000s
sys     0m0.015s

    mt08@Win10host MINGW64 /c/vagrant/Win10/packer-windows (my)
```
5. `windows_10_virtualbox.box` ができる。
6. 使ってみる。

    ```bash
cd /c/vagrant/Win10/
vagrant box add --name Win10_1607_JP_x64 ./packer-windows/windows_10_virtualbox.box
vagrant box list # 確認
vagrant init Win10_1607_JP_x64
vagrant up     # 起動
vagrant rdp    # リモートデスクトップでログイン=> ユーザ名:vagrant/パスワード:vagrant
vagrant halt   # VMの電源OFF
```



## その他
- `-only=virtualbox-iso`を`-only=vmware-iso`にすると、VMWareのboxが作成できた.



### 変更点メモ
- `answer_files/10/Autounattend.xml`
    - ProductKey
        - ここから https://technet.microsoft.com/en-us/library/jj612867.aspx
        - `<Key></Key>`が抜けてた
    - `en-US`から`ja-JP`へ
- `scripts/set-powerplan.ps1`
    - `powercfg`で表示される日本語表示で、検索やカットする場所が変更

- windows_10.json
    - `"guest_os_type"`をWin10へ対応するものへ。
    - `"shutdown_timeout"`を長く設定しないと、タイムアウトでエラーになる。 <br>=> https://github.com/mitchellh/packer/issues/2401



### git-diff


```diff:git-diff
diff --git a/answer_files/10/Autounattend.xml b/answer_files/10/Autounattend.xml
index d4d26c5..944d7f8 100644
--- a/answer_files/10/Autounattend.xml
+++ b/answer_files/10/Autounattend.xml
@@ -46,7 +46,7 @@
                 -->

                 <!-- Product Key from http://technet.microsoft.com/en-us/library/jj612867.aspx -->
-                <ProductKey>NPPR9-FWDCX-D2C8J-H872K-2YT43
+                <ProductKey><Key>W269N-WFGWX-YVC9B-4J6C9-T83GX</Key>
                     <WillShowUI>Never</WillShowUI>
                 </ProductKey>
             </UserData>
@@ -61,7 +61,7 @@
                     <InstallFrom>
                         <MetaData wcm:action="add">
                             <Key>/IMAGE/NAME</Key>
-                            <Value>Windows 10 Enterprise Evaluation</Value>
+                            <Value>Windows 10 Pro</Value>
                         </MetaData>
                     </InstallFrom>
                 </OSImage>
@@ -69,13 +69,13 @@
         </component>
         <component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
             <SetupUILanguage>
-                <UILanguage>en-US</UILanguage>
+                <UILanguage>ja-JP</UILanguage>
             </SetupUILanguage>
-            <InputLocale>en-US</InputLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
-            <UILanguageFallback>en-US</UILanguageFallback>
-            <UserLocale>en-US</UserLocale>
+            <InputLocale>ja-JP</InputLocale>
+            <SystemLocale>ja-JP</SystemLocale>
+            <UILanguage>ja-JP</UILanguage>
+            <UILanguageFallback>ja-JP</UILanguageFallback>
+            <UserLocale>ja-JP</UserLocale>
         </component>
     </settings>
     <settings pass="offlineServicing">
diff --git a/scripts/set-powerplan.ps1 b/scripts/set-powerplan.ps1
index 65ee32c..16195a5 100644
--- a/scripts/set-powerplan.ps1
+++ b/scripts/set-powerplan.ps1
@@ -1,6 +1,6 @@
 Try {
-  $HighPerf = powercfg -l | %{if($_.contains("High performance")) {$_.split()[3]}}
-  $CurrPlan = $(powercfg -getactivescheme).split()[3]
+  $HighPerf = powercfg -l | %{if($_.contains("高パフォーマンス")) {$_.split()[[2]]}}
+  $CurrPlan = $(powercfg -getactivescheme).split()[[2]]
   if ($CurrPlan -ne $HighPerf) {powercfg -setactive $HighPerf}
 } Catch {
   Write-Warning -Message "Unable to set power plan to high performance"
diff --git a/windows_10.json b/windows_10.json
index d01c8ea..94803d6 100644
--- a/windows_10.json
+++ b/windows_10.json
@@ -13,7 +13,8 @@
       "winrm_password": "vagrant",
       "winrm_timeout": "2h",
       "shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
-      "guest_os_type": "windows8srv-64",
+      "shutdown_timeout": "1h",
+      "guest_os_type": "windows9-64",
       "disk_size": "{{user `disk_size`}}",
       "vnc_port_min": 5900,
       "vnc_port_max": 5980,
@@ -49,7 +50,8 @@
       "winrm_password": "vagrant",
       "winrm_timeout": "2h",
       "shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
-      "guest_os_type": "Windows81_64",
+      "shutdown_timeout": "1h",
+      "guest_os_type": "Windows10_64",
       "guest_additions_mode": "disable",
       "disk_size": "{{user `disk_size`}}",
       "floppy_files": [
```

### システムのプロパティ
- "ライセンス認証されていません。"

![Vagrant-box-Win10JP.png](https://qiita-image-store.s3.amazonaws.com/0/75594/0f4f1502-24d2-f64a-eeca-ff50ed47c470.png)