CentOS6.5とWindowsPE5.0を使ってWindowsの配布サーバとする。

昨日のエントリはWindowsPE3.1を想定したものだったが、Windows8以上になるとStoreアプリの権限が原因と思われるエラーによってキャプチャがエラーすることがあるようだ。よって、WindowsPE5.0を用いた配布サーバの作成手順をメモしておく。

やることリスト

  1. WindowsPCにWindowsADKをインストールする。
  2. copypeした後、出来上がったmediaディレクトリ以下から、sourcesディレクトリとBootディレクトリを取得。boot.wimをマウントし、mount\Windows\Boot\PXEディレクトリを取得する。
  3. 必要に応じて、boot.wimをカスタマイズする。
  4. CentOS6.5をインストール。最初にCIFSサーバ(samba)をインストールしておくと少しだけ楽。
  5. 問題の切り分けを簡単にするために、SELinuxファイアウォールを無効化する。
  6. yum upgradeする。
  7. sambaの共有設定を行い、サービスを開始させ、chkconfigでsmbをonにする。Windowsから、設定どおりに共有されているか確認する。尚、tftpルートディレクトリにコピーした、sourcesディレクトリを共有しておくと、boot.wimをカスタマイズしなおしたときに、入れ替えが楽です。ただし、SELinuxを有効化する場合、sourcesディレクトリをsambaが読み書きできるように設定してください。
  8. yumでtftp-serverとdhcpをインストールする。
  9. tftpを設定する(/etc/xinetd.d/tftpのdisabledをnoに、server-argsの"-s"を"-v -s"に変更)。tftpのルートディレクトリに、WindowsPEからとってきた、sources、Boot、PXEの各ディレクトリをコピーする。
  10. 本ページを参考に、tftpのルートディレクトリにシンボリックリンクを作成する。
  11. dhcpを設定する(参考)。NICが複数枚ある場合はこの辺を参照。
  12. xinetdとdhcpdサービスを起動させ、chkconfigでxinetdとdhcpdをonにする。
  13. 同一ネットワーク内にPCを接続し、ネットワークブートのテストを行う。チェックすべき点は2点。DHCPIPアドレスが取得できているか。tftpによるファイル取得要求がきているか(tail -f /var/log/messages)。
  14. WindowsPEが起動したら、net useでsamba共有に対して共有ドライブ(Yとか)を割り当てる。
  15. ファイアウォールを有効化する。たぶんUDP67、UDP69ポートとTCP445ポートを開けとくだけでOKだと思う。
  16. SELinuxを有効化する。尚、設定する場合は、バグは多いけどGUIツールをインストール(yum install policycoreutils-gui)して使ったほうがいいと思う。うまくGUIツールが起動しない場合はsepolgen-ifgenを一回実行するとよいだろう。

以上でサーバは完成だが、もしよければ、本ページ掲載の「AUTODEPLOYD.bat」をboot.wimのwindows\system32に入れるカスタマイズを実行し、samba共有ディレクトリにscriptsディレクトリを作成して、「APPDISM.bat」と「DPS.txt」を入れておけば、展開専用サーバとして非常に楽ができるでしょう。

基本的にはこちらのサイトと同じだが、tftpで要求されるファイルが変わっているので、シンボリックリンクを張るコマンドを残しておきます。

ln -s Boot/BCD \\Boot\\BCD
ln -s Boot/Fonts/segmono_boot.ttf \\Boot\\Fonts\\segmono_boot.ttf
ln -s Boot/Fonts/segoe_slboot.ttf \\Boot\\Fonts\\segoe_slboot.ttf
ln -s Boot/Fonts/wgl4_boot.ttf \\Boot\\Fonts\\wgl4_boot.ttf
ln -s Boot/boot.sdi \\Boot\\boot.sdi
ln -s Boot/en-us/bootmgr.exe.mui \\Boot\\en-US\\bootmgr.EXE.MUI
ln -s Boot/Resources/bootres.dll \\Boot\\resources\\bootres.dll
ln -s Boot/boot.sdi \\boot\\boot.sdi
ln -s sources/boot.wim \\sources\\boot.wim
ln -s PXE/bootmgr.exe bootmgr.exe
ln -s PXE/pxeboot.n12 pxeboot.n12


winpe.wimに仕込んでおくバッチ「AUTODEPLOYD.bat」

@ECHO OFF

REM タイトル
REM Windows8用 展開サービス用バッチ
REM 
REM 作成者
REM 2014/04/29 marujx
REM 
REM 使い方:
REM WindowsPEに組み込んで使用します
REM 例:Startnet.cmdに本バッチを記載

REM Windowsイメージの配布サーバとディレクトリ
SET WINSHARE=\\192.168.0.1\wmi

REM Windowsイメージ展開バッチのありか
SET DISMSCRIPT=Z:\SCRIPTS\APPDISM.bat

ECHO -----------------------------------------
ECHO %WINSHARE%のZドライブ割り当て開始
NET USE Z: %WINSHARE%
IF %ERRORLEVEL% NEQ 0 GOTO NETWORKERR 
ECHO イメージファイルの共有フォルダを取得し
ECHO Zドライブに割り当てました。
ECHO -----------------------------------------
ECHO Zドライブからイメージ展開用スクリプトを
ECHO 取得します
COPY %DISMSCRIPT% .
IF %ERRORLEVEL% NEQ 0 GOTO FILECOPYERR
ECHO イメージ展開用スクリプトを取得しました
ECHO -----------------------------------------
ECHO イメージ展開用スクリプトを実行します
%DISMSCRIPT%
ECHO イメージ展開用スクリプトが終了しました
ECHO -----------------------------------------
ECHO Zドライブの割り当てを終了します。
NET USE Z: /DELETE
ECHO -----------------------------------------
ECHO イメージ展開を終了しました。
PAUSE
EXIT /B 0

:NETWORKERR
ECHO イメージファイルの共有フォルダ取得に失敗しました。
ECHO 終了します
PAUSE
EXIT /B 1

:FILECOPYERR
ECHO Zドライブからの「%DISMSCRIPT%」のコピーに失敗しました。
ECHO 終了します
PAUSE
NET USE Z: /DELETE
EXIT /B 1


Z:\SCRIPTS\APPDISM.bat

@ECHO OFF

REM タイトル
REM Windows8用 イメージ置換バッチ
REM 
REM 作成者
REM 2014/04/29 marujx
REM 
REM ※注意※
REM 本バッチの実行で、実行したPCのデータはすべて消去されます。

ECHO Windowsイメージの展開を開始します。
ECHO このPCのデータはすべて削除されます。
ECHO 停止したい場合は、ctrl+Cを押下してください。

REM 以下行のPAUSEを削除すると、自動実行されます。
PAUSE

REM イメージファイルの名称を記載します
SET IMAGEFILENAME1=Z:\win7ent.wim

SET DISKPARTSCRIPT=Z:\SCRIPTS\DPS.txt

SET SERIALNOFILE=Z:\SERIALNO.txt

ECHO -----------------------------------------
ECHO ************DISKPART開始************
DISKPART /s %DISKPARTSCRIPT%
ECHO ************DISKPART終了************
ECHO -----------------------------------------
ECHO ************IMAGE復元開始************
Dism /apply-image /imagefile:%IMAGEFILENAME1% /index:1 /ApplyDir:w:\
bcdboot w:\Windows /l ja-jp /s s:
ECHO ************IMAGE復元終了************
ECHO -----------------------------------------
ECHO IMAGEの復元を終了しました。
ECHO %DATE% %TIME%>>%SERIALNOFILE%
wmic csproduct get identifyingnumber>>%SERIALNOFILE%
ECHO ----------------------------------------->>%SERIALNOFILE%

Z:\SCRIPTS\DPS.txt

select disk 0
clean
create partition primary size=300
format quick fs=ntfs label="System"
assign letter="S"
active
create partition primary
format quick fs=ntfs label="Windows"
assign letter="W"