(ギャビン・アンドレセンの引用投稿)
bitcoinに-port= / -rpcport=のコマンドライン/設定ファイルオプションを追加する作業をしている。目的は、1台のマシンで複数のbitcoindを実行できるようにすることだ。少なくとも2つのBitcoin関連ウェブサービス(Bitcoin Faucetと、後で発表するサービス)を予定しており、完全に別のウォレットにしたいが、ホスティングのために複数のサーバーを借りたくはない。
使い方はこのようになる: Code:$ ./bitcoind getbalance # TESTネットワークのFaucet bitcoind 40616.66159265000 $ ./bitcoind -datadir=/home/bitcoin/.bitcoinTEST2 getbalance 1000.000000000000 $ cat /home/bitcoin/.bitcoinTEST2/bitcoin.conf rpcpassword=… port=18666 rpcport=18665
サトシは、bitcoin/bitcoindを非標準ポートで実行することを許可すると、設定を誤った場合に2つのbitcoinが同じデータベースを開いて書き込む可能性があり危険だと指摘した。これを防ぐために、<datadir>/db.logファイルをロックとして使用し、同時に1つのbitcoinだけが同じdatadirにアクセスできるようにした(boost::interprocess::file_lockを使用。これはクロスプラットフォームで、bitcoinがクラッシュしても正常に動作するとされている)。
この作業中に出てきた問題:
Windows GUIコードにwxSingleInstanceCheckerの呼び出しを残したため、Windowsでは異なるポートでリッスンする複数のGUI版bitcoinは動作しない。Windowsは使わないので…
2つのbitcoinを同じdatadirに向けた場合のエラー処理をきれいにする手間は省いた(ランタイム例外「Cannot lock db.log, is bitcoin already running?」が出る)。
パッチは http://pastebin.com/2e4hfXSS にある。Linuxでしかテストしていないので、Windowsで試してくれる人はいるか?
Quote from: gavinandresen on July 27, 2010, 02:08:17 PM
-port= / -rpcport= のコマンドライン/設定ファイルオプションをbitcoinに追加する作業をしている
良いね。さらに、ポートをバインドするアドレス用の-ip=オプションもあると良い。(rpcportは127.0.0.1にバインドするが、現在portは全IPアドレスである0.0.0.0にバインドする。マルチホームシステムで、内部アドレスにバインドするbitcoinとは別の外部アドレスにbitcoinをバインドしたい。)
SVNリビジョン125に対応した更新版のパッチはあるか?また、BerkeleyDBを排他モードで開いているなら、ファイルロックは不要ではないか?排他モードでは開いていない――自分でテストして確認した。
Quote from: lachesis on August 10, 2010, 03:24:55 PM
SVNリビジョン125向けのこのパッチの更新版はあるか?また、BitcoinはBerkeleyDBを排他的に開いているのか、ファイルロックの必要がないのか?そうではなかった — 自分でテストした。
DB_PRIVATEで開いている。
http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/envopen.html
Quote from: lachesis on August 10, 2010, 03:24:55 PM
また、BitcoinはBerkeleyDBを排他的に開き、ファイルロックの必要性を排除しているのか?そうではない — 自分でテストした。
BerkeleyDBを排他的に開く方法はあるか?
DB_PRIVATEは最悪の両方のデメリットを持つ。DB_PRIVATEは排他的ではないが、他のプロセスが同時にアクセスしようとすると問題が起きる。
rev 153でDB_PRIVATEフラグを削除した。