Logo address

Aquarela (Plan 9 CIFS サーバ)

H3: 履歴
- 2005/05/24 改訂
- 2005/05/01 改訂
- 2004/12/31 改訂
- 2003/10/03 改訂
- 2003/10/01 改訂
- 2003/06/07

Aquarela とは

Aquarela は Nigel Roles による Plan 9 用の CIFS(Common Internet File System) サーバである。UNIX で使用されている samba を参考にし、Plan9 用に書き直したものらしい。Plan 9 には UNIX のソフトウェアを取り込むための APE 環境が存在するが、コードは完全に Plan 9 のスタイルで書かれているので APE 環境は利用しなかったらしい。

Web の記事を読むと CIFS は SMB over IP の名称変更のような印象を受けるが、cifs は TCP/445 ポートを使用するのに対して SMB は TCP/139 を使用している。単なる名称変更であればポート番号を変更する必要はないので、基本的な違いが存在するのであろう。
筆者は以下のクライアントから動作を試した。

OS 結果
WinXP OK
Win2000 OK
Win98 NG
MacOSX NG
このうち NG (No Good) はクライアント側が TCP/139 を使用しているのが原因と思われる。(CIFS 対応にはなっていないと言う事)
Aquarela は http://www.zen34585.zen.co.uk/dist/aquarela/ から取り寄せる事ができる。

Aquarela のインストール

Aquarela のインストール

Aquarela の mkfile が置かれているディレクトリで mk を実行する。コンパイルに失敗したら mkfile の
CFLAGS=$INC $CFLAGS $XCFLAGS

CFLAGS=$CFLAGS $XCFLAGS
に変更すればうまく行くと思う。コンパイルに成功したら
mk install
を実行する。

/lib/ndb/common

/lib/ndb/common に
tcp=cifs port=445
を追加する

実行

ディレクトリ /n/local を作成しておく。
Aquarela は aquarela.log をカレントディレクトリに作成する。最初の実験は
cd /tmp
aquarela -p
ぐらいがよいであろう。-p は標準出力にもログを出すオプションである。
うまく行かない場合には
aquarela -p -d allcmds
で aquarela を起動するのがよい。(交信状態が分かる)

認証

CIFS クライアントとCIFS サーバ(Aquarela)の間は MSCHAP が使用されているはずである。他方 Aquarela と Plan 9 の認証サーバとの間は POP3 認証が使用されている。従って認証サーバに POP3 の登録がない場合にはパスワードを登録する必要がある。

WinXP, Win2000 からの利用

筆者は自宅の Plan 9 端末で Aquarela を走らせて自宅のパソコンからアクセスする実験を行ってみた。
Nigel に教えてもらったメールでは3つの方法があるといいう。
You can
1. type \\server\local into a browser window
2. type start \\server\local into a command shell
3. type net use z: \\server\local into a command shell
ここに server はサーバの名称であり、local は共有名であるが、共有名は aquarela では localdump などが指定できる。

サーバの名前登録

サーバの名前は前もって Windows の
C:\WINNT\system32\drivers\etc\hosts
に登録しておくのがよいであろう。(以下ではこのファイルを単に hosts と言う。) 筆者の場合には筆者の運営するサーバを登録している。(192 で始まる IP は家庭内 LAN におけるサーバである。)

127.0.0.1       localhost
202.250.160.40	ar
202.250.160.71	hera
202.250.160.122	plan9
192.168.1.1	nx
192.168.1.2	pc
192.168.1.4	mac

特に、家庭環境では登録しないとサーバ名が使えないことに注意すべきである。

コマンドによる接続

aquarela の接続実験には、最初はコマンドシェルからマウントするのがよいであろう。(その方が診断しやすい)
筆者の Aquarela サーバの名称は pc である。その場合には
start \\pc\local
または
net use z: \\pc\local
を実行する。
後者で "z:" を "*" とすると適当に空きドライブを割り当ててくれる。(net コマンドに関しては http://www.computerhope.com/nethlp.htm に解説がある )
柔軟性から言えば後者の方が良い。以下では後者を基に解説する。

接続時のサーバからの応答は、クライアントが Win2000 と WinXP とでは異なる。
Win2000 では「\\pc\local のパスワードを入力してください:」
と言われる。どうやらユーザ名はクライアントとサーバ側で共通であると考えられているらしい。(これは大変使いにくい)
WinXP ではユーザ名とパスワードの入力が求められる。インターネットレベルでのクライアントとサーバの関係は、ユーザ名の共通化をはかれない場合が多いのであるから、XP の方がまともである。
成功すれば \\pc\local には サーバ上の / 以下のディレクトリが見えるはずである。

Aquarela の付加機能

Aquarela には次のような工夫がある。(Nigel の言葉をそのまま引用すると)
The dynamic stuff will add in things which 9fs adds in. For example
c> net use z: \\cpu\dump
c> z:
z> dir/w
2000 2001 2002 2003
ここに cpu は Aquarela が動作しているサーバの名称であり、筆者の実験では pc と書くべきである。クライアントから Plan 9 のダンプファイルシステムが見えるのであるから幸せである。
local 以外(例えば dump)を指定した場合には Aquarela はサーバ上で(例えば)
9fs dump
を実行する。
筆者の自宅の Plan 9 端末ではこのままではエラーになった。(そのことは端末上で直接 9fs dump を実行してみればわかる。) fossil の archive が見えるように /rc/bin/9fs を次のように書き換えることとした。
case dump
	mount /srv/fossil /n/dump main/archive
#	mount /srv/boot /n/dump dump >[2]/dev/null ||
#	mount /srv/boot /n/dump main/archive ||
#	mount /srv/boot /n/dump dump	# again to print error

ブラウザからの接続

Nigel が示した最初の方法は初心者好みであるが柔軟性を持っていない。次に示すのは Win2000 の画面である。
「ネットワークプレスの追加ウィザード」を起動する。これは「マイネットワーク」に置かれている。「マイネットワーク」のデザインは WinXP と Win2000 では異なる。

ネットワークプレスの追加ウィザードの場所(Win2000)

ネットワークプレスの追加ウィザード場所(WinXP)

「ネットワークプレスの追加ウィザード」を起動すると次の画面が表示される。

ネットワークプレスの追加ウィザード(Win2000)。WinXP も同じ。

このやり方では、ネットワークプレースをあらかじめ指定しておかねばならないのがつらい。「ネットワークプレスの追加ウィザード」を使用しないやりかたもある。「コンピュータの検索」を利用する方法である。(WinXP と Win2000 共に使用できる)

しかしこの方法ではコンピューター名しか指定できない。

LAN を越えた CIFS の利用

以上の実験は私の家庭内 LAN の中でのものである。家庭から大学の研究室にあるマシン(ar.aichi-u.ac.jp) へのアクセスは以前にはやれていたのだが、今回(2003/10/01)に実験をしたところなぜか、なかなか接続しなかった。夜になってようやく接続できた。原因は不明である。
以下は WinXP の画面であるが、Win2000 も基本的に同じである。
「マイネットワーク」の「探索」アイコン

WinXP の「探索」アイコン

をクリックすると「コンピュータ名」の入力を求められ、探索に成功するとさらに「ユーザ名」と「パスワード」の入力を求められる。(下図)

家庭から大学の ar への接続1 (WinXP)

もちろん、hostsar が登録されていれば単に ar で構わない。

hostsar が登録されている場合のコンピュータ名の指定

家庭から大学の ar への接続2 (WinXP)

接続に要する時間はイライラするほど長い。Plan 9 の軽快なネットワークになれた筆者にとっては苦痛である。昼に接続しなかったのは大学のネットワークが混み合っていたからか?

Win2000 も WinXP も一旦接続を行うと、ユーザ名もパスワードも改めて聞かれることはない。他のユーザ名で接続を行う場合には一旦ログオフをするか NET コマンドで /DELETE の指定をしなくてはならない。次の図は NET コマンドを用いた接続の取り消しの例である。

C:\>net use * /delete
これらのリモート接続が存在します:

        \\Pc\local
        \\ar\IPC$
続行すると、接続は取り消されます。

この操作を続行しますか? (Y/N) [N]:

C:\>net use \\pc\local /delete
\\pc\local が削除されました。

MacOSX からの利用

筆者は MacOSX から使用したいのであるが、残念ながらうまく行きそうにない。
http://www.obdev.at/products/sharity/
も試してみたがポートアドレスが 139 固定のようだ。

トラブルシューティング

ネットワーク パスが見つかりません。

C:>net use z: \\pc\local
システム エラー 53 が発生しました。
ネットワーク パスが見つかりません。
原因: そもそも相手のポートに届かない時にこのエラーがでるらしい。例えば

Aquarela の安全な運転のために

ユーザ none による aquarela の実行

2005/05/01 追加

不思議な事に aquarela は ユーザ none のデモンを生成するオプシヨンを持っていない。hostowner の権限での aquarela の実行は危険が伴うので none としてサービスを実行すべきであろう。ユーザ none の権限でサービスを行うには

@{cd /tmp; auth/none aquarela&}とでもすればよい。

不正アクセス

2005/05/24 追加

cifs ポートには多数の、時には凄まじい数の不正アクセスが発生する。例えば昨日(2005/05/23)の不正アクセス件数は 385 件であり、つぎのようなものもある。

ar May 23 02:03:30 445 220.170.56.209
ar May 23 02:03:31 445 220.170.56.209
ar May 23 02:03:31 445 220.170.56.209
ar May 23 02:03:31 445 220.170.56.209
ar May 23 02:03:32 445 220.170.56.209
ar May 23 02:03:32 445 220.170.56.209
ar May 23 02:03:33 445 220.170.56.209
ar May 23 02:03:33 445 220.170.56.209
ar May 23 02:03:34 445 220.170.56.209
ar May 23 02:03:34 445 220.170.56.209
ar May 23 02:03:34 445 220.170.56.209
ar May 23 02:03:35 445 220.170.56.209
ar May 23 02:03:35 445 220.170.56.209
ar May 23 02:03:36 445 220.170.56.209
ar May 23 02:03:36 445 220.170.56.209
ar May 23 02:03:37 445 220.170.56.209
ar May 23 02:03:37 445 220.170.56.209
ar May 23 02:03:37 445 220.170.56.209
ar May 23 02:03:38 445 220.170.56.209
ar May 23 02:03:38 445 220.170.56.209
筆者の場合には IP アドレスのレベルでも保護が掛かっているのでサーバは保っているが、そうでなければサーバが保たないかもしれない。

おわりに

Aquarela は -n オプションを持っている。このオプションによって TCP/139 へのアクセスも監視しているので、旧来の SMB over IP がサポートされている事になる。しかし Nigel が言うように、このオプションはまだうまく働いていない。

Windows のコマンド net は外部コマンドであり、ファイル名は net.exe である。従って OS とは独立に作成する事ができる。誰かが CIFS 対応の Win98 用の net.exe を作っていてもよさそうであるが、今のところ見つかっていない。