2011年7月23日更新
ファイルサーバのインストール
はじめに
これは、ファイルサーバ専用のカーネル構築記録です。 dumpfs、ken fs、fs64等いろいろな呼び方がありますが、 だいたい同じものを指しています。以下fsカーネルと呼びます。
現在、fsカーネルはサポート外となり配布物から外されています。 配布物から外れる前から使っているのでここに書いていますが、 今から構築するには、あまりおすすめしません。 ATAディスク周りにはバグがありますし、情報も少ないので。
それでも、高い安定度は魅力的だなあ、と思います。 フルSCSI化してからというもの、 ハードウェアトラブル以外で落ちたことがないですよ。
なにはともあれ認証サーバが1台必要になります。 注意する点としては、必ずilを組み込んでください。
ソースコードの取得
現在、fsカーネルはサポート外になってしまったので、 別途取得してこなければいけません。 ソースコード一式は/n/sources/extra/fsにあるので 普通にコピーしてもいいのですが、せっかくなのでreplica用の設定をします。 以下の内容を$home/fs/dist/replica/instとして保存します。
% cat $home/fs/dist/replica/inst
#!/bin/rc
# ken fs template.
# Assumes that distribution should be installed
# to /n/inst.
s=/n/sources/extra/fs/replica
serverroot=/n/sources/extra/fs/fs
serverlog=$s/fs.log
serverdb=$s/fs.db
serverproto=$s/fs.proto
fn servermount { status='' }
fn serverupdate { status='' }
fn clientmount { status='' }
c=/n/inst/dist/replica
clientroot=/n/inst
clientproto=$c/fs.proto
clientdb=$c/client/fs.db
clientexclude=(dist/replica/client)
clientlog=$c/client/fs.log
applyopt=(-t -u -T$c/client/fs.time)
次に、$home/fs/dist/replica/client/fs.db(空でいい)を作成して、展開。 ここではとりあえず、展開先を$home/fsとします。 展開先を変えたい場合は、2行目のbindを変更してください。
% chmod +x $home/fs/dist/replica/inst
% echo -n >$home/fs/dist/replica/client/fs.db
% 9fs sources
% bind -c $home/fs /n/inst
% replica/pull -v /n/inst/dist/replica/inst
しばらく待てば、$home/fs以下は次のようになります。
% lc $home/fs
9netics32.16k dev emelie ip pc
9netics64.8k dist fs mkfile port
choline doc fs64 patch run
時計合わせ
fsカーネルでは、timezoneを変更するには ソースを書き換えなければできません。 詳しくは時計合わせを参照してください。
コンパイル
以上で準備が整いましたので、コンパイルします。
% cd $home/fs/fs64
% mk
これで、9fsfs64というカーネルができますので、 続けてplan9.iniを用意します。 etherの項は手持ちのカードに合わせてください。 ソースコードのpc/etherif.cにネットワークカードの一覧が、 pc/scsi.cにSCSIカードの一覧があります。
% cat plan9.ini
ether0=type=rtl8139
bootfile=fd!0!9fsfs64
nvr=fd!0!plan9.nvr
または、9loadがカーネルを見つけられない場合、 bootfileエントリを以下のようにすると解決するかもしれません。 それでもnvrエントリは古い書き方をします。
bootfile=fd0!dos!9fsfs64
用意ができたら、カーネルとまとめてフロッピーに書き込みます。 単純にファイルをコピーしただけでは、 ロードできない配置になってしまったりしますので、 pc/bootfloppyを使います。
# 端末から直接書き込む場合
% pc/bootfloppy /dev/fd0disk plan9.ini 9fsfs64
# フロッピーイメージを作成する場合
% pc/bootfloppy floppy.img plan9.ini 9fsfs64
完成したらそれを使ってブートします。
ファイルサーバの構成
サーバの設定を行います。 ブート中にキーを押してconfigモードに入り、設定します。
config: config w0
config: service fs
config: filsys main cw0f{w14w15}
config: filsys dump o
config: ipsntp 192.168.1.1
config: ip 192.168.1.23
config: ipgw 192.168.1.1
config: ipmask 255.255.255.0
config: ream main
config: end
各行についてですが、serviceコマンドでホスト名を設定、 filsysコマンドでファイルシステムの名前付けと ディスクの割り当てを行っています。 上記の例では、mainファイルシステムとして、SCSIディスク0をキャッシュ、 SCSIディスク14と15をミラーリングして擬似WORMとしています。
fsカーネルでは、ルールさえ覚えてしまえば、 簡単なコマンドでディスクを単純に連結したり、 ストライピングしたりもできます。 詳細はfsconfig(8)を読んでください。
ipまわりは、そのままの意味。 ネットワークカードが複数ある場合、1枚目はip0, ipgw0, ipmask0、 2枚目はip1, ipgw1, ipmask1のように見えます。
最後に、reamコマンドでファイルシステムを初期化です。 このコマンドは、configモードを終えてから初期化を開始します。
endコマンドでconfigモードを終えて通常運用モードに進みます。 reamコマンドを発行した場合は、ここで初期化を行います。
ホストオーナーの設定とユーザの初期化
しばらく待つとファイルサーバのプロンプトが表示されます。 そこで、ユーザの初期化とファイルサーバパスワードの設定をします。 passwdコマンドでは、認証ID、認証ドメイン、パスワードを聞かれますので、 認証IDをbootes、認証ドメインとパスワードを 認証サーバのbootesと同じ値に設定します。
fs: users default
fs: passwd
このままではユーザ情報さえ保存できませんので、 続けて、/adm/usersのほか、必須のファイルを作成します。
fs: create /adm -1 -1 775 d
fs: create /adm/users -1 -1 664
fs: create /usr 10000 10000 775 d
上記の、-1はadm、10000はsysと同等です。 名前も使えたはずですが、ここではIDを使いました。
準備ができたので、/adm/usersに保存します。 保存コマンドは特に無く、ユーザの追加や削除が行われたタイミングで 書き込みにいきますので、適当なユーザを追加してください。
fs: newuser lufia
users defaultコマンドは、メモリに初期テーブルがロードされるだけです。 書き込みは行いません。
ファイルサーバをマウントするだけならこれで完了です。 クライアントのほうで以下のように使います。
% ramfs
% echo 'key proto=p9sk1 dom=mana.lufia.org user=glenda !password=xxxxx' >/tmp/factotum
% auth/secstore -p /tmp/factotum
あとは、$home/lib/profileなどから9fsを使ってマウント。
% 9fs fs
これで/n/fsにマウントされます。 fsをルートファイルシステムとする場合は関連情報を参照。
トラブルシューティング
認証サーバからファイルサーバをマウントできない
ファイルサーバのpasswdコマンドで設定するIDは、 認証サーバと同じにしないといけないみたいです。 通常、どちらもbootesにしておくのが無難です。 もちろんパスワードも同じにします。
VMwareでNICを認識しない
配布されているものは対応していません。 パッチを当てたものがetherigbe.cにありますので差し替えて使ってください。