IP と IPX プロトコルが混在するネットワークや、Linux マシンからネットワーク 上の Novell ファイルサーバのデータをアクセスしたい場合にはどうすれば いいでしょうか。このような目的のために Novell は NFS サーバを提供しています が、小さな会社や、ごく少数の人しかこのような目的に興味を示さない場合など には、この商用パッケージのコストが認められるかどうか、難しいものが あります。
Volker Lendecke <lendecke@namu01.gwdg.de> は Novell NCP のサブセットを サポートしたファイルシステムカーネルを書きました。これによって、 別の製品を購入することなしに、Novell の Volume を Linux からマウントする ことができます。このソフトウエアによって、Linux は Novell workstation のファイルサービスをエミュレートできます。また、このソフトは Novell プリントキューに対してプリントするための簡単なユーティリティを 含んでいます。
Volker はこのパッケージを ncpfs と名付けました。開発に必要だった 情報の主なものは、Manfred Hill and Ralf Zessin の "Netzwerkprogrammierung in C" から派生しています。もっと詳細なことに関しては ncpfs パッケージに 含まれている README ファイルを参照してください。また、Greg Page <greg@caldera.com> の書いた IPX tools も使用されています。
ncpfs パッケージはバージョン 1.2.13 カーネルまたは 1.3.53 以降のカーネル で使用するために設計されました。現在、あなたがこれらに該当するカーネルを 使っていないのであれば、それらのカーネルを使う必要があります。 バージョン 1.3.0〜1.3.52 のカーネルではIPX機能がうまく働かないことが 知られています。
ncpfs パッケージは anonymous ftp を使って Volker のホームページから入手する 事ができます: linux01.gwdg.de <ftp://linux01.gwdg.de/pub/ncpfs/> 叉は sunsite.unc.edu <ftp://sunsite.unc.edu/pub/Linux/system/Filesystems/ncpfs> 叉はそのミラーサイト これを書いている時点での最新バージョンは: ncpfs-0.11.tgz です。
まず最初にあなたのカーネルがIPX機能をイネーブルして構築されている ことを確認する必要があります。バージョン 1.2.13 のカーネルでは、 以下に示すように 'The IPX protocol' の質問に対して 'Y' と答えている ことを確認する必要があるだけです:
...
...
Assume subnets are local (CONFIG_INET_SNARL) [y]
Disable NAGLE algorithm (normally enabled) (CONFIG_TCP_NAGLE_OFF) [n]
The IPX protocol (CONFIG_IPX) [n] y
*
* SCSI support
...
...
あなたの使用するイーサネットカードに対応したドライバを含んでいること を確認する必要もあります。もしこれについてどうやればいいかを知らなければ Ethernet-HOWTO を読んでください。 <http://sunsite.unc.edu/mdw/HOWTOJ/Ethernet-HOWTO.html>.
カーネルを構築する準備は整いました。構築が完了した後には lilo を 走らせて、新しいカーネルをインストールすることを忘れないでください。
# cd /usr/src
# tar xvfz ncpfs-0.9.tgz
特になんの設定もせずにきれいにコンパイルできるはずです。
# make
make が正しく完了したら、すべての必要なツールが ncpfs/bin ディレクトリ にできあがっているはずです。以下のように、これらのツールを /usr/local/sbin ディレクトリにコピーする事をお薦めします:
# cd bin
# for i in ipx* ncp* slist nprint pqlist ; do cp \*(dRi /usr/local/sbin; done
make が正しく完了すれば、ncpfs/bin ディレクトリに ncpfs.o という ファイルもできあがっているはずです。これは ncpfs のカーネルモジュール です。これもどこか都合のよいところにコピーしておきましょう。私の debian システムでは、 /lib/modules/1.2.13/fs ディレクトリに コピーし、ncpfs を /etc/modules ファイルに追加しました。これによって ブート時に ncpfs が自動的に起動されます。 もしあなたが他のパッケージを使っているのならば、どこが適切かを 調べてください。 またはただ単に/etcディレクトリにコピーするするか、です。
手動でモジュールをロードするには次のコマンドを使います:
# insmod ncpfs.o
1.3.53 版のカーネルの ncp 機能はうまく動作しないので、 もしあなたがバージョン 1.3.53 カーネルを使用しようとした場合には 警告を受けます。1.3.54 以降のカーネルを使用してください。
1.3.54 以降のカーネルを使用する場合には、すでにカーネルのソースの中に ncpfs 機能は含まれています。以下の質問に対して、'Y' と答えるだけです:
...
...
The IPX protocol ?
...
...
NCP filesystem support (to mount NetWare volumes) ?
...
...
IPX ツールを構築するためには、 1.2.* カーネルのための指示にも 従う必要があります。Makefile を少しだけ変更する必要があることに注意して ください。変更点はファイルの中にも記述されていますが、簡単に言って、 以下の変更を Makefile に加える必要があります:
# SUBDIRS += kernel-1.2/src
# INCLUDES = -I$(TOPDIR)/kernel-1.2
これは、1.2.* 版のカーネルの場合にのみ必要な変更です。
IPX ネットワークソフトウエアの設定には、二種類の方法があります。 IPX ネットワークの情報について、すべての情報を手動で設定する 方法と、ソフトウエア自身に自動的に適正な情報を決定させる方法です。 ほとんどのインストールの場合、この自動的な方法でうまくいく でしょう。もしこれがうまくいかない場合には、手動設定するために 以下の "IPXツール" の章を読んでください。
# ipx_configure --auto_interface=on --auto_primary=on
IPX ネットワークの設定が終わったら、slist コマンドを使うこと によって、あなたのネットワーク上にあるすべての Novell ファイルサーバ を見ることができるはずです:
# slist
もし slist コマンドが 'ncp_connect: Invalid argument' などのメッセージを 表示した場合には、恐らくカーネルが IPX をサポートしていないの でしょう。ちゃんと正しいカーネルでブートしたかどうかなどを確認して みましょう。もし slist コマンドがすべてのファイルサーバを表示しない 場合には、手動でネットワークの設定をおこなう必要があるかもしれません。
IPX ネットワークソフトウエアがうまく動作していれば、Novell の ファイルサーバボリュームを Linux ファイルシステムにマウントできる はずです。この目的のために ncpmount コマンドが使われますが、 少なくとも以下の情報を指定する必要があります:
以下の例は、ファイルサーバ ACCT_FS01 にユーザ guest で、 パスワード無しで、/mnt/Accounts ディレクトリにマウントログイン する場合の例です:
# ncpmount -S ACCT_FS01 /mnt/Accounts -U guest -n
この例では、-n オプションによってログインにパスワードが不要なことを 指定しています。 同様のログインでパスワード指定が必要な場合には以下のようになります。
# ncpmount -S ACCT_FS01 /mnt/Accounts -U guest -P secret
-n オプションも -P オプションも指定しなかった場合、パスワードの 入力を促されます。
マウントがうまくいけば、マウントポイントの下のディレクトリ として、ログインに使われたユーザ ID でアクセス可能なボリューム が見えるはずです。また、ディレクトリ構造を渡り歩く (traverse) ことが できるはずです。NCP は uid/gid による所有権 (ownership) を提供していない ため、すべてのファイルは、マウントポイントディレクトリの所有権を ひきつぐことになります。Linux ユーザ間でマウントを共有する場合に は、この点について留意してください。
プリント機能がうまく動作しているかどうかをチェックするには nprint コマンドを使います。nprint コマンドを使うと、Nerware プリントキュー に対してファイルをプリントすることができます。pqlist を使うと Netware サーバ上で使用できるプリントキューを見る事ができます。 どちらのコマンドもユーザーネームとパスワードが必要ですので、 簡単にプリントするためには、なにかシェルスクリプトを作るのが よいでしょう。例えば例としては:
# pqlist -S ACCT_FS01 -U guest -n
# nprint -S ACCT_FS01 -q LASER -U guest -n filename.txt
ncpmount コマンドと同様のログオン方法です。上に述べた例は、ACCT_FS01 というファイルサーバにパスワードなしの guest アカウントで、LASER という プリントキューが存在し、それに対して guest がプリントを許されている という場合の例です。
ncp マウントを恒久的に設定する必要がある場合には上で述べたような コマンドを rc ファイルから実行する事によって、ブート時に自動的に おこなうことができます。私のお薦めは /etc/rc.local ファイルにこれら の設定を記述しておくことです。 私は /etc/init.d ディレクトリの下の NetWare というファイルにこれらの 設定を記述しておき、/etc/rc2.d ディレクトリに適切なシンボリックリンク を張っています。 例えば以下のようにするのもいいかもしれません:
#
# Start the ncp filesystem
/sbin/insmod /lib/modules/1.2.13/fs/ncpfs.o
# configure the IPX network
ipx_configure --auto_interface=on --auto_primary=on
# guest login to the Accounting fileserver
ncpmount ACCT_FS01 /mnt/Accounts -U guest -n
#
NCP マウントの設定には、$HOME/.nwclient ファイルを作る、という もうひとつの方法があります。このファイルには一時的または ユーザごとに必要なNCPマウントを記述しておきます。 これにより、毎回マウントの詳細を指定することなく、詳細なマウント 方法を記述しておくことができます。
このファイルの形式は明快です: たとえば次のコマンドを実行すると、ログイン名 TERRY で、/home/terry/docs ディレクトリに DOCS_FS01 をマウントします(ACCT_FS01 ではなく)。DOCS_FS01 が選択されなかったのは、マウントコマンドのオプションにファイルサーバ を指定しなかったからです。
$ ncpmount /home/terry/docs
また、次のコマンドを実行すると、DOCS_FS01 のかわりに ACCT_FS01 を ログイン名 GUEST でマウントします。
$ ncpmount -S ACCT_FS01 /home/terry/docs
注意: この機能がうまく動作するためには、$HOME/.nwclient ファイルの パーミッションが、0600 になっている必要があります。これには、次の コマンドを実行します:
$ chmod 0600 $HOME/.nwclient
ルート以外のユーザにこの機能を使う事を許すのであれば、ncpmount コマンドの Root の Set Userid ビットを立てておくことが必要です。 これには次のコマンドを実行します:
# chmod 4755 ncpmount