検索

Google
Web www.icefree.org

RSS of recent changes

 

NFS

2017-06-20 (火) 23:23:54 (2495d)

NFS Client on X680x0

 このページは旧サイトからの転載です。


 X680x0 の純正 OS である Human68k 上で動作する NFS クライアントです。
 変な名前を付ける予定でしたが、今更という気がするので特に名前は付けません。しかし、いい語呂を提供してくれる方のメールはお待ちしております。

新掲示板
旧掲示板 (書き込みは停止しています)

NFSについて
 Network File System の概要についてまとめてみましたので、 「NFS って何?」と言う人は、まずはこちらからどうぞ。

X680x0 での LAN の設定について
 設定についても簡単にまとめてみました。参考程度にどうぞ。

EX68で作るコンパイル環境

配布ファイル

 
 現在のバージョン:0.38 (2002/05/17)
 
→最新版のダウンロード
  
古いバージョンは、書庫 から直接持っていってください。
 
最新バージョンの更新内容

v0.37=>v0.38
 オプション -x により、DOSコールで返すファイルの実行属性を強制的にOFFできるようになりました(thanks 伊藤様)。
float?.x、nfs.x、float?.x の順で実行すると、float?.x を二重登録できてしまう不具合の修正(thanks 立花様)。
オプション -H を使っても、環境変数 HOST の設定を要求する不具合の修正(thanks 立花様)。
files, nfiles のHuman3.0拡張に対応していなかった不具合の修正
umask が正しく指定できない不具合の修正
パーミッションの取得が正しくなかった不具合の修正

v0.36=>v0.37
 ディレクトリのファイル属性の扱いを変更
 ・サーバ側では、所有者の実行属性が常にON
 ・human側では、実行属性は常にOFF
細かいバグの修正
タイムアウトを5秒から15秒に変更
リンクオプションに -x を追加

v0.35=>v0.36
 ディレクトリキャッシュの修正。
 ASSIGNの引数を確認(FU対策、暫定)

v0.34=>v0.35
 サーバにUNIXを使ったときに起こる不具合の解消。
・ディレクトリに対する chmod のバグを直す。
その他、アクセスマスクのバグを直す。

 ファイル名の途中に半角スペースを認める。ただし、現バージョンでは、半角スペースの直後に半角ピリオドを置くことはできません。
例)
○space file.txt
×space .txt
 nfs.xでは以上のように半角スペースを認めましたが、アプリケーション側で半角スペースを認めていないことがあるのでご注意ください。確認しているところでは、mint は駄目でしたが、fu や ITA-TOOLS は大丈夫でした。

 DOS_ASSIGN コールのバグフィックス。

 シンボリックトリンクにも試験的に対応しています(オプション-s)。使用に際しては十分な注意が必要です。Windows上のNFSサーバでは、シンボリックリンクは無いはずなので、気にしないでも大丈夫です。

 nfsmain.c の一部(c_で始まる関数)を dosinter.c として分離した。

v0.33=>0.34
 ディレクトリ検索の高速化。具体的にはディレクトリのlookup時にバッファを用いるようにした。
 他にも何かあったような気がしますが、実は昨年の11月9日に出来上がっていたものをデバグしただけなので、良く覚えてません。

v0.32=>0.33
 ライブラリの整理。ファイルの整理。
 メモリまわりの改善。option -Mの廃止。常駐量を4割削減。
 v0.32でデバッグ表示の一部を消し忘れていたのを直す。
 
→これよりも前の履歴はこちらをご覧ください。
 
次のバージョンで出来るかもしれない事
・複数のマウントを可能にする。
 現状で、複数のマウントをしたい場合は、ソースの2重常駐のチェック 部分を無効化してください。
・DOSCALL の dskred, dskwrt に対応する。
・HUMAN.SYS を解析して、より正しい戻り値や動作をするようにする。
・シンボリックリンクに対応させる。
・bgdrvとの共存を可能にする。
 

フリーウェアです

・無償で使用することが出来ます。
・保証はありません。あらかじめ予想し得る損害や二次的損害も含めて 一切の損益に責任を持ちません。
 
・配布は、個人が無償で行う場合には無断で自由に行えます。
 以下のいずれかに該当する場合には事前に著作者の許可を得る必要があります。
1、非営利・営利に関わらず団体(学術機関も含む)が行う場合。
2、配布に係る費用を越えた代価を要求する場合。
 
・改変物の再配布について
 改変元の配布条件を満たす場合にのみ行えます。また、配布する前に連絡をしてください。
 

動作環境

ハードウェア
 X68000/X68030
 LANボード
 
 LANボードは、Shi-MAD氏設計の Neptune-X でしか確認していません。 シャープ純正ボードは・・・わかりませんが、ドライバなどに よっては動くと思います。

 また、常駐量が1MB近くあるので2MBしか積んでいないマシンでは辛いと思います。
 
◇OS
 Human68k Ver.2以降
 
 積極的に内部ワークを利用し、より HUMAN.SYS と同じような動作をするようにしていくことにしました。 そのため、動作する OS のバージョンが限られてくる可能性があります。
 ver2.02 と 2.03の資料を見ながら、v3.02 の HUMAN.SYS を解析して、開発環境には v3.01 を使っているので(^^;、v2 以降なら 動作すると思うのですが、v3.01 以外では動作確認を行っていません。
 
その他必須ソフトや設定
 ドライバ等はこちらを参考に設定してください。
 →X680x0 での LAN の設定について
 
他のアプリケーションとの相性
 一般的なアプリケーションは大体動くと思いますが、 ハード(ドライブ)に依存するようなものは動かない可能性が高いです。
 

使い方(マニュアル編)

nfs.x [options] rhost:path
 
rhost : NFSサーバの名前
path : NFSサーバ側でのマウントするルートのパス
 
たとえば、pastel というサーバの /usr というディレクトリを 使いたい場合には

   nfs.x pastel:/usr 

と実行します。
 
二重常駐と常駐解除
 
 複数の常駐は出来ません。
 常駐解除はオプション -R で行います。 -r ではありません(-r はリードオンリーモード)。
 
[options]
 
 オプションは rhost:path よりも前に指定する必要があります。
 

  • -d Drive default:-dy
     
    マウントするドライブを指定します。 既にドライブが存在するところを指定しないでください。 チェックをしていません。
    デフォルトではYドライブを使用します。
     
  • -u UserID default:-u0
     
    NFSドライブで使用するユーザIDを指定します。
  • -U とは違うので注意。
     
  • -g GroupID default:-u0
     
    NFSドライブで使用するグループIDを指定します。
  • -G とは違うので注意。
     
  • -U UserID default:-U0
     
    マウント時の認証で使うユーザIDを指定します。
  • -u とは違うので注意。
     
  • G GroupID default:-g0
     
    マウント時の認証で使うグループIDを指定します。
  • -g とは違うので注意。
     
  • -H machine-name default:-H 環境変数HOSTの内容
     
    マウント時の認証で使うホスト名を指定します。
     
  • -r
     
    リードオンリーモード。書き込みが出来なくなります。
     
  • -m umask default:-u 755
     
    ファイル作成時の umask の指定。
    指定は、UNIX のシェルと同じで、8進数で指定します。 必ず3桁にする必要があります。
     
  • -R
     
     常駐解除します。
     
  • -D {tTnNlL} default:-DTNL
     
     デバッグモード。(どちらかというと、verbose 設定かも)
     tT : Twiddle(クルクル回るテキストの棒)の表示(T)/非表示(t)
     nN : DOSCALL 番号の表示(N)/非表示(n)
     lL : DOSCALL 番号の表示位置、固定(L)/可変(l)
        デフォルトでは固定です。可変にすると最下行を目一杯使って番号表示をします。
     
  • -t MediaByte? default: -t f4

 メディアバイトを指定します。デフォルトでは、DAT と同じになります。

使い方(実践編)

◇War NFS Daemon
・問題点その1
 ASCII 転送を指定すると書き込めません。
 mapascii を指定しないでください。ASCII にしなくても、 もともと Human68k の改行コードは WINDOWS と同じです。
・問題点その2
 MINT などを使って書き込むと、直後はファイルサイズが0と 表示されます。どうやら、書き込んで間を置かずに FILESするので誤った情報を返してしまうようです。
 
◇ユーザIDの設定
 NFSサーバを個人的に使っていて(ほとんどの場合はそうでしょう)、 X68k で不自由なくサーバ上のファイル操作をしたいのならば、 デフォルト(root)のままで使用することをお勧めします。ただし、サーバ上や、他の(まともな)NFSクライアントで使用する場合に、 パーミッションで不都合が起る事があります。 (directory の実行属性がなくなって、 一般ユーザがそのディレクトリを見られなくなる等)
 X68k で不自由でもちゃんとしたパーミッションを使って操作したい場合や、 X68k の使用者がNFSサーバの管理者でない場合などは、 適当なユーザIDを設定するべきです。
 ただし、パーミッションのチェックが甘いので御注意ください。 また、NFSサーバの管理者と密な連絡が取れないような環境では 使わないでください。何が起るかわかりません。 基本的には、個人の家庭内のLANでの使用にとどめるべきです。
 また、NFSサーバに出来るだけ影響を及ぼしたくない場合は、 リードオンリーモード(option -r)を設定すると良いでしょう。

 原因がよくわからないバグらしきものに遭遇したら、まずユーザIDやパーミッションを疑ってみる良いでしょう。特にサーバがUNIXの場合にはその可能性が高いです。また、ファイルを見る分には問題がないのに、書き込みになると失敗する、という場合もその可能性が高いです。
 

NFS Client のこれまでの流れ

 詳しい履歴は、 公開前の履歴はホームページの 雑記->日記 に、 公開後の履歴はアーカイブ内のnfs.his に、 書いてあります。
 
 制作の動機は、メインマシンである NetBSD/pc98 のファイルを日本語で 編集したいというところから生れました。
 この NetBSD は非Xで日本語入力が出来ないので、 隣の X68k に ftp で送ってから X68k で編集して、 また送り返すという事をしなければなりませんでした。 当然これは大変面倒な作業です。最も簡単な解決方法である、 NetBSD に日本語環境を構築するという方法は、マシンパワーのなさから諦めました。 そこで X68k に NFS クライアントを実装して、ファイルを共有することにしました。
 
 まず、NFS の下層にある RPC,XDR を実装するために、 NetBSD の RPC を X68k に移植しました。 この時、デバグのために、rpcinfo や ruptime、sprayd なども移植しました。
 RPC が動くようになったら、次は RPC を利用して NFS を実装しました。 具体的には、F例外をまとめてフックして、そのコールの引数を調べて、 実際の処理へ移しています。
 技術面での詳しい事は、 資料のページを参照してください。
 

バイナリの再構築

 
 かなり適当な文章です。まだ書き途中ですが、 折角なので載せておきます。
 
必要なファイルの取得

ライブラリ
□libxnetwork
・libxnetwork
□libinet
・libinet
□libioctl
・libioctl
□libbsd
・libbsd
□ESP/X TCP pack B
・libnetwork
□libc
・libsignal
・libdos
・libiocs
・libc
・libgcc

TwentyOne?
・options.o
 
以上のライブラリが必要です。libc と TwentyOne? 以外は、しゃある氏の
http://www.ufo.co.jp/~sharl/x/ncwatch.html
から辿って入手することが出来ます。
 libc は gcc などと一緒に配布されていると思います。
 
バイナリ
・has
・Charlie版gcc
が必要です。  この辺のツールは、秋保とかVECTOR などに行けばあるでしょう。  

準備
 TwentyOne? を常駐させます。
 上述のライブラリを /usr/lib などにコピーします。
 src ディレクトリに、TwentyOne? の options.o を置きます。
 
コンパイル
 src/lib ディレクトリに移動します。
 makefile を編集します。
 make を実行します。
 src ディレクトリに移動します。
 makefile を編集します。
 make を実行します。
 できた nfs.x をパスの通っているディレクトリに移します。
 

謝辞

 動作報告などをくださったり、私の質問に答えて頂いた方々です。 この方々がいなかったら今の形にはなっていなかったでしょう。感謝。
 
 白方様 (@yo.rim.or.jp)
 Crabfish様 (@kw.netlaputa.ne.jp)
 てぃーろく様 (@cityfujisawa.ne.jp)
 いりや様 (@mxk.meshnet.or.jp)
 林様 (@is.aist-nara.ac.jp)
 DEKO様 (@geocities.com)
 Shade様(@remus.dti.ne.jp)
 Sharl様 (@www.ufo.co.jp)
 嶋田様 (@amy.hi-ho.ne.jp)
 Shimizu Ryo様 (@mma.club.uec.ac.jp)
 なかむら様 (@asg.co.jp)
 山嵜様 (@osk3.3web.ne.jp)
 Neptune ML の皆様
 
 順番は、Email アドレスでソートしてあります。 (メールアドレスは問題があると困るので、ホスト名だけ載せてあります)
 もしかしたら記入洩れがあるかもしれません。お気付きの方は御連絡ください。 逆に、載せないで欲しいという場合も御連絡ください。
 

開発資料

 後々のために資料をまとめておかないといけないのですが、 あまり手を付けられずにいます。
 暇な時にでも少しずつ進めていこうかと思っています。
 
 資料のページ