[Freewnn-users 149] OpenSuse 向けパッチを debian amd64 で適用して、成功。

Back to archive index

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派生のブラウザ)などに
  日本語入力できています。変換入力を繰り返していても以前のように
  クラッシュしません。

とりあえずこんな状況です。クラッシュしないという重要な改善がみられました。

パッチを公開していただきありがとうございました。

ご参考まで。




freewnn-users メーリングリストの案内
Back to archive index