Symantec GhostとWindowsPEを使用したPC大量展開手順を残す

# はじめに
前職でPC(Windows)の大量展開が含まれる入札案件が定期的にあり、地味に面倒だったので、他の会社さんもこれを参考にやってほしいと思って書いてみました。

「うちじゃPCしか納品できないから参加無理だな」と思ってた会社の方。そんなに難しくないよ。問題は価格と仕様に合った機器のほうがあるか、ですから。

- お客さんに先に1〜2台納品し、セットアップしてもらったものを大量展開するパターン。
- メーカー販売店の方は、Windowsのプレイン→VL代替措置を使用してください。VL版Windowsの購入本数が減らせるはず。
- 1台しか対象が無い人はGhost使う利点が無いから[AOMEI](https://www.aomei.jp/)でもどうぞ。

# 用意するもの

## ソフトウェア
1. Symantec Ghost Solution Suite
2. 上記のライセンス、SA（**SAは忘れる人居るので注意**）x PC台数
3. 必要なWindowsのVL版、SA（GOLPならSA付いてくると思うので問題無いかと）
4. [tftpd64](http://tftpd32.jounin.net/tftpd32_download.html#Top)（DHCPサーバに使う）・・・portable versionが良い。
5. [Build-BootableWindowsPe](https://github.com/morokoshi/Build-BootableWindowsPe)（WindowsPEブータブルディスク支援ツール）

## ハードウェア
1. 必要な設定が済んだPC（**以降、マスタPCと呼称**）
2. GhoscastサーバーになるPC（**以降、サーバーと呼称**）※納品するPCのうち1台を使って良い。
3. 32GB以上のUSBメモリ x 2本(**USBメモリA,Bと呼称**)
4. 1G対応のHUBとLANケーブル x 必要数

# 手順
## 大まかな手順
1. Ghostの起動ディスクを作成する。
2. マスタPCを受領（または作成）して、イメージ（*.gho）を作成。
3. 未設定PCを1台セットアップする。（Ghostcastサーバー）
4. イメージをGhostcastサーバーから配信。(全台終わるまでn回繰り返し)

## 1. 準備
### Ghost起動イメージの作成
- Ghostのインストーラーから、"Ghost64.exe"を取り出します。
- 下記ファイルをコピペしてファイルを4つ作成します。

```startnet.cmd
@echo off
wpeinit

call x:\windows\system32\ghostprompt.bat

wpeutil shutdown
```
```ghostprompt.bat
@echo off

setlocal
set ans=


echo ##------------------------------------------##
echo 処理一覧
echo 1.配信機からイメージ受信
echo 2.配信機へイメージ送信
echo 3.スタンドアロン（オプション無）
echo ##------------------------------------------##

set /p ans="処理を番号で入力してください。(1-3)"

if %ans%==1 (

echo ##------------------------------------------##
echo イメージ受信用Ghostを起動します。
echo ##------------------------------------------##
call x:\windows\system32\ghost64.exe @ghswitch_r.txt
GOTO :EOF

) else if %ans%==2 (

echo ##------------------------------------------##
echo イメージ送信用Ghostを起動します。
echo ##------------------------------------------##
call x:\windows\system32\ghost64.exe @ghswitch_c.txt
GOTO :EOF

) else if %ans%==3 (

echo ##------------------------------------------##
echo スタンドアロン版Ghostを起動します。
echo ##------------------------------------------##
call x:\windows\system32\ghost64.exe
GOTO :EOF

)
```
```ghswitch_c.txt
-clone,mode=create,src=1,dst=@mc1
-z1
-split=2048
-jaddr=192.168.168.1
```
```ghswitch_r.txt
-clone,mode=restore,src=@mc1,dst=1
-jaddr=192.168.168.1
```

- [Build-BootableWindowsPe](https://github.com/morokoshi/Build-BootableWindowsPe)、[Windows PE・REイメージのカスタマイズを手動でする
](https://github.com/morokoshi/Build-BootableWindowsPe/wiki/Windows-PE%E3%83%BBRE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%82%92%E6%89%8B%E5%8B%95%E3%81%A7%E3%81%99%E3%82%8B)を参考にして、USBメモリ**A**に対してWinPEベースの起動ディスクを**x64**で作成します。ここまでに準備したファイル（5つ）をBase/x64にすべて入れてください。
- 完成したUSBメモリ**A**を、未開封PCのいずれかに接続して、起動させます。（起動メニューまたはBIOSの Boot overrideなど使用）
- 下記のメニューが出たら、イメージを取得する準備は完了です。

```
##------------------------------------------##
処理一覧
1.配信機からイメージ受信
2.配信機へイメージ送信
3.スタンドアロン（オプション無）
##------------------------------------------##
処理を番号で入力してください。(1-3):
```

## 2. マスタPCからイメージ取得
- USBメモリ**B**を他のPCでフォーマットし、ボリュームラベルを付けます。
- マスタPCを、USBメモリ**A**でメニューまで起動させます。
- USBメモリ**A**を外し、**B**を接続します。
- 3を入力し「Enter」キーを押下します。（Ghostが起動します。）
- 「Local」-「Disk」「to Image」でイメージファイル保存先の画面を表示します。
- プルダウンから保存先をボリュームラベルの付けたドライブへ変更し、ファイル名を決めます。
- パーティションサイズは特に変更しません。
- 圧縮度を確認されます。「Fast」が良いでしょう。
- イメージ作成が終わるまで待ちます。（遅くても20分以内と思われます）
- 作成が終わったら「Continue」を押します。（シャットダウンする）
- マスタPC万一のイメージ再取得に備え、全納品まで保管しておきます。

## 3. Ghostcastサーバー作成
### 3-1.PC準備
- サーバー用PCを準備します。納品予定PCなら通常通りにセットアップします。
- 下記の内容でファイルを作成し、管理者権限で実行します。（ファイル名は自由）

```
@echo off

rem IP設定
netsh interface ipv4 set address "イーサネット" static 192.168.168.1 255.255.0.0

rem FWをすべてOFF
netsh advfirewall set allprofiles state off
```
3. HUBとサーバーPCをLANで接続し、クライアント用のLANケーブルもHUB接続しておく。
4. 1で抽出したファイルをマスタPCへ。

### 3-2.必要ソフトの設定
- Ghostのインストーラーから"GhostSrv.exe"と"GhostSrv_JA.dll"を抽出してサーバーに用意します。
- [tftpd64](http://tftpd32.jounin.net/tftpd32_download.html#Top)をサーバーに用意します。
- tftp64を下記のように設定します。設定し直したらtftpd64を起動し直します。

```
[最初のタブ]
DHCPだけにチェックする。
[DHCPタブ]
IP pool start address : 192.168.168.2
Size of pool : 999
Lease：60
Boot File : ¥Boot¥pxeboot.n12
Mask(Opt 1) : 255.255.0.0
Bind DHCP to this address : チェックを入れ、192.168.168.1に変更します。
```
- USBメモリ**B**を接続し、イメージファイルをサーバーに入れます。
- Ghostsrv.exeを実行します。

## 4. 展開の実行
### 4-1. サーバーの実行
- Ghostcastサーバーを下記の項目の通り設定をします。

```
「ファイル」メニュー＝「オプション」＝[完了時の処理]
操作を再開にチェック
[セッション名]
1にします。
[イメージファイル]
参照ボタンから、作成したghoファイルを指定します。
[クライアントのコマンドラインオプション]
ディスク番号は1にしてください。
「詳しいオプション」
[自動開始]
クライアントのところに数量を入れると、その数量のPCが接続されると自動で開始します。(8P-HUBなら7で)
```

2. 「クライアントの承認」を押下します。クライアントからの要求待ち受け状態になります。

### 4-2. クライアントの起動
- 未設定PCにLANケーブルとUSBメモリ**A**を接続して起動します。
- 下記のメニューが表示されたら**USBメモリは不要なので外します。**（内蔵メモリに展開済）

```
##------------------------------------------##
処理一覧
1.配信機からイメージ受信
2.配信機へイメージ送信
3.スタンドアロン（オプション無）
##------------------------------------------##
処理を番号で入力してください。(1-3):
```

- メニューから3を選びます。
- 確認メッセージが出ますので、「Yes」で進めます。（Yキーで代用可能）
- クライアントが待ち受け状態になります。
- ここまでを必要台数分繰り返します。
- 自動開始になっている場合は必要台数になると自動で送信が開始されます。自動開始をしていない場合は、サーバー側で「承認」を押下します。
- イメージの配信が開始されます。

### 4-3. 配信が終わったら
- 配信が終わったら、クライアント側は「Continue」を押下します。（電源が落ちます）
   - **注意：起動してイメージ適用結果を確認してもいいですが、その時はもう一度イメージ適用してください。**
- 必要台数分終わったら、次はサーバーを納品できる状態に戻します。
- サーバーはシャットダウンします。

### 4-4. サーバーを納品できる状態にする
- サーバーにUSBメモリ**A**を接続し、メニューまで起動させます。
- メニューが表示されたら、USBメモリ**B**を接続します。
- 3を入力し、Ghostを起動します。
- 「Local」-「Disk」「from Image」でイメージファイル保存先の画面を表示します。
- プルダウンからボリュームラベルの付けたドライブ(USBメモリB)へ変更します。
- 取得したghoファイルが残っているはずですので、選択します。
- 表示されるダイアログはYesやOKで進めます。
- 適用が完了したら「Continue」を押下します。（シャットダウンします。）

### 5. 納品前確認
- 下記をチェックしてください。
- [ ] PCすべてにイメージの適用が終わっている。
- [ ] 納品するイメージファイルの媒体準備が終わっている。（光学媒体やUSBの媒体形式、数量）
- [ ] 納品するドキュメントの作成が終わっている。（リカバリ手順書など）
- お疲れ様でした。

### 6. QA・トラブル
1. 同時に何台くらいできますか？
   - 何台でも可能ですが、8台以上は速度が落ちる傾向にあると思います。サーバー、HUB、LANを増やすことで完了までの回数が減らせます。
2. 速度が安定しない。
   - CAT-5e以上のLANケーブルにしてください。CAT-5が混ざっていると速度が出なかったことがあります。状態の悪いLANケーブルを使うのは論外で。
3. うまく適用できていないPCが混ざっていた。
   - 展開の仕組み上、どうしても発生する可能性があります。個別に引き取ってイメージを適用しなおしてください。HUBやケーブルに問題が無ければ発生は1%以下だと思います。