sekka-serverの起動時に辞書の読み込みに失敗する問題

閲覧: 12 回
最初の未読メッセージにスキップ

Kiyoka Nishiyama

未読、
2011/08/25 16:31:232011/08/25
To: sekka...@googlegroups.com
kiyokaです。

ブログに書こうとしているのですが、@mori_devさんからsekka-serverが起動
しないという報告を頂きました。

http://oldtype.sumibi.org/show-page/kiyoka.2011_08_25

http://gist.github.com/1168173


調査しているところですが、原因が単純ではなさそうなので、Twitterではな
く、このGoogle Groupで続きを追いたいと思います。

最初は、Tokyo Cabinetのバージョン差異問題だと思っていたのですが、そう
でもない無さそうです…

http://gyazo.com/dbca051b95918ceeae9ad7b79d74eff2

うーん。

--kiyoka

Kiyoka Nishiyama

未読、
2011/08/26 17:54:202011/08/26
To: sekka...@googlegroups.com
kiyokaです。

この問題ですが、@mori_devさん(twitterアカウントでお呼びさせてもらいます)
の環境を再度調査お願いします。

おそらく、Tokyo Cabinetのコマンドとライブラリランタイムのバージョンが合っ
ていないのではないかと推測します。つまり、tchmgrは 1.4.47 が使われてい
るけれども、ランタイムライブラリは 1.4.37 が使われているのではないかと
いうことです。また、ruybgemsの.soも1.4.37に動的リンクされているのでは
ないか思います。

Sekkaの次のバージョンでは、Tokyo Cabinet 1.4.37でも動くように、辞書ファ
イル(.tch)を1.4.37で作る予定です。

ただ、この調査をして頂く目的は、想定外のことが起きていないか。起きてい
るのだったら、別の対策をついでにやっておきたいというところです。


以下の手順を試して頂けますでしょうか。


1. 現在の辞書データのチェックサムを調べる。

$ md5sum ~/.sekka-server/SEKKA-JISYO.SMALL.tch

=> 3e142935b05dc18edd9e652ad0d71e2f であると思います。
sekka-serverが最初に取得したデータから変化なしだと推測しています。


2. 現在の辞書データをバックアップする。(念の為)

$ mv ~/.sekka-server/SEKKA-JISYO.SMALL.tch /tmp


3. sekka-serverを再度起動して、辞書の初期データを取得する。

$ sekka-server

Info: Downloading SEKKA-JISYO
Command : curl -o /home/kiyoka/.sekka-server/SEKKA-JISYO.SMALL.tch http://sumibi.org/sekka/dict/0.8.8/SEKKA-JISYO.SMALL.tch
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 283M 100 283M 0 0 9768k 0 0:00:29 0:00:29 --:--:-- 5880k
Command : curl -o /home/kiyoka/.sekka-server/SEKKA-JISYO.SMALL.md5 http://sumibi.org/sekka/dict/0.8.8/SEKKA-JISYO.SMALL.md5
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 56 100 56 0 0 473 0 --:--:-- --:--:-- --:--:-- 608
downloaded file's MD5 : 3e142935b05dc18edd9e652ad0d71e2f
correct MD5 : 3e142935b05dc18edd9e652ad0d71e2f

Info: downloaded file [/home/kiyoka/.sekka-server/SEKKA-JISYO.SMALL.tch] verify OK.
/usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:176: TokyoCabinet::HDB.open error: file=/home/kiyoka/.sekka-server/SEKKA-JISYO.SMALL.tch (RuntimeError)
from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/kvs.rb:56:in `open'
from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:216:in `block (2 levels) in initialize'
from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:461:in `call'
from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:461:in `block in initialize'


=> 上記は私のローカル環境の表示です。同様のエラーが出て止まると思います。


4. /usr/bin/tchmgrのバージョンを調べる。

~ $ which tchmgr
/usr/bin/tchmgr
~ $ /usr/bin/tchmgr version
Tokyo Cabinet version 1.4.37 (827:1.0) for Linux
Copyright (C) 2006-2009 Mikio Hirabayashi
~ $ ldd /usr/bin/tchmgr
linux-gate.so.1 => (0xffffe000)
libtokyocabinet.so.8 => /usr/lib/libtokyocabinet.so.8 (0xb76ba000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7552000)
libbz2.so.1.0 => /lib/libbz2.so.1.0 (0xb7540000)
libz.so.1 => /usr/lib/libz.so.1 (0xb752c000)
librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7523000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb750a000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb74e4000)
/lib/ld-linux.so.2 (0xb774e000)


5. gemのtokyocabinetにリンクされるランタイムのバージョンを調べる。

$ find /home/mori-k/.rvm/gems/ruby-1.9.2-p290/gems -name tokyocabinet.so

$ ldd [上記で検索できた .so ファイル]
=> どうなるでしょうか

/usr/lib側が出るんじゃないかと推測します。
libtokyocabinet.so.8 => /usr/lib/libtokyocabinet.so.8

6. /usr/local/bin/tchmgrのバージョンを調べる。(ソースからインストールしたほう)
~ $ /usr/local/bin/tchmgr version
=> どうなるでしょうか

/usr/lib側が出るんじゃないかと推測します。
libtokyocabinet.so.8 => /usr/lib/libtokyocabinet.so.8

~ $ ldd /usr/bin/tchmgr
=> どうなるでしょうか

/usr/lib側が出るんじゃないかと推測します。
libtokyocabinet.so.8 => /usr/lib/libtokyocabinet.so.8

以上です。お手数ですがよろしくおねがいします。

--kiyoka

mori dev

未読、
2011/08/26 22:11:192011/08/26
To: sekka...@googlegroups.com
森(@mori_dev)です。


md5sum ~/.sekka-server/SEKKA-JISYO.SMALL.tch することで sekka-server がエラーを
発生させることなく起動できるようになりました。
tchmgr コマンドは /usr/local/bin/tchmgr でした。/usr/bin/tchmgr は存在しませんでした。

これで emacs から使えるようになったかというと、次のエラーが発生しました。emacs の
*Messages* より引用します。

   Sekka辞書 ~/.sekka-jisyo が存在しません...

もっとも動作はしているみたいです。



以下は作業ログです。

l
$ md5sum ~/.sekka-server/SEKKA-JISYO.SMALL.tch
d2c357f37ddf8419f83aec8ff6b7dd3b  /home/mori-k/.sekka-server/SEKKA-JISYO.SMALL.tch

$ mv ~/.sekka-server/SEKKA-JISYO.SMALL.tch /tmp


$ sekka-server
Info: Downloading SEKKA-JISYO
Command : curl -o /home/mori-k/.sekka-server/SEKKA-JISYO.SMALL.tch http://sumibi.org/sekka/dict/0.8.8/SEKKA-JISYO.SMALL.tch

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  283M    0 2437k    0     0  68447      0  1:12:17  0:00:36  1:11:41 70126

$ which tchmgr
/usr/local/bin/tchmgr

$ /usr/local/bin/tchmgr --version
Tokyo Cabinet version 1.4.47 (910:1.0) for Linux
Copyright (C) 2006-2011 FAL Labs

$ ldd /usr/local/bin/tchmgr
        linux-gate.so.1 =>  (0x00f23000)
        libtokyocabinet.so.9 => /usr/local/lib/libtokyocabinet.so.9 (0x00f38000)
        libbz2.so.1.0 => /lib/libbz2.so.1.0 (0x00d13000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00890000)
        librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00335000)
        libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00cbf000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x004c4000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
        /lib/ld-linux.so.2 (0x0040b000)



$ find /home/mori-k/.rvm/gems/ruby-1.9.2-p290/gems -name tokyocabinet.so
/home/mori-k/.rvm/gems/ruby-1.9.2-p290/gems/tokyocabinet-1.29/tokyocabinet.so

$ ldd /home/mori-k/.rvm/gems/ruby-1.9.2-p290/gems/tokyocabinet-1.29/tokyocabinet.so
        linux-gate.so.1 =>  (0x006a8000)
        libruby.so.1.9 => /home/mori-k/.rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9 (0x0089b000)
        libtokyocabinet.so.9 => /usr/local/lib/libtokyocabinet.so.9 (0x00cb2000)
        libbz2.so.1.0 => /lib/libbz2.so.1.0 (0x0028b000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00bd9000)
        librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x00dda000)
        libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00b23000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x002c3000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
        libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00fed000)
        libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0x0059b000)
        /lib/ld-linux.so.2 (0x0080e000)

$ ldd /usr/local/bin/tchmgr
        linux-gate.so.1 =>  (0x00e3a000)
        libtokyocabinet.so.9 => /usr/local/lib/libtokyocabinet.so.9 (0x00110000)
        libbz2.so.1.0 => /lib/libbz2.so.1.0 (0x0056e000)
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00e13000)
        librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x002c5000)
        libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00e87000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x0092c000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00c5a000)
        /lib/ld-linux.so.2 (0x00bc4000)

以上です。

2011年8月27日6:54 Kiyoka Nishiyama <kiy...@sumibi.org>:

Kiyoka Nishiyama

未読、
2011/08/27 20:21:572011/08/27
To: sekka...@googlegroups.com、mori.d...@gmail.com
kiyokaです。

調査ありがとうございます。お手数おかけしました。


ログを見る限り、森さんの環境の ~/.sekka-server/SEKKA-JISYO.SMALL.tch が
壊れていた可能性が高いですね。
Tokyo Cabinetのライブラリ自体はソースからインストールされた最新がリンク
されているようで、疑った場所は外していました…最終的には、
SEKKA-JISYO.SMALL.tchのオリジナルをsekkaのサイトから取得しなおしたら動
いたようですね。

どちらにしても、Sekka 0.9.1では最近のDebianとUbuntuに入っているTokyo
Cabinetであるバージョン 1.4.37でも動作するようにます。

> 森(@mori_dev)です。
>
>
> md5sum ~/.sekka-server/SEKKA-JISYO.SMALL.tch することで sekka-server がエラーを
> 発生させることなく起動できるようになりました。
> tchmgr コマンドは /usr/local/bin/tchmgr でした。/usr/bin/tchmgr は存在しませんでした。
>
> これで emacs から使えるようになったかというと、次のエラーが発生しました。emacs の
> *Messages* より引用します。
>
> Sekka辞書 ~/.sekka-jisyo が存在しません...
>
> もっとも動作はしているみたいです。
>

~/.sekka-jisyoはEmacsクライアントが利用するユーザ語彙保存用ファイルで、
インストール直後は最初は存在しません。
下記ページに書いていますが、SKKを利用されている場合はSKKで蓄積されたユー
ザ辞書をコピーして引きつぐことができます。(但し、utf-8に変換が必要)

http://oldtype.sumibi.org/show-page/Sekka.Emacs

(略)


--kiyoka

mori dev

未読、
2011/08/27 22:23:552011/08/27
To: sekka...@googlegroups.com
森です。


お手数をおかけしました。ユーザ語彙保存用ファイルの件も把握しました。とても丁寧に
対応していただき、ありがとうございました。



2011年8月28日9:21 Kiyoka Nishiyama <kiy...@sumibi.org>:

Kiyoka Nishiyama

未読、
2011/09/01 10:52:522011/09/01
To: sekka...@googlegroups.com
kiyokaです。

> [kiyoka]
> どちらにしても、Sekka 0.9.1では最近のDebianとUbuntuに入っているTokyo
> Cabinetであるバージョン 1.4.37でも動作するようにします。

この件ですが、リリース間近になって DebianのTokyo Cabinet 1.4.37で辞書
ファイルを作っていろんな環境でロードしてみたら、Tokyo Cabinetのライブ
ラリバージョンではなく、アーキテクチャ(32bit/64bit)間で*.tchのバイナリ
に互換性が無いことがわかりました。

Sekka 0.9.1では、Tokyo Cabinetのデータベース形式ではなく、tsvかなにか
で提供して、sekka-serverはダウンロード後にtsvを読み込む方式にしよう思
います。

ちょっと、原因が絞りこめておらず、見当違いの対策を打つところでした。
あぶないあぶない。

--kiyoka


全員に返信
投稿者に返信
転送
新着メール 0 件