無理やりPXEメニューに組み込む

ここまでの設定で、/etc/dhcpd.confを編集することでLinuxカーネルでもDOSでも起動出来るようになっている。上の例の

    27  #       filename                "/linux-install/pxelinux.0";
    28  #       filename                "/pxeloader/startrom.n12";
    29          filename                "/bpbatch/bpbatch";

を次のように変更すればLinuxをブートできる。

    27          filename                "/linux-install/pxelinux.0";
    28  #       filename                "/pxeloader/startrom.n12";
    29  #       filename                "/bpbatch/bpbatch";

(27行目のコメントを有効にして29行目をコメントアウトする。)
頻繁に使う機能ではないので、これでも良いのだが、出来ればLinuxをブートするかDOSをブートするかを指定できるようにしておきたくなった。(逆にたまにしか使わないので、いちいち設定を変えるのでは記憶を呼び起こさなければならないので大変だ。)

PEXでメニューを表示する」でもメモしたとおり、PXEにはメニューを使って起動するソフトウェアを選択することができる。この機能を使ってPXEクライアントを立ち上げると次のようなメニューを表示し、ソフトウェアを選択できるようになる:

この例では、

  • PXEクライアントをFedora 8のディスクレス・クライアントとして起動する
  • PXEクライアントをFedora 8のインストール用カーネルを使って起動する
  • PXEクライアントでメモリテスト用ソフトウェアを起動する
  • ローカルのHDDから起動する

を選択できるようになっている。これに

  • PXEクライアントをDOSモードで起動する

を加えてみたい。

なお、PXEのメニュー化の設定は既に完了しているという前提で話しを進める。(メニュー化については「PEXでメニューを表示する」を参照のこと。)

pxelinux.cfgのメニューを変更

/tftpboot/linux-install/pxelinux.cfg/の下にあるPXEクライアント用の設定ファイルを次のように変更する。(今回のクライアントのIPアドレスは192.168.0.128なのでファイル名は"C0A80080"となる。

[root@server-01 pxelinux.cfg]# cat -n C0A80080 
     1  default syslinux/menu.c32
     2  timeout 50
     3  ontimeout Fedora-8-Diskless
     4  #prompt 1
     5
     6  label Fedora-8-Diskless
     7      kernel Fedora-8-Diskless/vmlinuz
     8      append  initrd=Fedora-8-Diskless/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.0.7:/tftpboot/f8 ramdisk_size=25137 ETHERNET=eth0 SNAPSHOT=client-01
     9
    10  label Fedora-8-Install
    11          kernel Fedora-8-Install/vmlinuz
    12          append  initrd=Fedora-8-Install/initrd.img devfs=nomount
    13
    14  label DOS_Win98SE
    15          kernel bpbatch.bs
    16
    17  label Memory-Test
    18          kernel Fedora-8-Install/memtest
    19
    20  label local
    21          localboot 1

今回赤字の部分を追加している(はてな記法のバグ?で「.bs」が赤くなってない)。なぜ、この様な内容になったのかを説明する。
まず、PXEのネットワーク・ローダー、NBPとなるのはpxelinux.0である。pxelinux.0の設定ファイルで"kernel"行が起動するソフトウェアを指定する箇所だが、基本的にはLinuxカーネル・フォーマットのソフトウェアとなる。しかし、「Manpage of SYSLINUX」の後半に書いてある"Comboot Images and other operating systems"を見るとLinuxカーネル以外のフォーマットでもブートできるとある。ファイルの拡張子で幾つかの種類を認識しているが、ブートできるのは次の種類になる。

拡張子 ブートイメージ
無し、または下記以外 Linux kernel image
CBT COMBOOT image (not runnable from DOS)
BSS Boot sector (DOS superblock will be patched in)
BS Boot sector
COM COMBOOT image (runnable from DOS)

bpbatchがこのどれかの形式あればpxelinux.0からブート出来る。(つまりNBPからNBPを呼び出す。) 色々試したところ、bpbatchは"Boot sector"として認識してブートできることが分かった。そこで、拡張子に".bs"をつけたシンボリックシンクを用意するこでブートできる。

[root@server-01 pxelinux.cfg]# cd /tftpboot/linux-install/
[root@server-01 linux-install]# ls
Fedora-8-Diskless  Fedora-8-Install  msgs  pxelinux.0  pxelinux.cfg  syslinux
[root@server-01 linux-install]# ln -s ../bpbatch/bpbatch.P bpbatch.bs
[root@server-01 linux-install]# ls -F
bpbatch.bs@         Fedora-8-Install/  pxelinux.0     syslinux/
Fedora-8-Diskless/  msgs/              pxelinux.cfg/
[root@server-01 linux-install]# 

ここでのポイントはpxelinuxを使ってブートしているので/tftpboot/linux-install/というディレクトリがベースのパスとなる。従って、bpbatch.bsも/tftpboot/linux-install/におく必要がある。あと、bpbatchは自分自身の拡張子を見て動作を変えるので".bs"が影響しないか心配だったが、ラッキーにも問題無かった。

pxelinux.ovl?

次に /tftpboot/linux-install/ の下にもう一つシンボリック・リンクを張っておく。

 [root@server-01 linux-install]# ls -F
 bpbatch.bs@         Fedora-8-Install/  pxelinux.0     syslinux/
 Fedora-8-Diskless/  msgs/              pxelinux.cfg/
 [root@server-01 linux-install]# ln -s ../bpbatch/bpbatch.ovl pxelinux.ovl
 [root@server-01 linux-install]# ls -l
 total 68
 lrwxrwxrwx 1 root root    20 2008-02-08 09:06 bpbatch.bs -> ../bpbatch/bpbatch.P
 drwxr-xr-x 2 root root  4096 2008-02-06 23:28 Fedora-8-Diskless
 drwxr-xr-x 2 root root  4096 2008-02-08 08:17 Fedora-8-Install
 drwxr-xr-x 2 root root  4096 2008-02-06 10:26 msgs
 -rw-r--r-- 1 root root 13100 2005-12-20 10:03 pxelinux.0
 drwxr-xr-x 2 root root  4096 2008-02-08 09:47 pxelinux.cfg
 lrwxrwxrwx 1 root root    22 2008-02-08 09:53 pxelinux.ovl -> ../bpbatch/bpbatch.ovl
 drwxr-xr-x 2 root root  4096 2008-02-08 08:21 syslinux
 [root@server-01 linux-install]# 

bpbatchの基本的な動作として、先ずPXEで本体の"bpbatch"がロードされ起動するが、次に"bpbatch.ovl"というプログラムをロードしてくる。(これはPXEでロードできるプログラムサイズに制限があるためだと推測している。)ところが、"bpbatch.ovl"とう固定的なファイル名ではなく"自分のプログラム名.ovl"というソフトウェアをロードしようとする。ここで「自分のプログラム名」はDHCPで与えられるpxelinux.0となるらしい。従って、この場合はpxelinux.ovlというファイルをロードしようとする。そこでシンボリックリンクを利用して、pxelinux.ovlとしてbpbatch.ovlをロードするようにする。だいぶトリッキーだが、一応動作する。

なお、bpbatchに対する引数はpxelinux.cfgでは指定できないので/etc/dhcpd.confで設定する。

/etc/dhcpd.confの設定

基本的にはパラメータ"filename"としてbpbatchではなくpxelinuxを指定するだけで後の変更は必要ないが、念のため最終的な/etc/dhcpd.confを載せておく。

[root@server-01 linux-install]# cat /etc/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample  
#
ddns-update-style       none;
ignore                  client-updates;
use-host-decl-names     on;
option option-135       code 135 = text;

subnet 192.168.0.0 netmask 255.255.255.0 {
        option routers                  server-01;
        option broadcast-address        192.168.0.255;

        option nis-domain               "localdomain";
        option domain-name              "localdomain";
        option domain-name-servers      server-01, dnsserver-01;

        option time-offset              32400;  # Japan Standard Time
        option ntp-servers              ntp.nict.jp, ntp.jst.mfeed.ad.jp;

        range                           192.168.0.128 192.168.0.254;
}

host client-01 {
        hardware ethernet       00:0C:29:EB:31:F6;
        fixed-address           client-01;
        next-server             server-01;
        filename                "/linux-install/pxelinux.0";
#       filename                "/pxeloader/startrom.n12";
#       filename                "/bpbatch/bpbatch";
        default-lease-time      1296000; # 2 weeks
        max-lease-time          2592000; # 4 weeks
        option option-135       "/bpbatch/bootscript";
#       option option-135       "-i";
}

DHCPサービスを再起動してからPXEクライアントの電源を入れると次のような画面が現れる。

これで"DOS_Win98SE"を選択するとDOSモードで起動する。

副作用

手動で/ftfpboot/linux-install/pxelinux.cfg/C0A80080 といったファイルを修正するので、その後、system-config-netbootユーティリティを使って設定し直そうとすると警告メッセージが出て、ファイルの内容が元に戻ってしまう。従って、その後再度、これらのファイルを手動で設定する必要が出てくるのでバックアップをとって置いた方がいい。

考察

pxelinuxを使ったLinuxブートとbpbatchを使ったDOSブートをメニュー化するのに今回はpxelinuxをベースとした。しかし、bpbatchの方もスクリプトファイルでメニュー化する機能を持ているのでbpbatchをベースとすることもできた。pxelinuxをベースにした場合、ファイルの制限などがあり結構トリッキーな設定を使う必要があったし、今回の場合はかなりラッキーだったと思う。一方、bpbatchのコマンドには"TFTPBoot"コマンドや"LinuxBoot"コマンドがあるので、そちらを使って統合した方が素直だろう。(pxelinuxはLinuxをネットブートすることを念頭に作られているのに対して、bpbatchは汎用的にOSをネットブートすることを目的として作られているため。)

NTFS4DOS

DOSモードで立ち上がるところまでは良いが、HDDの修復目的などでDOSを使う場合、HDDがNTFSでフォーマットされていると手が出ない。DOSからNTFSをアクセスすることが出来るツールをフロッピーにインストールしておく必要がある。その様なツールがいくつかはあるが、有償だったり、無償版はRead Onlyだったりする。私はAvira社のNTFS4DOSという製品を使った。個人使用に限り無償で利用することができる。NTFSに対して読み書きもでき、NTFS用のchkdskデフラグツールも付いてくる。業務用でも20ユーロ(約3,000円)で購入できる。
元々はDatapolという会社の製品だったが、Datapol社が2006年4月にAvira社に買収され現在ではAvira社の製品として販売されている。

NT4DOSのPXEを使ったネットワークブートは、上で書いた通常のDOSのブート同じである。上の設定の環境を使って補足説明する。
bpbatchを使ってDOSをブートする時にどのフロッピーイメージからブートするかを指定した/tftpboot/bpb-boot/bootscript.bpbを書変える。先程のDOSのブートの時は、

set CacheNever="ON"
loadramdisk "/dos/Win98SE_SPC.flp"
floppyboot

という設定だったが、loadramdiskの行を次のように書換える。

set CacheNever="ON"
loadramdisk "/dos/NTFS4DOS_SPC.flp"
floppyboot

ここで"NTFS4DOS_SPC.flp"というのがNTFS4DOSのフロッピーイメージのファイルで、この環境では"/tftpboot/dos"ディレクトリの下において置く。
これでクライアントをブートしてメニューでDOSを選べばNTSF4DOSが起動する。

だたし、PXEの設定ファイル(上の例では/tftpboot/linux-install/pxelinux.cfg/C0A80080)のメニューに表示するタイトルも変更しておく必要がある。(変更しないと"DOS_Win98SE"というメニューのタイトルが表示される。)次のような方法も考えられる。例えば、DOSとNTFS4DOSをメニューから選択的に起動するには、PXEの設定ファイルにNTFS4DOSの項目を追加してappend行を使ってbpbatchに渡す引数を指定し、Win98とは別のスクリプトファイル(例えばbootntfs4dos.bpbなど)を用意する方法もあると思うが、そこまで確認はしていない。(PCのトラブル時にPXEを使ってDOSやNTFS4DOSをブートするだけなので、必要に応じてbootscript.bpbを書き変えれば良いので、今回はそこまで深入りしなかった。今のところ、書換えるのも後で忘れるのでDOS用よNTFS4DOSようのスクリプト別々の名前で用意して、シンボリックリンクで切替えるようにしている。)

NTFS4DOSのカスタマイズ

オリジナルのフロッピーイメージでも勿論使えるが、日本語キーボードを使っている場合は、キーボードを選択できるようにしておく必要がある。オリジナルのフロッピーイメージの内容は次のようなものだが、

autoexec.bat  command.com  dfrgntfs.exe  keyboard.sys  keybrd4.sys  msdos.sys
chkdsk.exe    config.sys   io.sys        keybrd2.sys   license.dat  ntfs4dos.exe
chkdskg.exe   cpyrdcc.bat  keyb.com      keybrd3.sys   lngintl.dat  vtmode.com

日本語キーボード対応(+レスキュー用コマンド)として次のような内容にしてある。(ちょっと欲張ってCD-ROMドライバも入れてしまっている。CD-ROMドライブからブートできない場合、PXEでブートしてCD-ROMへアクセスするため。)

attrib.exe    chkdsk.exe   cpyrdcc.bat   fdisk.exe  jkeybrd.sys  mem.exe     ntfs4dos.exe
autoexec.bat  chkdskg.exe  deltree.exe   find.exe   jkeyb.sys    move.exe    xcopy32.exe
biling.sys    command.com  dfrgntfs.exe  himem.sys  license.dat  mscdex.exe  xcopy32.mod
cd1.sys       config.sys   drvspace.bin  io.sys     lngintl.dat  msdos.sys   xcopy.exe

これに伴い"config.sys"も次のように書き変える必要がある。
オリジナル:

[menu]
menuitem=ntfsdos,NTFS4DOS
menuitem=dfrgntfs,Defragment NTFS
menuitem=dskchk,Check Disk Utility
menudefault=ntfsdos,20

[ntfsdos]

[dfrgntfs]

[dskchk]

[common]
files=100
LASTDRIVE=P

日本語用:

[menu]
menuitem=ntfsdos,NTFS4DOS
menuitem=dfrgntfs,Defragment NTFS
menuitem=dskchk,Check Disk Utility
menudefault=ntfsdos,20

[ntfsdos]

[dfrgntfs]

[dskchk]

[common]
DEVICE=HIMEM.SYS /testmem:off
FILES=100
BUFFERS=20
DEVICEHIGH=BILING.SYS
DEVICEHIGH=JKEYB.SYS
DEVICE=CD1.SYS /D:OPTDRV
LASTDRIVE=Z

NTFS4DOSを使ってみて

NTFSにアクセスできること以外は普通のDOSと大して違いはないので、NTFS4DOS自身について特段書くことはないが、NTFS4DOSに付いてくるデフラグツールはちょっとマニアックだった。通常の(Windowsについてくる)デフラグツールは「システムファイル」まではデフラグしない様である。Windowsデフラグツールで一つ残らずデフラグした後でNTFS4DOSのデフラグを"High"モード(昔のバージョンではparanoia(偏執狂)モードと言ったらしい)で動かすと、まだまだ出るわ出るわ。もっとも、殆どが"C:\System Volume Information"の下にあるバックアップ用のファイルなので、デフラグしたからといってパフォーマンスが上がるわけではなさそうだ。)

デフラグファイルシステムそのものをいじるので、出来る限りフリーのソフトは使いたくはないが、一応感想まで。

LinuxのPXEでDOSをネットワークブートする

PXE(ピクシー)でLinuxのブートやディスクレスの実現は問題なく出来るようになった(「PXEによるディスクレス・クライアント(総集編)」参照)が、凝り性なので色々と試したくなる。次に考えるのはDOSとかWindowsPXEでブートできないか、と思ってしまう。勿論、LinuxPXEサーバを使ってだ。PXEサーバが1台あると便利でも書いたがPXEサーバが一台あるといざということに何かと便利である。
Windowsディスクレスで起動しても、まぁ、それ程嬉しいことはないかと思う。それであれば、贅肉を落としたLinuxディスクレスで立ち上げてVMware Server Consoleなどを動かした方が気が利いている。しかし、ちょっとDOSを起動したいということはありそうだ。一番ありそうなのはフロッピーの無いノートなどで「Windowsが立ち上がらない!」場合だろう。PXEサーバに予め用意しておけばいつでも使える。

BpBatchが必要

PXE自身はクライアントからの要求に応じて、アドレス解決をしてローダを配ることしかしない。このローダ(NBP:Network Bootstrap Program)がLinuxカーネルなどのOSの本体を読み出してきて立ち上げる。Linuxを立ち上げる場合のNBPは"pxelinux.0"だった。Windows(W2K/XP/2003など)は"startrom.n12"になる。このあたりMicrosoftのページに書いているので直ぐ見つかった。(「PXE のアーキテクチャ」または「リモート インストール サービスで使用されるテクノロジとコンポーネント」)
DOSのブートもstartrom.n12で出来るのかと思いやったみたが、結局、startrom.n12は"NTLDR"を2次ローダとして読み出し、起動するのでNT系のWindowsにしか使えないようだ。

調べていくとPXEを使ったDOSのブートには"BpBatch"というネットワーク・ローダが必要だと分かった。BpBatchというソフトはRemboという会社が作っていて、個人利用に関しては無償で配布していたようだ。しかし2年程前にIBMに買収されていた。(「Rembo is now a part of IBM」参照。RemboはネットワークでOSを配布する技術があり、Windows Vistaへの移行ツールの一環として買収したようだ。) またRembo自身もそれ以前から配布をやめていたようだが ftp://ftp.ufanet.ru/pub/remoteboot/bpb-exe.zip から未だにダウンロードできるようだ。これを解凍してLinux環境(PXEサーバ)へ持ってくる。
なお、ここから先の設定例はすでにTFTP、DHCPPXEが既にインストールされていることを前提とする。これらの設定については「PXEによるディスクレス・クライアント(総集編)」を参照のこと。
展開すると次のようなファイルが生成される。

 [root@server-01 tmp]# ls -l
 total 1956
 -rw-r--r-- 1 root root  58659 2000-02-11 21:21 bpbatch.hlp
 -rw-r--r-- 1 root root 191812 2000-02-11 21:21 bpbatch.ovl
 -rw-r--r-- 1 root root   2183 2000-02-11 21:21 bpbatch.P
 -rw-r--r-- 1 root root    856 2000-02-11 21:21 INSTALL
 -rw-r--r-- 1 root root   3471 2000-02-11 21:21 LICENSE
 -rwxr-xr-x 1 root root 173607 2000-02-11 21:21 mrbatch
 -rw-r--r-- 1 root root 203190 2000-02-11 21:21 mrbatch.exe
 -rwxr-xr-x 1 root root 399536 2000-02-11 21:21 mrbatch.static
 -rwxr-xr-x 1 root root 208763 2000-02-11 21:21 mrzip
 -rw-r--r-- 1 root root 210416 2000-02-11 21:21 mrzip.exe
 -rwxr-xr-x 1 root root 429816 2000-02-11 21:21 mrzip.static
 -rw-r--r-- 1 root root    771 2000-02-11 21:21 readme
 -rw-r--r-- 1 root root   8631 2000-02-11 21:21 whatsnew

このうち bpbatch.* があれば取り合えず動作する。(が、一応、全てのファイルを/tftpboot/の下へコピーした。)

 [root@server-01 tmp]# mkdir /tftpboot/bpbatch/
 [root@server-01 bpbatch]# cp * /tftpboot/bpbatch/
 [root@server-01 bpbatch]# cd /tftpboot/bpbatch/
 [root@server-01 bpbatch]# ls
 bpbatch.hlp  INSTALL  mrbatch.exe     mrzip.exe     whatsnew
 bpbatch.ovl  LICENSE  mrbatch.static  mrzip.static
 bpbatch.P    mrbatch  mrzip           readme

"bpbatch.P"がNBPの本体になる。bpbatchはどの様な名前で起動されるかによって、使用するtftpサーバの種類を切替えられるように作られているらしい。

bpbatch 通常のtftpサーバを使用する。(69番ポート)
bpbatch.P パケットサイズを大きく出来るtftpサーバで59番ポートを使用する。
bpbatch.B パケットサイズを大きく出来るtftpサーバで69番ポートを使用する。

OSのブートなどで巨大なイメージファイルを転送する場合は"blksize"オプションでパケットサイズを大きく出来るtftpサーバを使うことあるそうだが、その場合には有効だろう。"Incom TFTPD"というtftpサーバはパケットサイズを変えられるらしい。通常のtftpサーバでは"blksize"オプションは使えないので拡張子の無いファイル名を使うことになる。そのためにシンボリックリンクを張っておく。

[root@server-01 bpbatch]# ln -s bpbatch.P bpbatch
[root@server-01 bpbatch]# ls
bpbatch      bpbatch.P  mrbatch         mrzip         readme
bpbatch.hlp  INSTALL    mrbatch.exe     mrzip.exe     whatsnew
bpbatch.ovl  LICENSE    mrbatch.static  mrzip.static

dhcpd.confに登録する

PXEBNPとしてbpbatchをダウンロードするように/etc/dhcpd.confを設定する。

[root@server-01 bpbatch]# cat -n /etc/dhcpd.conf
     1  #
     2  # DHCP Server Configuration file.
     3  #   see /usr/share/doc/dhcp*/dhcpd.conf.sample  
     4  #
     5  ddns-update-style       none;
     6  ignore                  client-updates;
        use-host-decl-names     on; # <- ■■■追加 (*)
     7  option option-135       code 135 = text;
     8
     9  subnet 192.168.0.0 netmask 255.255.255.0 {
    10          option routers                  server-01;
    11          option broadcast-address        192.168.0.255;
    12
    13          option nis-domain               "localdomain";
    14          option domain-name              "localdomain";
    15          option domain-name-servers      server-01, dnsserver-01;
    16
    17          option time-offset              32400;  # Japan Standard Time
    18          option ntp-servers              ntp.nict.jp, ntp.jst.mfeed.ad.jp;
    19
    20          range                           192.168.0.128 192.168.0.254;
    21  }
    22
    23  host client-01 {
    24          hardware ethernet       00:0C:29:EB:31:F6;
    25          fixed-address           client-01;
    26          next-server             server-01;
    27  #       filename                "/linux-install/pxelinux.0";
    28  #       filename                "/pxeloader/startrom.n12";
    29          filename                "/bpbatch/bpbatch";
    30          default-lease-time      1296000; # 2 weeks
    31          max-lease-time          2592000; # 4 weeks
    32          option option-135       "/bpbatch/bootscript";
    33  #       option option-135       "-i";
    34  }
    35
[root@server-01 bpbatch]# 

基本的にはpxelinuxでLinuxディスクレスクライアントに対するサービスの設定に手を加えた。(厳密にはディスクレスの設定の時に使ったものと若干異なっているものをベースとしている。)赤字が追加した部分となる。

  • 29行目:NBPのファイル名を指定する。/tftpboot/bpbatch/bpbatch(先程作ったシンボリックリンク・ファイルで実体は"bpbatch.P")となるが、/tftpbootはTFTPのルートディレクトリなので/tftpboot/からのパス(/bpbatch/bpbatch)で現す。("/bpbatch/bpbatch"の最初のbpbatchはディレクトリ名、2番目のbpbatchはファイル名である。)ちなみに27行目でコメントアウトしているのはlinuxブート用のNBP
  • 32行目:NBPであるbpbatchに渡す引数をしてい指定している。135番オプションを使っているらしい。"/bpbatch/bootscript"はbpbatchに対するスクリプトファイルを指定している。bpbatchはTFTPでbootscript.bpbとう名前のファイルをダウンロードして、そこに書かれている記述の通りにコマンドを実行する。なお、拡張子の".bpb"はbpbatchが自動的に追加するので、dhcpd.confでは書いてはいけない。
  • 33行目:コメントアウトしているが、これもbpbatchに渡す引数をしてい指定している。(32行目と交換して使う。)"-i"は対話モードでの実行を指定する。"-i"でbpbatchを起動するとプロンプトが出てコマンド入力待ち状態となる。
  • 7行目:bpbatchの引数を表す135番オプションの定義。コード135番は文字列型であることを宣言している。

次にbpbatchに対するスクリプトファイルを作成する。

[root@server-01 bpbatch]# ls
bootscript.bpb  bpbatch.hlp  bpbatch.P  LICENSE  mrbatch.exe     mrzip      mrzip.static  whatsnew
bpbatch         bpbatch.ovl  INSTALL    mrbatch  mrbatch.static  mrzip.exe  readme
[root@server-01 bpbatch]# cat -n bootscript.bpb 
     1  set CacheNever="ON"
     2  loadramdisk "/dos/Win98SE_J.flp"
     3  floppyboot
[root@server-01 bpbatch]# 
  • 1行目:setコマンドで変数CacheNeverをONにしている。bpbatchはデフォルトでHDDにファイルをキャッシュする。これはネットワークブートする毎に大きなファイルをダウンロードしてネットワークに負担をかけることを避けるためだ。この変数をONにすることでHDDにキャッシュしなくなる。なお、bpbatchがHDDにキャッシュするのはパーティションテーブルに登録されている最後のパーティションの終わりのシリンダから物理的に最後のシリンダまでの間で、どこのパーティションにも属していない領域が使われる。
  • 2行目:ramdisk領域にダウンロードするイメージファイルを指定している。今回はWindows98SEで作成したブート・フロッピーのイメージファイルを/tftpboot/dos/Win98SE_J.flpとして、そのファイルを指定している。フロッピーなどのイメージファイルはbpbatchに付属している"MrZip"を使って作ることも出来るが、私の場合はLinuxのddコマンドで直接フロッピーから作った。
[root@server-01 bpbatch]# mkdir /tftpboot/dos/
[root@server-01 bpbatch]# dd if=/dev/floppy of=/tftpboot/dos/Win98SE_J.flp
  • 3行目:ramdiskのフロッピーイメージを使ってブートする。

今回はDOSを立ち上げるの目的なのでbpbatchに関しては必要最小限しか使っていないが、結構と豊富なコマンドを持っていて色々な動作が可能だ。bpbatchについては「Linux Remote-Boot mini-HOWTO」に非常に詳しく書いてあるので参考になる。

これで準備が整ったのでDHCPサービスを再起動して設定は終わりとなる。

[root@server-01 bpbatch]# service dhcpd restart
Shutting down dhcpd:                                       [  OK  ]
Starting dhcpd:                                            [  OK  ]
[root@server-01 bpbatch]# 

DOSをPXEブートしてみる

クライアントのPCをBIOS設定でPXEブートできるように設定してからブートしてみる。まずは電源を入れてPXEブートが始まりbpbatchが起動したところ:

次にbpbatchがスクリプトファイルを実行し、Win98SEのDOSフロッピーイメージをダウンロード、起動したところ。キーボードの種類を聞かれるところで入力待ちになっている:

(フロッピーにはディスク管理用のファイルを詰め込んだので日本語フォントは入れられなかった。しかし、キーボードのタイプが違うと扱いにくいので、キーボードの種類は選択できるようにしている。)
最後にdirコマンドで"A:"の内容を見ているところ:

DOSも3GHzのマシンで実行するとつくづく早いと思う。

参考リンク

Linux Remote-Boot mini-HOWTO
bpbatchの作者らが書いた解説ページ。大変詳しいく書いてありbpbatchを利用する上では必読ページとも言える。

PXE Remoteboot on CompactPCI Systems
直接bpbatchには関係ないがbpbatchを使ったブート方法が基本から設定まで書いてある。この中に、bpbatch.Pやbpbatch.Bの違いが書いてあった。