トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

PXEブートでWindows XPインストール

PXEで Windows XP のインストーラを起動させるメモ。

友人のノート(NEC Lavie N LN500/BD1U PC-LN500BD1U)を預かったら、HDDがいかれてたので換装(=からっぽ)、DVDドライブは読み込みが妖しくてデータ化けしてるっぽいし、USBブートは対応してなくてどうすれバインダー!頼みはネットワークブートのみという事態が発生したので。

というかほぼPXE booting Windows XP Installationのパクリですけど。

Windows機でCDからファイルをコピー&SP3適用&あとで必要になるCABの展開。C:\wxpcdとかは適当に指定してください。

> xcopy /ehv G: C:\wxpcd
> cd (path-to-sp3)
> WindowsXP-KB936929-SP3-x86-JPN.exe /integrate:C:\wxpcd
> cd C:\wxpcd\I386
> expand DRIVER.CAB -F:* .
> expand STARTROM.N1_ startrom.n12
> expand SETUPLDR.EX_ setupldr.exe

そしたらSambaとかSFTPとかで、C:\wxpcd\I386ディレクトリをDebian機に持ってく。SPの統合が必要なくてCABの展開をDebian機でやる(cabextractを使う)ならば、最初からDebian機にCDつっこんでファイルのコピーからはじめてもいいかも。

どうでもいいですけど、単一ファイルが圧縮してあるのをexpandするとき、自動で展開先ファイル名決めてくれないのですかね。expand -D で見ると、ちゃんと元のファイル名は記録されてるみたいですし。回復コンソールのexpandコマンドは勝手にやってくれたような気がするのですが。

閑話休題。こっからは Debian(squeeze-amd64)で。

dhcpdとtftpdとsamba、それとpxelinuxが必要なので、入ってなければ

# aptitude install isc-dhcp-server tftpd-hpa samba

とかする。

以下tftpdのルートは/home/taiyaki/tftp ということにしときます。あたりまえですけどtftpdの権限で読めるように。

$ mkdir -p /home/taiyaki/tftp/winxp
$ mv i386 /home/taiyaki/tftp/winxp/

起動時のドライバ読み込みに必要なファイルをもらってくる。これを書いてるとき、Modifiedは2010-06-26でした。

$ wget http://downloads.sourceforge.net/project/bootfloppy/pxefiles.tar.gz
$ tar zxvf pxefiles.tar.gz
$ cp pxefiles/drivers/* /home/taiyaki/tftp/winxp/i386/

ファイル名をlowercaseにしたりPXEブート用のファイルをつくったり。参考ページだとバイナリいじくったり結構コワイことしてますが、なるべくいじらなくて済むようにしました…。

$ cd /home/taiyaki/tftp/winxp/i386
$ ls -1 | awk '$0!=tolower($0){printf "mv \"%s\" \"%s\"\n",$0,tolower($0)}' | sh
$ cp startrom.n12 setupldr.exe ntdetect.com ../../
$ cd ..
$ vi winnt.sif
[data]
floppyless = "1"
msdosinitiated = "1"
; Needed for second stage
OriSrc = "\\192.168.0.1\ris\winxp\i386"
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1
 
[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.1\ris\winxp"
 
[UserData]
ComputerName = *

文中にある192.168.0.1は適当にDebian機のIPアドレスに変えておく(2か所)。

このwinnt.sifはインストーラの設定ファイルなので、上のねとわく用に必須の項目のほか、いろいろ書いておくとインストールを自動化できます。そのあたりはぐぐったりすると吉かも。

$ cd ..

参考にしたページはなぜかpxelinux経由で起動してたのですが、PXEで最初からstartrom.n12を読みに行けるので、以下のpxelinuxの設定ファイル作成はいらない作業。↓

$ cp /usr/lib/syslinux/pxelinux.0 .
$ mkdir pxelinux.cfg
$ vi pxelinux.cfg/default
default winxp
label
  kernel winxp winxp/startrom.0

pxelinuxはkernelに指定したファイルの拡張子でファイルの種類を判別するらしいので、startrom.n12のままにしてくと起動しなくてはまります。拡張子は.0で。

↑ここまでいらない作業

Windowsはcase insensitiveとか*NIXと流儀が違うので、そのあたりをどうにかする。

$ vi tftpd.remap
ri ^[az]: # Remove "drive letters"
rg \\ / # Convert backslashes to slashes
rg \# @ # Convert hash marks to @ signs
rg /../ /..no../ # Convert /../ to /..no../
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h
rg I i
rg J j
rg K k
rg L l
rg M m
rg N n
rg O o
rg P p
rg Q q
rg R r
rg S s
rg T t
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
r ^/(.*) \1
# vi /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/taiyaki/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -m /home/taiyaki/tftp/tftpd.remap"
# /etc/init.d/tftpd-hpa restart

SMBで必要なファイルが見えるようにしとく。

# vi /etc/samba/smb.conf

以下を追記。

[ris]
  path = /home/taiyaki/tftp
  browsable = yes
  read only = yes
  writable = no
  guest ok = yes
# /etc/init.d/samba reload

DHCPでIPアドレスとブート用のファイルとかを配るように。

#vi /etc/dhcp/dhcpd.conf
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.16 192.168.0.31;
  option domain-name-servers 192.168.0.1;
  option routers 192.168.0.1;
  option broadcast-address 192.168.0.255;
  option netbios-name-servers 192.168.0.1;
  option netbios-node-type 8;
  default-lease-time 86400;
  max-lease-time 2592000;

  next-server 192.168.0.1;
  # filename "pxelinux.0";
  filename "startrom.n12";
}

最終段階。さっきのpxefiles.tar.gzに入ってるスクリプトを使う。

$ cp ~/pxefiles/script/* winxp/
$ cd winxp
$ ./infparser.py i386
$ ./binlsrv.py &

これでLANにインストール対象機をつないでPXEブートすれば、XPのインストーラがあがってくるはず。

…なのですが。Intel NIC(e100)を使うと、こんなエラーが出てはまることが。出現条件は謎ですが、oembios.*をいじると出るような気がします。

File e100bnt5.sys caused an unexpected error (21) at
line 3788 in d:\xpsp\base\boot\setup\setup.c

Press any key to continue.

同じ問題ではまっているひとをみつけたので、ここに書いてある方法で解決。

Lenovoのページからtpveall.exeをいただいてきます。適当なアーカイバ(7-Zipとか)で展開して出てきたPRO100\WIN2Kにあるファイルをi386ディレクトリにぶち込めばおk。

なのですが。結局このマシンはインストール終了中に青画面を吐いて使えなくなります。もうほかにもいろいろ壊れているのですかね。つぎ込んだ時間はいったい。

→最初の段階、CDからのファイルコピーで失敗していたのがあった模様。そこからやりなおしたら、なんとかちゃんとインスコできて使えるようになりました。一件落着。

(でもHDDもDVDもいかれてるってことは他にもやばそうな箇所があるような予感はします。)