-datadir の指定で問題が発生

6 件のメッセージ BitcoinTalk psyvenrix, サトシ・ナカモト, ギャビン・アンドレセン, Tilka, lachesis 2010年7月28日 — 2010年8月12日
psyvenrix 2010年7月28日 04: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。私もそれをできるようにしたい。

lachesis 2010年8月11日 17:58 UTC 原文 ·
サトシ・ナカモトの投稿(2010年7月28日 11:58 UTC)

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

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

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

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

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

SVN rev 130 で修正済みだ。