                 Dserver FreeBSD portセットアップについて．

                                                             3.Nov.1996
						Revised	    20.Dec.1996
						Revised	    31.Jan.1998
                                         三田吉郎 <mita@jp.FreeBSD.org>
	     Special thanks to MIHIRA Yoshiro <sanpei@yy.cs.keio.ac.jp>

	目次
	I. インストール
	   I.1. setup.sh の具体的な作業
	   I.2. 辞書のコピー・マウント
	   I.3. dserver_access ファイルの整備
	   I.4. サーバの動作テスト
	II. 使う
	   II.1. kenjiro
	III. 削除(uninstall)
	IV. `inetd起動のdserver'を作る方法
	    IV.1. `inetd起動のdserverとは何か'
	    IV.2. standaloneとinetdと，どちらを選択するか．
	    IV.3. inetd起動のdserverを作る．
	    IV.4. 初期設定スクリプトの違い．
	V. エラーとその対策
	    V.1. 辞書を10種類以上にしたら途端にBus Errorで落っこちます．

※ 文中の${PREFIX}は，/usr/localに読み変えてください，portsを利用して
   コンパイルすると，${PREFIX}を/usr/local以外にも，自分の好みの
   ディレクトリに設定することができます．

I. インストール

    dserver の ports を インストールした後に必要な作業は次の通りで
  す.

	1: [/etc/services] に ndtp プロトコルのエントリを追加
	2: dserver 起動用スクリプトの準備
	3: 辞書をコピーまたはマウント

    これらの作業は, [${PREFIX}/lib/dserver/setup.sh] を起動すると, 1〜
  2 までを自動的に設定してくれます．

  ※ ${PREFIX}
     ここで ${PREFIX} とは ports をコンパイル時の環境変数 PREFIX を
     示します. packages では, [/usr/local] となります.  上記の場合,
     [/usr/local/lib/dserver/setup.sh] と適時読みかえてください. 

I.1. setup.sh の具体的な作業

    この setup.sh では, 具体的に次の作業を行います.

1: [/etc/services] の末尾に次の行を追加します.  

-----
ndtp	2010/tcp	#Network Dictionary Transfer Protocol
-----
   ※ この行は, dserver を利用する*全てのマシン*に追加する必要があります.

2: [${PREFIX}/etc/rc.d/dserver.sh] に次の行を追加します. 

    これにより, OS ブート時に dserver が自動的に起動します.

-----
#!/bin/sh
# dserver - dictionary server
case "$1" in
start)
	if [ -x /usr/local/lib/dserver/dserver ] ; then
		/usr/local/lib/dserver/dserver &
		echo -n ' dserver'
	fi
	;;
stop)
	;;
*)
	echo "Usage: setup.sh.standalone {start|stop}" >&2
	exit 64
	;;
esac

exit 0
-----

I.2. 辞書のコピー・マウント

    [${PREFIX}/share/dict/cdrom/] に，それぞれの辞書をマウントします．
  [${PREFIX}/lib/dserver/dserver_access] のエントリと整合性を持たせる
  ようにしてください．

    makedic というプログラムを使うと，辞書サイズを概ね 1/3 に圧縮す
  ることができます．使い方は簡単で次の通りです. 

-----
makedic [オリジナルの辞書ファイル名] [新しい辞書ファイル名]
-----

  ※: 辞書のライセンスによる圧縮の制限
      辞書をハードディスクにコピー，圧縮してよいかどうかの対応ですが， 
    広辞苑は×，研究社の事典は○であるなどと，各社異なります．
 [${PREFIX}/lib/dserver/doc/README.dserver] を御覧下さい．

I.3. dserver_access ファイルの整備
    dserver は, ${PREFIX}/lib/dserver/dserver_access というファイルで,
        1. どのマシンからのアクセスを受け付けるか
        2. どういう名前のファイルを辞書ファイルとして登録するか, 
           その辞書ファイルへ何人のアクセスを同時に受けるか,
           辞書内部に埋め込まれた外字を, どうやって真似て表示するか
    といった情報を取得します.  従って, このファイルは自分で書く必要があります.

   一行一行, 辞書エントリやアクセス許可ホスト名を並べて書きます.
   順番はどうでもいいです.
  附属の ${PREFIX}/lib/dserver/dserver_access が参考になるでしょう.
   1. どのホストからのアクセスを受け付けるか
        アクセスを受け付けるホスト名を書きます.

-----
localhost 
-----

        とするのが一般的で, こうすると dserver をインストールした
        そのホストからアクセスできるようになります.  
   2. 辞書のエントリ

-----
#DICT eiwa /cdrom/chujiten/data/honmon "研究社中英和" 25 600
#DICT waei /cdrom/chujiten/data/honmon "研究社中和英" 25 600
-----

のように, #DICT につづけて, 辞書にアクセスするための名前,
辞書本体のファイルのありか, 辞書名, 同時にアクセスできるユーザ数,
タイムアウトまでの時間を記入します.  

ところで, 以上の例は, 
パシフィックハイテックさん htt://www.pht.co.jp/ が出している,
FreeBSD Pro 2.2.6-R に付いてくる, EPWING 版 研究社新英和辞典6.4版
用の設定です. それで, この辞書で, 別 port になっている diclookup-mule
(ja-diclookup-mule*という名前です) 和英検索をするためには, 
${PREFIX}/lib/dserver/waei.tbl というファイルの先頭の,

-----
#kana=hyouki
-----

という行のコメントを外して,

-----
kana=hyouki
-----

とする必要があります. 参考までに.

I.4. サーバの動作テスト

    desrver を立ち上げると，dserver が使えるようになるはずです．次の
   ように打ち込んで，簡単な接続試験をしてみましょう．

-----
telnet localhost ndtp<リターン>
-----

1: 接続試験その 1, アクセス可能かどうか

    接続した上で A<リターン> と打ち込むと，[dserver_access] ファイル
  でアクセス許可が出ている場合は $A という返事が帰って来るはずです．

-----
% telnet localhost ndtp
lavender: {1234} telnet localhost ndtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
A
$A
-----

  ※: アクセス許可ファイルの記述の注意

      dserver の仕様として, アクセス許可のチェックは IP アドレスでは
    なく, ホストネームで行われています. そのため, 次の場合例のように 
    localhost とだけ書いてもうまくアクセス許可を得れない場合がありま
    す.

	0) [/etc/hosts] に次のような行が含まれる. 

例
--------
127.0.0.1               localhost.rad.cc.keio.ac.jp localhost dserver
--------

	0-1) DNS が使える環境であるが, [/etc/host.conf] で bind より 
           hosts を先に書いている場合. 

	0-2) DNS を使えず [/etc/hosts] だけを参照する場合. 

      その場合には, 次のように [dserver_access] に記述するとアクセス
    許可を得れます.

例: [/etc/hosts] が上記のような場合. 適時 rad.cc.keio.ac.jp. を追加
してください. 
-----
localhost.rad.cc.keio.ac.jp
-----

2: 接続試験その 2,  辞書が使用可能かどうか?

    アクセス許可を得た後，T<リターン> と打ち込むと，使用可能な辞書の
  リストを得ることができます．

辞書リストの例:
-----
T
 1      研究社中和英
 2      研究社中和英
 3      三省堂クラウン仏和
$*
-----

    辞書をインストールしたにも関わらず利用可能になっていない場合は，
  [dserver_access] ファイルと，CDROM のディレクトリ構造を確認してみ
  てください．辞書ファイルは，start とか hommon とかいう名前になって
  いますが，このインストール位置が狂っているばあいがよくあります．

   リスト中の漢字は，EUC漢字コードを使っていますので，
   ktermを`kterm -km euc'で立ちあげたり，ctrl+中ボタンを押して
   選択するなどして，EUC漢字コードを表示できるようにしてください．

II. 使う

II.1. kenjiro

    コマンドラインから引きたい場合は kenjiro<リターン> です．
  【指定辞書無し】と出たときに<ESC>キーを押すと辞書が選択できます．

    リストに無い辞書を読みたい場合は，ports を用意して make patch の
  後 [${WRKSRC}/clients/kenjiro/config.h] を書き換えてmakeし直します．

III. 削除(uninstall)

    削除は，インストールの逆を行えばよいわけですが，3-1 を自動的に行
  うためのシェルスクリプト，[${PREFIX}/lib/dserver/deinstall.sh] を
  用意しておきました．

    その後で，pkg_deleteを行えばOKのはずです．

IV. `inetd起動のdserver'を作る
    このportsでは，特に指定しない限り`standaloneのdserver'を
    作るようにしていますが，`inetd起動のdserver'を作ることもできます．

IV.1 `inetd起動のdserver'とは何か?

    これまで説明してきた例では，このportsでの標準設定である，
    dserverをstandaloneで使用するための設定を紹介してきました．

    standaloneでは，プログラムdserverシステムを起動したときから，
    システムが終了する時までずっと走っていて，「全ての接続要求を
    一つのdserverが処理」します．

    inetdでは，プログラムdserverは普段は走っておらず，接続要求がくるたびに
    inetdから起動されます．「別々の接続要求は別々のdserverが処理」します．

IV.2. standaloneとinetdと，どちらを選択するか．
    ライセンス制限(ファイルdserver_accessで，辞書を同時に読めるユーザ数を
    制限できる機能です)を使うためには，全ての接続要求を一つのdserverが
    処理する必要があるので，standaloneで立ちあげる必要があります．

    inetdでは，dserverを使っていないときにCDROMを差し替えることができます．
    amdと組み合わせるのが便利です．

IV.3. inetd起動のdserverを作る．

    rootになって，/usr/ports/japanese/dserverのディレクトリで，
-----
make package
-----
    と入力すると，ファイルを展開した後に，
    standaloneでdserverを動かすように設定するか，それとも
    inetdから接続するたびに呼び出すように設定するかの
    選択画面になります．

----------------- dserver port configuration -----------------
| How do you want to run dserver, standalone or run by inetd?|
|                                                            |
|                  (*) standalone  stanalone                 |
|                  ( ) inetd       inetd                     |
|                                                            |
|                    [  OK  ]       Cancel                   |
--------------------------------------------------------------
    普段はこの画面のように，standaloneで起動する設定になっていますが，
    上下カーソルとリターンキーでinetdを選択すると，
    inetdから呼び出す設定になります(下図はinetdを選択したところ)

----------------- dserver port configuration -----------------
| How do you want to run dserver, standalone or run by inetd?|
|                                                            |
|                  ( ) standalone  stanalone                 |
|                  (*) inetd       inetd                     |
|                                                            |
|                    [  OK  ]       Cancel                   |
--------------------------------------------------------------

IV.4. 初期設定スクリプトの違い．

    初期設定スクリプトsetup.sh, deinstall.shは，
    inetd起動を選択した場合とstandaloneを選択した場合とで違ったものが
    インストールされます．

    inetd起動用のsetup.shでは，standaloneに比べて以下の点が異なっています．
* /usr/local/etc/rc.d/dserver.shを作成しない．
* /etc/inetd.confへのdserverのエントリを追加する．
* inetdを立ちあげ直す(HUPシグナルを送る)

   使い方はinetd, standalone用とも一緒です．

V. エラーとその対策
V.1. 辞書を10種類以上にしたら途端にBus Errorで落っこちます．

    server2.2-pl2/config.hの，MAXDICTの値を10から増やして
    コンパイルし直しましょう．
※dserver_accessファイルの設定を変更している場合，バックアップしておきます．
-----
% su root
#cp /usr/local/lib/dserver/dserver_access /tmp/dserver_access.orig
# cd /usr/ports/japanese/dserver
# make patch
# vi work/dserver/server2.2-pl2/config.h
# make install
#cp /tmp/dserver_access.orig /usr/local/lib/dserver/dserver_access 
-----

質問，不平不満など御座いましたらmita@jp.FreeBSD.orgにどうぞ．
