MonapartyのFederated Nodeをインストールする

MonapartyのFederated Nodeをインストールしてみたので手順を残しておきます。

特にハマるところもなく、基本的には以下Counterpartyのドキュメント通りですんなりインストール出来たのでこれと言って特筆する点はありませんが。。

Running a Node | Counterparty

環境はまっさらなUbuntu Server(16.04.3 LTS)です。

事前準備

システムアップデートと依存ライブラリのインストールを行います。 この辺のライブラリは元から入ってた気もしますが、実際どうだったかは忘れました。

sudo apt-get update && sudo apt-get upgrade
sudo apt-get -y install git curl coreutils

次にDockerをインストールします。

sudo -i 
curl -fsSL https://get.docker.com/ | sh
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
exit

インストール

ドキュメントはCounterpartyのものなので、リポジトリをMonapartyのものに変更します。

git clone https://github.com/monaparty/federatednode.git
cd federatednode
sudo ln -sf `pwd`/fednode.py /usr/local/bin/fednode

インストールする際には、希望する構成に合わせてCONFIGを変更します。

fednode install <CONFIG> <BRANCH>

CONFIGをbaseにした場合はcounterparty-servermonacoindのみで、counterblockにするとcounterblock関連が追加されます。 counterwalletなども含んだすべてのサービスをインストールする場合はfullを選択します。

どうやらcounterblock経由で諸々触るのがセオリーのようなので、CONFIGはcounterblockでインストールしました。

fednode install counterblock develop

セキュリティの強化

Ubuntuの場合、セキュリティの設定を一発でやってくれるスクリプトが用意されています。

内容はnospoofunattended-upgradessysctlfail2banpsadchkrootkitrkhunterlogwatchapparmorauditdiwatchなどなどをまとめて設定できます。 詳細はここ

cd extras/host_security
sudo ./run.py

管理

サービスの状態確認

インストールが完了すると自動的に起動するのでpsコマンドで各サービスの状態を確認します。 StateがUpになっているのが分かります。

fednode ps

                Name                              Command               State                                               Ports
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
federatednode_counterblock-testnet_1   start.sh                         Up      0.0.0.0:14100->14100/tcp, 0.0.0.0:14101->14101/tcp, 0.0.0.0:14102->14102/tcp, 4100/tcp,
                                                                                4101/tcp, 4102/tcp
federatednode_counterblock_1           start.sh                         Up      14100/tcp, 14101/tcp, 14102/tcp, 0.0.0.0:4100->4100/tcp, 4101/tcp, 4102/tcp
federatednode_counterparty-testnet_1   start.sh                         Up      0.0.0.0:14000->14000/tcp, 4000/tcp
federatednode_counterparty_1           start.sh                         Up      14000/tcp, 0.0.0.0:4000->4000/tcp
federatednode_monacoin-testnet_1       start.sh                         Up      0.0.0.0:19402->19402/tcp, 19403/tcp, 9401/tcp, 9402/tcp
federatednode_monacoin_1               start.sh                         Up      19402/tcp, 19403/tcp, 9401/tcp, 0.0.0.0:9402->9402/tcp
federatednode_mongodb_1                docker-entrypoint.sh mongod      Up      127.0.0.1:27017->27017/tcp
federatednode_redis_1                  docker-entrypoint.sh redis ...   Up      6379/tcp

データの保存場所

各データは以下にfederatednode_bitcoin-datafederatednode_counterparty-dataなどのディレクトリがあり、そこに保存されていました。

/var/lib/docker/volumes

ログの確認

tailコマンドやlogsコマンドで各サービスのログを確認出来ます。 サービスを指定しなければ、すべてのサービスのログが流れてきます。

fednode tail <service>
fednode logs <service>

monacoinのログを確認するには以下のようにサービスを指定します。

fednode tail monacoin

Attaching to federatednode_monacoin_1
monacoin_1              | 2018-01-17 12:27:44 UpdateTip: new best=9df4d83ebc67172601b543fdef232b2818289f216215876f5494fac0c5a1e753 height=3053 version=0x00000002 log2_work=33.168825 tx=3060 date='2014-01-01 00:46:37' progress=0.000617 cache=0.6MiB(3058tx)

コンテナの起動、停止

confファイルを更新した場合など、サービスの再起動が必要になります。 サービス名を指定しなければ全サービスに対して実行します。

fednode stop <service>
fednode start <service>
fednode restart <service>

シェルコマンドの実行

execコマンドで各サービスのコマンドを実行出来ます。

fednode exec <service> <CMD>

monacoin-cliを実行するには以下のようにします。

fednode exec monacoin monacoin-cli getinfo

{
  "version": 130202,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 8328,
  "timeoffset": 0,
  "connections": 2,
  "proxy": "",
  "difficulty": 1.690091809366619,
  "testnet": false,
  "keypoololdest": 1516190275,
  "keypoolsize": 100,
  "paytxfee": 0.00000000,
  "relayfee": 0.00100000,
  "errors": "Upgrade to Monacoin 0.14.2 https://monacoin.org/"
}

ちなみに各コンテナのシェルに入るにはshellコマンドで入り、exitで抜けます。

fednode shell <service>

APIの実行

同期が終わったらCounterblock APIも試してみます。

curl -s -X POST --data '{"jsonrpc":"2.0","id":1,"method":"get_chain_block_height"}' http://localhost:4100

{"result": 1222864, "id": 1, "jsonrpc": "2.0"}

とりあえず問題なく動きました。

次はCounterblockのカスタムモジュールについて色々と触ってみます。

一応ゴールとしてはブロックエクスプローラ的なものでも作って公開したいと思っているんですが、分からない事が多すぎて到達出来るかは非常に怪しい感じです。。

soon...