ISHIKAWA,chiaki
ishik****@yk*****
2013年 8月 22日 (木) 02:07:19 JST
パッチをあてるまで jserver は Debian の64ビット環境で クラッシュしていました。 問題の症状としては emacs のegg/tamago からアクセスすると問題ないのですが、 kinput2(-wnn) でアクセスして変換を数回するとクラッシュして /var/log/messages に次のようなメッセージがのこっていました。 Aug 20 23:49:52 vm-debian-amd64 kernel: [105365.379749] jserver[1090]: segfault at 7fff00000008 ip 000000000040e200 sp 00007fffffffdcc0 error 4 in jserver[400000+24000] Aug 20 23:58:42 vm-debian-amd64 kernel: [105894.260674] jserver[2051]: segfault at 7fff00000008 ip 000000000040e200 sp 00007fffcf9e7710 error 4 in jserver[400000+24000] OpenSuse のパッチをDebian 用ソースにあててみたところ、Debian amd64ビット環境でも サーバーがクラッシュしなくなりました。Debian 32bits/solarisでもっぱらkinput2(-wnn,)とemacsのtamago/eggで 仮名漢字変換を利用してきた私には重要な改善です。 以下にパッチを適用する手順の概要を説明します。 OpenSuse のパッチを適用してみるにあたって用意したものは次のものです。 A. - sourceforge からの FreeWnn-1.1.1-a022.tar.bz2 B. - 現行のDebianパッケージで使われていたdebian 独自のパッチ (これは Debian の想定する設定ファイルの場所とか辞書ファイルの場所に 適合するために必要かと思います。) http://ftp.de.debian.org/debian/pool/main/f/freewnn/freewnn_1.1.1~a021+cvs20100325-6.debian.tar.gz C - 本メイルリストで公開されているOpenSuseのパッチ群。 変更手順: 1. まず FreeWnn-1.1.-a022.tar.bz2 を展開する。 2. それに 上記 B. で入手したdebian のパッチを適用する。 一部はすでに 1.で展開したソースには適用済みである。 具体的には patches/ のもとのパッチを patches/series の中の順番にしたがって適用する。 patch -p2 < ...patchfile 失敗して .rej ができるのはすでに変更が適用されている 部分があるためのようである。 必要であれば手動で修正。 3. さて、上記 2 の状態のファイルをコンパイルしてみて (とりあえず パラメータをあまり考えずに configure; make してみる。) あまりの膨大なパラメータタイプの警告に呆然としつつ、なるほど このあたりにバグが潜んでいるのかと納得し、 そこで OpenSuse のパッチを更に追加で適用してみることにしました。 4. 具体的にはOpenSuse のパッチ群の一部を選択せずつぎのようにしました。 適用する順番にしたがってみていきます。 最初の3つは、OpenSuseの想定する ファイルのレイアウト(設定ファイ ルの位置、辞書の位置、また 利用する locale の設定をja_JP から ja [多分 Suseでの日本語locale], また多少 experimental ? な root ユーザIDの使用/未使用についてのもので、 クラッシュしない jserver を debian で実行するには 関係がないということで今回の64bits Debianでのテスト目的では適用しませんでした。 Debianでは /usr/share/wnnの下に設定ファイルなどがはいり、辞書の本体は/var/lib/wnnの 下に入ります。またDebianの利用する日本語localeはja_JPがprefixです。ja_JP.UTF-8, ja_JP.EUC-JPとか。 x Patch0: FreeWnn-fsstnd.patch x Patch1: FreeWnn-ja.patch x Patch2: FreeWnn-noroot.patch 以下のパッチは順次適用します。ただし、patch に渡す -pN のレベルが 0,1,2 の間のどれかを個々のパッチ毎に適切に選ばないとうまくいきません。 ちょっと注意が必要です。 Debian のパッチを当てたあとに、さらに追加してパッチを当てているの でうまく当たらないものも当然でてきます。.rej の内容を確認しながら 手動で反映します。そんなに多くはありません。 o Patch3: FreeWnn-sighandler.patch o Patch5: FreeWnn-1.1.1-a022.dif o Patch7: FreeWnn-s390x.patch o Patch8: FreeWnn-warnings.patch -p0 o Patch11: FreeWnn-include.patch -p1 o Patch13: FreeWnn-prototypes.patch o Patch14: FreeWnn-trad_cpp.patch 多くは patch -p2 < ...うえのpatchファイル でうまくいきますが、 -p1, -p0 を利用する場合もあります。 手動修正して、またそのあとで configure/make をして気づきましたが、 cWnn/include kWnn/include の下に kaiseki.h というファイルが無いよう です。それぞれの ディレクトリの中のMakefileでの kaiseki.h へ言及しているルールを 削除しました。Makefile.in も同様の修正が必要のようです。 (多分 日本語 jserver だけ使っているのであれば問題ないのですが、 中国語 server 、韓国語 server では問題あるかもしれません。他のサーバー は利用したことがないから状況は不明。) 5. Debian 向け バイナリ作成 Debianのレイアウトに合うように、バイナリをつくってみます。 そのためには次の configure のパラメータが必要のようです。 B. で入手した Debian patch の rules ファイルの最初にある config_option=。。。 の設定をそのまま使っています。 ./configure --prefix=/usr --mandir=/usr/share/man --enable-client=yes --disable-traditional-layout 最初上でのべた kaiseki.h の問題とかでmake がうまくいきませんでした。 また私の環境ではなぜか termio, termios のヘッダー関連が うまく処理されず、結局試行錯誤のすえ、次のコマンドを実行することで解決できました。 apt-get install libtinfo-dev (上のコマンドは手元の環境ではメタパッケージとかをたどって、結局 ncurses の開発環境をいれていたようです。ちょっと不思議。このコマンドを実行するまえにもすでに も termio, termios のヘッダーが入ってたのですが。なんとなくヘッダーのチェックの順序が それまでのパッケージのインストール状況とあってないみたいでしたが、まあ、動作し てるのでよしとしましょう。) 再度 ./configure --prefix=/usr --mandir=/usr/share/man --enable-client=yes --disable-traditional-layout make をおこなうことでバイナリが作成されました。 make install はもちろん行ないません。 6. 作成した jserver バイナリのテスト su /etc/init.d/freewnn-jserver stop で既存 jserver daemon を止めます。 cp Wnn/jserver/jserver /tmp として分かりやすいところにバイナリをおいて、次のコマンドを root で実行します。 start-stop-daemon --start --quiet --chuid wnn --exec /tmp/jserver 私の場合は、これでうまく jserver が正しくDebianのfreewnn-server のパッケージがインストールされたときいに設定される辞書を使い無事起動され ました。 emacs から tamago/egg を経由して無事通信できてます。(それを使って今書 いている。) 自分でコンパイルした kinput2(-wnn)経由で XMODIFIERS などをenv を 利用して環境変数を設定した上で、GUIのメニューとかショートカットから 起動する iceweasel (debian 独自の firefox派生のブラウザ)などに 日本語入力できています。変換入力を繰り返していても以前のように クラッシュしません。 とりあえずこんな状況です。クラッシュしないという重要な改善がみられました。 パッチを公開していただきありがとうございました。 ご参考まで。