ブログに書こうとしているのですが、@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
この問題ですが、@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
調査ありがとうございます。お手数おかけしました。
ログを見る限り、森さんの環境の ~/.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
> [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