PXEを使ってPCもディスクレスにしよう

YAMAMORI Takenori ●yamamori

●ディスクレスのDOSからSambaを使う

フロッピーディスクイメージを使った 最小限のDOSのディスクレスブート が実現できたので,これを発展させ, Sambaサーバに接続してネットワークドライブが使えるようにしてみましょう. そのためには,ディスクレス以前の問題として, DOS上でネットワークが使えるようにしなければなりません. サーバはSambaなので,プロトコルとしてはNetBEUIやIPXではなく, TCP/IPが使えなければなりません. すると選択肢としては, 「LAN Manager」または「Network Client for DOS」となります. ここでは,より手軽と思われる「Network Client for DOS」を使うことにします.

この「Network Client for DOS」がインストールされた ブートディスクイメージを作成するためには, 一時的に何らかのローカルディスクをクライアントマシンに接続し, その上で作業を行なわなければなりません. 小容量で構わないので,余っているハードディスクがあれば それを使うことができるでしょう. 筆者は,ハードディスクと同様に認識される230MバイトのSCSIのMOを使用しました. この場合MOは,ASPIマネージャを使わずにSCSI BIOSから直接認識され, MOからのDOSのブートができるようになっていなければなりません.

ディスクレスマシンにMOを接続し,DOSの起動フロッピーディスクからブートします. fdiskコマンドでMOの全領域をDOS領域として確保してリブートします. そしてMOがC:として認識されているのを確認し,“format /s c:”を実行します.

そのほか必要なファイルをC:にコピーします. DOS上でTCP/IPを使う場合,かなりのコンベンショナルメモリが使用されるため, VMware上では忌み嫌われるemm386.exeも,今回は必須になります. したがって,emm386.exeとhimem.sysもC:にコピーし, config.sysには以下の記述が必要です.

config.sysの記述:
----
dos=high,umb,auto
device=himem.sys
device=emm386.exe ram
----

「Microsoft Network Client v3.0 for MS-DOS」は以下のURLより, dsk3-1.exeとdsk3-2.exeの2つのファイルとして入手可能です. C:上に適当な一時ディレクトリを作り,これらのファイル (unzip自己解凍)を展開しておきます.

  ftp://ftp.microsoft.com/bussys/clients/msclient/

同様に,使用しているNICのDOS用ドライバのインストール元ファイルも, 一時ディレクトリにコピーしておきます.※注

※注
IntelのWebサイトよりダウンロード可能な, PRO/100+用各種ドライバの入った100pdisk.exeの中には DOSのディレクトリが一応ありますが, 必要なファイルが不足していてDOSにはインストールできませんでした. 筆者はPRO/100+のリテール版に付属していたCD-ROM内のDOS用ドライバを用いて インストールすることができました.

ここで,C:が起動ドライブとなるよう,一度リブートします. 「Network Client for DOS」のインストールは,英語モードで行ないます. dsk3-1.exeを展開しておいたディレクトリに移動し, setup.exeを実行します.

インストール先はデフォルトのC:\NETでよいでしょう. NICの選択画面では,2行目の, 「*Network adapter not shown on list below ...」 を選び,別途コピーしておいたDOS用ドライバのPATHを入力します.

その後“User Name”を聞かれますが, これはユーザ名のデフォルトおよびマシンのNetBIOS名になります.

その次の画面では必ず“Change Network Configuration”を選び, [Tab][↑][↓][Enter]で画面を操作して プロトコルにTCP/IPを追加し,IPXを削除して下さい.

●プロトコルにTCP/IPを追加するのを忘れないように
dos-tcpip.gif

このあとインストーラはconfig.sysとautoexec.batに必要な記述を追加し, 自動的にマシンをリブートします.

※注
このとき, config.sysにすでにマルチコンフィギュレーションの記述が行なわれている場合は, インストーラはconfig.sysなどの書換えをあきらめ, 追加記述するべきものをインストール先のc:\net以下に config.sysとautoexec.batのファイル名で保存します. この場合は, これを参考に手作業でconfig.sysとautoexec.batを修正する必要があります.

また,autoexec.batの中でmscdex.exeをロードして CD-ROMを使うようにしている場合は, mscdex.exeのロードを“net start”などのコマンド記述よりも 後ろになるようする必要があります. そうしないと,ネットワークの初期化時にメモリが不足し,正常に起動しません.

これでリブートすると正常にネットワークが立ち上がるはずです. すでにDHCPサーバの設定はできているので,IPアドレスも自動取得されたでしょう. logonのプロンプトが出たら, ここにSamba上で有効なユーザ名とパスワードを入力します. あとは, 以下のようにコマンド入力して,ネットワークドライブを使用することができます.

  net use t: \\サーバ名\共有名

○ディスクレスDOSブートイメージの作成

ここまでの作業で,MO上にはSambaクライアントとして動作する スタンドアロンのDOSがインストールされています. これをもとにディスクレスブートイメージを作成します.

以降の作業はLinux上で行ないます. ここではLinux上からMO全体が/dev/sdbで認識されているものとします. fdisk形式ですのでこの中の/dev/sdb1がDOSパーティションとなります.

さて,「Network Client for DOS」のインストールにより, これだけで約1.6Mバイトの容量を使用していることに気づいたでしょうか. つまり,すでに1.44Mバイトのフロッピーディスクには収まらなくなっているのです.

しかし,筆者はフロッピーイメージのジオメトリのシリンダ数を, 通常の80シリンダから120シリンダに増やし, 2.16Mバイトのイメージとなるようにしても, BpBatch上では問題なく使用できることを実験的に確認しました.

なお,通常の2倍の160シリンダ(2.88Mバイト)にしたり, あるいはシリンダ数ではなくセクタ数の方を増やしたのではうまく行きませんでした.

このような特殊なジオメトリのDOSイメージファイルの論理フォーマットのために, mtoolsを用います. デフォルトの/etc/mtools.confでは, すでにフロッピーディスクがa:として定義されたりしていますが, これに以下のようにジオメトリを指定して記述を追加し, イメージファイルをi:と定義します.

●/etc/mtools.confに追加する設定
----
drive i: file="/tmp/fd216.img"
    fat_bits=12 
    cylinders=120 heads=2 sectors=18
----
なお,mtoolsは/etc/mtools.confの他, $HOME/.mtoolsrcの方にも個人的な設定を追加できますが, 後者の場合はsuして作業を行なう場合に$HOMEが変わってしまうため 注意が必要です.

ブートイメージファイルの作成手順を以下に示します. まずddでファイルを作成し,mformatでフォーマットを行ないますが, このとき,“-B”オプションを付けて, MOからパーティションのブートセクタを譲り受け, それをi:にコピーしていることに注意して下さい.

今回のような特殊なジオメトリのイメージでも, フォーマットさえできてしまえば通常のDOSファイルシステムイメージとして, Linux上でループバックマウントできます. なお,DOSのファイルのコピーをmtoolsのmcopyで行なってもよいのですが, mtoolsのバージョンによって問題がある場合があるため, 筆者はLinux上にマウントして行ないました.

●DOSブートイメージファイルの作成手順
----
# dd if=/dev/zero of=/tmp/fd216.img bs=2160k count=1
# mformat -B /dev/sdb1 i:   ← DOSフォーマット,およびブートセクタのコピー
# mdir i:                   ← 試しにディレクトリを覗いてみる
 Volume in drive I has no label
 Volume Serial Number is 7645-9D3A
Directory for I:/

No files
                          2 198 528 bytes free

# mkdir /mnt/dos /mnt/mo
# mount -t vfat /dev/sdb1 /mnt/mo
# mount -t vfat -o loop /tmp/fd216.img /mnt/dos
# cd /mnt/mo
# cp -pr io.sys msdos.sys command.com config.sys autoexec.bat \
    himem.sys emm386.exe net /mnt/dos
# cd /mnt/dos
# vi config.sys autoexec.bat net/system.ini  ← C:をA:に修正
# cd /
# umount /mnt/mo
# umount /mnt/dos
----
※注
* Windows 95のDOSでは,io.sysがディレクトリエントリの先頭ではなくても 構いません.
* io.sys, msdos.sysには通常,システム属性や隠し属性が付いていますが, これもなくても構いません.

ファイルのコピーにおいて気づくと思いますが, DOSのシステムファイルと\net以下のファイルをコピーすると, もうすでに容量は一杯で, このままではjdisp.sysほか日本語関係のドライバが入りません.

しかし,ここで DOSの仮想フロッピーイメージ内のnet/setup.exeを削除して空き容量を確保すれば, さらにjdisp.sysほかの日本語関係のドライバも入ります. これにより,ディスクレスのDOSが日本語環境でも使えることを確認しています.

ファイルのコピー後, i:の以下の3つのファイルの中の,C:の記述をすべてA:に修正します. 今までMOはC:として動作していましたが, 今後のBpBatchのディスクレス環境では, イメージファイルはA:のフロッピーディスクとしてエミュレートされるため, ドライブレターの記述を変更する必要があるのです.

  /config.sys
  /autoexec.bat
  /net/system.ini

これでブートイメージファイルができましたので, このfd216.imgをサーバ上の/tftpboot以下にコピーします.

そして以下のようにディスクレスマシンをブートしてみて下さい. ネットワークドライブの使える完全ディスクレスのDOSが立ち上がるはずです.

> set cachenever = "on"
> loadramdisk "fd216.img"
> floppyboot

ブートディスクイメージのA:はもう空き容量がほとんどありませんが, ネットワークドライブ上に各種DOSアプリケーションを用意することにより, 工夫次第でいろいろと使えると思います.


参考文献
・「DOSで利用するネットワーク」/前田 剛/『Software Design』1998年6月号/技術評論社

To『PXEを使ってPCもディスクレスにしよう』[index]


このページは、技術評論社 「パワーアップFreeBSD」および SoftwareDesign 2000年10月号、11月号『PXEによるネットワークブート設定術』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori