   NDTPD: NDTP サーバ、笠原基之

   Copyright (C) 1997, 1998, 1999  Motoyuki Kasahara

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided that
the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be stated in a
translation approved by Free Software Foundation, Inc.

   この文書は第 2.3.6 版です。NDTPD バージョン 2.3.6 に対応しています。

はじめに
********

   NDTPD は TCP 上の NDTP (Network Disctionary Transfer Protocol) とい
うプロトコルを用いて、 CD-ROM 書籍へのアクセスを行うサーバです。
dserver は NDTPD に置き換えることが可能です。

   NDTPD は UNIX 系 OS のシステム上で動作させることができます。 EB,
EBG, EBXA, EBXA-C, S-EBXA および EPWING 形式の CD-ROM 書籍に対応してい
ます。 これらの形式の CD-ROM 書籍は、日本で一般的に使われています。
CD-ROM 書籍自体は ISO 9660 形式になっていますので、他の ISO 9660 形式
と同じ要領でマウントすることができます。

   サーバのコマンドは `ndtpd' といいます。 `ndtpd' は、デフォルトではス
タンドアロンで動作しますが、`inetd' 経由で起動するようにすることも可能
です。

   NDTPD はフリーソフトウェアです。あなたは、Free Software Foundation
が公表した GNU General Public License (GNU 一般公有使用許諾) バージョ
ン 2 あるいはそれ以降の各バージョンの中からいずれかを選択し、そのバージ
ョンが定める条項に従って本プログラムを再頒布または変更することができま
す。

   NDTPD は有用とは思いますが、頒布にあたっては、市場性及び特定目的適合
性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細につい
ては GNU General Public License をお読み下さい。

   加えて、あなたは自分の所有する CD-ROM 書籍の使用許諾も守らなくてはい
けません。 NDTPD はフリーソフトウェアですが、あなたの書籍が自由に使え
るものであるとは限りません。 使用を許されていないホストやユーザに対し
て、あなたの書籍を公開しないで下さい。

   この文書は NDTPD バージョン 2.3.6 に対応しています。

   最新の NDTPD は <ftp://ftp.sra.co.jp/pub/net/ndtp/ndtpd/> から入手で
きます。

   NDTPD に関する情報は <http://www.sra.co.jp/people/m-kasahr/ndtpd/>
から得ることができます。

   コメントやバグの報告は <m-kasahr@sra.co.jp> 宛に、日本語か英語でお送
り下さい。

NDTPD のインストール
********************

基本的なインストール方法
========================

   以下に記したのは、一般的なインストールの方法です。

   `configure' シェルスクリプトは、コンパイル中に使用される、システム
依存のチェック項目の値を正しく推定しようと努めます。 `configure'は、判
定した値を利用してパッケージ中の各ディレクトリの
`Makefile'を生成します。 加えて、システムに依存する定義内容を記した
`.h' ファイルを一つもしくはいくつか生成することもあります。 最後に、
`configure' は `config.status' というシェルスクリプト `config.cache'、
`config.log' というファイルを生成します。 `config.status' は、現在のコ
ンフィグレーションを後で再度生成するときに用います。 `config.cache'
は、再度コンフィグレーションを行うときにスピードアップを図るために、テ
ストの結果を保存してあります。 `config.log' には、(主に `configure' の
デバッグに役立つような) コンピュータの出力が記録されています。

   あなたがパッケージをコンパイルするにあたって、特別なことをしなければ
ならなかったときは、 `configure'
がどのような判定をしていたのかを調べてみて、`README' に記されたアドレス
に宛てて、相違点や指摘をメールで送って下さい。 そうすれば、次回のリリ
ースに向けて検討されると思います。 もし、`config.cache' に見られたくな
い結果が記録されている場合は、その部分を削除したり編集したりしても構い
ません。

   `configure.in' というファイルは、 `autoconf' というプログラムが
`configure' を生成するときに参照します。 あなたにとって `configure.in'
というファイルが必要になるのは、 `configure.in' の内容を変更したい場合
か、`autoconf' のもっと新しいバージョンで `configure' を生成したい場合
の、いずれかだけです。

パッケージの最も単純なコンパイル方法は次の通りです。

  1. パッケージのソースコードが置かれているディレクトリに移動 (`cd')
     し、 あなたのシステム向けのコンフィグレーションを行うために
     `./configure' を実行します。 あなたが古いバージョンの System V で
     `csh' を使用している場合は、 `csh' 自身がスクリプトを実行してしま
     わないように、 `sh. /configure' とする必要があるかも知れません。

     `configure' の実行には少々時間がかかります。 実行している間は、ど
     のような項目をチェックしているのかを記したメッセージが出力されま
     す。

  2. `make' を実行してパッケージをコンパイルします。

  3. 任意で、パッケージに付属しているセルフテストを実行する場合は、
     `make check' を実行します。

  4. `make install' を実行して、プログラムおよびデータファイル、ドキュ
     メントをインストールします。

  5. `make clean' を実行すると、生成されたプログラムのバイナリファイル
     やオブジェクトファイルを、ソースコードの置かれたディレクトリから
     消すことができます。 一緒に `configure' が生成したファイルも消す
     には (こうすることで、別の種類のコンピュータでパッケージをコンパ
     イルできます)、 `make distclean' を実行します。 `make
     maintainer-clean' というターゲットも用意されていますが、これは主
     にそのパッケージの開発者のためのものです。 `make maintainer-clean'
     を実行してしまうと、パッケージに元々含まれていたファイルを再生成
     するために、他のいろいろなプログラムを入手しなくてはいけなくなる
     かも知れません。

コンパイラとコンパイルオプション
================================

   システムによっては、`configure' スクリプトが理解していない、コンパ
イルやリンクのための特別なオプションを与える必要があります。 環境変数を
通して、`configure' に対して初期値を与えることができます。 Bourne シェ
ルと互換性のあるシェルを使用している場合は、次のようにします。
     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

`env' というコマンドがシステムにあるならば、次のようにすることもできま
す。
     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

複数のアーキテクチャでのインストール
====================================

   オブジェクトファイルをアーキテクチャ毎に別々のディレクトリに置くよう
にすることにより、種類の異なる複数のコンピュータが、パッケージを同時に
コンパイルできます。 これを行うには、GNU `make' のように、`VPATH' 変数
に対応した `make' を使用する必要があります。 オブジェクトファイルや実行
形式のファイルを置いておきたいディレクトリに移動 (`cd') して、そこで
`configure' スクリプトを実行します。 `configure' は、自身の存在するディ
レクトリおよび `..' にソースコードがあるかどうかを自動的に調べます。

   `VPATH' 変数に対応していない `make' を使用している場合は、ソースコ
ードディレクトリの下で、一度に一つのアーキテクチャずつコンパイルしてい
くしかありません。一つのアーキテクチャのコンパイルが終わったら、別のア
ーキテクチャでコンパイルするために再コンフィグレーションを行う前に
`make distclean' を実行して下さい。

インストール名
==============

   デフォルトでは、`make install' を実行すると、パッケージ中のファイル
が `/usr/local/bin'、 `/usr/local/man' などにインストールされます。
`configure' に対して `--prefix=パス' オプションを指定することで、
`/usr/local' 以外のインストール先を指定するとができまます。

   アーキテクチャに依存したファイルとそうでないファイルを、それぞれ異な
ったインストール先にインストールすることも可能です。 `configure' に対
して `--exec-prefix=パス' を指定すると、 プログラムやライブラリなどのイ
ンストール先がパスに変わります。
ドキュメントや、データファイルなどは、通常のインストール先にインストー
ルされます。

   加えて、あなたが通常とは異なったディレクトリレイアウトを採用している
場合は、`--bindir=パス' といったオプションを指定することで、特定の種
類のファイルのインストール先だけを変えることができます。 `configure
--help' を実行すると、どのようなディレクトリを変更できるのか、どのよう
な種類のファイルがどのディレクトリにインストールされるのかが分かります。

   パッケージがサポートしているならば、 `configure' に
`--program-prefix=接頭辞' や `--program-suffix=接尾辞' というオプション
を与えることで、 インストール時にプログラム名に接頭辞や接尾辞を付加する
ことができます。

取捨選択の可能な機能
====================

   パッケージによっては、`configure' が `--enable-機能' オプションを認
識することがあります。 ここで機能は、パッケージにおいて取捨選択の可能
な機能を表します。 また、`--with-パッケージ' オプションを認識することも
あります。 ここでパッケージは、 `gnu-as' や (X
ウィンドウシステムのための) `x' といったものです。 `README' ファイルで
は、どのような `--enable-'、`--with-' オプションをパッケージが認識する
のか、記しておくべきです。

   一般に、X ウィンドウシステムを使用しているパッケージでは、 `configure'
は X の include ファイルとライブラリファイルを自動的に見つけ出すことが
できますが、見つけられない場合は、 `configure' のオプション
`--x-includes=ディレクトリ' と `--x-libraries=ディレクトリ' を用いるこ
とでディレクトリの位置を明示的に指定することができます。

システムの種類の指定
====================

   設定項目によっては、 `configure'
が自動的に識別できなくても、パッケージが動作するホストの種類を基に決定
しなければならないときもあります。 通常、`configure' はそのホストの種類
を識別することができますが、もしも `configure' がホストの種類を識別で
きないという旨のメッセージを出力してきたときは、`--host=種類' オプショ
ンを与えて下さい。 種類は `sun4' のようなシステムの種類を表した短い名
前か、あるいは次のように 3 つの項からなる正式名称のいずれかです。
     CPU-社名-システム

それぞれの項にどのような値が指定可能なのかについては、`config.sub' ファ
イルをご覧下さい。 パッケージが `config.sub' を含んでいないのであれば、
そのパッケージはホストの種類を識別する必要がないことを意味しています。

   あなたがクロスコンパイルのためのコンパイラツールをインストールしよう
としている場合は、`--target=種類' オプションを使用することで、どのホ
スト向けのコードを生成させるのかを指定できます。そして、 `--build=種類'
オプションを使用することで、パッケージをコンパイルしようとしているシス
テムの種類を指定することができます。

デフォルト値の共有
==================

   複数の `configure' スクリプトに対して共通のデフォルト値を設定したい
ときは、サイト毎に `config.site' というシェルスクリプトを作成し、そこ
に `CC' や `cache_file'、`prefix' といった変数のデフォルト値を記述して
下さい。 `configure' は `PREFIX/share/config.site' があれば、 それを調
べ、次に `PREFIX/etc/config.site' があればそれを調べます。 あるいは、
環境変数 `CONFIG_SITE' を設定することで、サイト固有のスクリプトの位置
を指定することもできます。 ただし、すべての `configure' スクリプトがサ
イト固有のスクリプトを見に行くわけではありませんので、ご注意下さい。

`configure' の動作の制御
========================

   `configure' は次に記したオプションを認識します。

`--cache-file=ファイル'
     テストの結果の読み込みや書き出しに使用するファイルは、通常
     `./config.cache' ですが、代わりにファイルを用います。
     `configure' をデバッグするときは、ファイルに `/dev/null' を指定す
     ることで、キャッシュを抑制することができます。

`--help'
     `configure' のオプションの一覧を表示して、終了します。

`--quiet'
`--silent'
`-q'
     どのチェック項目を行っているのかを示すメッセージを出力しません。
     通常のメッセージ出力をすべて抑制するには、 `/dev/null'
     へリダイレクトして下さい (ただし、エラーメッセージについては出力さ
     れてしまいますが)。

`--srcdir=ディレクトリ'
     パッケージのソースコードを探し出す際に、ディレクトリを探します。
     通常、`configure' は自動的にディレクトリを決定します。

`--version'
     `configure' スクリプトがどのバージョンの Autoconf
     によって生成されたのかを表示して、終了します。

役に立つ場面は限られますが、`configure' には他にもいくつかのオプション
が用意されています。

選択可能な機能の一覧
====================

   本パッケージの `configure' は以下に記した `--enable-' および
`--with-' オプションを認識します。

`--enable-ja-doc'
     日本語のドキュメントをインストールします。 デフォルトの値は `yes'
     です。

`--with-logdir=DIR'
     `ndtpdaily' がローテーションを行う syslog ファイルが置かれるディ
     レクトリのデフォルトとして DIR を指定します。

`--with-zlib'
     インストールされた zlib ライブラリを使用します。 このパッケージに
     は zlib のソースコードが含まれています。 通常はこれらがコンパイル
     されて `ndtpd' にリンクされますが、このオプションを用いた場合、イ
     ンストールされている zlib ライブラリが使用されます。

`--with-zlib-includes=DIR'
     DIR ディレクトリにインストールされている zlib のヘッダファイルを
     参照します。 `--with-zlib' オプションも `--with-eb' オプションも指
     定していない場合、このオプションは無視されます。

`--with-zlib-libraries=DIR'
     DIR ディレクトリにインストールされている zlib のライブラリファイ
     ルを参照します。 `--with-zlib' オプションも `--with-eb' オプション
     も指定していない場合、このオプションは無視されます。

`--with-eb'
     このパッケージには EB ライブラリのソースコードが含まれています。
     通常はこれらがコンパイルされて `ndtpd' にリンクされますが、このオ
     プションを用いた場合、インストールされている EB
     ライブラリが使用されます。 このオプションは、暗黙的に
     `--with-zlib' も指定したことになります。

`--with-eb-includes=DIR'
     DIR ディレクトリにインストールされている EB ライブラリのヘッダフ
     ァイルを参照します。 `--with-eb' オプションを指定していない場合、
     このオプションは無視されます。

`--with-eb-libraries=DIR'
     DIR ディレクトリにインストールされている EB ライブラリのライブラ
     リファイルを参照します。 `--with-eb' オプションを指定していない場
     合、このオプションは無視されます。

`--with-gnu-ld'
     C コンパイラが GNU ld を使用していると仮定します。 デフォルトは、
     `no' です。

`--enable-shared'
     共有ライブラリ版の EB ライブラリを作成します。 デフォルトは、 `yes'
     です。

`--enable-static'
     静的ライブラリ版の EB ライブラリを作成します。 デフォルトは、 `yes'
     です。

設定ファイル
************

   `ndtpd' を始動させるためには、まず設定ファイルを編集する必要があり
ます。 `ndtpd' は始動時および再始動時にこのファイルを読み込みます。 こ
のファイルの内容によって、サーバの様々な挙動が決定されます。

   NDTPD を `/usr/local' 以下にインストールし、かつ、マシン固有の読み
込み専用のデータを置くディレクトリ (`sysconfdir') の位置を変更していな
ければ、設定ファイルはデフォルトで `/usr/local/etc/ndtpd.conf' になりま
す。 設定ファイルの位置は、 `ndtpd' のコマンドラインオプション
`--configuration-file' (あるいは `-c') を用いることで変更が可能です
(see `ndtpd' のオプション)。

   設定ファイルの中では、空行、および空白以外の最初の文字がハッシュ記号
(`#') である行は無視されます。 他の行はすべて、"単独ディレクティブ
(single directive)" か "複合ディレクティブ(group directive)" のいずれ
かでなくてはなりません。 単独ディレクティブと複合ディレクティブは、ど
のような順序で定義しても差し支えありません。

   各行は、改行文字を含め 511 文字を越えてはなりません。

単独ディレクティブの一般形
==========================

   単独ディレクティブとは、 1 行で完結するディレクティブ (指示命令)
です。 単独ディレクティブの一般形は次の通りです。

     ディレクティブの名前    ディレクティブの値

以下の例では、`ndtp-port' がディレクティブの名前、`2010' がその値です。

     ndtp-port    2010

ディレクティブ名の大文字と小文字は区別されますので、 `ndtp-port' を
`NDTP-port' と書くことはできません。 ディレクティブの名前と値の区切りに
は、空白とタブを用います。 連続した空白とタブが、行頭および行末にあった
場合、それらは無視されます。

単独ディレクティブの一覧
========================

   単独ディレクティブには次のようなものがあります。

`server-name'
     `server-name' ディレクティブでは、サーバのホスト名を指定します。
     このディレクティブは必ずしも定義する必要はありません。 また、2 度
     以上定義することはできません。 このディレクティブを定義しなかった
     場合は、自動的に `ndtpd' がホスト名を得ようとします。

`ndtp-port'
     `ndtp-port'
     ディレクティブでは、サーバが見張るポートの番号を指定します。 ディ
     レクティブの値は、TCP のサービス名 (例: `NDTP') か、ポート番号 (例
     : `2010') でなくてはいけません。 `ndtpd' を `inetd' 経由で起動した
     場合は、このディレクティブは無視されます。 このディレクティブは必
     ずしも定義する必要はありません。 また、2 度以上定義することはでき
     ません。 デフォルトの値は `NDTP' です。

`user'
     `user' ディレクティブでは、`ndtpd' プロセスを所有するユーザを指定
     します。 ディレクティブの値は、ユーザ名 (例 : `nobody') か、ユーザ
     ID (例: `65535') でなくてはいけません。 別のユーザに所有ユーザを変
     える場合は、`ndtpd' を起動したときの所有ユーザが `root' でなくて
     はいけません。 所有ユーザの変更に失敗すると、`ndtpd' は走行の継続
     を断念します。 このディレクティブは必ずしも定義する必要はありませ
     ん。 また、2 度以上定義することはできません。 このディレクティブを
     定義しなかった場合、`ndtpd' プロセスの所有ユーザは変化しません。

     `ndtpuser' のようなダミーのユーザアカウントを一つ作って、それをこ
     のディレクティブで指定することをお薦めします。

`group'
     `group' ディレクティブでは、`ndtpd' プロセスのグループを指定しま
     す。 ディレクティブの値は、ユーザ名 (例 : `nogroup') か、グループ
     ID (例 : `65534') でなくてはいけません。
     グループの変更に失敗すると、`ndtpd' は走行の継続を断念します。 こ
     のディレクティブは必ずしも定義する必要はありません。 また、2 度以
     上定義することもできません。 このディレクティブを定義しなかった場
     合、`ndtpd' プロセスのグループは変化しません。

     `ndtpgrp'
     のようなダミーのグループアカウントを一つ作って、それをこのディレク
     ティブで指定することをお薦めします。

`max-clients'
     `max-clients' ディレクティブでは、同時に `ndtpd' に接続できるクラ
     イアントの数の上限を指定します。 ディレクティブの値は、0 以上の整
     数でなくてはいけません。 このディレクティブは必ずしも定義する必要
     はありません。 また、2 度以上定義することはできません。 デフォルト
     の値は `1' です。 ディレクティブの値を 0 に設定すると、無制限にな
     ります。

`hosts'
     `hosts' ディレクティブでは、どのホストが `ndtpd' に接続でき、 どの
     ホストが接続できないのかを指定します。 ディレクティブの値は IP ア
     ドレス、ホスト名、アドレス/ネットマスクのいずれかです。 加えて、
     直前に感嘆符 (`!') を付けることができます。 ディレクティブの値が感
     嘆符で始まっていた場合は、それに続く IP アドレスまたはホスト名に
     マッチするホストからの接続要求は拒否します。 感嘆符がない場合は、
     ディレクティブの値にマッチするホストからの接続要求は許可します。

          # `host.xxx.yyy.jp' からの接続を許可する。
          hosts host.xxx.yyy.jp

          # `127.0.0.1' からの接続を許可する。
          hosts 127.0.0.1

          # `192.24.1.0/255.255.255.0'.からの接続を拒否する。
          hosts !192.24.1.0/255.255.255.0

     ホスト名に限り、アスタリスク (`*') と疑問符 (`?') を使うことがで
     きます。 アスタリスクは、先頭の感嘆符を除いた任意の 0 文字以上の文
     字列にマッチします。

          # `xxx.yyy.jp' ドメインのホストからの接続を拒否する。
          hosts !*.xxx.yyy.jp

          # どのホストからの接続も許可する。
          hosts *

     疑問符は "未知のホスト名" を表します。 疑問符は、ホスト名が分から
     ないホストにマッチします。

          # ホスト名が分からないホストからの接続を拒否する。
          hosts !?

     このディレクティブは必ずしも定義する必要はありません。 また、何度
     でも定義することが可能です。 設定ファイルに `hosts' ディレクティブ
     が無くてもエラーにはなりませんが、どのクライアントもサーバにはア
     クセスできなくなります。 いずれの `hosts' ディレクティブにもマッチ
     しないホストからの接続要求は拒否されます。 複数の `hosts' にマッ
     チする場合は、設定ファイルの先頭に最も近いものが採用されます。

     以下の例では、 `sub1.xxx.yyy.jp'
     ドメインに属するホストからの接続要求は拒否していますが、それ以外の
     `xxx.yyy.jp'
     ドメインに属するホストからの接続要求は許可しています。

          hosts !*.sub1.xxx.yyy.jp
          hosts *.xxx.yyy.jp

     この例では、ディレクティブの順序は重要です。 順序を引っくり返して
     しまうと、`sub1.xxx.yyy.jp' を含め、 `xxx.yyy.jp' ドメインに属する
     すべてのホストがサーバに接続できてしまいます。

          # 間違い!!!
          hosts *.xxx.yyy.jp
          hosts !*.sub1.xxx.yyy.jp

`timeout'
     `timeout' ディレクティブでは、交信が途絶えたクライアントとの接続を
     `ndtpd' が切断するまでの秒数を指定します。 ディレクティブの値は、 0
     以上の整数でなくてはいけません。 このディレクティブは必ずしも定義
     する必要はありません。 また、2 度以上定義することはできません。 デ
     フォルトの値は `900' (15分) です。 ディレクティブの値を 0 に設定す
     ると、時間切れによる切断は行いません。

`ident-hosts'
     `ident-hosts' ディレクティブは、どのホストに対して "Identification
     プロトコル" を用いるかを指定します。 Identification プロトコルは、
     クライアントのホスト上のユーザを識別するためのプロトコルです。 プ
     ロトコルの仕様については、 RFC1413 で説明がなされています。
     ただし、NDTPD ではこのプロトコルを補助的な情報としてしか用いていま
     せん。 ユーザ単位のアクセス許可の制御のために用いることはできませ
     ん。

     このディレクティブの表記方法は、 `hosts' ディレクティブと同じです。
     ディレクティブの値が感嘆符 (`!') で始まる場合を除き、ディレクティ
     ブの値にマッチしたホストに対して、`ndtpd' は Identification プロ
     トコルを使います。

     このディレクティブは必ずしも定義する必要はありません。 また、何度
     でも定義することが可能です。 いずれの `ident-hosts' ディレクティブ
     にもマッチしないホストに対しては、Identification プロトコルを用い
     ません。 複数の `ident-hosts' にマッチする場合は、設定ファイルの先
     頭に最も近いものが採用されます。

`ident-timeout'
     `ident-timeout' ディレクティブでは、Identification プロトコルを用
     いたクライアント上のユーザの識別を `ndtpd' が断念するまでの秒数を
     指定します。 ディレクティブの値は、0 以上の整数でなくてはいけませ
     ん。 このディレクティブは必ずしも定義する必要はありません。 また、
     2 度以上定義することはできません。 デフォルトの値は `30' です。 デ
     ィレクティブの値を 0 に設定すると、時間切れよる識別の断念は行いま
     せん。

`work-path'
     `work-path' ディレクティブでは、`ndtpd' の作業用ディレクトリのパ
     スを指定します (see 作業用ディレクトリ)。 デ
     ィレクティブの値は、絶対パスでなくてはいけません。 `ndtpd' はこの
     ディレクトリの下に作業用のファイルをいくつか作成します。 また、異
     常終了によってコアファイルをダンプするときは、このディレクトリに
     作成します。
     このディレクティブは必ずしも定義する必要はありません。 また、2 度
     以上定義することはできません。 NDTPD を `/usr/local' 以下にインス
     トールし、かつ、マシン固有の更新されうるデータを置くディレクトリ
     (`localstatedir') を変更していなければ、デフォルトの値は
     `/usr/local/var/ndtpd/' になります。

`max-hits'
     `max-hits' ディレクティブでは、一回の検索で `ndtpd' が返すヒット
     数の上限を指定します。 `ndtpd' は、このディレクティブで指定された
     値と同じだけのヒット数を見つけた時点で、ただちに検索を中止します。
     このディレクティブは必ずしも定義する必要はありません。 また、2 度
     以上定義することはできません。 デフォルトの値は `50' です。 ディレ
     クティブの値を 0 に設定すると、無制限になります。

`max-text-size'
     `max-text-size' ディレクティブは、 `ndtpd' がクライアントへの応答
     1 回で返すテキストのバイト数の上限を指定します。 このディレクティ
     ブは必ずしも定義する必要はありません。 また、2 度以上定義すること
     はできません。 デフォルトの値は `32768' です。 ディレクティブの値
     を 0 に設定すると、無制限になります。

`syslog-facility'
     `syslog-facility' ディレクティブでは、syslog のファシリティを指定
     します (例: `daemon', `local0' など)。 このディレクティブは必ずし
     も定義する必要はありません。 また、2 度以上定義することはできませ
     ん。 デフォルトでは `daemon' を用います。 また、`ndtpd' が設定ファ
     イルを読み込み終わるまでは、`daemon' が用いられます。

複合ディレクティブの一般形
==========================

   複合ディレクティブ (指示命令) とは、記述が設定ファイル内の複数行に渡
るディレクティブです。 複合ディレクティブの一般形は次の通りです。

     begin 複合ディレクティブの名前
         副ディレクティブの名前    副ディレクティブの値
                  :
                  : (repeated)
                  :
     end

キーワード `begin' は、複合ディレクティブの開始を表します。 `begin' は
後ろに複合ディレクティブの名前を引数として取ります。 `begin' と複合
ディレクティブの名前は空白かタブで区切り、両方とも同じ行の中に置きま
す。 キーワード `end' は、複合ディレクティブの終了を表します。 `end'
は、単独で 1 行にして置きます。

   NDTPD バージョン 2.3.6 では、使用できる複合ディレクティブの名前は
`book' だけです。 それぞれの "副ディレクティブ" は、`begin' と `end' の
行の間に置きます。 副ディレクティブに関する記述の一般的な規則は、単独
ディレクティブと変わりません (たとえば、副ディレクティブの名前と副デ
ィレクティブの値は空白かタブで区切ることなど)。

   以下は、 `book' 複合ディレクティブの記述例です。

     begin book
             name            EJDICT
             title           English Japanese Dictionary
             path            /mnt/cdrom
             hosts           127.0.0.1
             hosts           host.your.domain
     end

`book' 複合ディレクティブ
=========================

   一つの `book' 複合ディレクティブは一冊の CD-ROM 書籍に対応しますの
で、 CD-ROM
書籍一冊ごとにこの複合ディレクティブを定義しなくてはいけません。 `book'
複合ディレクティブの副ディレクティブとして、NDTPD が認識するものは次の
通りです。

`name'
     `name' 副ディレクティブでは、その書籍の名前を指定します。 副ディレ
     クティブの値に用いることができるのは、英大文字 (`A'..`Z')、数字
     (`0'..`9')、下線 (`_')、 ハイフン (`-') だけで、長さは 14 文字まで
     です。 この名前は、書籍を識別するために使いますので、各書籍には異
     なる名前を付けなくてはいけません。 この副ディレクティブは、それぞ
     れの `book' 複合ディレクティブに必須です。 また、1 つの `book' 複
     合ディレクティブで 2 度以上定義することはできません。

`title'
     `title' 副ディレクティブでは、その書籍の題名を指定します。 副ディ
     レクティブの値には、改行文字とナル文字 (`\0') を除く任意の文字を
     使って指定することができますが、長さは 80 バイトまでです。 EUC
     (Extended Unix Code) を用いれば日本語の文字も使用可能です。 副ディ
     レクティブの値の中に空白やタブを用いることも可能で、これらは他の文
     字と同じく一文字として解釈されます。

     この副ディレクティブは、それぞれの `book'
     複合ディレクティブに必須です。 また、1 つの `book' 複合ディレクテ
     ィブで 2 度以上定義することはできません。

`path'
     `path' 副ディレクティブでは、その書籍の絶対パスを指定します。 パス
     はその書籍のトップディレクトリ、つまり `CATALOG' または `CATALOGS'
     ファイルの存在するディレクトリを指してしなくてはいけません。

     この副ディレクティブは、それぞれの `book'
     複合ディレクティブに必須です。 また、1 つの `book' 複合ディレクテ
     ィブで 2 度以上定義することはできません。

`appendix-path'
     `appendix-path'
     副ディレクティブでは、その書籍に対応する付録データの絶対パスを指定
     します。 パスはその付録データのトップディレクトリ、つまり
     `CATALOG' または `CATALOGS' ファイルの存在するディレクトリを指して
     しなくてはいけません。

     この副ディレクティブは、必ずしも定義する必要はありません。 また、 1
     つの `book' 複合ディレクティブで 2
     度以上定義することはできません。 書籍を使う上で、付録データは必須
     ではありませんが、ないと外字が識別不可能になるため、読みづらいか
     も知れません。

`max-clients'
     `max-clients'
     副ディレクティブには、この書籍を同時にいくつのクライアントが使うこ
     とができるのかを指定します。 副ディレクティブの値には、0 以上の整
     数を指定します。 この副ディレクティブは、必ずしも定義する必要はあ
     りません。 また、1 つの `book' 複合ディレクティブで 2 度以上定義す
     ることはできません。 デフォルトの値は `1' です。 0 を指定すると、
     無制限になります。

`hosts'
     `hosts'
     副ディレクティブには、この書籍にどのホストがアクセスできて、 どの
     ホストができないのかを指定します。 この副ディレクティブは、必ずし
     も定義する必要はありません。 また、1 つの `book' 複合ディレクティ
     ブで何度でも定義することが可能です。 `book' 複合ディレクティブが
     `hosts' 副ディレクティブを持たなくてもエラーにはなりませんが、そ
     の書籍はどのクライアントからもアクセスできません。

     この副ディレクティブの表記方法は、単独ディレクティブの `hosts' と
     同じです。 副ディレクティブの値が感嘆符 (`!')
     で始まる場合を除き、副ディレクティブの値にマッチしたホストに対し
     て、`ndtpd' は書籍の使用を許可します。

     一つの `book' 複合ディレクティブの中のいずれの `hosts' 副ディレク
     ティブにもマッチしないホストは、その書籍を使用できません。 複数の
     `hosts' 副ディレクティブにマッチする場合は、複合ディレクティブの
     先頭に最も近いものが採用されます。

`alias-eiwa'
`alias-waei'
`alias-kojien'
     大抵の NDTP クライアントは、サーバと接続する度に書籍の一覧をサーバ
     から取得しますが、古い NDTP クライアントにはこれができません。 古
     い NDTP クライアントは、`eiwa'、`waei'、`kojien' という 3 つの決
     まった書籍名しか理解しません。 `eiwa' という別名は英和辞典用、
     `waei' は和英辞典用、 `kojien' は日本語の国語辞典用です。 NDTP サ
     ーバがこれら 3 つの書籍名を持った書籍を提供していることを、古い
     NDTP クライアントは前提としていますが、この規則はすでに時代遅れと
     なっています。

     このようなクライアントのために、この副ディレクティブを用いることで
     `eiwa', `waei', and `kojien' という書籍名を別名 (alias) として定義
     し、正式な書籍名と対応させることができます。 副ディレクティブの値
     には、その書籍に含まれる副本 (subbook)
     のディレクトリ名を記します。

     `ebinfo' コマンドを用いると、あなたの所有している書籍にどのような
     副本が含まれているのかを知ることができます。 NDTPD を
     `/usr/local' 以下にインストールし、かつ、一般ユーザが実行しうるコ
     マンドを置くディレクトリ (`bindir') を変更していなければ、
     `ebinfo' コマンドは `/usr/local/bin' にインストールされています。
     以下は `ebinfo' の実行例です。

          % ebinfo /mnt/cdrom
          disc type: EB/EBG/EBXA/EBXA-C/S-EBXA
          character code: JIS X 0208
          the number of subbooks: 2

          subbook 1:
            title: New English Japanese Dictionary (3rd edition)
            directory: EJDICT
            search methods: word endword keyword menu
            font sizes: 16 24 30 48
            narrow font characters: 0xa121 -- 0xa24e
            wide font characters: 0xa321 -- 0xa27e
          subbook 2:
            title: How to use the book
            directory: HOWTO
            search methods: word endword keyword menu
            font sizes: 16 24 30 48
            narrow font characters:
            wide font characters: 0xa321 -- 0xa27e

     `ebinfo' は `ndtpd' の設定ファイルは読み込まないので、その点はご
     注意下さい。 CD-ROM 書籍のトップディレクトリをコマンド行の引数で明
     示的に指定する必要があります (`ebinfo' についての詳細は
     `ebinfo' の実行 (ebinfo-ja))。

     この例では、2 つの副本が書籍には含まれており、それらのディレクトリ
     名は `EJDICT' と `HOWTO' だということが分かります。 そこで、 `eiwa'
     という別名を次のように定義することができます。

          alias-eiwa    EJDICT

     複数の別名を同一の副本に対応させることは可能ですが、それぞれの別名
     は設定ファイル内で一回しか定義できません。 これらの副ディレクティ
     ブは、必ずしも定義する必要はありません。

設定ファイルの例
================

   NDTPD を `/usr/local' 以下にインストールし、かつ、マシン固有の読み
込み専用のデータを置くディレクトリ (`sysconfdir') の位置を変更していな
ければ、この設定ファイルのサンプルは、デフォルトで
`/usr/local/etc/ndtpd.conf.sample' にインストールされています。

     ######################################################################
     # NDTPD の設定ファイルのサンプル
     # (このファイルを `ndtpd.conf' にコピーして、編集してください)
     ######################################################################

     ### サーバのホスト名
     ### (デフォルト: 自動的に決定される)
     # server-name	host.your.domain

     ### `ndtpd' が見張るポート番号
     ### (デフォルト: ndtp)
     # ndtp-port	ndtp

     ### `ndtpd' プロセスの所有ユーザ
     ### (デフォルト: なし)
     user		ndtpuser

     ### `ndtpd' プロセスのグループ
     ### (デフォルト: なし)
     group		ndtpgrp

     ### `ndtpd' に同時に接続できるクライアントの数
     ### (デフォルト: 1)
     # max-clients	1

     ### `ndtpd' に接続できるホスト、できないホスト
     ### (デフォルト: なし)
     hosts		127.0.0.1
     hosts		!?
     hosts		host.your.domain

     ### `ndtpd' が交信の途絶えたコネクションを切るまでの時間
     ### (デフォルト: 900)
     # timeout		900

     ### Identification プロトコルを使用するホスト、しないホスト
     ### (デフォルト: なし)
     # ident-hosts	!*

     ### `ndtpd' がクライアント上のユーザの識別を諦めるまでの時間
     ### (デフォルト: 30)
     # ident-timeout	30

     ### 作業用ディレクトリのパス
     ### `ndtpd' を起動する前に、このディレクトリを作り、`ndtpd' プロセス
     ### が書き込めるようにしておいて下さい。
     ### (デフォルト: /usr/local/var/ndtpd)
     # work-path	/usr/local/var/ndtpd

     ### 一回の検索で、`ndtpd' が返す、ヒットしたエントリの最大個数
     ### (デフォルト: 50)
     # max-hits	50

     ### クライアントへの一回の応答で、サーバが返すテキストの最大サイズ
     ### (default: 32768)
     # max-text-size		32768

     ### syslog のファシリティ
     ### (デフォルト: daemon)
     syslog-facility	local0

     ###
     ### 書籍のエントリ
     ###
     begin book
         ### 書籍名
         ### (必須)
         name		JITENBAN97

         ### 書籍の題名
         ### (必須)
         title		Jitenban 97

         ### 書籍のトップディレクトリ
         ### (必須)
         path		/cdrom

         ### 付録データのトップディレクトリ
         ### (デフォルト: なし)
         appendix-path	/usr/local/share/eb/appendix/jitenban97-2.1

         ### 同時にアクセスできるクライアントの数
         ### (デフォルト: 1)
         max-clients		1

         ### この書籍を利用できるホスト、できないホスト
         ### (デフォルト: なし)
         hosts		127.0.0.1
         hosts		!?
         hosts		host.your.domain

         ### 別名の定義
         ### (デフォルト: なし)
         alias-eiwa		CHUJITEN
         alias-waei		CHUJITEN
         alias-kojien	IWAKOKU
     end

     ### もし、NDTPD を介して読みたい CD-ROM 書籍が他にもあるなら、`book'
     ### 複合ディレクティブ  (`begin book' から `end' の間の行) を追加し
     ### て下さい。`book' 複合ディレクティブは、書籍一冊毎に必要です。

設定ファイルのチェックコマンド
******************************

   編集し終えた設定ファイルをチェックするには、 `ndtpcheck'
というチェックコマンドを使うと良いでしょう。 NDTPD を `/usr/local' 以下
にインストールし、かつ、システム管理用のコマンドを置くディレクトリ
(`sbindir') の位置を変更していなければ、 `ndtpcheck' は
`/usr/local/sbin' にインストールされています。

`ndtpcheck' の実行
==================

   `ndtpcheck' コマンドは、`ndtpd' と同じ要領で設定ファイルを読み込ん
で、チェックします。 `ndtpcheck' コマンドの一般的な起動方法は次の通りで
す。

     % /usr/local/sbin/ndtpcheck

ただし、NDTPD を `/usr/local' 以下にインストールし、かつ、システム管理
用のコマンドを置くディレクトリ (`sbindir') の位置を変更していないと仮
定しています。

   記述の誤りが発見されると、`ndtpcheck' は標準エラー出力に以下のよう
なメッセージを出力します。

     /usr/local/etc/ndtpd.conf:12: unknown user: noboy
     configuration failure

`ndtpcheck' のオプション
========================

   `ndtpcheck' コマンドは、伝統的な一文字オプション名と覚えやすい長い
オプション名の両方を扱うことができます。 長いオプション名を表すには、
`-' ではなく `--' を用います。 オプション名が一意に決まる範囲内で、名前
の後方部分を省略することができます。

   `ndtpcheck' コマンドは以下に挙げたオプションを解釈することができま
す。

`-c ファイル'
`--configuration-file ファイル'
     設定ファイルを指定します。 デフォルトのファイル名は、ヘルプメッセ
     ージの中に記されています。

`-d'
`--debug'
`--verbose'
     デバッグ用の情報を標準エラー出力に出力します。
     デバッグ用の情報は、設定ファイルの各行がどのように解釈されるのかを
     示してくれます。

`-h'
`--help'
     ヘルプメッセージを標準出力に出力して、終了します。

`-v'
`--version'
     バージョン番号を標準出力に出力して、終了します。

環境設定
********

   サーバ周辺のシステムの環境を設定をする必要があるかも知れません。 設
定には、おそらくスーパーユーザの権限が必要になるでしょう。

`services' ファイル
===================

   サービス名 `ndtp' があなたのシステムの `services' ファイルに無けれ
ば、追加しなくてはなりません (大抵の場合 `/etc/services')。 もし、あな
たのホストが NIS クライアントならば、代わりに NIS サーバ上にある NIS
のマップを修正しなくてはなりません。

   もし、次の行が無ければ足します。

     ndtp          tcp/2010

あなたのシステムの `services' ファイルには、最初から `tcp/2010' という
エントリが入っているものの、そのサービス名は次のように `ndtp' ではない
かも知れません。

     search        tcp/2010

この場合は、 `ndtp'
というサービス名を別名としてその行に追加して下さい。

     search        tcp/2010        ndtp

(詳しくは、あなたのシステムのマニュアルをご覧下さい。)

`syslog.conf' ファイル
======================

   `ndtpd' は syslog を使ってログを残します。 `syslogd' の設定ファイル
(大抵の場合 `/etc/syslog.conf') に、 次のような行を追加して下さい。

     local0.info   /usr/local/var/ndtpd/log/ndtpd.log

ただし、`ndtpd' が使用する syslog のファシリティは、`ndtpd' の設定ファ
イルの `syslog-facility' ディレクティブで決まることに注意して下さい
(see `syslog-facility')。

   もしログファイルが存在しなければ、空のファイルを作成します。

     % touch /usr/local/var/ndtpd/log/ndtpd.log
     % chmod 644 /usr/local/var/ndtpd/log/ndtpd.log

現在走行している `syslogd' プロセスの PID を調べます。 BSD 系のシステム
では、次のようにします。

     % ps axuww | grep syslogd

SYSV 系のシステムなら、次のようにします。

     % ps -ef | grep syslogd

(詳しくは、あなたのシステムのマニュアルをご覧下さい。)
`syslogd' が走っているならば、次のような行が見つかるはずです。

     root        63  0.0  1.1   188  316  ??  Is   10:04PM    0:00.16 syslogd

ハングアップシグナル (`SIGHUP') を `syslogd' に送ると、 `syslogd' は
`syslog.conf' を読み込み直します。

     % kill -HUP 63

あなたのシステムに `logger' コマンドがあれば、次のようにして `syslogd'
にテストメッセージを送ることができます。

     % logger -p local0.info "test message"

作業用ディレクトリ
==================

   `ndtpd' は作業用のディレクトリの下にいくつかのファイルを作成します。
このディレクトリは、設定ファイルの中の `work-path' ディレクティブで指
定することができます (see `work-path')。

   このディレクトリを作り、`ndtpd' プロセスとスーパーユーザだけが書き
込めるようにしておいて下さい。

     # mkdir /usr/local/var/ndtpd
     # chown ndtpuser /usr/local/var/ndtpd
     # chmod 755 /usr/local/var/ndtpd

(あなたのシステムでは `ndtpd' プロセスを所有するユーザが `ndtpuser' で
あると仮定しています。)

   ただし、`ndtpd' プロセスの所有ユーザとグループは、設定ファイルの中
の `user', `group' ディレクティブでそれぞれ決まりますので、注意して下
さい (see `user', および `group')
。

CD-ROM 書籍のマウント
=====================

   先に述べたように、 CD-ROM 書籍自体は ISO 9660 形式に従っています。
CD-ROM 書籍は、他の ISO 9660
形式のディスクと同じ方法でマウントすることができます。 もし、ISO 9660
の CD-ROM ディスクのマウント方法が分からなければ、あなたのシステムのマ
ニュアルを調べて下さい。

   一冊の書籍内では、ファイル名およびディレクトリ名に使われる英字は、大
文字、 小文字のいずれかに統一されていなくてはなりません。

   `ndtpd' は `ebzip' で圧縮された辞書をアクセスすることができます
(see 圧縮 (ebzip-ja))。

付録データの用意
================

   CD-ROM 書籍の多くは、独自に外字を定義しており、外字のビットマップデ
ータも書籍の中に収められています。 NDTP では外字のビットマップデータの
送信機能はありませんでしたが、 NDTPD 2.0
およびそれ以降のバージョンでは、ビットマップデータを転送するための拡張
が NDTP に対して施されています。

   ときとして、外字の表示なしに書籍を読むことは難しいことがあります。
そこで、 NDTPD ではバージョン 1.0 以来、"代替え文字列" ("alternation
text") という機能を用意しています。 "代替えの文字列" を用いることで、
NDTPD は外字を対応する文字列に置き換えます。 たとえば、書籍の中で合同
を表す記号 (平行な三本の横線) を外字として定義していた場合、NDTPD では
これを代替え文字列として `==' に置き換えることができます。
しかしながら、 CD-ROM
書籍には、これら代替え文字列のデータは収められていません。 あなたは、代
替え文字列データを自力で作るか、あるいは何処からか探して来なくてはいけ
ません。

   NDTPD は、代替え文字列のデータを "付録 (appendix)" パッケージから取
得します。 付録パッケージは、代替え文字列のデータや、対応する書籍に対し
ていくつかの付加的な情報を提供します。 つまり、あなたはこの付録パッケ
ージを自力で作るか、あるいは何処からか探して来なくてはいけないというこ
とです。

   付録パッケージは、`ebappendix' コマンド (see `ebappendix' の実行 (ebappendix-ja))
によって生成した数個のバイナリフ
ァイルで構成されます。 そのレイアウトは CD-ROM 書籍のものとよく似ていま
す。 トップディレクトリには `CATALOG' かもしくは `CATALOGS' ファイルが
存在し、各副本のデータは対応するサブディレクトリに配置されています。 ト
ップディレクトリのパスは、`ndtpd' の設定ファイルの中の、複合ディレクテ
ィブ `book' の `appendix-path' 副ディレクティブで指定します (see
`appendix-path')。

   NDTPD の公式な FTP サイト
(<ftp://ftp.sra.co.jp/pub/net/ndtp/ndtpd/appendix/>) に、付録パッケージ
がいくつか置いてあります。

   NDTPD バージョン 2.0 およびそれ以降では、クライアントにビットマップ
データを転送できますので、必ずしも付録を用意する必要はありません。 し
かしながら、NDTP のビットマップ転送拡張は、次のような理由から、必ずし
もこの問題を完全に解決するわけではありません。

   * サーバとクライアントの双方がビットマップ拡張に対応していないと、使
     えません。

   * 文字ベースのクライアントは、ビットマップイメージを表示できません。

   * ビットマップデータの転送と表示は、クライアント側で CPU とメモリを
     相応に消費します。 代替え文字列を使った方が、より速く、そして軽く
     なります。

   * CD-ROM 書籍の本文をカット・アンド・ペーストするときは、代替え文字
     列の方が便利です。

   付録パッケージが利用可能ならば、各書籍の `appendix-path' 副ディレク
トリを指定しておくことをお薦めします。

NDTP クライアントのインストール
===============================

   NDTPD の配布物には、NDTP クライアントは含まれていません。 NDTPD バー
ジョン 2.3.6 は以下のようなクライアントと通信することができます。
もし、まだクライアントをインストールしていなければ、これらの中のどれか
をインストールして下さい。

BookView
     BookView はグラフィックベースのクラアントで Tcl/Tk で書かれていま
     す。 公式の FTP サイトは
     <ftp://ftp.sra.co.jp/pub/net/ndtp/bookview/> です。 公式の WWW ホ
     ームページが <http://www.sra.co.jp/people/m-kasahr/bookview/> にあ
     ります。

diclookup-mule
     diclookup-mule は Emacs, Mule, XEmacs
     上で動作するクライアントです。 公式の FTP サイトは
     <ftp://ftp.math.s.chiba-u.ac.jp/tools/diclookup-mule/> です。

Dictionary.app
     Dictionary.app はグラフィックベースのクライアントで、 NEXTSTEP と
     OPENSTEP 上で動作します。 公式の FTP サイトは、
     <ftp://ftp.ecip.osaka-u.ac.jp/pub/NEXTSTEP/> です。

kenjiro
     kenjiro は文字ベースのクライアントで、UNIX 系 OS のシステム上で動
     作します。 ソースコードは dserver の配布物に含まれています。

     kenjiro にはバグがありますので、そのままでは NDTPD と通信すること
     ができませんが、このバグを直すパッチファイルが
     <ftp://ftp.sra.co.jp/pub/net/ndtp/misc/kenjiro-ndtpd.diff> にあり
     ます。 kenjiro を使用したければ、このパッチを当ててインストールし
     直して下さい。 パッチを当てた kenjiro は、dserver とも正しく通信す
     ることができます。

     元の kenjiro は古いタイプのクライアントで、 `eiwa', `waei',
     `kojien' という 3 つの決まった書籍名しか扱えません。
     <ftp://ftp.sra.co.jp/pub/net/ndtp/misc/kenjiro-dictlist.diff> にあ
     るパッチを当てることによって、任意の書籍名を理解するようになります。

Lookup
     Lookup は Emacs, Mule や XEmacs 上で動作する NDTP
     クライアントです。 公式の WWW ホームページは
     <http://www.ring.gr.jp/openlab/lookup/> です。

サーバの起動
************

   設定ファイルの編集を終えたならば、 `ndtpd' を起動することができます。
`ndtpd' は、スタンドアロンのデーモン、あるいは `inetd' の子プロセスと
して起動することができます。 デフォルトでは、スタンドアロンのデーモンと
して起動するようになっています。

   サーバへコネクションが頻繁に来ないなら、メモリの消費を抑えるために
`ndtpd' を `inetd' の子プロセスとして起動する方が良いでしょう。

   しかし、`inetd' によって起動される度に、`ndtpd' は設定ファイルを読
み込み、初期化のために CD-ROM 書籍からデータを部分的に読み込みます。 コ
ネクションが頻繁に来るようなら、`ndtpd' をスタンドアロンのデーモンとし
て起動した方が良いでしょう。

スタンドアロンのデーモンとして起動
==================================

   `ndtpd' をスタンドアロンのデーモンとして起動するには、次のようにコ
マンドを実行して下さい。スーパーユーザの権限が必要かも知れません。

     % /usr/local/sbin/ndtpd

NDTPD を `/usr/local' 以下にインストールし、かつ、システム管理用のコマ
ンドを置くディレクトリ (`sbindir') の位置を変更していなければ、 `ndtpd'
は `/usr/local/sbin' にインストールされています。

`inetd' の子プロセスとして起動
==============================

   `ndtpd' をスタンドアロンのデーモンとして起動するには、次の手順が必
要になります。 次のエントリを `inetd.conf' ファイル (大抵の場合
`/etc/inetd.conf') に加えます。 `--inetd' (または `-i') オプションを足
すのを忘れないようにして下さい。

     ndtp  stream  tcp  nowait  root  /usr/local/sbin/ndtpd ndtpd --inetd

(ただし、NDTPD を `/usr/local' 以下にインストールし、かつ、システム管
理用のコマンドを置くディレクトリ (`sbindir') の位置を変更していないと
仮定しています。)

   走行している `inetd' プロセスの PID を探し出します。 BSD 系のシステ
ムでは、次のようにします。

     % ps axuww | grep inetd

SYSV 系のシステムなら、次のようにします。

     % ps -ef | grep inetd

(詳しくは、あなたのシステムのマニュアルをご覧下さい。)
`inetd' が走っているならば、次のような行が見つかるはずです。

     root        79  0.0  1.1   224  340  ??  Is   10:04PM    0:00.29 inetd

見つかったならば、ハングアップシグナル (`SIGHUP') を `inetd'
に送ります。 おそらく、スーパーユーザの権限が必要です。

     % kill -HUP 79

`telnet' を用いた確認
=====================

   セットアップがすべて完了したら、`telnet' コマンドを用いて `ndtpd' に
接続してみましょう。

   まず、次のように入力します。 この例では、localhost 上の `ndtpd' に接
続しています。

     % telnet localhost ndtp

`ndtpd' が接続を受け付ければ、次のようなメッセージが表示されます。

     Connected to localhost.
     Escape character is '^]'.

ここで、<t> に続けて <Enter> を入力します。 `ndtpd' が正常に動いていれ
ば、次のように利用可能な CD-ROM 書籍の一覧を出力します。

     t
     1   Oxford Dictionary/Thesaurus   EDICT/OXFORD   0   0   0
     2   Quick Tour                    EDICT/QUICK    0   0   0
     3   User's Guide                  EDICT/USER     0   0   0
     4   About This Disc               EDICT/ABOUT    0   0   0
     $*

接続を終えるには、<Q> に続けて <Enter> を入力します。

     Q
     Connection closed by foreign host.

`ndtpd' のオプション
====================

   `ndtpd' コマンドは、伝統的な一文字オプション名と覚えやすい長いオプ
ション名の両方を扱うことができます。 長いオプション名を表すには、`-' で
はなく `--' を用います。 オプション名が一意に決まる範囲内で、名前の後方
部分を省略することができます。

   `ndtpd' コマンドは以下に挙げたオプションを解釈することができます。

`-c ファイル'
`--configuration-file ファイル'
     設定ファイルを指定します。 デフォルトのファイル名は、ヘルプメッセ
     ージの中に記されています。

`-h'
`--help'
     ヘルプメッセージを標準出力に出力して、終了します。

`-i'
`--inetd'
     `inetd' モード。 `ndtpd' を `inetd' から起動させるときは、このオプ
     ションを指定する必要があります。

`-t'
`--test'
     テストモード。 `ndtpd' はフォアグラウンドプロセスとして起動され、
     決して fork を行いません。 サーバへのリクエストは標準入力から読み
     込まれ、クライアントへのレスポンスは標準出力へ出力されます。 標準
     入力および標準出力は、端末と結び付けられたファイル記述子であっても
     構いません。 また、アクセスに対する識別チェックは行いませんので、
     すべての CD-ROM 書籍にアクセス可能です。

`-v'
`--version'
     バージョン番号を標準エラー出力に出力して、終了します。

サーバの終了および再始動
************************

   `ndtpcontrol' コマンドを用いることで、現在スタンドアロンのデーモン
として走っている `ndtpd' プロセスを終了させたり、強制終了、再始動させ
たりすることができます。 NDTPD を `/usr/local' 以下にインストールし、か
つ、システム管理用のコマンドを置くディレクトリ (`sbindir') の位置を変
更していなければ、 `ndtpcontrol' は `/usr/local/sbin' にインストールさ
れています。 走行中の `ndtpd' を終了させるには次のようにします。

     % /usr/local/sbin/ndtpcontrol terminate

   `ndtpd' は自身の PID を作業用ディレクトリの下のファイル `ndtpd.pid'
に記録します (see 作業ディレクトリ)。
`ndtpcontrol' は、走行中の `ndtpd' プロセスの PID を知るためにこの PID
ファイルの中身を読み、その PID に対してシグナルを送ります。

   `ndtpd' が正常に終了すれば、PID ファイルは `ndtpd' 自身によって削除
されます。 しかしながら、`ndtpd' が異常終了したときは、PID ファイルは削
除されません。 この場合、残された PID ファイルに記述された PID は、後
で他のプロセスに割り当てられる可能性があります。 `ndtpcontrol' の実行
は慎重に行って下さい。 `ndtpcontrol' は、本当に `ndtpd' プロセスが存在
するかどうかについては、確かめません。 `ndtpd' プロセスが存在しないの
に PID ファイルだけ残っていると、 `ndtpcontrol' は他のプロセスにシグナ
ルを送ってしまうかも知れません。

   `ndtpcontrol' は `ndtpd' の設定ファイルを読み込み、作業用ディレクト
リの位置を調べます。 ディレクトリの位置は、設定ファイル中の単独ディレク
ティブ `work-path' で定義することができます (see `work-path')
。 設定ファイルのデフォルトのファイル名、および単独ディ
レクティブ `work-path' のデフォルト値は `ndtpd' と同じです。

`ndtpcontrol' の実行
====================

   `ndtpcontrol' を実行する一般的な方法は次の通りです。

     % /usr/local/sbin/control 副コマンド

   `ndtpontrol' は次の副コマンドを解釈することができます。 副コマンド名
が一意に決まる範囲内で、名前の後方部分を省略することができます。

`kill'
     現在走っている `ndtpd' プロセスを強制終了させます (`SIGKILL' シグ
     ナルを送ります)。 また、`ndtpcontrol' は、`ndtpd' の PID ファイル
     を消去します。 この副コマンドを試す前に、まず `terminate' を先に試
     すべきです。

`restart'
     現在走っている `ndtpd' プロセスを再始動させます (`SIGHUP' シグナル
     を送ります)。 `ndtpd' プロセスは、すべての TCP
     コネクションを閉じ、設定ファイルを読み込み直します。

`status'
     `ndtpd'
     が走っているかどうか調べ、結果を標準エラー出力に出力します。 この
     副コマンドは、`ndtpd' にシグナルを送ることはしません。

`terminate'
     現在走っている `ndtpd' プロセスを終了させます (`SIGTERM' シグナル
     を送ります)。

`ndtpcontrol' のオプション
==========================

   `ndtpcontrol' コマンドは、伝統的な一文字オプション名と覚えやすい長
いオプション名の両方を扱うことができます。 長いオプション名を表すには、
`-' ではなく `--' を用います。 オプション名が一意に決まる範囲内で、名前
の後方部分を省略することができます。

   `ndtpcontrol' コマンドは以下に挙げたオプションを解釈することができ
ます。

`-c ファイル'
`--configuration-file ファイル'
     設定ファイルを指定します。 デフォルトのファイル名は、ヘルプメッセ
     ージの中に記されています。

`-h'
`--help'
     ヘルプメッセージを標準出力に出力して、終了します。

`-v'
`--version'
     バージョン番号を標準出力に出力して、終了します。

毎日の管理作業
**************

   `ndtpdaily' コマンドは、`ndtpd' の syslog ファイルのうち、最も新し
いものを調べて統計情報を生成し、syslog ファイルのローテーションを行い
ます。 その結果は、コマンド行の引数に指定された管理者に宛てて、メールで
送られます。

   `ndtpdaily' コマンドは Perl スクリプトです。perl バージョン 4.036 も
しくはそれ以降のバージョンの perl が必要です。 NDTPD を `/usr/local' 以
下にインストールし、かつ、システム管理用のコマンドを置くディレクトリ
(`sbindir') の位置を変更していなければ、 `ndtpdaily' は
`/usr/local/sbin' にインストールされています。 `ndtpdaily' を実行する一
般的な方法は次の通りです。

     % /usr/local/sbin/ndtpdaily メールアドレス...

以下は実行例です。

     % /usr/local/sbin/ndtpdaily root@host.your.domain

2 つ以上のメールアドレスを書くこともできます。

     % /usr/local/sbin/ndtpdaily root@host.your.domain root@dept.your.domain

   `ndtpdaily' を毎日一回、自動的に実行するには、以下のようなエントリ
をあなたのシステムの `crontab' に加えて下さい。

     0 0 * * *    /usr/local/sbin/ndtpdaily root@host.your.domain

(詳しくは、あたなのシステムのマニュアルをご覧下さい。)
デフォルトで、`ndtpdaily' は、古くなった syslog ファイルを `compress'
コマンドで圧縮し、 7 世代分保存します。 現在の syslog ファイルが
`/usr/local/var/ndtpd/log/ndtpd.log' だとすると、古くなった syslog フ
ァイルは次のように保存されます。

     /usr/local/var/ndtpd/log/ndtpd.log.0.Z
     /usr/local/var/ndtpd/log/ndtpd.log.1.Z
     /usr/local/var/ndtpd/log/ndtpd.log.2.Z
     /usr/local/var/ndtpd/log/ndtpd.log.3.Z
     /usr/local/var/ndtpd/log/ndtpd.log.4.Z
     /usr/local/var/ndtpd/log/ndtpd.log.5.Z
     /usr/local/var/ndtpd/log/ndtpd.log.6.Z

これらの syslog は次の要領でローテーションされます。

  1. もっとも古い syslog ファイル `ndtpd.log.6.Z' が削除されます。

  2. 他の `ndtpd.log.N.Z' ファイルは、 `ndtpd.log.N+1.Z'
     に改名されます。

  3. 現在の syslog ファイル `ndtpd.log' は `ndtpd.log.0' にコピーされ
     ます。

  4. `ndtpd.log.0' は、 `compress' で圧縮され、ファイル名が
     `ndtpd.log.0.Z' に変わります。

  5. 現在の syslog file `ndtpd.log' の内容がクリアされます。

`ndtpdaily' のオプション
========================

   `ndtpdaily' コマンドは、伝統的な一文字オプション名と覚えやすい長い
オプション名の両方を扱うことができます。 長いオプション名を表すには、
`-' ではなく `--' を用います。 オプション名が一意に決まる範囲内で、名前
の後方部分を省略することができます。

   `ndtpdaily' コマンドは以下に挙げたオプションを解釈することができま
す。

`-a 整数'
`--ages 整数'
     古い syslog ファイルを整数世代分だけ保存します。 デフォルトは
     `7' です。

`-c 圧縮プログラム'
`--compressor 圧縮プログラム'
     古くなった syslog ファイルを圧縮するプログラムを指定します。 圧縮
     プログラムは、`compress'、`gzip'、`bzip2'、 `none' のうちのいずれ
     かでなくてはなりません。 デフォルトは、`compress' です。

     `compress' を指定するか、`--compressor' (`-c') オプションを用いな
     かった場合は、`compress' コマンドによる圧縮が行われ、圧縮されたフ
     ァイルには拡張子 `.Z' が付加されます。 `gzip' を指定した場合は、
     `gzip' コマンドによる圧縮が行われ、圧縮されたファイルには拡張子
     `.gz' が付加されます。 `bzip2' を指定した場合は、`bzip2' コマンド
     による圧縮が行われ、 圧縮されたファイルには拡張子 `.bz2' が付加さ
     れます。 `none' を指定した場合は、圧縮は行われず、ファイルの拡張子
     も変わりません。

`-l ファイル'
`--log-file ファイル'
     現在の syslog ファイルを指定します。
     NDTPD を `/usr/local'
     以下にインストールし、かつ、マシン固有の更新されうるデータを置くデ
     ィレクトリ (`localstatedir') およびログファイルが置かれるディレク
     トリ (`--with-logdir' で指定) を変更していなければ、デフォルトで
     は `/usr/local/var/ndtpd/log/ndtpd.log' になります。 デフォルトの
     ファイル名は、ヘルプメッセージの中に記されています。

`-h'
`--help'
     ヘルプメッセージを標準出力に出力して、終了します。

`-v'
`--version'
     バージョン番号を標準出力に出力して、終了します。

`-N'
`--fast'
`--best'
     これらのオプションは `gzip', `bzip2' に渡されます (see Invoking `gzip' (gzip))
     。 `gzip', `bzip2'
     を使用しないときは、たんに無視されます。

ネットワークライセンス
**********************

   CD-ROM 書籍の出版社はオプションでネットワークライセンスを用意してい
ることがあります。 これは、あなたの LAN 上の複数のユーザに対して書籍へ
のアクセスを許可するものです。 ネットワークライセンスでは、同時にその
書籍へアクセスするユーザの最大数が制限されることがあります (ライセンス
の形態は様々ですので、詳しくは出版社にお問い合わせ下さい)。

   `ndtpd' の設定ファイルには、2 つの `max-clients' というパラメタがあ
ります。 一つは単独ディレクティブで (see `max-clients')
、 もう一つは `book' 複合ディレクティブの副ディレクティ
ブです (see `max-clients')。 どちらもクライア
ントの最大数を制限します。

   これらはネットワークライセンスの順守を補助しますが、完璧なものではあ
りません。 たとえば、書籍がアクセスできるのは、ユーザの使用しているク
ライアントがサーバに接続している間だけにすべきですが、 `ndtpd' も大抵の
NDTP クライアントも、接続がまだ有効かどうかを頻繁にチェックするわけでは
ありません。 結果として、時々ユーザは、接続がない状態で気付かぬまま書
籍にアクセスすることがあります。

   それでも、ネットワークライセンスのために `max-clients' を設定するこ
とは良いことです。 重要なのは `max-clients'
の能力を過信しないことです。

クライアントの数え上げ
======================

   ある時刻に書籍にアクセスしているクライアントの数 (これは
`max-clients' 副ディレクティブで制限します) を、 `ndtpd' は次のように数
えます。

  1. クライアントがある書籍の選択を要求してきたら、 `ndtpd' はその書籍
     に現在アクセスしているクライアントの数を確認します。 もし、最大値
     に達しているなら、エラーコードを返します。 それ以外のときは、その
     書籍を使用しているクライアントの数を 1 つ増やし、 成功を意味するコ
     ードを返します。

     `ndtpd' は、そのクライアントが前に使用していた書籍のクライアント
     数を 1 つ減らすことはしないので注意して下さい。

  2. クライアントとの接続が切れたら、`ndtpd' はそのクライアントが接続
     中に選択したおのおのの書籍のクライアント数を 1 つ減らします。

よく訊かれる質問集
******************

質問 1 (`ndtpd' がすぐに終了する)
=================================

質問
     `ndtpd'
     を始動させても、すぐに終了してしまいます。何が悪いのでしょうか?

答え
     まずは、`ndtpd' の出力した syslog のメッセージを確認しましょう。

     この問題の原因でもっとも多いのは、`ndtpd' が `WORK-PATH' ディレク
     トリの下のファイルに書き込むことに失敗していることによるものです。
     その場合、`ndtpd' は次のような syslog メッセージを出力します。

          Jun  7 22:09:50 localhost ndtpd[1760]: cannot open the file,
              Permission denied: /usr/local/var/ndtpd/ndtpd.pid
          Jun  7 22:09:50 localhost ndtpd[1760]: failed to write a PID
              to the file: /usr/local/var/ndtpd/ndtpd.pid
          Jun  7 22:09:52 localhost ndtpd[1760]: the server dies

     `work-path' ディレクトリのパーミッション、所有者、グループの設定
     を確認してみて下さい。

質問 2 (書籍が読めません)
=========================

質問
     書籍が読めません。 `ndtpd' は起動しているのですが、奇妙に思える振
     る舞いをします。 どこが悪いのでしょうか。

答え
     `ndtpd' を GCC (GNU C Compiler) のバージョン 2.7.2 あるいはそれ以
     前のバージョンでコンパイルしたのでしたら、それは GCC の最適化のバ
     グによるものかも知れません。

     明示的に指定しない限り、 `configure' スクリプトが生成する
     `Makefile' では `gcc' に対して `-O2' オプション (最適化レベル 2
     を指定) を渡すようになっていますが、最適化されたオブジェクトコー
     ドは正しく動きません。

     解決方法には 3 通りあります。

       1. もし、別の信頼に足る C コンパイラを持っているなら、それを使っ
          て NDTPD をコンパイルする。

       2. GCC 2.7.2.1 もしくはそれ以降のバージョンをインストールし、そ
          れを使って NDTPD をコンパイルする。

       3. GCC バージョン 2.7.2 もしくはそれ以前のバージョンを使って、以
          下の手順でコンパイルする。

          パッケージの configure スクリプトを実行します。

               (Bourne シェル互換のシェルを使っている場合)
               % CFLAGS='-g' ./configure

               (C シェル互換のシェルを使っている場合)
               % setenv CFLAGS '-g'
               % ./configure

          もし残っているならば、 (`gcc -O2' でコンパイルされた)
          古いオブジェクトファイルを消します。

               % make clean

          パッケージをコンパイルします。

               % make

          プログラム、データファイル、およびドキュメントをインストール
          します。

               % make install

質問 3 (付録パッケージ)
=======================

質問
     公式 FTP サイトから取ってきた付録 (appendix) パッケージを使ってい
     ますが、 `ndtpd' は CD-ROM 書籍が独自に定義している文字を正しく置
     き換えてくれません。 これは `ndtpd' のバグですか?

答え
     その付録パッケージは本当にあなたの書籍向けのものですか?  たとえ書
     籍と付録パッケージの題名が同じでも、あなたの書籍は appendix より
     も新しい版だったり古い版だったりするかも知れません。 付録パッケー
     ジに ISBN コードの情報が記載されていれば、それを確かめてみて下さ
     い。

質問 4 (syslog メッセージの `user=?')
=====================================

質問
     `ndtpd' が出力する syslog メッセージには `user' というフィールド
     が含まれていますが、フィールドは、次のように常に `?' です。

          connected: user=?, host=localhost(127.0.0.1)

     どうやったら、ユーザの情報を取得できますか?

答え
     Identification プロトコルによるユーザ名の識別を有効にしていて、か
     つ NDTP クライアントのホスト上で `pidentd' のような Identification
     プロトコルサーバを動作させていれば、ユーザ名が記録されるようにな
     ります (see `ident-hosts')。

質問 5 (`diclookup-mule')
=========================

質問
     私は NDTP クライアントに `diclookup-mule' を使っています。
     `新英和・和英中辞典' と `広辞苑' は正しく使えていますが、 他の書籍
     が使えません。 これは NDTPD か `diclookup-mule' のバグなのでしょう
     か?

答え
     `diclookup-mule' は古いタイプのクライアントです。 `diclookup-mule'
     を含め、古い NDTP クライアントは NDTP サーバから書籍の一覧を取得
     することをしません。 古い NDTP クライアントは、`eiwa'、`waei'、
     `kojien' という 3 つの書籍名しか使いません (see `alias-eiwa'、 `alias-waei' および `alias-kojien')
     。 しか
     し、 `diclookup-mule'
     は独自にいくつかの書籍の名前を定義しています。`オックスフォード英
     々辞典' 用に `oxford'、 `クラウン独和辞典' 用に `crger' といった具
     合です。

     `diclookup-mule' がこうして独自に名付けた書籍名を、`ndtpd' は認識
     することができません。 問題を解決するには、`diclookup-mule' が付け
     ている独自の名前を `ndtpd' が認識できる名前に変更します。

     まず、あなたのシステムで動作している `ndtpd' の書籍の一覧を確認し
     ます。 `ndtpd' に `--test' オプションを付けて起動します。

          % ndtpd --test
          # ndtpd version 2.3.6
          # test mode (type `Q' to quit)

     ここで、<t> に続けて <Enter> を入力します。

          t
          1   Oxford Dictionary/Thesaurus   EDICT/OXFORD   0   0   0
          2   Quick Tour                    EDICT/QUICK    0   0   0
          3   User's Guide                  EDICT/USER     0   0   0
          4   About This Disc               EDICT/ABOUT    0   0   0
          $*

     <Q> に続けて <Enter> を入力して、テストモードを抜けます。

          Q

     この例では、`Oxford Dictionary/Thesaurus' に `EDICT/OXFORD' という
     書籍名が割り当てられています。 そこで、 `diclookup-mule' の
     `lib/od-oxford.el' を次のように修正します。

          (od-modify-dict-parameters
           "EDICT/OXFORD"
           (cons

     終わったら `diclookup-mule' を再度インストールします。

質問 6 (すべての接続を拒否)
===========================

質問
     `ndtpd.conf' の `hosts' ディレクティブは正しく設定したのですが、
     NEXTSTEP と OPENSTEP の `ndtpd' はクライアントとの接続をすべて拒
     否してしまいます。 なぜでしょう。

答え
     `ndtpd' はあなたのクライアントと接続する際に、NDTP の接続数を制限
     するために、ロックファイルをロックしようとします (see
     `max-clients')。 しかしながら、 NEXTSTEP と
     OPENSTEP の `ndtpd' は必ずこのロックに失敗してしまいます。 (ロッ
     クするために、`ndtpd' は `fcntl()' に `F_SETLK' パラメタを渡して
     呼び出します。)

     `ndtpd'
     がロックに失敗すると、接続しているクライアントの数が上限に達したと
     判断し、新たに接続することを断念します。 そのため、 NEXTSTEP と
     OPENSTEP の `ndtpd' は接続をすべて拒否してしまうのです。

     この問題を回避するには、すべての `max-clients' 単独ディレクティブ
     および副ディレクティブを定義し、その値を `0' に設定することです。
     (ディレクティブが未定義だと、`ndtpd' は `1' が設定されたものと見
     なします。)

質問 7 (テキストが変な位置で切れる)
===================================

質問
     NDTPD は変な位置でテキストの送信を止めてしまいます。 どうやったら
     解決できますか?

答え
     この問題は、あなたの CD-ROM 書籍が通常とは違うテキスト区切りコード
     を使っているために生じます。 もし、あなたの CD-ROM 書籍用の付録パ
     ッケージがあるなら、それを使いましょう。 付録パッケージは、あなた
     の CD-ROM 書籍に適切な区切りコードを定義しています。

     もし、付録パッケージが存在しなければ、NDTPD のメンテナーに連絡して
     みて下さい。