昨日のエントリはWindowsPE3.1を想定したものだったが、Windows8以上になるとStoreアプリの権限が原因と思われるエラーによってキャプチャがエラーすることがあるようだ。よって、WindowsPE5.0を用いた配布サーバの作成手順をメモしておく。
やることリスト
- WindowsPCにWindowsADKをインストールする。
- copypeした後、出来上がったmediaディレクトリ以下から、sourcesディレクトリとBootディレクトリを取得。boot.wimをマウントし、mount\Windows\Boot\PXEディレクトリを取得する。
- 必要に応じて、boot.wimをカスタマイズする。
- CentOS6.5をインストール。最初にCIFSサーバ(samba)をインストールしておくと少しだけ楽。
- 問題の切り分けを簡単にするために、SELinuxとファイアウォールを無効化する。
- yum upgradeする。
- sambaの共有設定を行い、サービスを開始させ、chkconfigでsmbをonにする。Windowsから、設定どおりに共有されているか確認する。尚、tftpルートディレクトリにコピーした、sourcesディレクトリを共有しておくと、boot.wimをカスタマイズしなおしたときに、入れ替えが楽です。ただし、SELinuxを有効化する場合、sourcesディレクトリをsambaが読み書きできるように設定してください。
- yumでtftp-serverとdhcpをインストールする。
- tftpを設定する(/etc/xinetd.d/tftpのdisabledをnoに、server-argsの"-s"を"-v -s"に変更)。tftpのルートディレクトリに、WindowsPEからとってきた、sources、Boot、PXEの各ディレクトリをコピーする。
- 本ページを参考に、tftpのルートディレクトリにシンボリックリンクを作成する。
- dhcpを設定する(参考)。NICが複数枚ある場合はこの辺を参照。
- xinetdとdhcpdサービスを起動させ、chkconfigでxinetdとdhcpdをonにする。
- 同一ネットワーク内にPCを接続し、ネットワークブートのテストを行う。チェックすべき点は2点。DHCPでIPアドレスが取得できているか。tftpによるファイル取得要求がきているか(tail -f /var/log/messages)。
- WindowsPEが起動したら、net useでsamba共有に対して共有ドライブ(Yとか)を割り当てる。
- ファイアウォールを有効化する。たぶんUDP67、UDP69ポートとTCP445ポートを開けとくだけでOKだと思う。
- 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"