2011年2月28日月曜日

Windows PE 3.1 をカスタマイズしてみる。

Windows 7のSP1リリースに合わせて、AIKの方もSP1用のものが公開されていた。
Windows® 7 SP1 用の Windows® 自動インストール キット (AIK)
ファイル名は「waik_supplement_ja-jp.iso」・・・supplementって何だ?

ダウンロードして開いてみると・・・なんかファイルが少ない気がする。AIKのインストーラが無い?
各アーキテクチャ用のWIMイメージやバッチファイルぐらいしか入っていない。
supplement・・・補足・・・PE3.0との差分?
「3.0から大きな変更はしてないし、差分だけでいいか。カスタマイズしたい人はAIK3.0もDLしてね。」
って事だろうか?

仕方ないのでWindows® 7 用の Windows® 自動インストール キット (AIK)を別途DL。
DLした「KB3AIK_JA.iso」をマウントしてAIKをインストール。
※3.0からはWindowsXPをサポートしていない。Vista/7/Server2008等を使う(でもOK)
そして「スタート」→「すべてのプログラム」→「Microsoft Windows AIK」から「Deployment ツールのコマンド プロンプト」を管理者として実行。

と、いつもならここでそのままCopyPEコマンドを打って必要ファイルをコピーするのだが、今回はサプリメント(笑)のイメージを使うので「waik_supplement_ja-jp.iso」をマウントし、そのなかのCOPYPE.CMDを使う。
※ここではISOマウント先ドライブは「D:」、PCは32bitなのでアーキテクチャはx86、コピー先はC:\WinPEとする。
> D:\COPYPE.CMD x86 C:\WinPE 

コピーが終わるとカレントディレクトリは自動的に「コピー先」に移る。
終わったら、カスタマイズするためにPEのイメージをDISMを使ってマウントする。
※パスは相対パスでもOK。また、2行に見えるかもしれないが↓は1行。
> DISM /mount-wim /wimfile:C:\WinPE\winpe.wim /index:1 /mountdir:C:\WinPE\Mount 
「操作は正常に完了しました。」と出れば準備完了。各種パッケージやドライバなどを追加・削除する。
なお、3.1用のパッケージはWIM同様、サプリメントISOの中に含まれているようだ。パッケージ追加の際のファイルパスは「D:\X86\WINPE_FPS\パッケージ名」等になるのだろう。
・・・まぁ今回はどちらもやらないけど。
ちなみに、今回行うカスタマイズは、IMEの追加ImageXの追加ブート方法の調整等。

ImageXツールの追加
ImageX:WIMイメージングツール。これを使えば、Windows環境のイメージバックアップもできる。
また、Vista以降のインストールメディアや各メーカーのリカバリイメージで既に利用されている。
PEイメージの Windows\System32 へコピーしておく。
copy "C:\Program Files\Windows AIK\Tools\x86\imagex.exe" C:\WinPE\mount\Windows\System32 

ImageX用ルールファイルも作っておくとよい
「wimscript.ini」を同じ場所に置くことで、記述したファイルをキャプチャや圧縮の対象から外せる。
例:[ExclusionListはキャプチャ除外、Compression(ryは圧縮除外]
[ExclusionList]
ntfs.log
hiberfil.sys
pagefile.sys
"System Volume Information"
RECYCLER
Windows\CSC


[CompressionExclusionList]
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf
あとで作って、ImageXのConfigオプションで読み込ませることもできる。

IME10を組み込む(今の環境からコピーする)
AIKのヘルプにも一応やり方が書いてあるが、鵜呑みにしないこと。バッチファイルで必要な改行が無い箇所が有る。そのままコピペすると泣くことになる。(3.1で直るかと思っていたが、同梱すらされてないとか…)
また、IMEのバージョンによっては使えないことも。(正規版・評価版の違いは無いと思う)
・XP付属の9x・・・論外。
・Vista/2008付属・・・アウト。PE2.xでならOK。
・7付属・・・OK。
・64bit版付属・・・後述。
・IME2010やGoogleIME等他のIME・・・知らん。

やり方
PE2.xのバッチを流用する。(大して変わっていない)
1.メモ帳などのテキストエディタにコピペ。
2.ファイルの4行目を書き換え。
  <Path to Windows Directory of your WinPE image (略 >
   をCopyPEで指定したフォルダ\マウント先\Windowsに書き換え。例↓
  C:\WinPE\mount\windows
3.「WinPEIMEJP.CMD」という名前で保存、管理者として実行。

Vistaで作業してるんだが・・・という場合
7や2008R2(評価版でも可)のインストールDVDからIMEを抽出
1.DVDもしくはISOイメージをマウントまたは7zip等で展開(必要なのはinstall.wim)
2.DISMやImageXでsources内のinstall.wimをマウント(index番号は1でいいだろう)
3.上の編集に加え、
  set IMEBinSrc=%windir%
   の「%windir%」をマウント先\Windows に書き換え。
4.さらに64ビット版しかない2008R2では↓の作業も必要。

64ビット版OSのIMEを32ビットPEに組み込むには・・・
上の編集に加え、バッチ内の
 %IMEBinSrc%\System32
  を
 %IMEBinSrc%\SysWOW64
  にすべて書き換え。(メモ帳ならctrl+Hで置き換え機能が利用できる)


背景画像の変更
> mspaint C:\WinPE\mount\Windows\System32\winpe.bmp 
お、WINPE-SETUP-CLIENT.CABにWin7のDVDに使われている画像が。
デフォルトのグレーより、こっちのほうがいいな。ありがたく入れ替えさせてもらおうw



変更の保存
マウントにDISMを用いたのならアンマウントもDISMを使う。
変更を保存するために「/Commit」オプションを使う。ちなみに破棄は「/Discard」を使う。
> dism /unmount-wim /mountdir:C:\WinPE\Mount /commit 

イメージの最適化
ImageXやDISMでイメージを変更すると通常のファイルの他に追加のリソースファイルが保存され、全体のサイズが増加する。
ImageXで「エクスポート」すると不要なリソースファイルが削除され、イメージを最適化できる。
普通にISO\Sourcesにリネーム&コピーしてもいいが今回はこれを使う。
> imagex /export C:\WinPE\winpe.wim 1 C:\WinPE\iso\sources\boot.wim 

ISOイメージの作成(AIK付属ツールを使う)
> oscdimg -n -bC:\WinPE\etfsboot.com C:\WinPE\ISO C:\WinPE\WPE31.ISO 
構文/オプション:
oscdimg オプション 構築元 出力先
-n 長いファイル名を使えるようにする。
-b ブートセクタファイルの指定。この場合は「etfsboot.com」、-bとパスの間にスペースは入れない


その他


WIMオンメモリではなく、ライブCD形式で起動する
利点・・・必要メモリ量が少なくて済む
欠点・・・低速。CDを取り出せない。

カスタマイズ操作「変更の保存」の直前の状態より始める。
(アンマウント済みの場合は、再度マウントしておく)

注:長くなるので相対パスで書く。「C:\WinPE」をカレントディレクトリとする。
1.ブートサポートの追加(bootmgrコピー&bootフォルダ作成)
> copy ISO\bootmgr mount 
> md mount\boot 

3.起動情報「BCDストア」を構成
先にCDコマンドでさっき作った「boot」に移動しておく。
> cd mount\boot 

まず"BCD"という名前のストアを作成。次からはこれを/storeで選択しつつ作業する
> BCDEDIT /createstore BCD 


注意:/storeオプションでPEのストアを選択しないとシステムのBCDが書き換えられ、最悪の場合Vistaや7が起動できなくなる。

> BCDEDIT /store BCD /create {bootmgr} /d "Boot Manager" 
> BCDEDIT /store BCD /set {bootmgr} device boot 
> BCDEDIT /store BCD /create /d "LiveCD Mode" /application osloader 
最後のコマンドはGUIDを返す。次からは{GUID}をこの値に置き換えで作業する

> BCDEDIT /store BCD /set {GUID} osdevice boot 
> BCDEDIT /store BCD /set {GUID} device boot 
> BCDEDIT /store BCD /set {GUID} path \windows\system32\winload.exe 
> BCDEDIT /store BCD /set {GUID} systemroot \windows 
> BCDEDIT /store BCD /set {GUID} winpe yes 
> BCDEDIT /store BCD /set {GUID} detecthal yes 
> BCDEDIT /store BCD /displayorder {GUID} /addlast 

4.ISOの作成
> oscdimg -n -m -d -o -bC:\WinPE\etfsboot.com C:\WinPE\mount C:\WinPE\Live.ISO 
オプション:
-m イメージのサイズ制限を無視。
-d 小文字許可。ファイル名の小文字を大文字に変換しない。(まぁWindowsは基本的に区別しないのだが…)
-h 隠し属性のものも含める。(ProgramDataが隠し属性になっているが…)
-o 重複ファイルを何度もキャプチャしない。Vista以降のOSはハードリンクを多用しているらしい。PEも例外ではないようだ。なので、これを利用してCD上でもハードリンク(のようなもの)を使い、ISOサイズを削減する。

オンメモリ形式とライブCD形式を選んで起動する
カスタマイズ操作「変更の保存」の直前の状態より始める。
(アンマウント済みの場合は、再度マウントしておく)

まずISOフォルダにmountフォルダ内の4フォルダをコピー。その後アンマウントし、変更を保存。
ISOフォルダに起動ファイル(bootmgr, boot, EFI)WIMイメージ(sources)に加え、
コピーした4フォルダ(Program Files, ProgramData, Users, Windows)がそろったはず。

やることは「ライブCD形式で起動する」とほぼ一緒。
BCDなどはすでにあるので、作成はスキップし、編集から開始。
↑同様、ISO\boot に移動しておく。/storeオプションを忘れないように。

1.現状の確認
> bcdedit /store bcd 
「Windowsブートマネージャー」と「Windowsブートローダー」が一つずつある。
後者がオンメモリモードの起動情報。
これにライブCDモードの情報を加えると「Windowsブートローダー」が1つ増え、起動時に選択できるようになる。
また「ブートマネージャー」項目を編集することで、タイムアウトや既定のエントリ、表示順序が変更できる。

2.ライブCDモードの情報を登録
> BCDEDIT /store BCD /set {bootmgr} device boot ←この行はいらないかも。
BCDEDIT /store BCD /create /d "LiveCD Mode" /application osloader 
ここで返ってくる値を次からの{GUID}に置換

BCDEDIT /store BCD /set {GUID} osdevice boot 
BCDEDIT /store BCD /set {GUID} device boot 
BCDEDIT /store BCD /set {GUID} path \windows\system32\winload.exe 
BCDEDIT /store BCD /set {GUID} systemroot \windows 
BCDEDIT /store BCD /set {GUID} winpe yes 
BCDEDIT /store BCD /set {GUID} detecthal yes 
BCDEDIT /store BCD /displayorder {GUID} /addlast 
新しい「Windowsブートローダー」に以上の情報、
「Windowsブートマネージャー」のdisplayorderに↑のGUIDが登録されたはず

3.[省略可]その他、表示の編集など
・項目名を変更(オンメモリモードのところが「Windows Setup」になったままだw)
descriptionの後に"任意の名前"を入力。
> bcdedit /store bcd /set {default} description "OnRAM Mode" 

・タイムアウトの設定
/timeoutの後に数値を入力。
> bcdedit /store bcd /timeout 10 

・タイムアウトの無効化
いらない場合は/deletevalueで削除
> bcdedit /store bcd /deletevalue {bootmgr} timeout 

・既定のエントリを変更(タイムアウト時に自動実行される項目)
/defaultの後に対象のGUIDを指定
> bcdedit /store bcd /default {GUID} 

・エントリの表示順序の変更
/displayorderにGUIDと/addfirst(先頭へ),/addlast(最後へ),/remove(削除)のいずれかを指定。
> bcdedit /store bcd /displayorder {GUID} /addlast 
また、オプションを使わずGUIDを一度に複数書き込めば、その通りに順序が決まるようだ
bcdedit /store bcd /displayorder {GUID1} {GUID2} {GUID3} 

・メモリテスト(memtest.exe)
メニューエントリはあるが、ファイルがないので実行不可。ファイルはPEのWinodws\Boot\PCATにある。それをbootフォルダへコピーする事で動くようになる。
copy ..\Windows\Boot\PCAT\memtest.exe 

・日本語表示にする(「項目名を変更」で日本語が使えるようになる)
a.bootフォルダ内にja-JPフォルダを作成
mkdir ja-JP 
b.ファイルをコピー(bootmgr用とmemtest用がある。2つともコピー)
> copy ..\Windows\Boot\PCAT\ja-JP\*.mui ja-JP 
c.メニューの日本語化
bcdedit /store bcd /set {bootmgr} locale ja-JP 
 メモリテストも
> bcdedit /store bcd /set {memdiag} locale ja-JP 
 ついでにそれぞれの項目も
> bcdedit /store bcd /set {GUID} locale ja-JP 

4.ISOの作成
> oscdimg -n -m -d -h -o -bC:\WinPE\etfsboot.com C:\WinPE\ISO C:\WinPE\Multi.iso 

USBから起動(USB2.0で起動が可能ならCDより高速)
方法は主に2つ。
・SYSLINUXやGRUBをUSBにいれ、それからチェーンロード。
・DISKPARTユーティリティ等でUSBメモリを初期化する。(Vista以降が必要)
Vista以降なら2番目の方法が手軽だろう。AIKのヘルプにも書いてあるし。
(ユーザーズガイド→WindowsPEをカスタマイズする→チュートリアル→起動可能な(ryをUFDに・・・)
他の方法はまた今度にしよう・・・。

スクリーンショット




ライブCD起動なら256MBメモリでも
Windows7のAeroスナップも動作

組み込んだIMEで日本語入力も可能
火狐ポータブルでWebも

ファイラーを持ってくれば救出作業もラクラク

1 件のコメント:

  1. 【参考】
    "bcde.bat" - Boot Configuration Data Edit BATch for Windows7 HP
    http://hp.vector.co.jp/authors/VA053879/bcde_bat.htm

    返信削除