%man; ]>
ディスク無しの X サーバ: 一つのガイド Jerry Kendall
jerry@kcis.com
1996/12/28 1996 Jerry Kendall FreeBSD-hackers メーリングリストの友人たちの助けによって, わたしはディスクの無い X 端末を作ることができました. X 端末の作成には, NFS によってマウントされた最小のユーティリティを持つ ディスク無しのシステムを作らなくてはなりませんでした. 同じ方法を使って 2 つの別々なディスク無しのシステムを作りました. 一つ目は altair.kcis.com です. それは 340M のハードディスクが付いていますが, 交換したくありませんでした. そのため, そのマシンは antares.kcis.com からイーサネットを通じてブートするようになっています. 2 つ目のシステムは 486DX2-66 です. わたしは全くローカルディスクのないディスク無しの FreeBSD を (完璧に) セットアップしました. その場合のサーバは SunOS 4.1.3 が動いている Sun 670MP です. セットアップの設定は両方に同じものが必要でした. わたしはこの文書に加えなくてはならない内容がまだあると思っています. どんなことでもご意見がありましたら送ってください.
ブートフロッピーを作る (ディスク無しのシステム上で) ネットワークローダは TSR などの MS-DOS が使うものがあると うまく働かないことがあるので, 最も良い方法は専用のブートフロッピーを作るか, もしできれば, MS-DOS のメニューを作ってシステムが起動するときに どの設定を有効にするかを聞いてくるようにすることです. (config.sys/autoexec.bat ファイルによって) 次に挙げるのはわたしが使っているもので, ちゃんと動作しているものです. わたしの MS-DOS (6.x) メニューを下に載せます. <filename>config.sys</filename> [menu] menuitem=normal, normal menuitem=unix, unix [normal] .... normal config.sys stuff ... [unix] <filename>autoexec.bat</filename> @ECHO OFF goto %config% :normal ... normal autoexec.bat stuff ... goto end :unix cd \netboot nb8390.com :end ネットワークブートのプログラムを手に入れる (サーバ上で) /usr/src/sys/i386/boot/netboot にある 'net-boot' プログラムをコンパイルしてください. そのときには Makefile の先頭にあるコメントを 読んでおきましょう. 要求されるように調整してください. オリジナルのファイルはどこかにバックアップを取っておいてください. ビルドが終わったら, 2 つの MS-DOS の実行ファイル nb8390.comnb3c509.com ができているはずです. これらの 2 つのプログラムの 1 つはディスク無しのサーバ上で動かすのに 必要になるものです. それはブートサーバからカーネルをロードするものです. ここでは両方のプログラムを先程作った MS-DOS のブートフロッピーに 入れておきます. どのプログラムを実行するかを調べる (ディスク無しのシステム上で) もしあなたのイーサネットアダプタが使っているチップセットを知っているなら, これは簡単なことです. もしそれが NS8390 チップセットか, NS8390 をベースとするチップセットであれば, nb8390.com を使ってください. もし 3Com 509 をベースとするチップセットなら, nb3C509.com ブートプログラムを使ってください. もしあなたの持っているものがよくわからなければ, 一つ試してみて, そこで No adapter found と言われたら また他のを試してみてください. それでもだめだったら, あなたのものはとても珍しいということです. ネットワークと通じてブートする config.sys/autoexec.bat ファイルも使わずにディスク無しのシステムを 立ち上げてみてください. あなたのイーサネットアダプタのための ブートプログラムを実行してみましょう. わたしのイーサネットアダプタは WD8013 16bit モードで動いているので nb8390.com を実行します. C:> cd \netboot C:> nb8390 Boot from Network (Y/N) ? Y BOOTP/TFTP/NFS bootstrap loader ESC for menu Searching for adapter.. WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66 Searching for server... ここでは, わたしのディスク無しのシステムは ブートサーバとして振る舞うようなマシンを探しにいこうとします. 上の addr 行を記録しておいてください. あとからその数が必要になります. ディスク無しのシステムを再起動して, あなたの config.sysautoexec.bat ファイルを修正して これらの操作が自動で行われるようにしてください. おそらくメニューの部分になるでしょう. もし nb3c509.comnb8390.com の代わりに 使わなくてはいけなかったとしても, 出力は上と同じです. もし Searching for adapter.. というメッセージが出るときに No adapter found ということを言われたら, Makefile で定義されている コンパイル時間が正しくセットされているかどうかを確認してみてください. システムがネットワーク越しにブートすることを許可する (サーバ上で) /etc/inetd.conf ファイルが tftp や bootps についてのエントリを持っているかどうかを確認してください. わたしのは次のようになっています. tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /tftpboot # # Additions by who ever you are bootps dgram udp wait root /usr/libexec/bootpd bootpd /etc/bootptab もし /etc/inetd.conf ファイルを変更したときには, inetd に HUP シグナルを送ってください. これをするには, inetd のプロセス ID を ps -ax | grep inetd | grep -v grep して 取得してください. プロセス ID がわかったら, それに向けて HUP シグナルを送ってください. これは kill -HUP <pid> として行います. これによって inetd はその設定ファイルを読み直します. ディスク無しシステム上でブートローダが出力した addr の出力を覚えているでしょうか? ここでそれが必要となるのです. /etc/bootptab (おそらくファイルを作成して) に エントリを加えてください. それはこれと同様の書式で書きましょう. altair:\ :ht=ether:\ :ha=004001432666:\ :sm=255.255.255.0:\ :hn:\ :ds=199.246.76.1:\ :ip=199.246.76.2:\ :gw=199.246.76.1:\ :vm=rfc1048: これらの行は次のような意味です. altair ドメイン名を除いたディスク無しのシステムの名前. ht=ether 'イーサネット' ハードウェアタイプ. ha=004001432666 (先に記録した) ハードウェアのアドレス. sm=255.255.255.0 サブネットマスク. hn クライアントにクライアントのホスト名を送るよう, サーバに伝えます. ds=199.246.76.1 ドメインサーバがどれなのかをクライアントに伝えます. ip=199.246.76.2 クライアントの IP アドレスが何なのかを クライアントに伝えます. gw=199.246.76.1 デフォルトゲートウェイがどれなのかを クライアントに伝えます. vm=... これはそのままにしておいてください. IP アドレスは正しく設定してください. 上のアドレスは わたしだけのものです. '/tftpboot' ディレクトリをサーバに作成して, サーバがサービスを行う ディスク無しのシステムのための設定ファイルをこのディレクトリに入れておきます. これらのファイルは 'cfg.<ip>' という名前になっていて, <ip> はディスク無しシステムの IP アドレスを表しています. 'altair' の設定ファイルは /tftpbot/cfg.199.246.76.2 となります. この中身は次のようになっています: rootfs 199.246.76.1:/DiskLess/rootfs/altair hostname altair.kcis.com hostname altair.kcis.com の行は単に ディスク無しのシステムがどのような完全なドメイン名を持っているのかを 表しています. rootfs 199.246.76.1:/DiskLess/rootfs/altair の行は ディスク無しのシステムが NFS でマウントできるルートファイルシステムの場所を 表しています. NFS でマウントされたルートファイルシステムは 読み出し許可だけで マウントされます. ディスク無しのシステムの階層は要求されれば読み書き可能にして マウントし直すことができます. わたしは予備の 386DX-40 を専用の X 端末として使用しています. 'altair' の階層は次の通りです. / /bin /etc /tmp /sbin /dev /dev/fd /usr /var /var/run 実際のファイルのリストは次の通りです. -r-xr-xr-x 1 root wheel 779984 Dec 11 23:44 ./kernel -r-xr-xr-x 1 root bin 299008 Dec 12 00:22 ./bin/sh -rw-r--r-- 1 root wheel 499 Dec 15 15:54 ./etc/rc -rw-r--r-- 1 root wheel 1411 Dec 11 23:19 ./etc/ttys -rw-r--r-- 1 root wheel 157 Dec 15 15:42 ./etc/hosts -rw-r--r-- 1 root bin 1569 Dec 15 15:26 ./etc/XF86Config.altair -r-x------ 1 bin bin 151552 Jun 10 1995 ./sbin/init -r-xr-xr-x 1 bin bin 176128 Jun 10 1995 ./sbin/ifconfig -r-xr-xr-x 1 bin bin 110592 Jun 10 1995 ./sbin/mount_nfs -r-xr-xr-x 1 bin bin 135168 Jun 10 1995 ./sbin/reboot -r-xr-xr-x 1 root bin 73728 Dec 13 22:38 ./sbin/mount -r-xr-xr-x 1 root wheel 1992 Jun 10 1995 ./dev/MAKEDEV.local -r-xr-xr-x 1 root wheel 24419 Jun 10 1995 ./dev/MAKEDEV dev ディレクトリで MAKEDEV all するのを忘れずに. altair/etc/rc は 次の通りです. #!/bin/sh # PATH=/bin:/ export PATH # # localhost の設定 /sbin/ifconfig lo0 127.0.0.1 # # イーサネットカードの設定 /sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00 # # NFS で root ファイルシステムをマウントする /sbin/mount antares:/DiskLess/rootfs/altair / # # NFS で /usr ファイルシステムをマウントする /sbin/mount antares:/DiskLess/usr /usr # /usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1 # # X を終了すると再起動 /sbin/reboot # # うまく行かないときには.... exit 1 コメントや質問はどんなものでも歓迎します.