Dserver FreeBSD portセットアップについて. 3.Nov.1996 Revised 20.Dec.1996 Revised 31.Jan.1998 三田吉郎 Special thanks to MIHIRA Yoshiro 目次 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<リターン> です. 【指定辞書無し】と出たときにキーを押すと辞書が選択できます. リストに無い辞書を読みたい場合は,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にどうぞ.