コマンドラインとJSON-RPC
SVN上のバージョン0.2.6はデーモンとして実行でき、コマンドラインまたはJSON-RPCで制御できるようになった。
Linuxではlibgtk2.0-0がインストールされている必要があるが、GUIが実行されている必要はない。うまくいけば、ウィンドウシステムがインストールされていなくてもGTKをインストールできるだろう。
デーモンとして起動するコマンド: bitcoin -daemon [スイッチ…]
または、通常通りUIを実行しつつコマンドラインやJSON-RPCからも制御可能にするには、「-server」スイッチを使用する。 bitcoin -server [スイッチ…]
どちらのスイッチでも、127.0.0.1:8332でローカルソケット接続を受け付けるHTTP JSON-RPCサーバーが実行される。ポートはループバックにバインドされ、ローカルマシンからのみアクセスできるが、実行中のユーザーだけでなくどのアカウントからでもアクセスできる。
コマンドラインから制御するには、インターフェースはスイッチなしのコマンド名の後にパラメータ(ある場合)を続ける。 bitcoin <コマンド> [パラメータ…]
例:
bitcoin getinfo
bitcoin getdifficulty
bitcoin setgenerate true
bitcoin stop
これはシンプルなJSON-RPCクライアントで、JSONの結果を表示する。コマンドのリストはrpc.cppを参照してほしい。
Webアプリや自動化されたものは通常、コマンドラインではなくJSON-RPCを直接使用する。すべての主要言語にJSON-RPCライブラリがある。PHPやPythonのようなスクリプト言語では、構文はローカル関数を呼び出すのと同じくらい自然だ。
theymosの2010年2月24日 03:07:37 AMの投稿より引用satoshiの2010年2月23日 10:15:41 PMの投稿より引用LinuxではGTK2.0-0がインストールされている必要があります。 この要件はいつか解消されますか?GTKを扱いたくないのですが。 GTKを「扱う」のに実際どれくらいの手間がかかるのだろうか?「sudo apt-get install libgtk2.0-0」をして、いくつかの余分なライブラリが置いてあるだけの問題ではないか?GTKは何もする必要はなく、ただそこにあればBitcoinが起動時にリンクでき、GUIがないためgtk-init-checkの呼び出しが失敗して、それで終わりだ。
GTKのリンクを避けるためだけにwxBaseを使用するために、すべてをifdefで台無しにして、別のコンパイルとバイナリを用意するよりマシだ。
メモリ使用量はいつ、どのくらいの速さで増加したか?すぐに、長時間かけてゆっくりと、それとも何かの後のイベントから始まったか?
Ubuntu 9.10 64ビットで-daemonを実行しており、メモリ使用量は安定している。
サーバーでの違いは64ビット以外に何かあるはずだ。GUIがないことによる何らかの不具合かもしれない。メモリリークのデバッグツールが手がかりを与えてくれるかもしれない。
OK、wxBaseのみをリンクしGTKをリンクしないビルドターゲットbitcoindを作成した。SVN上のバージョン0.2.7だ。
ui.cppから初期化とシャットダウンの処理をinit.cppに分離したので、ui.cppは純粋なUIのみになった。ui.hはwxUSE_GUI=0の場合にインラインスタブを提供する。ノードからUIへのインターフェース関数は4つだけだ。bitcoindビルドでは、ui.oやuibase.oはリンクしない。
sirius-mの2010年2月25日 04:32:17 PMの投稿より引用すぐに増加し始めました。valgrindが役立つか試してみます。 何かUIの処理が失敗したか、正しく初期化されなかったために、wxWidgets内で無限にリトライしているような感じがする。初期化失敗を無視して実行を続けるハックは、未知の領域に入ることを意味する。このモードではwxをほとんど使用しないという事実に頼っている。wxGetTranslationやwxMutexなど、いくつかは引き続き使用している。
別のデバッグ方法として、gdbで実行し、すべてが静かになりすべてのスレッドがアイドルになるのを待ち、ブレークして、どのスレッドが忙しく何かをしているか、何をしているかを確認する方法がある。
bitcoindはおそらく問題なく動作すると思うが、問題のデバッグをしてもらえると助かる。
wx/clipbrd.hは使用されていないので、#if wxUSE_GUIの中に移動してほしい。
SVNのheaders.hを更新した。
すまない、wxbaseにリンクしたが、コンピュータにはフルのwxWidgetsがあった。
db.h:140のクラスDbにメンバー「exisits」がないというのは変だ。pdb->get、pdb->put、pdb->delはその前にコンパイルできていた。Berkeley DBのバージョン4.7.25を使っているか?
Db::exists() http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/CXX/frame_main.html http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/CXX/dbexists.html
おそらく最近existsが追加されたのかもしれない。それ以前はgetを使用していたのだろう。
wxWidgets 2.9.0を使用しているか?2.9.0以外の使用は推奨しない。
wxヘッダー(arrstr.h)にwxBase外の何かへの参照があるようだ。
BitcoinのmakefileからD__WXDEBUG__を削除すれば、おそらく解決するだろう。
それでも動作せず、とにかく動かしたい場合は、wxWidgetsのinclude/wx/arrstr.h、167行目を編集してwxASSERT_MSGをコメントアウトすることができる。
sirius-mの2010年2月24日 06:17:35 PMの投稿より引用これは変です… 64ビットLinuxサーバーでBitcoinをデーモンとして起動すると、残りのRAM 250MBすべて、スワップ700MBを食い尽くし、最終的にクラッシュします。32ビットのUbuntuデスクトップでは正常に動作し、メモリ使用量は15MBに留まります。サーバーは64ビットビルドのBitcoinを実行しています。ビルドか何かに問題があるのかもしれません。 sirius-mがこれをデバッグした。64ビット関連の問題だった。
修正はSVNのutil.cppファイルで利用可能になった。