Works on
OS | SunOS 4.x | Solaris 2.x/7 | NEWS-OS 4.x | NetBSD OpenBSD FreeBSD | HP-UX 10 | HP-UX 9 | Linux |
---|---|---|---|---|---|---|---|
raw network device | NIT | DLPI | old-BPF | BPF | DLPI | LLA | SOCK_PACKET |
この sun-rbootd は、Michael Wolfson 氏の、
Setting up the rbootd server, Diskless NetBSD/hp300 HOW-TO
に詳しい説明があります。
以下、README.jp から引用します。
sun-rbootd-1.3.2 NetBSD/hp300, OpenBSD/hp300 のための SunOS4/Solaris2/NEWS-OS4/HP-UX/Linux/NetBSD/OpenBSD/FreeBSD 上で動作する sun-rbootd (NIT, DLPI, LLA, BPF, または SOCK_PACKET を使用) Mar 13 1999 yamamori Mar 13 1999 Release ver 1.3.2 FreeBSD でも動作するようにしました。 NetBSD での select() を修正しました。 Solaris 2.x 用に Makefile を修正しました。 Dec 12 1998 Release ver 1.3.1 HP-UX 9 LLA 上でも動作するようにしました。 NetBSD/OpenBSD での Ethernet address を正しくしました。 debug mode で、my_addr を表示するようにしました。 Sep 29 1998 Release ver 1.3 HP-UX 10 DLPI 上でも動作するようにしました。 Sep 26 1998 Release ver 1.2.2 ブート前に hp300 のコンソールで何かキー入力すると、ブートファイルが 無限に表示され続けるというバグが直りました。 ether_ntohost() が無く、コンパイルができなかった slackware Linux 等でも 動作するようにしました。 gcc だけでなく、K&R の cc でもコンパイルできるようにしました。 Aug 21 1998 Release ver 1.2.1 Linux/x86 のために byte order 修正。(x86 での動作確認はしていません) Linux で、recvfrom() ではなく read() を使うようにした。 Aug 21 1998 Release ver 1.2 NEWS-OS 4.x, Linux/sparc でも動作するようにしました。 さらに、NetBSD/OpenBSD でも動作します。 Aug 15 1998 Release ver 1.1.2 デバッグ出力オプション追加。Ether インターフェイスをオプションで指定、 または自動選択可能。("sun-rbootd -a" が、以前のバージョンの "sun-rbootd" に 相当します) その他プログラムの改良等。 Jul 20 1998 Release ver 1.1.1 Solaris2 version で、MAC address をマルチキャストで動作するようにしました。 (SunOS4 version では既にそうなっています) Solaris2/x86 のため、byte order を修正しました。 (ただし、x86 での動作確認はしていません) Jul 18 1998 Release ver 1.1 Solaris 2.x(sparc) DLPI 上でも動作するようにしました。 Jun 5 1998 Initial version SunOS 4.x NIT 上で動作するようにしました。 sun-rbootd は、もともと BPF の無い、SunOS 4.x 等のプラットフォームを サーバーにして、何とか hp300 をブートさせようとして作ったサーバープログラム です。しかし、その後、本家の NetBSD/OpenBSD の BPF 上でも、NEWS-OS 4.x の BPF でも、そして Linux でも動作するようにしました。 Note: * NEWS-OS 4.x の BPF は、古いバージョンの BPF が実装されていて、 他の一般的な BPF とは異なっています。例えば、フィルタープログラムでは、 BPF_LD|BPF_H|BPF_ABS や、BPF_JMP|BPF_JEQ|BPF_K というのは無く、 代わりに LdHOp とか EQOp とかいう命令があったりします。 また、条件分岐命令のオフセットの計算方法が違っています。 * Linux では、カーネルやデバイスドライバーレベルのパケットフィルターは 無いと思われます。そのため、アプリケーションレベルでフィルターを 行なっています。 内容: Makefile : 修正無しで全プラットフォームで使えます README : 英語版 README README.jp : このファイル sun-rbootd.c : RMP プロトコルによるブートプログラム本体 config.h : #ifdef 等があります nitlib.h : nitlib.c のヘッダー nitlib.c : NIT(SunOS), DLPI(Solaris,HP-UX 10), LLA(HP-UX 9) BPF(NEWS-OS,NetBSD,OpenBSD,FreeBSD), SOCK_PACKET(Linux) に対応した関数ライブラリ rmp.h : NetBSD/OpenBSD のオリジナル rbootd のソースのヘッダ rmp_var.h : (同上) このプログラムは、NetBSD/hp300 や OpenBSD/hp300 を diskless で boot させるために必要となる rbootd を、SunOS 4.x の NIT 上、Solaris 2.x の DLPI 上、NetBSD/OpenBSD/NEWS-OS 4.x の BPF 上、そして Linux の SOCK_PACKET 上で動作させるようにしたものです。 HP300 は、RMP というデータリンク層のプロトコルを使ってブートするため、 サーバープログラムとして rbootd が必要です。オリジナルの rbootd は、 BPF を使って書かれています。このため、BPF が(標準では)無い SunOS 4.x 等では、 rbootd は動きません。そこで、各種プラットフォーム上で動くように、 新たに sun-rbootd というサーバープログラムを作成しました。 さらに、sun-rbootd では、以下のような改良も行ないました。 * rarpd ライクに /etc/ethers を用いる。 オリジナル rbootd では /etc/rbootd.conf に MAC アドレスと ブートファイル名を書きますが、これが冗長に思われるので、 rarpd ライクに /etc/ethers (or NIS ethers) を ether_ntohost() を 使って読むようにしました。(rbootd.conf は使わなくなりました) * rarp/tftp ライクにブートファイルは /tftpboot/C0A8XXXX にする。 SunOS の rarp/tftp ライクに、ブートファイルの置き場所等を 変更しました。オリジナル rbootd では /usr/mdec/rbootd/SYS_UBOOT ですが、sun-rbootd では、rarp/tftp のように client IP が 192.168.xx.xx なら、/tftpboot/C0A8XXXX を読みます。 SYS_UBOOT を /tftpboot/SYS_UBOOT に置いて、C0A8XXXX と sym-link すると良いでしょう。 make 方法: * 単に make とやればいいです。ただし、HP-UX 9 では make hpux9 として下さい。環境変数 CC や CFLAGS が、CC=gcc CFLAGS=-O2 のように 設定されていれば、それらが使われます。 使用方法: * ブートサーバーの /etc/ethers に、 client の MAC アドレスとホスト名を記述する。 (SunOS/Solaris/NEWS-OS で NIS を使用している場合は、NIS サーバーの /etc/ethers に必要項目を記述した後、NIS make が必要) * /tftpboot 以下に、ブートする OS に付属の SYS_UBOOT を置き、 client の IP アドレスの16進名と sym-link する。 (192.168.xx.xx なら、C0A8XXXX) * (その他、/etc/hosts に client ホスト名等が登録されているとか、 diskless boot に一般的に必要な設定はできているものとします) * root で、sun-rbootd -a として起動する。 * HP300 の電源を入れる。 --- これで、SYS_UBOOT が読み込まれ、その後 rarp/bootparam/NFS で カーネルが読み込まれて diskless client が立ち上がるはずです。 注意: "-d" オプションを付けると sun-rbootd は debug mode になりますが、 debug mode では sun-rbootd は boot file を /tftpboot ではなく、 カレントディレクトリから読みます。 Thanks to: Michael Wolfson(コーネル大学) sun-rbootd の HP-UX 10 および 9 への移植のため、HP-UX のアカウントを お貸しいただきました。その他、さまざまな助力をいただきました。 動作確認環境: Boot server: SunOS 4.x Solaris 2.x/7 (SPARC, i386) NEWS-OS 4.x (RISC-NEWS, CISC-NEWS) NetBSD 1.3.2 (SPARC, hp300, i386) OpenBSD 2.3 (SPARC, hp300, i386) FreeBSD 2.2.8 (i386) Linux kernel-2.0.x (SPARC, i386) HP-UX 9 HP-UX 10 Diskless client: NetBSD/hp300 (HP9000/318, HP9000/345) OpenBSD/hp300 (HP9000/318, HP9000/345) --- yamamori http://www.tt.rim.or.jp/~yamamori/sun/ "謎の処理系 SunOS 4.1.4" |
SunOS 4.x の NIT 上で rbootd 互換のサーバープロセスを作り、SunOS4 をブートサーバーにして OpenBSD-2.2/hp300 がブート可能に!
hp300 では、HP の RMP という、データリンク層のプロトコルを使ってブートします。このため、 NetBSD/hp300 or OpenBSD/hp300 をディスクレスでブートさせるには、 rbootd という、RMP に対応したサーバーが必要です。rbootd は、 NetBSD/sparc or OpenBSD/sparc 上で動いているので、今まではこれを使って hp300 をブートさせていました。しかし、SunOS4 をサーバーにして、ここから直接 hp300 をブートさせたいとずっと考えていました。
rbootd には BPF が必要です。SunOS4 では標準では BPF ではなく NIT です。SunOS4 用の bpf パッケージも配布されていますが、これをインストールするには kernel オブジェクトの if_le.o を置き換えなければならず、この部分はバイナリーでしか入手できない (SunOS4 のソースライセンスは無い)ので、bpf のインストールには抵抗がありました。
tcpdump 等で使用される libpcap は、SunOS4 の場合、bpf の関数インターフェイスを NIT に変換して動作するようで、これを利用することも考えましたが、どうやら libpcap は、Ethernet を読むことはできても書き込みができないようでした。
その後、etherlib.tar.gz という名前で配布されているライブラリを見つけました。これには、 ether_open(), ether_read(), ether_write() などの関数が含まれ、NIT を簡単に利用できそうです。
このライブラリーを利用し、オリジナル rbootd のソースを読み、SunOS4 上で rbootd 同様に動作するサーバーを書きました。
この際、以下のような変更も行ないました。
これで、SunOS4 上で自作 rbootd 互換サーバーを動かし、hp300 の電源を入れると、/tftpboot/SYS_UBOOT が読み込まれて OpenBSD-2.2/hp300 が無事立ち上がりました。
初めて NetBSD/hp300 をブートした時に書いた NetNews
From: yamamori (YAMAMORI Takenori) Newsgroups: fj.os.bsd.netbsd,fj.sys.hp Subject: NetBSD-1.2 on HP9000/300 install note Date: 18 Jan 1997 14:02:15 GMT Lines: 71 Message-ID: <5bql57$68i@news.kt.rim.or.jp> このグループは初めての、山森と申します。 このたび、ジャンク品として、HP9000/300 という古いマシンを入手し、 これに NetBSD-1.2 をインストールすることができましたので、 そのことについて報告します。 HP9000/300 は、ディスクレスでブートします。 SunSPARCstation2 があるので、これをサーバーにします。 HP9000/300 のブート方式については、 最初は、通常の rarp/bootparam を使ったやつかと思っていたのですが、 とりあえず HP9000/300 をネットワークにつないで電源を入れて、 SS2 側で etherfind で見てみると、rarp ではない変なプロトコルが 流れて来ます。 NetBSD-1.2 の hp300 の INSTALL というファイルを見ると、 ブートにはサーバー側で rbootd というものが必要とあり、 これのソースも付いています。つまり、通常の rarp/tftp に相当するものを HP9000/300 では rbootd というものがやるのです。 (ただし、bootparam については Sun 等と同じみたいです) そこでまず、SS2(SunOS4.x) 上で rbootd を make してみましたが、 これには bpf というものが必要で、とりあえず make は無理でした。 そこで、一旦 SS2 にも NetBSD をインストールし、これをサーバーにして HP9000/300 をブートすることにしました。 SS2 への NetBSD のインストールは、miniroot を使ったインストールではなく、 もう1台の SS2 をサーバーにして(実は SS2 を2台持っている)これから ディスクレスでブートさせるようにしました。 これ自体は通常の rarp/bootparam を使ったものなので、実に簡単でした。 (すでに周知のことと思いますので省略します) #たとえ立ち上げに失敗しても、サーバー側からすべて操作できるので #ディスクレスブートは大変便利です。 これで、NetBSD/sparc が立ち上がったので、このマシン上で rbootd を 起動すればいいわけです。そのために、/etc/rbootd.conf に、HP9000/300 の イーサネットアドレスとブートファイル名(SYS_NBOOT)を設定し、 /usr/mdec/rbootd というディレクトリ(/tftpboot に相当するもの)を作って その下に SYS_NBOOT を置きます。 そして通常通り、必要なファイルを展開し、MAKEDEV し、 カーネル(netbsd)、swap ファイルも配置し、サーバーの bootparams を 登録し、、、と作業を進めます。 これで HP9000/300 の電源を入れます。すると、何もしなくても 自動的に、SYS_NBOOT がまず読み込まれ、root が NFS マウントされ、 そこから netbsd(カーネル)が読み込まれて、無事立ち上がります。 あとは、/etc/rc, /etc/netstart 等を修正して、また、NIS client にして と、楽しみながら環境設定・チューニングしていきます。 心配だったのは、NetBSD-1.2 の hp300 の INSTALL ファイルに、 対応しているハードウエアとして、HP9000/318, 319, 320, 330, 350 等の 記述はあるものの、300 は書かれていないこと、 さらに、300 シリーズの初期のものでは、ROM モニターの Rev.C 以降にしか 対応していないみたいな記述があった(私のものは REV.B だった)ことです。 しかし、ダメモトでやってみると幸い無事に動作することができました。 現在、NetBSD/SS2 上の rbootd 経由でしかブートできませんが、 今後、SunOS4(または Solaris2上)で、何とか rbootd を make して、 ここから直接ブートできればいいなと考えています。 ------------------------------- 山森丈範 yamamori ------------------------------- |
現在、rbootd 経由で読み込むブートファイルは、以前の SYS_NBOOT から、SYS_UBOOT と変わりました。
現在、sun-rbootd は、SunOS 4.x, Solaris 2.x, NEWS-OS 4.x, HP-UX 10, Linux, NetBSD, OpenBSD, FreeBSD で動作します。
そして、現在は NetBSD-1.4, OpenBSD-2.4 が最新となりました。