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

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

	目次
	I. インストール
	   I.1. setup.sh の具体的な作業
	   I.2. 4: 辞書のコピー・マウント
	   I.3. サーバの動作テスト
	II. 使う
	   II.1. kenjiro
	   II.2. diclookup-mule
	III. 削除(uninstall)
	IV. `inetd起動のdserver'を作る方法
	    IV.1. `inetd起動のdserverとは何か'
	    IV.2. standaloneとinetdと，どちらを選択するか．
	    IV.3. inetd起動のdserverを作る．
	    IV.4. 初期設定スクリプトの違い．
	V. エラーとその対策
	    V.1 muleで辞書を引こうとしたのですが，
	        いつまでたっても切り替わりません．
	    V.2. muleで，`process *ndtp* not running'というエラーが出ます．
	    V.3. 辞書を10種類以上にしたら途端にBus Errorで落っこちます．

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

I. インストール

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

	1: [/etc/services] に ndtp プロトコルのエントリを追加
	2: dserver 起動用スクリプトの準備
	3: mule クライアント diclookup-mule 用の初期設定
	4: 辞書をコピーまたはマウント

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

  ※ ${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
-----

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

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

-----
# dserver - dictionary server
if [ -f /usr/local/lib/dserver/dserver ] ; then
	/usr/local/lib/dserver/dserver&
	echo 'dserver'
fi
-----

3: [${PREFIX}/lib/mule/site-lisp/site-start.el] に次の行を追加します.

   これにより, mule から特別な設定無しに利用できるようになります.

-----
;;; diclookup-mule: Online dictionary
(autoload 'online-dictionary "diclookup-mule" "Online dictionary." t nil)
(autoload 'od:lookup-pattern-edit "diclookup-mule" "Look up a word." t nil)
(setq od-chujiten-flag t)       ; diclookup-mule
(setq od-dictfile-list '("od-chujiten" "od-kojien")) ; diclookup-mule
(setq dserver-server-list '("localhost")) ; diclookup-mule
(setq od-frame-geometry "+0-0" od-hide-frame 'make-invisible) ; diclookup-mule
(add-hook 'od-really-quit-hook 'od-delete-frame) ; diclookup-mule
(define-key-after menu-bar-file-menu [dictionary] ; diclookup-mule
        '("Online Dictionary" . online-dictionary) 'calendar) ; diclookup-mule
-----

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

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

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

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

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

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

    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 より 
           host を先に書いている場合. 

	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し直します．

II.2. diclookup-mule

    私はこちらのクライアントを気に入っています．M-x
  online-dictionary<リターン>で起動します．

    [${PRFIX}/lib/mule/site-lisp/od-***.elc]が，それぞれの辞書に
  対応した外字ファイルです，これをハックすれば大抵の辞書を読むことが
  できるでしょう．

    ハックするときに，外字の形をどうやって調べるかが問題ですが，ひな
  がたを適当に作っておいて実際に辞書を読むと
-----
著作権表示
外字１
外字２
-----
  などとメニューが表示されます．ここで外字を選択すると，

	1. この辞書で登録されている外字の文字コード
	2. 外字のビットマップ(;)表示
	3. 外字をXウィンドウとテキスト端末とでどう表示しているか

  がわかりますので，それに合わせて外字テーブル(とそのコードの上位
  8bitの数)を書き換えます．

    この ports に入っている od-crown.elc(クラウン仏和，クラウ
  ン独和)，od-italian.elc(現代イタリア語表現辞典)，od-oxford.el
  (オクスフォード英英辞典，シソーラス類義語辞典)は，
  od-chujiten.el(新英和和英)を上述の方法で私三田が hack 
  したものです．なれれば一辞書を半日で対応できます．ぜひ対応させて，
  本家に contribute しましょう．

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. muleで辞書を引こうとしたのですが，いつまでたっても切り替わりません．

    muleで，
-----
M-x online-dictionary
-----
    と入力すると，辞書用のフレームが新しく作られますが，その後いつまで
    経ってもタイトルが表示されない症状です．

    接続許可を正しく出しているかを疑ってみます．
    I.3. サーバの動作テスト に従って，手動で接続してみます．
    接続に失敗している場合は，${PREFIX}/dserver/dserver_accessファイルで
    アクセス許可を正しく出します．

-----接続に成功している例:
% telnet localhost ndtp
lavender: {1234} telnet localhost ndtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
A
$A
-----
-----接続に失敗している例:
% telnet localhost ndtp
lavender: {1234} telnet localhost ndtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
A
$N
-----

V.2. muleで，`process *ndtp* not running'というエラーが出ます．

    standaloneの場合，dserverが何かの原因でこけたのでしょう．
    もう一度dserverを立ちあげ直してみてください．
-----
%su root
#/usr/local/lib/dserver/dserver&
-----

V.3. 辞書を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にどうぞ．
