Personal NetWareサーバーを使って
ThinkPadをネットワークブートする試み

最終更新: 2001.7.25


目次

  1. はじめに
  2. 動作環境
  3. RPLの概要
  4. クライアントの設定
  5. サーバーの設定
  6. 起動
  7. トラブルシューティング
  8. NetWareクライアントの起動
  9. FreeBSDの起動
  10. イネーブラーとしての利用
  11. おわりに

1. はじめに

本稿では、ノートPCをネットワーク経由でブートする試みを紹介します。

一般のPCでは、LANカードにブートROMを挿すことにより、 ネットワークブート(RPL; Remote Program Load)が可能です。 これは主に、ディスクがない(あるいは少ない)クライアントPCで、 DOS・Windows・UNIXなどをブートするために使われます。 ひところ話題になったNC(Network Computer)も、この思想の延長上にあるものといえます。

ノートPCとLAN PCカードの場合、普通はこのような機能はありませんが、 ThinkPadはIBM製のLANカードを使ってネットワークブートする機能があります。 また、一般にRPLのサーバーとしてはNetWareやNT Serverといった高価なサーバーOSが必要ですが、 Caldera DR-DOSに付属のPersonal NetWareサーバーを使えば、 低コストでRPLサーバーを実現することができます。

Personal NetWareサーバーを使ったRPLの手順については、 ノベルのTID(Technical Information Document)や DR-DOSのドキュメント(RPLDOC.TXT)に書いてあります。 本稿では、実際にRPLの設定を行い、その手順を具体的に解説します。 以下のように読み進めてください。

なお、例によって本稿の内容について筆者は責任を負いません。 とくに、これはあくまで実験であり、筆者がこの環境を常用しているわけではありませんので、 もし本格的に運用する場合(そんな奇特な方はいないと思いますが:-))は、 事前によく検討してください。


2. 動作環境

今回の実験に使ったハードウェア・ソフトウェア環境です。

クライアント

サーバー

ネットワーク

Ethernet(10base-T)を使います。 サーバーとクライアントが別セグメントだとたぶん動作しないでしょう。 TokenRingについてはハブが手に入れば実験します:-)


3. RPLの概要

クライアント機の側では、LANカードにブートROMと呼ばれるROMを挿します (これはデスクトップ機の場合で、本稿の場合はブートROMは内蔵されています)。 サーバー側では、クライアント機を起動する起動フロッピーのイメージを用意しておきます。 クライアント機を起動すると、POSTの後、ブートROMに実行が移ります。 ブートROMはサーバーを探し、 サーバー上の起動フロッピーイメージがクライアント側でFDDとして見えるようエミュレーションし、 そこからブートセクタを読み込んでOSを起動します。

ネットワークブートのプロトコルとして、 ノベルのremote bootingとIBMのRPLがあります。 また、ブートROMには、ノベル旧型(IPXモノリシック)・ノベル拡張型(ODI)・IBMの3種類あります。 クライアントのROMのタイプによってサーバーの設定が若干変わってくるので、 どのROMを使っているかを把握しなくてはいけません。 ただし、今回はIBM製LANカードを使うので、 旧型(remote booting)の設定については割愛します。

ブートROMタイプ プロトコル フレームタイプ サーバー
ノベル旧型 ノベル remote booting Ethernet_802.3 NetWare
ノベル拡張型 IBM RPL Ethernet_802.2 NetWare、OS/2、
Windows NT
IBM

4. クライアントの設定

まずクライアントから設定します。 設定といっても、起動デバイスの設定と、LANカードが使う資源を確認するだけです。 ThinkPadのユーザーズガイド(535の場合43〜44ページと215ページ)も参照してください。

起動デバイスの設定

F1キーを押しながらThinkPadの電源を入れ、Easy-Setupを起動します。 Start upで起動デバイス選択に入ります。 Resetを押して設定をクリアし、起動デバイスを順に選択します。 今回はRPLが目的ですから、Networkを必ず含めます。 FDD → Network → HDDの順がいいでしょう。

Networkを選択すると、TokenRingのリング速度(4M/16Mbps)の選択画面になります。 今回のようにEthernetを使う場合は無視して単にOKを押します。 TokenRingを使う場合は適切なリング速度を選択してください。 起動デバイスの設定が済んだらOKで抜け、Restartでリブートします。

なお、起動デバイスのPCMCIAとはATA PCカードのことで、 これを選択するとATA PCカード(フラッシュ、HDD)から起動することができます。

LANカードの使用資源の確認

ThinkPad 535ユーザーズガイドによれば、 Ethernet PCカードはRPLの際に以下の資源を使用します。 ここではIRQとI/Oアドレスを確認してみます。

IRQ5
I/Oアドレス0300H〜031FH
メモリD0000H〜D1FFFH (ROM)
D4000H〜D7FFFH (RAM)

Easy-Setupの設定が済んだら、LANカードを挿し(どのスロットでも可)、 ハブに接続してからリブートします。 おなじみのIBMとThinkPadのロゴは表示されず、 代わりに以下のような画面がしばらく表示されます。

IBM PCMCIA Adapter for Ethernet POST/RPL v1.00
(C) IBM, NSC, 1993.  All rights reserved.
Adapter at IO address 0300h...

ここでもし、LANカードとハブが正しく接続されていないと、以下のようなエラーになります。 接続を確認してください。

 *** PR007 Cable connection error. ***
 *** PR100 No adapter available for RPL. ***
Press F1 to continue...

接続が正しければ、以下のようにLANカードの諸元を表示し、RPLサーバーを探しにいきます。

RPL Protocol ROM  v1.03 (930311)
IBM LAN CC Adapter for Ethernet  MLID v1.00 (930608)
(C) IBM, NSC, 1993.  All rights reserved.

RPL-ROM-ADR: 0004 AC24 C131
RPL-ROM-IRQ: 5
RPL-ROM-PIO: 0300

RPL-ROM-FFC: 1

現時点ではRPLサーバーが見つからないので、RPL-ROM-FFCのカウントアップが続きます。 IRQ(RPL-ROM-IRQ)とI/Oアドレス(RPL-ROM-PIO)が上記の表と一致していることを確認します。 また、MACアドレス(RPL-ROM-ADR)も必要になることがありますので、メモしておきましょう。

ユーザーズガイドには、IRQ5がMwaveのSound Blasterエミュレーションと衝突するので、 Sound Blasterを禁止するかIRQを変えるよう書いてありますが、 Mwaveのドライバを入れなければ衝突したままでも差し支えないようです。 もしIRQを変える場合は環境変数BLASTERも変更しましょう。

また、メモリについてはここでは確認できませんが、 後述する手順でDOSをRPLで起動してダンプしてみたところでは、 ROMはユーザーズガイドの記述と異なりD2000H〜D3FFFHとなっています。


5. サーバーの設定

続いてRPLサーバーの設定をします。

LANカードの設定

ISA PnPカードの場合は非PnPモードにし、I/OアドレスとIRQを手動で設定します。 ここではI/Oアドレス300H、IRQ10とします。 なお、PnP対応のODIドライバが付属していればPnPでもOKです。

OSのインストール

DR-DOSのフルセット版をインストールします(Lite版にはPersonal NetWareが含まれていません)。 日本語化する必要は特にありません。

DR-DOSのインストールの際はNetworkingオプションを選択します。 インストールが終わってリブートしたら、 SETUPコマンドを実行してネットワークの設定をします。 RPLではEthernetフレームタイプとしてIEEE 802.2を使うので、 NICの設定時にEthernet_802.2を選択します (同時に他のフレームタイプを選択してもかまいません)。

再度リブートしてネットワークモジュールをロードするとSETUP /FIRSTが自動実行され、 Personal NetWareの設定を行います。 ここでは以下のように設定することにします。

ユーザー名YUKI
マシン名YUKI_PC (ユーザー名から決定される)
ワークグループ名WORKGROUP
共有YUKI_DRVC (C:\)

なお、Personal NetWareはDR-DOS以外のDOS(PC DOS、MS-DOS)でも動きますが、 インストーラーの都合上Personal NetWareだけインストールすることができません。 DR-DOS以外のDOSで運用したい場合は、 とりあえずDR-DOSをダミーとしてD:などにインストールし、 Personal NetWareだけC:\NWCLIENTにインストールするとよいでしょう。 その際、1台目HDDのMBRにDR-DOSのブートセレクターがインストールされるので、 MBRに他のブートセレクター(lilo、booteasy、OS-BS、BeOSブートマネージャーなど)が入っている場合は注意が必要です(NT OSローダーは平気です)。 さらに、DR-DOSが正しくインストールされていないので、 再起動時にこのブートセレクターが文句をいいます。 速やかにFDISK /MBRするなり他のブートセレクターを入れるなりしましょう。

LOGINディレクトリの作成

ディレクトリ\LOGINを作り、RPL関連のファイルをコピーし、共有を出しておきます。 このディレクトリをLOGINディレクトリと呼びます (NetWareサーバーのSYS:LOGINに相当します)。 \LOGINというパスは、RPL.COMにハードコードされているので、 この通りでなくてはいけません。

C:\>MKDIR C:\LOGIN
C:\>COPY C:\NWCLIENT\RPL C:\LOGIN
C:\>NET SHARE C:\LOGIN LOGIN

なお、コピーしたファイルのうち今回実際に使うのは以下のものだけですので、 他のファイルはなくてもかまいません。

DOSGEN  .EXE
RPL     .COM
RPLFIX  .COM
NEARSERV.EXE
RBOOT   .RPL

また、\DRDOS\RPLDOC.TXTをコピーしておくと参照に便利でしょう。

起動フロッピーの作成

フロッピーを1枚用意し、クライアント機で起動したいOS(普通はDOSになるでしょう)を組み込んで起動フロッピーを作ります。 ここではとりあえず裸のDOSを組み込んで起動することにしましょう。

C:\>FORMAT A: /S

フロッピーができたら、正しく起動するかクライアント機で確認すべきですが、 ここでは省略し、早速イメージファイルをLOGINディレクトリに作成します。 DOSGENコマンドを実行すると、ドライブA:のフロッピーから NET$DOS.SYSというイメージファイルを作ります。 また、起動するDOSが5.0以降の場合は、RPLFIXを適用します。

C:\>CD \LOGIN
C:\LOGIN>DOSGEN
C:\LOGIN>RPLFIX NET$DOS.SYS

クライアントが複数あって、異なる起動フロッピーを必要とする場合は、 もっと複雑な手順が必要となりますが、ここでは省略します。 TIDRPLDOC.TXTを参照してください。

NET.CFGの編集

RPLのためにサーバーの\NWCLIENT\NET.CFGを編集します。

NET.CFGの例を示します。

Link Driver NE2000
	INT 10
	PORT 300
	FRAME Ethernet_802.2

Protocol RPL
	BIND NE2000 GNS

Netware DOS Requester
	PERFERRED WORKGROUP = WORKGROUP
	FIRST NETWORK DRIVE = F
	NETWARE PROTOCOL = PNW
	SHOW DOTS = ON
	USE DEFAULTS = ON
	VLM = AUTO.VLM
	VLM = NMR.VLM
	IPX SOCKETS = 25

6. 起動

設定が済んだらいよいよ起動です。 まずサーバーを起動し、次にクライアントを起動します。

RPLサーバーの起動

サーバー機でDR-DOSを起動し、Personal NetWareサーバーを起動(C:\NWCLIENT\STARTNET.BAT)した後、 LOGINディレクトリに移動し、以下のコマンドを実行します。

C:\LOGIN>RPL
NetWare RPL Server  v1.15 (930429)
(C) Copyright 1992 Novell Inc.  All Rights Reserved.

RPL-DOS-006: The RPL protocol is bound to "NE2000"; MLID #1.

C:\LOGIN>NEARSERV
Personal NetWare Nearest Server TSR - Version 1.0
Copyright (c) 1991-1993  Novell, Inc.  All Rights Reserved.

NEARERV.EXE was loaded successfully.

NET.CFGGNSを指定しなかった場合は、 以下のようにRPL.COMのコマンドラインで指定してください。

C:\LOGIN>RPL GNS

なお、RPL.COMNEARSERV.EXEは、/Uスイッチをつけることで常駐解除できますので、 クライアントがうまく起動しない場合にはいったん常駐解除して設定変更してみましょう。

クライアントの起動

クライアントにLANカードを挿し、ハブに接続し、電源オンまたはリブートします。 クライアントの設定の際に見た下記の画面に続いて、

IBM PCMCIA Adapter for Ethernet POST/RPL v1.00
(C) IBM, NSC, 1993.  All rights reserved.
Adapter at IO address 0300h...  OK

RBOOT.RPLがロードされ、以下のような画面になるはずです。

Novell NetWare RPL Generic BootStrap Program  v4.06 (930728)
(C) Copyright Novell, Inc., 1993

この後、起動フロッピーに組み込んだOSが起動すれば成功です。 起動しなかった場合は、トラブルシューティングの項を参考にしてください。

なお、クライアント機からはNET$DOS.SYSの内容がドライブA:として見えますが、 ライトプロテクト扱いになっているので、内容を変更することはできません。 サーバー側でもNET$DOS.SYSを変更することはできません(共有違反になります)。 また、クライアント機のローカルのFDDは使えなくなります。

クライアント機でNetWareクライアントを起動すると、 NET$DOS.SYSが切り離されます。 すなわち、クライアントのローカルFDDがA:となり、 サーバー側では起動フロッピーイメージファイルの変更が可能となります。

なお、純正LANカードですので、挿さっている間はサスペンドが効きません(スタンバイになります)。


7. トラブルシューティング

サーバーとクライアントの起動時に起きやすいトラブルとその原因です。

サーバー起動時のトラブル

クライアント起動時のトラブル


8. NetWareクライアントの起動

裸のDOSを起動しただけでは実用性があまりありませんので、 ここではDOSからNetWareクライアントを起動して、 サーバーの資源を使えるようにしてみましょう。 そのためには、クライアントのLANカードのドライバや、 ネットワーククライアントモジュールを起動フロッピーに組み込みます。

起動フロッピーの作成

NetWareクライアントを使うには、 起動フロッピーに以下のファイルが必要です。

LSL     .COM
PCMDMCS .COM (クライアントのLANカードのODIドライバ)
IPXODI  .COM
VLM     .EXE
BIND    .VLM
CONN    .VLM
FIO     .VLM
GENERAL .VLM
IPXNCP  .VLM
NDS     .VLM
NETX    .VLM
NWP     .VLM
PNW     .VLM
PRINT   .VLM
REDIR   .VLM
TRAN    .VLM
SECURITY.VLM
NET     .CFG

以上のファイルを起動フロッピーの\NWCLIENTにコピーします。

NET.CFGの設定の際に、クライアントの設定の項で確認したLANカードの資源(I/OアドレスとIRQ)が必要となります。 なお、LANカードはすでにコンフィギュレーションされた状態ですので、 PCMCIAオプション(ODIドライバPCMDMCS.COMにイネーブラーの働きをさせる)は必要ありません。 また、後述する理由によりFIRST NETWORK DRIVEはAにしておきます。

Link Driver PCMDMCS
	INT 5
	PORT 300
	FRAME Ethernet_802.2
;	PCMCIA

Netware DOS Requester
	PERFERRED WORKGROUP = WORKGROUP
	FIRST NETWORK DRIVE = A
	NETWARE PROTOCOL = PNW
	SHOW DOTS = ON
	USE DEFAULTS = ON
	IPX SOCKETS = 25

CONFIG.SYSLASTDRIVE=Zを記述します。 EMM386でUMBを使う場合は、LANカードのRAMのあるD4000H〜D7FFFHは避けましょう。

AUTOEXEC.BATで以下のようにNetWareクライアントをロードします。

@ECHO OFF
 :
 :
SET NWLANGUAGE=ENGLISH
PATH;
CD \NWCLIENT
LH LSL
LH PCMDMCS
LH IPXODI
VLM
NET LOGIN YUKI
NET MAP F: LOGIN
SET COMSPEC=F:\COMMAND.COM
F:
AUTOEXE2

以上で起動フロッピーができたので、 LOGINディレクトリにNET$DOS.SYSを作ります。 また、起動フロッピーのAUTOEXEC.BATをLOGINディレクトリにコピーします。

LOGINディレクトリの準備

COMMAND.COMと、\NWCLIENTディレクトリの下記のファイルをLOGINディレクトリにコピーします。

NET     .EXE
NETU    .OVL
NETU2   .OVL
NETA    .OVL
NETU    .HLP
NETA    .HLP
IBM_RUN .OVL

また、\NWCLIENT\NLS\ENGLISH\NETC.MSGをLOGINディレクトリにコピーします。

LOGINディレクトリに、以下の内容のバッチファイルをAUTOEXE2.BATとして作ります。

@ECHO OFF
NET MAP DEL A:

起動

以上の用意ができたら、RPLを実行します。

クライアントでDOSが起動し、AUTOEXEC.BATでVLMがロードされた時点で、 自動的にドライブA:がNET$DOS.SYSからローカルのFDDに切り替わり、 それと同時に、NET.CFGで指定した最初のネットワークドライブにLOGINディレクトリがマップされ、 カレントドライブになります(ただしログインはされません)。

ここで、最初のネットワークドライブとしてAを指定しているので、 ドライブA:がLOGINディレクトリにマップされ、 そこにはAUTOEXEC.BATがコピーしてあるので実行を継続することができます。 もし最初のネットワークドライブとしてA以外を指定していると、 A:\AUTOEXEC.BATの実行中にドライブA:がFDDに切り替わることになるので、 DOSがAUTOEXEC.BATを見失ってエラーになってしまいます。 AUTOEXEC.BATでなく他のバッチファイルでVLMをロードする場合は、 そのバッチファイルをLOGINディレクトリにコピーしなくてはなりません。 また、VLMロード後に実行するプログラムファイルなども、コピーしておく必要があります。

さらに、そのままではローカルのFDDが使えませんので、 LOGINディレクトリをドライブF:にマップし直し、 そちらに移動してからドライブA:のマップを解除しています。 この状態ではLOGINディレクトリしか接続していませんので、 実際にはこの後さらにNET MAP C: YUKI_DRVCなどとしてサーバーの資源を利用します。 また、環境変数などでドライブA:が含まれているものは、再設定したほうがいいでしょう。 ここではPATHCOMSPECを再設定しています。

なお、VLMロード時にバッチファイルの実行を継続する方法としては、 上記のようにLOGINディレクトリをドライブA:にマップする方法の他に、 RAMディスクを確保してそちらにコピーしたバッチファイルからVLMを起動する方法も考えられます。


9. FreeBSDの起動

LinuxやFreeBSDなどUNIXのネットワークブートには、BOOTP/TFTP/NFSを使います。 RPLに使われるプロトコルはこれらとは異なるため、RPLでUNIXを直接起動することはできません。 しかし、ネットワークブートのローダーが(ROMイメージだけでなく)DOSの実行ファイルとしても提供されていれば、 RPLで起動したDOSからUNIXを起動できます。

ここでは、この方法を用いてFreeBSDをネットワークブートしてみます (FreeBSDを選んだのは、筆者が使い慣れていることと、ネットワークブートでNE2000がサポートされていることによります)。 RPLサーバーの他にBOOTP/TFTP/NFSサーバーとしてFreeBSDが必要になります (FreeBSD以外でも構いませんが、 クライアント用のカーネルを構築するのでいずれにせよFreeBSD環境が必要です)。 FreeBSDのネットワークブートの詳細については、 netboot(8)や稿末のリンク集を参考にしてください。

補足: FreeBSD 3.1ではカーネルにBOOTPサポートが入ったので、 rawbootkzipカーネルを書き込んだフロッピーイメージを作れば、 DOSを経由せずにカーネルをRPLで直接読んで起動することができると思われます (読むだけなら従来のまたはBOOTPなしのカーネルでも可能ですが、 BOOTPがないとIPアドレスが得られないためルートファイルシステムをNFSマウントできません)。 この方法には、デバイスドライバが用意されているNICならどれでも使えるという大きな利点があります。 ただし、ノートPCの場合、RPLを使うという時点で使用可能なLAN PCカードが極めて限定されているので、あまりメリットはありません。 フロッピー起動であれば、少なくとも任意のNE2000互換カード(zeドライバ)とEtherLink III(zpドライバ)は使えます。

ブートローダーのコンパイル

ブートローダーのソースは/sys/i386/boot/netbootにあります。 このディレクトリでmakeすると、以下のようなバイナリができます。


NE1000/2000など3com EtherLinkIII
ブートROMイメージnb8390.romnb3c509.rom
DOS実行形式nb8390.comnb3c509.com

本稿で使っているIBM Ethernet Credit Card Adapter IIはNE2000互換ですので、 nb8390.comを使います。 ただし、ISA NE2000とのハードウェア的な違いにより、 そのままでは実行時に正しいMACアドレスを取得できません(00:02:04:06:08:0Aというでたらめなアドレスになります)。 また、NET$DOS.SYSの切り離しも必要です。 そこで、パッチ(2.2.5-R用)をあててmakeします (パッチをあててコンパイルしたバイナリは、 普通のISA NE2000には使えません)。

起動フロッピーの作成

DOSの起動フロッピーを作り、NB8390.COMをコピーします。 DOSはローダーとして使うだけですので、ドライバやTSRは少なくします。 特に、メモリマネージャー(HIMEM.SYSEMM386.EXEなど)を組み込んではいけません。 ブートローダーがリアルモードとプロテクトモードの切り替えをしているので、 仮想86モードでは例外を発生してシャットダウンしてしまいます。

起動フロッピーができたらNET$DOS.SYSを作ります。

クライアント用カーネルの構築

通常のブートと違ってUserConfigが使えないので、 クライアント機に合わせてカーネルを構築します。

ed?のいずれかがport 0x300 irq 5になっていないとLANカードが使えませんので、確認しておきます。

edドライバの初期化時にも正しいMACアドレスが取得できない問題が起きますので、 /sys/i386/isa/if_ed.cパッチ(2.2.5-R用)をあて、 カーネル構成ファイルにoptions IBM_PCMCIAを追加します。

補足: zeドライバを使ったほうがよいかもしれません。

PCカードコントローラー(pcic?)が有効になっていると、 起動途中でハングアップしてしまう (コントローラーが初期化されてLANカードのコンフィギュレーションが解除されるためか?) ので、これは外しておきます。 この結果、起動に使うLANカード以外はPCカードが使えなくなります(たとえ起動時に挿していても)。

apm0を有効にしてもかまいませんが、 apmconf -eを実行するとなぜかカーネルが落ちてしまいます。 PAOを導入すると改善されるかもしれませんが、 そもそもディスクレス運用なので移動できない(したがって電源管理してもあまり意味がない)のと、 前述の理由によりどのみちPCカードは使えないことが予想されるので、ここではPAOは省略します。

トラックポイントを使う場合はpsm0を有効にします。

その他不要なドライバはなるべく削除あるいは無効化しておいたほうがいいでしょう。

FreeBSDサーバーの準備

FreeBSDサーバーでBOOTP/TFTP/NFSの設定をし、 カーネルイメージ・スワップファイル・ファイルシステムを用意します。 なお、FreeBSDのネットワークブートでは、TFTPは定義ファイルの取得に使っているだけです。 しかも、最近(2.2.5-R以降?)のブートローダーは、 BOOTPである程度の情報が得られればTFTPを省略します。 そこでここでは、BOOTPで十分な情報を与えるよう設定し、 TFTPを使わない場合の手順を簡単に紹介します。 詳しい手順は稿末のリンク集を参考にしてください。

カーネルイメージとファイルシステムは/usr/export/nbclient/に、 スワップファイルは/var/swap/に作ることにします。

  1. クライアントのIPアドレスとホスト名を登録します。 ここでは以下のようにします。
    クライアント 192.168.0.5 (nbclient)
    サーバー 192.168.0.3 (nbserver)
    ゲートウェイ 192.168.0.1
  2. /etc/rc.confでNFSサーバーを有効にします。 また、/etc/exportsに以下のように記述します。
    /usr		-network 192.168.0.0 -mask 255.255.255.0 -maproot=0 -alldirs
    /var/swap	-network 192.168.0.0 -mask 255.255.255.0 -maproot=0
    
    すでにNFSサーバーが動いている場合は変更を有効にします。
    # kill -HUP `cat /var/run/mountd.pid`
    
  3. /etc/servicesにbootpsとbootpcがあるのを確認します。
  4. /etc/inetd.confでbootpsのコメントを外し、変更を有効にします。
    # kill -HUP `cat /var/run/inetd.pid`
    
  5. /etc/bootptabを作成します。

    詳しくはnetboot(8)bootptab(5)を参照してください。 下記の例では、TFTPを使わなくて済むよう、十分な情報を与えてあります。 情報が不足の場合は、ブートローダーが自動的にTFTPで定義ファイルを取得しにいきますので、 TFTPサーバーも設定する必要があります。

    .default:\
    	:ht=ethernet:hn:vm=rfc1048:\
    	:sm=255.255.255.0:\
    	:gw=192.168.0.1:\
    	:T128=";192.168.0.3:/var/swap":
    nbclient.mydomain.or.jp:\
    	:ha=0004AC24C131:\
    	:rp="192.168.0.3:/usr/export/nbclient":\
    	:tc=.default:
    

    クライアントのMACアドレスを書く欄(ha=)があるので、 RPL-ROM-ADRの値をメモしておきましょう。

    クライアントホスト名(nbclient.mydomain.or.jp)はFQDNで書く必要はありませんが、 ここに記述したホスト名がそのままクライアントのカーネルに渡されて ホスト名として設定される(hostname(1)の出力になる)ようなので、 ここでは筆者の趣味でFQDNにしてあります。

  6. カーネルイメージを用意します。
    # mkdir -p /usr/export/nbclient
    # cp /sys/compile/TP535/kernel /usr/export/nbclient/kernel
    
    スワップファイルを用意します。ここでは32MBとします。
    # mkdir /var/swap
    # cd /var/swap
    # dd if=/dev/zero of=swap.192.168.0.5 bs=1k count=32k
    # chmod 600 swap.*
    
    ルートファイルシステムを用意します。 binlkmsbinstandについては、 可能であればコピーの代わりにハードリンクしたほうが節約になります (といっても11MB程度です)。
    # cd /usr/export/nbclient
    # tar cf - -C / bin lkm sbin stand | tar xpf -
    # tar cf - -C / dev etc root | tar xpf -
    # mkdir proc tmp usr var mnt cdrom dos
    # chmod 1777 tmp
    # ln -s /usr/home home
    # ln -s /usr/src/sys sys
    
    varファイルシステムを用意します。 下記の手順が面倒であれば、 /etcなどと同様にtarを使って/varからコピーしても一応動きますが、 サーバーのログ等を引き継いでしまうのであまりよくありません。
    # cd var
    # mkdir `cd /var; find . -type d -print | grep -v db/pkg/`
    # chmod 750 backups crash cron
    # chmod -R 1777 tmp
    # cd cron
    # touch log
    # chmod 600 log
    # chmod 700 tabs
    # cd ../log
    # touch messages wtmp lpd-errs slip.log ppp.log maillog lastlog
    # chmod 600 *.log
    
  7. クライアント用の各種設定をします。 なお下記の各ファイルは/usr/export/nbclientからの相対パスです。

DHCPはBOOTPの拡張なので、DHCPサーバーがある場合は、 BOOTPサーバーの代わりにそちらとお話ししてしまうことがあるので注意してください。

TFTPを使う場合、定義ファイル名は/tftpboot/cfg.*より /tftpboot/freebsd.*とした方が早く検索されます。 下記に定義ファイルの例を示します。

rootfs 192.168.0.3:/usr/export/nbclient
swapfs 192.168.0.3:/var/swap
swapsize 32768
hostname nbclient.mydomain.or.jp
kernel /kernel

起動

RPLサーバーとFreeBSDサーバーの準備ができたら、RPLを実行します。 DOSが起動したら、NB8390.COMを実行します。 うまくいけば、FreeBSDサーバーを見つけ、カーネルイメージを読み込んで起動を開始します。

A:\>NB8390

Boot from Network (Y/N) ? Y
BOOTP/TFTP/NFS bootstrap loader    ESC for menu

Searching for adapter...Looking for NE1000/NE2000 at 0x0300

NE1000/NE2000 (16 bit) base 0x0300, addr 00:04:AC:24:C1:31

Searching for server...
My IP 192.168.0.5, Server IP 192.168.0.3, GW IP 192.168.0.1
rootfs 192.168.0.3:/usr/export/nbclient
swapfs 192.168.0.3:/var/swap
swap size is: 1024 blocks
Loading /kernel...
	:
	:
ed1 at 0x300-0x31f irq 5 on isa
ed1: address 00:04:ac:24:c1:31, type NE2000 (16 bit) 
	:
	:
NFS SWAP: 192.168.0.3:/var/swap
NFS ROOT: 192.168.0.3:/usr/export/nbclient
	:
	:

この段階でうまくいかなかった場合は、 次のような点を確認してください。

BOOTPサーバーから情報が得られずに止まってしまった場合は、 ブートローダーのコマンド待ちになります。 このとき、TFTPが使えれば、以下のようにして継続することができます。

Searching for server...
No Server found.

boot> ip 192.168.0.5
boot> server 192.168.0.3
boot> autoboot
My IP 192.168.0.5, Server IP 192.168.0.3, GW IP 0.0.0.0
Loading /tftpboot/freebsd.192.168.0.5...
rootfs 192.168.0.3:/usr/export/nbclient
swapfs 192.168.0.3:/var/swap
swapsize 32768
hostname nbclient.mydomain.or.jp
kernel /kernel
Bootfile is: /kernel
Loading /kernel...
	:
	:

10. イネーブラーとしての利用

ここでは、やや変則的な応用として、RPLを利用することにより、 PCカードをサポートしていないOSでLANカードを使えるようにする方法を紹介します。 具体的には、RPL経由でクライアント機のHDD内のOSを起動し、 本稿で使っているEthernetカードをBeOSで使えるようにします。

背景

PCカードは、CPUとカードの間にPCカードコントローラーが介在し、 またI/Oカードではコンフィギュレーション(イネーブル)という操作をしないと機能しないため、 ISAのカードと違って、挿せば即デバイスとしてアクセスできるという訳にはいきません。 DOS・Windows(3.1/95/98)・Linux・FreeBSDなどのOSでは、 PCカードの利用環境が整備されているので手軽に使えますが、 そのようなサポートのないOSでは、 PCカードの利用は不可能または極めて限定されたものになってしまいます。

しかし、本稿をここまで読んでこられた方はお気づきの通り、RPLを利用すると、 起動した時点で既にLANカードはコンフィギュレーションされて動作していますので、 PCカードコントローラーの操作やカードのコンフィギュレーションといった面倒なことを考えず、 あたかもISAのLANカードのように扱うことができます。 つまり、RPLを使ってOSを起動すれば、 PCカードをサポートしていないOSでも、 LANカードが利用できる可能性があります。 いうなれば、RPLをポイントイネーブラー代わりに使うことになります (かなり大仰ではありますが)。

ここでは対象OSとしてBeOSをとりあげます。 「メディアOS」との謳い文句で話題のBeOSですが、 Intel版は日が浅いこともあってハードウェアのサポートはまだまだ弱く、 R4でもPCカードはまったくサポートされていません。 そこで、ここではRPLを利用して手っとり早くEthernetカードを使ってみることにします。 なお、手法自体はBeOSに依存するものではなく、他のOSにも適用可能です。

補足: BeOSに関しては、その後R4用のイネーブラーを開発しました。 また、R4.5では標準でNE2000互換Ethernetカードがサポートされました。 これにより、制約の多いRPLに頼る必要はなくなりました。

BeOSはネットワークブートに対応していないため、 クライアント機のHDDにBeOSをインストールし、 RPLの起動フロッピーからHDD中のBeOSを起動するという手順をとります。

BeOSのインストールと設定

まずはBeOSをインストールします。 BeOS on Notebook PCを参考にしてください。 インストールが済んだら、単独で正常に起動・動作することを確認しておきます。 続いて、ネットワークの設定をします。 具体的には、LANカードの登録が中心になります。

R4の場合、まずPreferences | DevicesでJumpered Devicesに登録します。 デバイス名とデバイスタイプは適当でかまいません。 重要なのはI/OアドレスとIRQです。 RAMアドレスも一応指定しておきますが、 実際にはNE2000互換ドライバではRAMは使っていないようです。

Device Name Ethernet PC Card
Device Type Network Controller | Ethernet Controller
IRQs 5
DMAs なし
IO Port Ranges 0x0300 - 0x031f
(Start: 0x0300, Length: 0x0020)
Memory Ranges 0xd4000 - 0xd8000
(Start: 0xd4000, Length: 0x4001)

なお、PCI Devicesの中にPCMCIA bridgeというデバイスが見えますが、 これについては特に気にする必要はありません。 これは、単に「そういうPCIデバイスがある」というレベルで認識されているに過ぎず、 実際にそれ用のドライバがあって稼働しているわけではないからです。

次にPreferences | NetworkでNetwork Interfacesに登録します。 ここの設定はすべて重要です。

Network Interface Novell NE2000 compatible adapter (ISA)
Config | Port 300
Config | IRQ 5

IPアドレスはDHCPでも固定アドレスでもかまいません。 ドメイン名・ホスト名・DNSアドレス・サービスなどの設定も適宜行います。

起動フロッピーの作成

クライアント機の準備ができたら、サーバーの設定をします。 起動フロッピーの内容をどうするかが問題ですが、以下のような案が考えられます。

ここでは後者の方法をとります。 HDDのMBRを読んでジャンプするコードを書き、 それを起動フロッピーイメージNET$DOS.SYSとして置きます。 したがって、実際にフロッピーを作成してDOSGENでイメージファイル化する必要はありません。 また、DOSを起動するわけではないので、RPLFIXも不要です。

起動

準備ができたらRPLを実行します。 クライアント機単独でHDDから起動したときと同じように起動するはずです。 BeOSが起動したら、ネットワークが使えることをpingで確認します。 DHCPの場合は、Preferences | NetworkのNetwork InterfacesでModifyを押し、 IPアドレス・サブネットマスク・ゲートウェイアドレスが取得できていることを確認します。 OKならWWW・TELNET・FTPなどを使ってみましょう。 なおDHCPの更新はRestart Networkingで行います。

以下の点に注意してください。


11. おわりに

本稿では以下のようなトピックを解説しました。

Windows 95を起動することも可能と思われますが、 RPLサーバーにWin95をセットアップ(server-based setup)するためのNETSETUPコマンド(Win3.1のSETUP /Aに相当)は、 アップグレード版のWin95 CD-ROMかMSDNにしか入っていません(OEM版Win95や差分ファイルにはありません)ので注意が必要です。 また、RPLサーバーとしてはNetWareしかサポートされていません。

Windows 98では、NT同様、RPLによるブートはサポートされなくなった模様です。 NCに対抗してNetPCを標榜したMSとしては、RPLなどというNC的な機能はもはやサポートしたくないということでしょうか。


参考文献・リンク集

全般

Personal NetWare

FreeBSD

Windows 95

Windows NT

Linux

BeOS


Copyright (C) 1998-1999 ITO Takayuki, All rights reserved.

伊藤隆幸のホームページ