当時(2008年春頃)探してみると意外と見つけにくかった、Windows 標準のものでPXEブート環境。そして、再構築しようとしてすっかり忘れていたので改めてメモ。
tftpd32 でのPXEブート環境を置き換え。言ってしまうと Windows2003 標準のものだけで PXE ブートさせるより、tftpd32 を利用したままの方が数倍楽だった(2008年夏頃の情報の入手性を鑑みて)。
お世話になったサイトなど
- Windows の tftpd.exe の利用に関して
- PXEブート
- PXELINUX (SYSLINUX)
準備と方針
- Windows2003 に標準で備わっているもので PXEブート環境を作る
- DHCPサーバー兼PXEブートサーバーにする
- RIS/WDS のような大げさな事はしない、WindowsPE 、memtest86+、GAG 等をブートできれば OK
- WindowsPE 他の組み合わせは PXELINUX(SYSLINUX) で選択可能にする
- ファイルの置き場 d:\pxe を根っこにして d:\pxe\tftproot に主なファイルを配置
- WindowsPE の wimファイル の準備(USBやDVD/CDなど)は予め済ませておく (ここ や このあたり や Google先生 で)
まず、WindowsPE のみの PXEブート環境、その後 pexlinux で幾つかの PXEブート環境構築、という流れ。
WindowsPE を PXEブート
まず WindowsPE だけの PXEブート。
tftpd の設定
tftpd は Windows2003 が持つ tftpd.exe を tftpd をサービスに登録し実行させる。
ファイルのputは受け付けないようにする (MS06-077)。
- tftpd.exe は
C:\WINDOWS\system32\dllcache\tftpd.exe
から取り出して適当な場所(C:\WINDOWS\system32 など)にコピーする
個人的都合上 PXEブート 関連をひとまとめにしたいので d:\pxe にコピー
- tftpd をサービスに登録する際にスタートアップの種類を「自動」にし、ついでにサービスの開始をする場合、次のような感じで
>sc create tftpd binPath= d:\pxe\tftpd.exe start= auto
[SC] CreateService SUCCESS
>net start tftpd
tftpd サービスを開始します.
tftpd サービスは正常に開始されました。
(tftpd.exe へのパスは環境に合わせて適宜変更)
- tftpd.exe の設定を変更する為にレジストリ編集
設定内容は次の3点
- ルートディレクトリをデフォルトの c:\tftpdroot から d:\pxe\TFTProot に変更
- putを受け付けないようにする (MS06-077)
- 受け付けるクライアントのIPアドレスを限定(192.168.0.x)
次の内容のレジストリファイルを結合するか、直接レジストリを編集
- tftpd サービスを再起動してレジストリ設定を反映させる
DHCPサーバーの設定 (WindowsPEのみ)
PXEブートさせるために DHCPサーバーへ設定すべき基本項目は次の4つ
オプション名 |
タイプ |
設定値 |
備考 |
043 |
ベンダ固有情報 |
binary |
01 04 00 00 00 00 ff |
- |
060 |
PXEClient |
string |
PXEClient |
新規作成 |
066 |
ブート サーバー ホスト名 |
string |
サーバー名 or サーバーIP |
- |
067 |
ブートファイル名 |
string |
boot/pxeboot.n12 |
PXEブート時のF12押下不要 |
「 060 PXEClient 」を除いて他は既存の値を変更可能。唯一新規追加する必要のある 「 060 PXEClient 」は GUI で設定する時には
DHCP MMCコンソールの 『規定のオプションの設定』から『追加』してから設定。
コマンドラインから一通り 設定すると次のような感じ。 DHCPサーバー兼PXEサーバーは 192.168.0.1 。
>netsh
netsh>dhcp
netsh dhcp>server 192.168.0.1
netsh dhcp server>add optiondef 60 PXEClient String 0 comment="for
PXEブート"
コマンドを正しく完了しました。
netsh dhcp server>set optionvalue 60 STRING PXEClient
コマンドを正しく完了しました。
netsh dhcp server>set optionvalue 43 binary 010400000000ff
コマンドを正しく完了しました。
netsh dhcp server scope>scope 192.168.0.0
netsh dhcp server scope>set optionvalue 66 STRING 192.168.0.1
コマンドを正しく完了しました。
netsh dhcp server scope>set optionvalue 67 STRING boot/pxeboot.n12
コマンドを正しく完了しました。
netsh dhcp server scope>exit
コマンドプロンプトに次のようなものをコピー&ペーストすれば一気に設定可能
comment は適当に。MMCコンソールの GUI でチマチマ入力するより楽?
PXEブートのためのファイルを配置 (WindowsPEのみ)
ファイルの配置は次のような感じで
-
|
|
|
|
|
|
|
|
|
 |
d:\pxe |
|
|
|
|
|
|
└ |
 |
TFTProot |
|
tftpd ルートディレクトリ |
|
|
|
|
|
├ |
 |
bootmgr.exe |
|
bootmgr |
|
|
|
|
|
└ |
 |
boot |
|
WindowsPE 関連置き場 |
|
|
|
|
|
|
├ |
 |
fonts |
|
フォント (中にフォントファイルも) |
|
|
|
|
|
|
├ |
 |
bcd |
|
bcd |
|
|
|
|
|
|
├ |
 |
boot.sdi |
|
boot.sdi |
|
|
|
|
|
|
├ |
 |
pxeboot.n12 |
|
ネットワークブートプログラム |
|
|
|
|
|
|
├ |
 |
winpe21_x64.wim |
|
WinPE2.1 x64 の wim |
|
|
|
|
|
|
├ |
 |
winpe21_x86.wim |
|
WinPE2.1 x86 の wim |
|
|
|
|
|
|
├ |
 |
winpe30_x64.wim |
|
WinPE3.0 x64 の wim |
|
|
|
|
|
|
└ |
 |
winpe30_x86.wim |
|
WinPE3.0 x86 の wim |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ファイルはそれぞれ次の場所などから調達してコピー
- ブートマネージャー
- bootmgr.exe
- WindowsPE のブートイメージ wimファイルの中など
Windows\Boot\PXE
からコピー
- network boot program
- pxeboot.n12
- WindowsPE のブートイメージ wimファイルの中など
Windows\Boot\PXE
からコピー
- WindowsPE イメージなど
- fontsフォルダ丸ごと、boot.sdi、各 wim ファイル
- WAIK の WindowsPE 作成作業環境の ISO フォルダの中など
(作業フォルダ)\ISO
からコピー
- bcd
通常のブータブルUFD/DVD/CD 用の bcd とはディレクトリ構造を若干変えているので配置に合わせて bcd を作り直し
ブータブルUFD/DVD/CD の場合は通常次のように(それぞれ一行で)
>bcdedit -store bcd -set <GUID> device ramdisk=[boot]\sources\pe30_x64.wim,{ramdiskoptions}
>bcdedit -store bcd -set <GUID> osdevice ramdisk=[boot]\sources\pe30_x64.wim,{ramdiskoptions}
ramdisk=[boot]\sources\<wimファイル> のようになっているはずなので
ここでのPXEブート用の配置に合わせて(それぞれ一行で)
>bcdedit -store bcd -set <GUID> device ramdisk=[boot]\boot\pe_x64.wim,{ramdiskoptions}
>bcdedit -store bcd -set <GUID> osdevice ramdisk=[boot]\boot\pe_x64.wim,{ramdiskoptions}
ramdisk=[boot]\boot\<wimファイル> のようにして bcd を作成
【2009/07/07、2009/08/14:追記】
BCDストア 作成&編集で多少楽できるバッチファイルは
こちら
リンク先の前者が WinPE2.0 用で、追記された方が WinPE2.1/WinPE3.0 用
リンク先のバッチファイルを使うには pxeブートに合わせて上記のような『 [boot]\
sources 』⇒『 [boot]\
boot 』の置換もお忘れ無く
実際に PXEブートさせて動作確認が取れれば WindowsPE のみの PXE ブート環境構築は完了。
PXELINUX で諸々 PXEブート
WindowsPE 以外も含めて諸々 PXELINUX でブートさせる。
ここで PEXLINUX から起動させるのは、とりあえず次の5種類。
WindowsPE系は pxelinux ⇒ WindowsPE のブートマネージャー の2段階で起動。
PXELINUX の「す」の画面は少々寂しいので壁紙付きでメニューを出すようにする。
メモリテストが2つあるのは単なる気分、特に根拠無し。
準備
- WindowsPE に関しては前述のとおり
- PXELINUX(SYSLINUX) は download を辿ってこのあたりからダウンロード
syslinux-3.80.zip
- PXELINUXのメニューの壁紙に使う適当な画像ファイルを 640x480 の .jpg か .png で用意
- Memtest86+ の Pre-Compiled Bootable Binary をダウンロード
memtest86+-2.11.zip
- Memtest86 の Free Download から ISO image for creating bootable CD (Windows - zip)
をダウンロード
memtest86-3.5.iso.zip
- GAG のwebサイトの File download から辿ってダウンロード
gag4_10.zip
- GParted のwebサイトの Downloads から Stable か Testing を適当に選んで iso ではなく zip の方をダウンロード
とりあえず Stable の gparted-live-0.4.4-1.zip
DHCPサーバーの設定 (PXELINUX で諸々)
DHCPサーバーへ設定すべき基本項目は次の4つ。前述からの変更点は 067 のブートファイル名のみ。
オプション名 |
タイプ |
設定値 |
備考 |
043 |
ベンダ固有情報 |
binary |
01 04 00 00 00 00 ff |
- |
060 |
PXEClient |
string |
PXEClient |
- |
066 |
ブート サーバー ホスト名 |
string |
サーバー名 or サーバーIP |
- |
067 |
ブートファイル名 |
string |
pxelinux.0 |
拡張子は必ず .0 |
コマンドプロンプトに次のようなものをコピー&ペーストすれば一気に設定可能、
変更を加えたら DHCPサーバーサービスを一応再起動させておく。
PXEブートの設定(PXELINUXの設定)
PEXLINUX で選択させるのはとりあえず WindowsPE 、Memtest86+ 、Memtest86 、 GAG 、GParted
の5種類でファイルの配置は次のような感じ。
-
|
|
|
|
|
|
|
|
|
 |
d:\pxe |
|
|
|
|
|
|
└ |
 |
TFTProot |
|
tftpd ルートディレクトリ |
|
|
|
|
|
├ |
 |
boot |
|
WindowsPE 関連置き場 |
|
|
|
|
|
│ |
├ |
 |
fonts |
|
フォント (中にフォントファイルも) |
|
|
|
|
|
│ |
├ |
 |
bcd |
|
bcd |
|
|
|
|
|
│ |
├ |
 |
boot.sdi |
|
boot.sdi |
|
|
|
|
|
│ |
├ |
 |
startrom.0 |
|
pxeboot.n12 をリネームしたもの |
|
|
|
|
|
│ |
├ |
 |
winpe21_x64.wim |
|
WinPE2.1 x64 の wim |
|
|
|
|
|
│ |
├ |
 |
winpe21_x86.wim |
|
WinPE2.1 x86 の wim |
|
|
|
|
|
│ |
├ |
 |
winpe30_x64.wim |
|
WinPE3.0 x64 の wim |
|
|
|
|
|
│ |
└ |
 |
winpe30_x86.wim |
|
WinPE3.0 x86 の wim |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
|
├ |
 |
gparted |
|
GParted 関連置き場 |
|
|
|
|
|
│ |
├ |
 |
initrd1.img |
|
initrd1.img |
|
|
|
|
|
│ |
└ |
 |
vmlinuz1 |
|
vmlinuz1 |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
|
├ |
 |
pxelinux.cfg |
|
PXELINUX の設定ファイル置き場 |
|
|
|
|
|
│ |
└ |
 |
default |
|
PXELINUX の設定ファイル |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
|
├ |
 |
memdisk |
|
PXELINUX でFDイメージ起動などで利用 |
|
|
|
|
|
├ |
 |
pxelinux.0 |
|
PXELINUX の bootstrap program |
|
|
|
|
|
├ |
 |
vesamenu.c32 |
|
PXELINUX のグラフィカルメニュー用 |
|
|
|
|
|
├ |
 |
wall.png |
|
PXELINUX のメニュー壁紙 |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
├ |
 |
bootmgr.exe |
|
WindowsPE の bootmgr |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
├ |
 |
GAG.dsk |
|
GAG のディスクイメージ |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
├ |
 |
memtest86 |
|
Memtest86 本体 |
|
|
|
|
|
│ |
|
|
|
|
|
|
|
|
|
└ |
 |
MEMTEST86+ |
|
Memtest86+ 本体 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
httpd のドキュメントルートなど |
|
|
|
|
└ |
 |
filesystem.squashfs |
|
http で適切にアクセス可能な場所に置く |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
個別には次のように用意&配置。
WindowsPE 系
- ブートマネージャー
- bootmgr.exe
- WindowsPE のブートイメージ wim の中など
Windows\Boot\PXE
からコピー
- network boot program
- startrom.0 (pxeboot.n12)
- WindowsPE のブートイメージ wim の中など
Windows\Boot\PXE
から pxeboot.n12 を startrom.0 にリネームしてコピー (拡張子は必ず .0 に)
- WindowsPE イメージなど
- fontsフォルダ丸ごと、boot.sdi、各 wim ファイル
- WAIK の WindowsPE 作成作業環境の ISO フォルダの中など
(作業フォルダ)\ISO
からコピー
- bcd
PXEブートのディレクトリ構造に合った bcd があればそれをコピー、無ければ bcd を作り直し
- PXELINUX 用の設定の一例
Memtest86+
メモリテストその1。
- Memtest86+ の Pre-Compiled Bootable Binary (ver.2.11)をダウンロードして解凍
- 取り出したファイル memtest86+-2.10.bin を MEMTEST86+ にリネームして TFTProot にコピー
- PXELINUX 用の設定の一例
Memtest86
メモリテストその2。
- Memtest86 の Free Download の圧縮された iso イメージ ISO image for creating bootable CD (Windows
- zip) をダウンロードして解凍
- isoイメージから取り出したファイル MEMTEST を memtest86 にリネームして TFTProot にコピー
- PXELINUX 用の設定の一例
GAG
グラフィカルなブートマネージャー GAG 。
- GAG のwebサイトの File download から辿ってパッケージ(ver4.10)をダウンロードして解凍
- 取り出したファイル disk.dsk を GAG.dsk にリネームして TFTProot にコピー
- PXELINUX 用の設定の一例
GParted
パーティション操作用に GParted 。
GParted のwebサイトで PXEブート に関しての説明を Live CD/USB/PXE あたりから辿って GParted Live on PXE server に目を通しておく 。一部のファイルは http で利用するので注意。
- GParted のwebサイトの Downloads から Stable か Testing を適当に選んで zip の方をダウンロードして解凍
- vmlinuz1 と initrd1.img を TFTProot\gparted にコピー
- filesystem.squashfs は httpd 経由となるので適切に利用可能な場所にコピー
例えばd:\www\filesystem.squashfs のように細かいことを気にせずドキュメントルートに置いてまず動作確認をとるのが簡単。
- PXELINUX 用の設定の一例
PXELINUX 系
PXELINUX は download を辿ってこのへんからダウンロードした syslinux-3.80.zip を解凍する。ドキュメントは doc の中、メニューに関しては com32/menu/MANUAL、など結構散在している感。
ファイルの準備に関しては、
- memdisk 、pxelinux.0 、vesamenu.c32、はそれぞれ次の場所あたりにあるので確保して TFTProot にコピー
- memdisk/memdisk
- core/pxelinux.0
- com32/menu/vesamenu.c32
- 壁紙は 640x480 の .png か .jpg で用意、ここでは wall.png を TFTProot にコピー
設定ファイル default は pxelinux.cfg の中に新規作成。
- 壁紙を持つ
- 番号をメニューのラベルにする
例)
LABEL 1
menu label ^1. Windows PE
上記2点を考慮して default を作成すると内容は次のような感じ。
default
実際に PXEブート させて動作確認が取れれば とりあえず PXE ブート 環境構築は完了。
壁紙を用意した説明を書いて画像が無いのもアレなので実際に PXEブート させると次のような感じ。

特に珍しい点も凝ったこともPXEブート故の特別なことも無く、メニューの数字で選択するか上下キーで選択して起動開始。
(このエントリでの説明より画面のメニューが多いのは説明を書くのが面倒だったから・・・)
雑感
当時(2008年春頃)調べた時には『 PXE boot Windows 』などでググっても Windows2003 Server 付属もので PXEサーバー を構築するという情報になかなか辿り着けなかった。振り返ってみると『
PXEClient 060 Windows 』なら比較的簡単に到達できたという結果。キーワードを知って検索するのと知らずに検索するのは大違い、というのを思い知ったのが懐かしい。
【補足】
【2009/07/07:追記】
- 参考サイト(tftpd32の時お世話になったサイト)が復活していたのでURLにリンクを張る
- 抜けていた参考サイト(TechNet)を追加
- memtest86 のサイトが復活していたので辿るべきファイルを追加編集
- BCDストア の編集用バッチファイルのあるエントリへのリンクを追加
【2009/08/14:追記】
- 少し不親切だった bcd 編集用バッチファイルへのリンクの説明を補充