NDTPD: NDTP サーバ、笠原基之

Copyright (C) 1997, 98, 99, 2000, 01 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.

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

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

NDTPD は TCP 上の NDTP (Network Dictionary 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 バージョン 3.1.4 に対応しています。

最新の 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 のインストール
********************

NDTPD は CD-ROM 書籍にアクセスするために、EB ライブラリを使用しています。
NDTPD をインストールする前に、EB ライブラリ 3.0alpha3 もしくはそれ以降の
バージョンをインストールする必要があります。

最新の EB ライブラリは`ftp://ftp.sra.co.jp/pub/misc/eb/'から入手できます。

EB ライブラリに関する情報は`http://www.sra.co.jp/people/m-kasahr/eb/'か
ら得ることができます。

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

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

`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-' オ
プションを認識します。

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

`--with-eb-conf=FILE'
     EB ライブラリの設定ファイルとして FILE を読み込みます。デフォルトは、
     `SYSCONFDIR/eb.conf' です。

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

`--enable-ipv6'
     IPv6 に対応させます。システムが IPv6 に対応している場合、The
     default value is `yes' if the system supports IPv6.

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

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

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

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

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

単独指示子の一般形
==================

単独指示子とは、1 行で完結する指示子です。単独指示子の一般形は次の通りで
す。

     指示子の名前    指示子の値

以下の例では、`syslog-facility' が指示子の名前、`local0' がその値です。

     syslog-facility    local0

指示子名の大文字と小文字は区別されますので、`syslog-facility'を
`Syslog-Facility' と書くことはできません。指示子の名前と値の区切りには、
空白かタブを用います。連続した空白とタブが、行頭および行末にあった場合、
それらは無視されます。

単独指示子の一覧
================

単独指示子には次のようなものがあります。

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

`http-port'
     `ndtpd' はこの指示子を常に無視します。

`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/24'.からの接続を拒否する。
          hosts !192.24.1.0/24

     ホスト名に限り、アスタリスク (`*') と疑問符 (`?') を使うことができ
     ます。アスタリスクは、先頭の感嘆符を除いた任意の 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

     ホスト名を比較する際、`ndtpd' は常にクライアントの正式ホスト名を使
     用します。ホスト名は、クライアントのアドレスから DNS などの名前解決
     のサービスを利用して取得します。別名は使用されませんので、注意して
     下さい。

     IPv6 アドレスおよび IPV6 アドレス/ネットマスク パターンを指定するこ
     とも可能です。IPv6 対応機能を有効にしてコンパイルされていない
     `ndtpd' は IPv4クライアントとしか通信できませんが、設定ファイルに書
     かれた IPv6 アドレスを解釈することはできます。

          # `12ab:0:0:cd3/60' と `::1' からの接続を許可する。
          hosts ::1
          hosts 12ab:0:0:cd3/60

     `hosts' 指示子では、IPv4 アドレス (例 `192.168.1.1') とそれに対応す
     る IPv4 射影 IPv6 アドレス (例 `::ffff:192.168.1.1') は等価になりま
     す。つまり、IPv4 クライアント `192.168.1.1' は `hosts' 指示子
     `::ffff:192.168.1.1' にマッチし、IPv6 クライアント
     `::ffff:192.168.1.1' は `hosts' 指示子 `192.168.1.1'にマッチします。

`timeout'
     `timeout' 指示子では、交信が途絶えたクライアントとの接続を`ndtpd'
     が切断するまでの秒数を指定します。指示子の値は、0 以上の整数でなく
     てはいけません。この指示子は必ずしも定義する必要はありません。また、
     2 度以上定義することはできません。無指定時の値は `900' (15分) です。
     指示子の値を 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 バージョン 3.1.4 では、使用できる複合指示子の名前は`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' 副指示子では、その書籍に対応する appendix (付録) パッ
     ケージの絶対パスを指定します。パスは appendix パッケージのトップディ
     レクトリ、つまり `CATALOG'または `CATALOGS' ファイルの存在するディ
     レクトリを指してしなくてはいけません。

     この副指示子は、必ずしも定義する必要はありません。また、1 つの
     `book' 複合指示子で 2 度以上定義することはできません。書籍を使う上
     で、appendix パッケージは必須ではありませんが、ないと外字が識別不可
     能になるため、読みづらいかも知れません。

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

`hosts'
     `hosts' 副指示子には、この書籍にどのホストがアクセスできて、どのホ
     ストができないのかを指定します。この副指示子は、必ずしも定義する必
     要はありません。また、1 つの `book' 複合指示子で何度でも定義するこ
     とが可能です。`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
          ディスクの形式: EB/EBG/EBXA/EBXA-C/S-EBXA
          文字コード: JIS X 0208
          副本の数: 2

          副本  1:
            題名: 新英和辞典（第三版）
            ディレクトリ: ejdict
            検索方式: 前方一致 後方一致 条件 メニュー
            フォントの大きさ: 16 24 30 48
            半角フォントの文字: 0xa121 -- 0xa24e
            全角フォントの文字: 0xa321 -- 0xa27e

          副本  2:
            題名: この書籍の使い方
            ディレクトリ: howto
            検索方式: 前方一致 後方一致 条件 メニュー
            フォントの大きさ: 16 24 30 48
            半角フォントの文字:
            全角フォントの文字: 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' にコピーして、編集してください)
     ######################################################################

     ### `ndtpd' が見張るポート番号
     ### (無指定の場合: ndtp)
     # ndtp-port	ndtp

     ### `ebhttpd' が見張るポート番号
     ### (無指定の場合: http)
     # http-port	http

     ### サーバのプロセスの所有ユーザ
     ### (無指定の場合: なし)
     user		ndtpuser

     ### サーバのプロセスのグループ
     ### (無指定の場合: なし)
     group		ndtpgrp

     ### サーバに同時に接続できるクライアントの数
     ### (無指定の場合: 1)
     # max-clients	1

     ### サーバに接続できるホスト、できないホスト
     ### (無指定の場合: なし)
     hosts		127.0.0.1
     hosts		::1
     hosts		!?
     hosts		host.your.domain

     ### サーバが交信の途絶えたコネクションを切るまでの時間
     ### (無指定の場合: 900)
     # timeout		900

     ### 作業用ディレクトリのパス
     ### サーバを起動する前に、このディレクトリを作り、サーバプロセスが
     ### 書き込めるようにしておいて下さい。
     ### (無指定の場合: /usr/local/var/ndtpd)
     # work-path	/usr/local/var/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 (付録) パッケージのトップディレクトリ
         ### (無指定の場合: なし)
         appendix-path	/usr/local/share/eb/appendix/jitenban97-2.1

         ### 同時にアクセスできるクライアントの数
         ### (無指定の場合: 1)
         max-clients		1

         ### この書籍を利用できるホスト、できないホスト
         ### (無指定の場合: なし)
         hosts		127.0.0.1
         hosts		::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          2010/tcp

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

     search        2010/tcp

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

     search        2010/tcp        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 を調べます。

     % ps axuww | 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).)。

appendix パッケージの用意
=========================

CD-ROM 書籍の多くは、独自に外字を定義しており、外字のビットマップデータ
も書籍の中に収められています。ときとして、外字の表示なしに書籍を読むこと
は難しいことがあります。NDTPD は、ビットマップデータをクライアントに転送
することができます。お使いのクライントがこのビットマップ転送機能に対応し
ていれば、ビットマップが表示されることと思います。

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

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

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

EB ライブラリの公式な FTP サイト
(`ftp://ftp.sra.co.jp/pub/misc/eb/appendix/')に、appendix パッケージがい
くつか置いてあります。

appendix パッケージが利用可能ならば、各書籍の `appendix-path' 副指示子を
指定しておくことをお薦めします。

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

`ndtpd' は NDTP サーバですので、CD-ROM 書籍を読むためにはさらにクライア
ントも必要です。もし、まだクライアントのソフトウェアをインストールしてい
ないのであれば、インストールして下さい。NDTPD の配布物には、NDTP クライ
アントは含まれていません。

Web ページ`http://www.sra.co.jp/m-kasahr/ndtpd/related.html'に `ndtpd'
と通信可能なクライアントソフトウェアの一覧があります。

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

設定ファイルの編集を終えたならば、`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' の子プロセスとして起動には、次の手順が必要になります。
次のエントリを `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

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

Linux システムには、伝統的な `inetd' の代わりに `xinetd' を使用している
ものもあります。`xinetd' の設定ファイルの文法は、伝統的な `inetd' の設定
ファイルの文法とは異なります。

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

     # default: off
     # description: The ndtp server
     service ndtp
     {
             disable = no
             socket_type     = stream
             wait            = no
             user            = root
             server          = /usr/local/sbin/ndtpd
             server_args     = --inetd
             log_on_failure  += USERID
     }

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

走行している `xinetd' プロセスの PID を探し出します。

     % ps axuww | grep xinetd

`xinetd' が走っているならば、次のような行が見つかるはずです。

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

見つかったならば、USER2 シグナル (`SIGUSR2') を `xinetd'に送ります。おそ
らく、スーパーユーザの権限が必要です。

     % kill -USR2 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/ndtpcontrol 副コマンド

`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 (appendix パッケージ)
============================

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

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

質問 4 (`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  3.1.4
          # 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' を再度インストールします。

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

質問
     `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' が設定されたものと見なします。)

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

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

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

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