コマンドラインとJSON-RPC

7 件のメッセージ サトシ・ナカモト 2010年2月23日 — 2010年3月5日

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ファイルで利用可能になった。