-datadir の指定で問題が発生
致命的な問題ではありませんが、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 で相対パスを使ったのはあなたが初めてのようだ。
これを再現できた。データベースは相対パスを好まないようだ。
bitcoind -datadir=./subdir getinfoは実行中のデーモンに対しては動作するが、bitcoind -datadir=./subdirとしてデーモンを起動しようとすると、その例外が発生する。データベースに渡す前にフルパスに解決すべきだろう。
-datadirで相対パスを使ったのはあなたが初めてのようだ。
私も以前やろうとしたことがある。報告するほど大きなバグだとは思わなかったが、修正されると嬉しい。
SVN rev 130 で修正済みだ。