8333 以外のポートで実行する
bitcoin に-port= / -rpcport=のコマンドライン/設定ファイルオプションを追加する作業をしている。目的は、1 台のマシンで複数の bitcoind を実行できるようにすることだ。少なくとも 2 つの Bitcoin 関連ウェブサービス(Bitcoin Faucet と、後で発表するサービス)を予定しており、完全に別のウォレットにしたいが、ホスティングのために複数のサーバーを借りたくはない。
使い方はこのようになる:
$ ./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 で試してくれる人はいるか?
bitcoinに
-port=/-rpcport=のコマンドライン/設定ファイルオプションを追加する作業をしている
良いね。さらに、ポートをバインドするアドレス用の-ip=オプションもあると良い。(rpcport は 127.0.0.1 にバインドするが、現在 port は全 IP アドレスである 0.0.0.0 にバインドする。マルチホームシステムで、内部アドレスにバインドする bitcoin とは別の外部アドレスに bitcoin をバインドしたい。)
SVN リビジョン 125 に対応した更新版のパッチはあるか?また、BerkeleyDB を排他モードで開いているなら、ファイルロックは不要ではないか?排他モードでは開いていない――自分でテストして確認した。
SVN リビジョン 125 に対応した更新版のパッチはあるか?また、BerkeleyDB を排他モードで開いているなら、ファイルロックは不要ではないか?排他モードでは開いていない――自分でテストして確認した。
DB_PRIVATE で開いている。
http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/envopen.html
SVNリビジョン125に対応した更新版のパッチはあるか?また、BerkeleyDBを排他モードで開いているなら、ファイルロックは不要ではないか?排他モードでは開いていない――自分でテストして確認した。
BerkeleyDB を排他的に開く方法はあるか?
DB_PRIVATE は最悪の両方のデメリットを持つ。DB_PRIVATE は排他的ではないが、他のプロセスが同時にアクセスしようとすると問題が起きる。
rev 153 で DB_PRIVATE フラグを削除した。
BerkeleyDB を排他的に開く方法はあるか?
意図している目的は何だ?
もし二つの bitcoin クライアントが同じデータベースを同時に使うのを防ぐことなら、アプリケーションレベルの保護を採る必要がある。粗い手段としては、ロックファイルや lock という DB エントリなどがある。
もし他のすべてのアクセスを防ぐつもりなら、その目標は諦めることを勧める 😊 db4 ツールが db4 データベースにアクセスできるようにしておくのは非常に有用だ。Code:db46_archive db46_deadlock db46_load db46_stat db46_checkpoint db46_dump db46_printlog db46_upgrade db46_codegen db46_hotbackup db46_recover db46_verify gavin の bitcointools のようなツールから読み取り専用でアクセスできるようにしておくのも、同じくらい有用だ。
bitcoin に
-port=/-rpcport=のコマンドライン/設定ファイルオプションを追加する作業をしている。目的は、1 台のマシンで複数の bitcoind を実行できるようにすることだ。少なくとも 2 つの Bitcoin 関連ウェブサービス(Bitcoin Faucet と、後で発表するサービス)を予定しており、完全に別のウォレットにしたいが、ホスティングのために複数のサーバーを借りたくはない。
こちらも同じだ。なんとか 2 つのウォレットと 2 つの bitcoin.conf インスタンスを作ることができた。
どちらも設定で異なる rcport を指定している(8332 と 8333)。
どちらか片方なら起動して問題なく動き、ウォレットを使うウェブサイトからも接続できる。
ところが…2 つ目の bitcoin インスタンスを起動すると(俺は Windows を使っている)、2 つ目のプロセスは約 6 Mb まで膨らんで、そのまま死んでしまう…。つまり、それぞれのウォレットは単独ならちゃんと動くが、同時には動かない。
何が起きたかデバッグして確認する方法はあるか? 設定でオプションを切り替えてみた(noirc や、接続先を限定するオプションなど)が、違いはないようだ。
よろしく、
MoneyTree
http://doubletrouble.bitcoinbet.com/
どちらも設定で異なる rcport を指定している(8332 と 8333)。
8333 はハードコードされた P2P ポートだ。