1998/09/25 更新
分散システムの構築は単体システムに十分慣れてから行うのが良い。一筋縄では行かないのだ。単体システムでシステムの更新を行えるようになる事が、分散システムに手を出す目安と考えれば良い。またここでも読者がカーネルの更新経験を持っている事を前提に解説する。
分散システムを構築した当初の筆者のシステムは何れも日立 Flora1010(i486DX2) であった。このマシンを選んだ理由は、大学のパソコンが更新された結果、周りにたくさん転がっていたからにすぎない。
最初の困難はファイルサーバの構築であった。イーサネットカードとの相性が何故か悪いのである。Plan9端末では 3C509B, SMC Elite, NE2000 の何れも問題なくパスしたが、ファイルサーバは NE2000 だけがパスした。原因はファイルサーバのカーネルのバグにある(see: ftp://plan9.aichi-u.ac.jp/patchs/info)。以下に3つのカードの相性を表に纏めておく。LD-NE20(注) とは NE2000互換カードである。
stand alone | file server | CPU server | |
---|---|---|---|
3C509B | OK | NG | OK |
LD-NE20 | OK | OK | NG |
SMC Elete | OK | NG | ? |
表1の説明
単体システム(stand alone system) は何故他に比べて多種のイーサネットカードを扱えるのだろうか? "Plan9 - The Documents -" に書かれている通りにファイルサーバや CPU サーバをインストールすると CD-ROM 付属のカーネルが使用される。このカーネルで使用されているドライバは旧いので問題を引き起こしているのではないかと疑われる。対処の仕方は後に述べる。
第二の困難はシステム管理の仕組みが良く分らないことから発生した。
Plan9ではサーバ相互の信頼関係を、共有パスワードで結んでいる。即ち、ブート時に
パスワードが要求されるが、全てのサーバで同一のパスワードを与えるのである。これをマシンパスワードと呼んでいる。ファイルサーバの管理者のユーザ名は adm であり、
その他のサーバでは(デフォルトの名前は) bootes である。そして、ユーザ bootes にもマシンパスワードと同一のパスワードを別に与えなくてはならない。このことを知るのに筆者は1か月も無駄な時間を費やしてしまった。
分散システムを組む場合の主要な困難は認証関係がうまくとれないことから発生している。最初は認証問題を可能な限り避けた方がよい。サーバの認証問題がクリアされれば、次に待っているのはユーザ認証である。ユーザ認証は、以下のステップでクリアして行くのが良いだろう。
認証サーバのパスワードは(認証サーバの) /adm/users
に登録されている。このファイルは bootes のキーによって暗号化されているが、認証サーバのサービスプログラム keyfs はそれを復号化した結果を
/mnt/keys
にユーザ毎に見せてくれている。(従って認証サーバの現在の認証サービスを調べるにはこのディレクトリを見るのが良い。)
ファイルシステムのユーザ登録の様子は
/adm/users
で見る事ができる。
"Plan9 - The Documents -" に書かれている分散システムのインストレーションの手順(以下「手引書」と呼ぶ)は、そのまま成功すれば非常にラッキーである。しかし普通は途中で問題が発生するであろう。その場合には、初めからのやり直しが続くことになり挫折し兼ねない。
分散システムの場合には問題が発生した場合に考えるべき可能性が余りにも多い。その場合手引書に従っていたのでは手戻が多すぎるのである。完成するまでの手順が多くても確実に前進する方法が好ましい。
筆者は結局手引書の手順に従うのを放棄し、むしろ動作の仕組みを解明し、1つ1つ原因を潰しながらシステムを組み立てていった。従ってもしも読者が手引書通りのインストレーションが出来なかったら諦めないで筆者が薦める以下の手順に従ってやってみるが良い。
スムーズにシステムを構築するには最初は 4 つの PC (端末、認証サーバ、 CPU サーバ、ファイルサーバ) の相互依存性を極力避けるのが良い。
端末、CPU サーバ、 認証サーバは最初は全て単体システムとして作成し、その段階での動作確認を行う。ここまでの作業は既に単体システムの構築経験からやっていけるはずである。単にシステムの名前を CPU サーバらしく、あるいは認証サーバらしく読者の好みの名前にするだけである。ネットワークもこの段階でテストを行う。
単体テストが済んだら、CPU サーバと認証サーバの /dev/hd0boot ( scsi を使っていれば /dev/sd0boot ) に /386/9pccpudisk をコピーする。コピー後の最初の立ち上げではまだ /dev/hd0nvram の内容は作成されていない。この場合には、ここに格納すべき情報の問い合わせがあるであろう。問い合わせに従って答えていくが、大切な事はサーバのパスワードは全て統一する事だ。(このパスワードは決して忘れてはならない。)
以下に単体システムと比較したサーバの特徴を述べる
/bin/cpurc
で決定される。自分のサーバの名称と役割に合わせて /bin/cpurc
の内容を変更する。/dev/key
や /dev/hostdomain
への書き込みはできないがサーバでは可能な事である。
CPU サーバと認証サーバの違いは単にサービスの違いだけである。そしてそのサービスの違いを決めているのは /bin/cpurc
である。
認証サーバに対してはユーザのパスワードを登録する必要がある。このとき bootes もユーザとして登録し、bootes のパスワードをサーバを立ち上げる時のパスワードと同じに設定する。
ファイルサーバも単体で立ち上がる。そのためのブート用のフロッピーディスクの作成までは手引書に従うのが良い。作成されたフロッピーディスクの中の 9fs は更新版と交換するのが良い。その方が利用可能なネットワークカードの種類が増える。
CD-ROM をインストールするまえにユーザ登録は済ませた方が良いだろう。そうすればファイルサーバを(ユーザ none としてではなしに) マウントができる。ファイルサーバの名称を 9fs としよう。端末からコマンド
9fs 9fsを実行しマウントできればネットワークと認証関係に問題が無いことが確認できる。(コマンド 9fs の引数がファイルサーバの名称である。)
ファイルサーバへの CD-ROM のインストレーションは手引書に従えば良いであろう。
ファイルサーバをマウントできるのだから直接コピーと言う手もあろうが、その場合にはファイルのオーナーも作成日もあるべき姿にはならない。
ファイルサーバに CD-ROM がインストールできたらファイルサーバを端末と CPU サーバのファィルシステムとして設定する。その為には/dev/hd0boot
に/386/9pc
と /386/9pccpu
をコピーすれば良い。
端末とCPUサーバに対してカーネルを認証サーバから供給する事も可能である(ネットワークブート)。この場合認証サーバの/lib/ndb/local
の
中の端末と CPU サーバの bootf の値を各々 /386/9pc
及び /386/9pccpu
に設定し、また端末と CPU サーバの plan9.ini
の中の
bootfile を e!0 に設定すればよい。(この場合もはや端末とCPUサーバの /dev/hd0boot は使用されない。)
もっとも必ずネットワークブートを行う必要もない。ネットワークブートを行なわないのであれば /lib/ndb/local
の bootf の値は参照されない。
分散システムを組む際には認証問題をチェックする為の小道具を作成しておいた方が良い。筆者も幾つかの小道具を作成した。
B.COM
の実行によって、インストレーションメニューが立ち上ったり、Plan9 が立ち上ったりする。この違いを決めて入るのは plan9.ini
に指定されている bootfile である。メニュを立ち上げるために plan9.ini
を変更するのは面倒である。代わりに単に
C> plan9¥b hd!0!/plan9/386/9dos
を実行してもよい。
端末とサーバの違い、標準のファイルシステムとしてローカルディスクを使うか、ファイルサーバを使うかの違いを決めているのは、カーネルである。
カーネルはローカルディスクまたは認証サーバから供給される。
どこから供給されるかを決めているのは plan9.ini
の bootfile である。
bootfile=h!0
であればローカルディスクの /dev/hd0boot
が使用され、
bootfile=e!0
であれば認証サーバの /lib/ndb/local
の中の bootf で指定されたカーネルが使用される。
端末用のカーネルは
/386/9pc /386/9pcdiskの2種、CPU サーバのカーネルは
/386/9pccpu /386/9pccpudiskの2種である。各々標準のファイルシステムとしてファイルサーバを使用するかそれともローカルディスクを使用するかを定めている。
分散システムでは端末やサーバはネットワークブートを行うのが通常の考え方である。
この場合には(通常は)認証サーバがブートファイルを提供する。従って認証サーバから見たシステム設定ファイルである
/lib/ndb/localの内容、即ち、
bootf
の設定と/386/9pc /396/9pccpuが問題になる。(つまりファイルサーバのファイルが問題になっているのではない。)