ビットコイン・インスティテュート

-datadirの指定で問題が発生

psyvenrix 2010年7月28日13:38 UTC

致命的な問題ではないが、datadirオプションにピリオド(カレントディレクトリ)以外のものを指定すると、コンソールとdebug.logに必ず以下のエラーメッセージが出るのが不思議だ。Arch Linuxのターミナルのセッションでbitcoindを使っている。GUIはまったく使っていない(SSH経由でアクセスするヘッドレスのマシンだ)。

コンソールの出力:


EXCEPTION: 22DbRunRecoveryException DbEnv::open: DB_RUNRECOVERY: Fatal error, run database recovery bitcoin in AppInit()

terminate called after throwing an instance of ‘DbRunRecoveryException’ what(): DbEnv::open: DB_RUNRECOVERY: Fatal error, run database recovery

datadir内のdebug.logの出力:

Bitcoin version 0.3.4.0 beta Default data directory /home/psyvenrix/.bitcoin Bound to port 8333 Loading addresses… dbenv.open strLogDir=./datadir2/database strErrorFile=./datadir2/db.log


EXCEPTION: 22DbRunRecoveryException DbEnv::open: DB_RUNRECOVERY: Fatal error, run database recovery bitcoin in AppInit()

これはSVNのビルドだ。メインサイトのtar.gzはopenssl 0.9.8あたりにリンクされていると思うが、私のArch Linuxのシステムは1.0.0だと思うので、最新のSVNソースを取ってきてビルドした(Makefileを少しいじった以外は、問題なくコンパイルできた)。

バイナリのあるディレクトリと上のdatadirの両方のパーミッションを確認したが、どちらも私のログインユーザーで書き込める(裏でACL/SELinuxの仕掛けもない)。

ビットコインを使い始めたばかりなので、そのディレクトリの中身が新規生成されたもの(つまり、すべてをrm -rfしてから、存在しない新しいディレクトリでbitcoindを起動し、必要なファイルが作られるのを確認したあとにクラッシュする)なのに、リカバリ系のエラーが出るのは不思議だ。

誰か、何か心当たりはない?

フルパスを指定すれば動くか? 例:-datadir=/home/psyvenrix/datadir2

これを再現できた。データベースは相対パスを好まないようだ。

bitcoind -datadir=./subdir getinfoは実行中のデーモンに対しては動作するが、bitcoind -datadir=./subdirとしてデーモンを起動しようとすると、その例外が発生する。

データベースに渡す前にフルパスに解決すべきだろう。

-datadirで相対パスを使ったのはあなたが初めてのようだ。

Tilka 2010年8月5日07:07 UTC

迅速なバグ修正に+1。私もそれをできるようにしたい。

サトシ・ナカモトの投稿(2010年7月28日20:58 UTC)

これを再現できた。データベースは相対パスを好まないようだ。

bitcoind -datadir=./subdir getinfoは実行中のデーモンに対しては動作するが、bitcoind -datadir=./subdirとしてデーモンを起動しようとすると、その例外が発生する。

データベースに渡す前にフルパスに解決すべきだろう。

-datadirで相対パスを使ったのはあなたが初めてのようだ。

私も以前やろうとしたことがある。報告するほど大きなバグだとは思わなかったが、修正されると嬉しい。

SVN rev 130で修正済みだ。