try catch and ...release
ページ
ホーム
Chromeアプリ開発Tips
公開アプリ
Ubuntu
Linuxコマンド
#!/bin/bash
ブロックチェーンと暗号通貨
2017年5月5日金曜日
Counterparty フルノード (Federated Node) をセットアップ
![カウンターウォレット](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2HMWG3ZAqzWHXVuXXx1_u6YbjXXsXKWHBeV_0q-4f7p0kZ8s6Yppsk_BGw8WGSXrZfouyAggrmWkapzGjMUw_9n3Y5PYBAsSzvx2zFEIMcoKSWUjQpBOf9jMvIwbOeYb__tkrLltYlMU/s1600/counterwallet.jpg) Counterpartyの フルノード (Federated Node) 構築手順をメモしておきます。
## 目次 - [前提](#premise) - [インストールされるソフトウェア群](#bundle-software) - [ハードウェア必要スペック](#hardware-spec) - [インストール準備](#pre-install) - [インストール](#install) - [インストール後](#post-install) - [Counterwalletにアクセス](#counterwallet) - [おまけ: fednodeインストール中にエラーが出た時の対処法](#error-faq) - [参考](#ref) ## 前提 (premise) - OS: Ubuntu 16.04 64bit LTS - Federated Node: v2.2.2 - Docker: v17.04 - Docker Compose: v1.7.1 ## インストールされるソフトウェア群 (bundle-software) Federated Node をインストールすることで以下のソフトウェア群がインストールされます: - **counterparty-server**: Counterpartyサーバのコア部分。counterparty-lib + counterparty-cli - **counterblock**: コアの付加機能的な感じ。JSON RPCベースのAPIとか。counterwalletなどで利用。 - **counterwallet**: カウンターパーティのウォレット機能。 - **bitcoind**: おなじみのBitcoin Coreサーバ(bitcoind)。Counterpartyはこのブロックチェーン上に乗っかっています。バニラな bitcoind に `addrindex` パッチが当たっています。 - **armory_utxsvr**: カウンターウォレットとかでオフラインArmoryトランザクションをさばくために使われます。 - **nginx**: 毎度おなじみのWebサーバ。カウンターウォレットのリバースプロキシとして利用されます。そのため、counterparty-serverやcounterblockだけのインストールの時は利用されません。 - **mongodb** and **redis**: KVSデータベース。counterblockで使われます。 ## ハードウェア必要スペック (hardware-spec) *2017/04/28* 時点で必要とされるスペックは以下の通り: > Hardware / OS requirements > Memory: 4GB RAM (bitcoind, counterparty-server only), **8GB+ RAM** (full stack) > Disk space: The exact disk space required will be dependent on what services are run on the node: > For bitcoin databases: **~120GB (mainnet)**, ~10GB (testnet) > For counterparty and counterblock databases: **~1.5GB each** > For armory_utxsvr: **~30GB (mainnet)**, ~3GB (testnet) > OS: Please note that **Ubuntu Linux** is the recommended OS at this time, as most of our testing is performed on it. Windows and OS X support is considered in BETA. > Linux: We recommend **Ubuntu 16.04 64-bit**, but other, modern versions of Linux should work, as long as they support the newest released version of Docker > Windows: Windows 7 or higher, or Server 2008 or higher. 64-bit required > OS X: 10.8 “Mountain Lion” or higher 引用: [Running a Node](http://counterparty.io/docs/federated_node/) フルノードの場合の必要スペックは以下: - Disk: mainnetなら **153GB以上**, testnetなら **16GB以上** - Memory: **8GB以上** (mainnet & testnet) - OS: **Ubuntu 16.04 64bit** 推奨 (OS X 10.8 以上 や Windows 7 or Server 2008 (64bit) 以上でも可) ## インストール準備 (pre-install) まずは依存ソフトウェアをインストール。既に入っているなら読み飛ばしてもOK: ``` # Python3.5 をインストール: $ sudo add-apt-repository ppa:fkrull/deadsnakes $ sudo apt-get update $ sudo apt-get install python3.5 # git & curl をインストール: $ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get -y install git curl # docker & docker-compose をインストール: $ curl -fsSL https://get.docker.com/ | sh $ sudo /bin/sh -c "curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose" $ sudo chmod +x /usr/local/bin/docker-compose ``` ## インストール (install) いざ、Federated Node をインストール: ``` $ git clone https://github.com/CounterpartyXCP/federatednode.git $ cd federatednode $ sudo ln -sf `pwd`/fednode.py /usr/local/bin/fednode # masterからfullnodeをインストール: $ fednode install full master ``` ## インストール後 (post-install) #### セキュリティ系の設定変更を行う(推奨) 便利なスクリプトがあるのでそれを実行します。ただし、OSの環境設定が変わるのでそこだけは注意: ``` $ cd extras/host_security $ sudo ./run.py ``` #### サービス一覧を確認: fednodeコマンドを使って立ち上がっている関連サービスをチェック: ``` $ fednode ps ``` #### サービスを停止: `fednode stop <サービス名>` で停止できます。 指定できるサービス名は以下: - `bitcoin` - `bitcoin-testnet` - `counterparty` - `counterparty-testnet` - `counterblock` - `counterblock-testnet` - `armory_utxsvr` - `armory_utxsvr-testnet` - `counterwallet` - `redis` - `mongodb` 今回は巨大なmainnetのブロックチェーンの同期を省きたいので、ひとまず mainnet の bitcoin サービスだけは止めておきます: ``` $ fednode stop bitcoin ``` #### サービスの再起動: ``` # bitcoin(testnet)を再起動してみる: $ fednode restart bitcoin-testnet ``` #### ログをtail: bitcoind(testnet)のログをtailしてみる: ``` $ fednode tail bitcoin-testnet ``` #### dockerコンテナに入って色々やってみる: 関連サービスのdockerコンテナに`fednode`コマンドで入ることができます: ``` # bitcoin-testnet に入ってみる: $ fednode exec bitcoin-testnet /bin/bash # bitcoin-testnetのコンテナに入れたので ps を見てみる: root@pc-bc-t:/tmp# ps ax PID TTY STAT TIME COMMAND ... 6 ? SLl 2:59 /usr/local/bin/bitcoind -conf=/root/.bitcoin-config/bitcoin.testnet.conf ... ### ↑ bitcoindが設定ファイル /root/.bitcoin-config/ を見て動いていることが分かる # bitcoin-cli を使ってみる: root@pc-bc-t:/tmp# bitcoin-cli -testnet=1 getinfo { "version": 120100, "protocolversion": 70012, "walletversion": 60000, "balance": 0.00000000, "blocks": 205624, "timeoffset": 0, "connections": 8, "proxy": "", "difficulty": 1, "testnet": true, "keypoololdest": 1493347762, "keypoolsize": 101, "paytxfee": 0.00000000, "relayfee": 0.00001000, "errors": "" } root@pc-bc-t:/tmp# bitcoin-cli -testnet=1 getblockcount 262362 # dockerコマンドの時と同じように Ctrl+P+Q でコンテナを落とさないようにExitする root@pc-bc-t:/tmp# $ ``` ## Counterwalletにアクセス (counterwallet) https://127.0.0.1/?testnet=1 にアクセスするとtestnet用のカウンターウォレット画面が開きます。デフォルトではオレオレ証明書が使われているためブラウザ警告が出ますが、今はとりあえず受け入れておきます。 最初は、ウォレットのログイン画面で12単語のパスフレーズを入れてログインしようとすると、ブラウザに以下のような画面が表示されるかもしれません。これはブロックチェーンの同期がまだ終わってないからです: ![counterwallet login page](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfJtltgih3TecKL0K8fNJk3JrQDYsmHFJDJZQe0iwZ-hbhyphenhyphen9LiTvmnwsACoMDyOh39OLiIXPOooBC2MyZFMtl0W9U3QdUBmsA1fsiRYFUeJSM4pp9WDupUpXMhGoF2b-VJ7QdtJlcZCa8/s1600/counterwallet-blockchain-not-synced-yet.jpg) **NOTE: Counterpartyでは、Bitcoinのブロックチェーンのダウンロード後に行われる処理にかなり時間が掛かります。** 各サービスが今どのような状態かを知るためには、`fednode tail
`でログを見る他にも、以下のエンドポイントにアクセスして確認する方法もあります: - `mainnet`: https://127.0.0.1/_api/ - `testnet`: https://127.0.0.1/_t_api/ 上記のエンドポイントを叩くとサーバステータスが得られます。その内容は以下のような感じです。 Before(ブロックチェーンのダウンロード&同期処理の完了前): ``` { "counterparty-server_check_elapsed": 0.00447845458984375, "counterblock_cur_block": { "block_index": 0, "block_hash": "??" }, "counterblock_error": "COULD NOT CONTACT", "counterblock_ver": "1.4.0", "counterparty-server_caught_up": false, "counterblock_last_processed_block": { "block_index": 310000, "block_hash": null }, "counterblock": "NOT OK", "counterblock_last_message_index": -1, "counterparty-server": "NOT OK", "counterblock_caught_up": false, "counterparty-server_ver": "?", "counterblock_check_elapsed": 0.0028018951416015625, "counterparty-server_last_block": "?", "counterparty-server_last_message_index": "?", "ERROR": "counterparty-server_api_contact_error" } ``` After(同期処理完了後): ``` { "counterblock_cur_block": { "block_index": 1121702, "block_hash": "0000000059e3347c6f5bc18b25d57ec8e235daa7a6210ee1987c14aedd93f968" }, "counterparty-server_ver": "9.55.1", "counterparty-server_caught_up": true, "counterparty-server_check_elapsed": 0.005971431732177734, "counterblock_last_message_index": 38628, "counterblock_error": null, "counterparty-server_last_block": { "txlist_hash": "bc46ab65987ac2cee2366dc19e5e9c469d974ee0cd2af6c03705ac66e712e1fb", "block_time": 1493933691, "previous_block_hash": "00000000e55164008db8e04172403b22405f9a85a08947e0543f34b3b69c6759", "block_hash": "0000000059e3347c6f5bc18b25d57ec8e235daa7a6210ee1987c14aedd93f968", "difficulty": 1, "ledger_hash": "b4ee559d61fb2c0e28e1404895705bdedbb4f1d31f0a5fcd6e20cea6ff0a33e6", "block_index": 1121702, "messages_hash": "10d425e7d95119c13f0ee6a13f7e6acfe1f97b56d41b9d4206fe7c74fc6c0967" }, "ERROR": null, "counterblock_ver": "1.4.0", "counterblock_caught_up": true, "counterblock_last_processed_block": { "block_index": 1121702, "block_hash": "0000000059e3347c6f5bc18b25d57ec8e235daa7a6210ee1987c14aedd93f968" }, "counterparty-server": "OK", "counterblock_check_elapsed": 0.0061109066009521484, "counterparty-server_last_message_index": 38628, "counterblock": "OK" } ``` **追記:2017/05/09** curlなどでPOSTで叩けるAPIは、デフォルトでは以下のURLになります: - `mainnet`: http://rpc:rpc@127.0.0.1:4000/api/ - `testnet`: http://rpc:rpc@127.0.0.1:14000/api/ #### 他ウォレットサービスのウォレット パスフレーズを入力してログインすると、他ウォレットサービス(counterwallet.io や coindaddy.io など)で作ったアドレスも自動的にロードされます。インポート作業は不要です。 ![CPサーバ同期後のカウンターウォレット](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrAnRb0cbiOt4vVW2blFY0r6QQOhr-b9PKMq_sAlAGDwaNOVYNSYjsLRDzgfba1NcXunQUFT0GyGclIj0IbmxMaPaDCE-lVk6YO12by7Dn53ZPxH25NDdNnXMFDh282XiQQRmEmzREM-A/s1600/cp-wallet-after-sync.jpg) #### オレオレ証明書を正規版に カウンターウォレットの本番稼働時には、オレオレ証明書を正規の証明書と置き換えることになります。置き換えるべき証明書の場所は以下のパスにあります: `federatednode/config/counterwallet/ssl/counterwallet.pem` `federatednode/config/counterwallet/ssl/counterwallet.key` 正規の証明書で上書き後、 `fednode restart counterwallet` でカウンターウォレットのサービスを再起動すればOK。 ## おまけ: fednodeインストール中にエラーが出た時の対処法 (error-faq) #### fednode install で `logname: ログイン名がありません` エラー (error-faq-logname) ``` $ fednode install full master logname: ログイン名がありません Traceback (most recent call last): File "/usr/local/bin/fednode", line 370, in
main() File "/usr/local/bin/fednode", line 180, in main setup_env() File "/usr/local/bin/fednode", line 138, in setup_env SESSION_USER = subprocess.check_output("logname", shell=True).decode("utf-8").strip() File "/usr/lib/python3.5/subprocess.py", line 626, in check_output **kwargs).stdout File "/usr/lib/python3.5/subprocess.py", line 708, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command 'logname' returned non-zero exit status 1 ``` 上記エラーは[`logname`が入っていない](https://counterpartytalk.org/t/fednode-install-error/2350/2)ことが原因。`fednode.py` の `logname` を `whoami` に書き換えることで回避できます。書き換え箇所は`fednode.py`の138行目: ``` $ cat /usr/local/bin/fednode | grep -nr logname fednode.py:138: SESSION_USER = subprocess.check_output("logname", shell=True).decode("utf-8").strip() ``` 書き換えた後に `fednode install ...` を再実行すればOK。 #### docker-composeで`UnicodeDecodeError`エラー (error-faq-UnicodeDecodeError) ``` /tmp/_MEIphdtjI/compose/config/config.py:222: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal Traceback (most recent call last): File "
", line 3, in
File "compose/cli/main.py", line 58, in main File "compose/cli/main.py", line 106, in perform_command File "compose/cli/command.py", line 34, in project_from_options File "compose/cli/command.py", line 68, in get_project File "compose/config/config.py", line 234, in find UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 16: ordinal not in range(128) ``` 上記は日本語などのマルチバイト文字を含むディレクトリ名(例えば `/home/hoge/ダウンロード/` のようなディレクトリ)の配下で fednode install を実行したために起きる[docker-composeの既知のバグ](https://github.com/docker/compose/issues/3870)です。 以下のように、日本語などを含まないパスに`federatednode`フォルダごと移動してやり直すことで回避可能です: ``` $ cd .. $ mv federatednode ~/tmp/federatednode $ cd ~/tmp/federatednode # もう一度インストールしなおし: $ sudo ln -sf `pwd`/fednode.py /usr/local/bin/fednode $ fednode uninstall $ fednode install full master ``` ## 参考 (ref) [Running a Node | Counterparty](http://counterparty.io/docs/federated_node/) 以上です。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿