Symbolピアノードの情報を調べるスクリプト

ノード管理していく上であったらまぁ便利かなといった部分を追加しました。

環境

Python3.9以上
OpenSSL1.1.1以上

準備

必要なPythonパッケージをインストール

sudo pip install symbol-sdk-python pyopenssl zenlog

ルートにインストールしたくない場合

pip install symbol-sdk-python pyopenssl zenlog --user

peer-tools と certtool をクローン

git clone https://github.com/ccHarvestasya/peer-tools.git
git clone https://github.com/ccHarvestasya/symbol-node-configurator.git

CA プライベートキー生成

cd peer-tools
openssl genpkey -algorithm ed25519 -outform PEM -out ca.key.pem

証明書の生成

python3 ../symbol-node-configurator/certtool.py --working cert --name-ca "my cool CA" --name-node "my cool node name" --ca ca.key.pem
cat cert/node.crt.pem cert/ca.crt.pem | sudo tee cert/node.full.crt.pem

ノードの設定

trustedHosts

Unlockedaccount を取得するには、以下の条件が必要です。

  • 実行するマシンの IP/Host をノードの trustedHosts に設定する必要があります(許可されたマシンにしか応答しません)。
  • extension.diagnostics が有効になっている必要があります。

trustedHosts はカスタムプリセットに設定すれば良いかと思います。
空にすることで、全ての IP に対して有効となります 。が、セキュリティ的にひじょ~に良くないのでキチンと指定しましょう。
symbol-bootstrap での Peer でローカル上で実行なら 172.20.0.1 を許可すれば良いです。多分。

trustedHosts: 172.20.0.1

「どの IP を許可すれば分からないよ!!」という場合は、一度実行してみてノードログを見ましょう。
ignoring unknown packet of type Unlocked_Accountsを探し出して、表示されてる IP を許可すれば良いです。

<warning> (net::ChainedSocketReader.cpp@71) D4794B69B5683348F0A1BDF8ACF052CA84C2598E7050FDD9234789A9197FE6F2 @ 203.135.231.85 read completed with error: Malformed_Data
<warning> (ionet::SocketReader.cpp@75) D4794B69B5683348F0A1BDF8ACF052CA84C2598E7050FDD9234789A9197FE6F2 @ 203.135.231.85 ignoring unknown packet of type Unlocked_Accounts
<warning> (ionet::PacketHandlers.cpp@115) rejecting packet Unlocked_Accounts with size 8 from 203.135.231.85

diagnostics の有効化

extension.diagnostics は symbol-bootstrap ならデフォルトで有効だと思います。
(target/nodes/dhealth-peer-node/server-config/resources/config-extensions-server.properties)

実行

$ python3 peer_tools.py

peer_tools.py COMMAND [HOSTNAME] [PORT]

COMMANDS
  chainInfo                     /chain/info
  nodeInfo                      /node/info
  nodePeers                     /node/peers
  nodeUnlockedaccount           /node/unlockedaccount
HOSTNAME
  default: 127.0.0.1
PORT
  default: 7900

コマンドは長ったらしいので、cininpnuでも動くようにしています。

出力はJson形式です。Restゲートウェイが返すのを真似てます。

$ python3 peer_tools.py ni
{
  "version": 16777990,
  "publicKey": "7587ECE8D3FA11A075E533E83F2F1CC8E09F7D2E1D1BD547A44AC5D4D4C78242",
  "networkGenerationHashSeed": "49D6E1CE276A85B70EAFE52349AACCA389302E7A9754BCF1221E79494FC665A4",
  "roles": 1,
  "port": 7900,
  "networkIdentifier": 152,
  "host": "symbol02.harvestasya.com",
  "friendlyName": "_Symbol_TestNet_HarvestasyaNode02/.",
  "nodePublicKey": "5CFF56769EABA56315233552C849BA9FF6A72130F6AF802996C2EB0EA05AAD6F"
}

peer_simple_rest

peer_tools の機能を Web から確認できるようにしたものです。
peer_tools と同じ機能がRestと同じパスで使用できます。

追加で必要なパッケージをインストール

pip install flask waitress --user

Webサービスの起動

nohup waitress-serve --port=3000 peer_simple_rest:app > waitress-serve.log 2>&1 &

バックグラウンドで起動します。3000ポート解放を忘れずに。
終了は waitress-serve を kill して下さい。

$ ps -A | grep waitress-serve
 261858 ?        00:00:01 waitress-serve
$ kill 261858

確認

各自のドメインで以下のパスにアクセスしてください。

  • /chain/info
  • /node/info
  • /node/peers
  • /node/unlockedaccount

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

one × five =