Wait a moment...

【NIS】ラズパイ3にNISを入れてみたらあかんかった話

nem147xem (10)
979
4
2018-12-02 02:37:02
【NIS】ラズパイ3にNISを入れてみたらあかんかった話

1. NISってなに?

 

まず、こんなコテコテの技術文書を読んでくださってありがとうございます。NEM Technical Referenceの第4章のトランザクション以降を解読するにあたって、NISのことを理解しないとならないと感じました。NISとはですね、、、、実は、僕、つい最近まで知りませんでした。NEM Infrastructure Serverだそうです。

 

つまりNEMのしくみを維持しているネットワーク上のコンピューターです。ネムアドレスを発行したり、トランザクションを管理したり、ブロックチェーンをつなげたりは、複数のNISが協力体制でやっています。

 

世界中に一体何台のNISが稼働しているかは知りませんが、ここによると、現在約500台となってます。おそらくきちんと設定された、スーパーノード級の性能を持ったものがこのくらいということだと思います。

 


2. インストール

 

まず、これまでZaif用の取引ボットを動かしていたラズパイ3を止め、microSDカードを抜いて、Raspbian:NOOBS3.0.0を書き込んだ新しいカードを差し込みます。ちなみにこのmicroSDカードはモナで買ったものです。ラズパイのセットアップはネットに山程情報があるので割愛します。現在のRaspbianにはJava8がすでに組み込まれていますので、ネットワーク設定などが終わったらすぐにNISのインストールに入れます。

 

NISのダウンロード元はこちら。

 

https://nem.ninja/

 

ここから下の2つのファイルをダウンロードしてきました。とりあえず現在の最新版です。僕はMacでダウンロードしてUSBメモリーを使ってラズバイにコピーしました。

 

nis-0.6.96.tgz

nis5_mainnet.h2-1680k.db.zip

 

まずnis-0.6.96.tgzを/home/pi/に展開します。ルート権限でやる必要はありません。

 

$ tar zxvf nis-0.6.96.tgz

 

/home/pi/package/というディレクトリができていると思います。

 

次に、nis5_mainnet.h2-1680k.db.zipファイルを/home/pi/nem/nis/data/ディレクトリを作ってその中に入れます。そして、ディレクトリの中で

 

$ unzip nis5_mainnet.h2-1680k.db.zip

 

で解凍します。結構待たされて、2GBくらいのnis5_mainnet.h2.dbという大きなファイルがdataディレクトリ内にできました。microSDカードは16GB以上あったほうが良いと思います。 

 

展開が終わったら、/home/pi/package/ディレクトリから、シェルスクリプトを起動します。

 

./nix.runNis.sh

 

これで、サーバースタートします。まず、

 

2018-11-30 23:47:24.025 情報 loadBlocks (from height 902 to height 1001) needed 43ms (org.nem.nis.dao.BlockDaoImpl d)

2018-11-30 23:47:24.108 情報 loadBlocks (from height 1002 to height 1101) needed 40ms (org.nem.nis.dao.BlockDaoImpl d)

2018-11-30 23:47:24.329 情報 loadBlocks (from height 1102 to height 1201) needed 39ms (org.nem.nis.dao.BlockDaoImpl d)

2018-11-30 23:47:24.405 情報 loadBlocks (from height 1202 to height 1301) needed 37ms (org.nem.nis.dao.BlockDaoImpl d)

2018-11-30 23:47:24.472 情報 loadBlocks (from height 1302 to height 1401) needed 35ms (org.nem.nis.dao.BlockDaoImpl d)

 

のように、ダウンロードしたデータベースファイル内のブロックをロードしはじめます。最初GUI環境を立ち上げたままスタートしたら、160万ブロックあたりで挙動がおかしくなりはじめ、フリーズしてしまいました。CUIにしてかつスワップを1GBに増量してトライしたところ、同期開始から約6時間後、なんとか1680876ブロックを読み終えました。

 

2018-12-01 05:19:49.764 情報 loadBlocks (from height 1680602 to height 1680701) needed 149ms (org.nem.nis.dao.BlockDaoImpl d)

2018-12-01 05:19:53.820 情報 loadBlocks (from height 1680702 to height 1680801) needed 116ms (org.nem.nis.dao.BlockDaoImpl d)

2018-12-01 05:19:56.733 情報 loadBlocks (from height 1680777 to height 1680876) needed 3ms (org.nem.nis.dao.BlockDaoImpl d)

2018-12-01 05:20:00.187 情報 clustering completed: { clusters: 11 (average size: 11.55), hubs: 5, outliers: 14922 } (org.nem.nis.pox.poi.PoiContext$AccountProcessor dh)

2018-12-01 05:20:03.235 情報 Iterations required: 33; converged?: true (org.nem.nis.cx.na.qcw run)

2018-12-01 05:20:03.251 情報 POI iterator needed 2408ms. (org.nem.nis.pox.poi.PoiImportanceCalculator c)

2018-12-01 05:20:07.278 情報 block loading completed; height 1680776 (org.nem.nis.service.BlockChainLastBlockLayer eb)

 

この時点でスワップを200MBほど使っていて、動きもかなり緩慢になっています。すでにギリギリな感じです。

それが終わると、他のNISに問い合わせしながらブロックチェーンのデータをアップデートしはじめます。時々、エラーっぽいメッセージが出ますが、とにかく待ちます。止まったり動いたりを繰り返しながら、ちょっとずつブロックを取り込んで行きます。しかし、稼働開始から約13時間後、

 

2018-12-01 13:05:18.131 情報 Updating "Node [libre al viento <NDJX5AEBL4W4YSHDRUNK7CZAHSMNKVRDV7D2MJ5Y>] @ [34.208.76.79]" -> ACTIVE (org.nem.peer.services.NodeRefresher update)

2018-12-01 13:05:18.161 情報 DIRECT warning (BUSY) encountered while communicating with <Node [[c=#86c0e9]go[/c] <NA76OOREMOGJYHUKH4SU7OS73456L35J7NOIJWQM>] @ [go.nem.ninja]>: java.util.concurrent.CompletionException: org.nem.core.connect.BusyPeerException: java.net.SocketTimeoutException (org.nem.peer.services.NodeRefresher a)

2018-12-01 13:05:18.205 情報 Updating "Node [[c=#86c0e9]go[/c] <NA76OOREMOGJYHUKH4SU7OS73456L35J7NOIJWQM>] @ [go.nem.ninja]" -> BUSY (org.nem.peer.services.NodeRefresher update)

2018-12-01 13:05:30.287 情報 INDIRECT warning (BUSY) encountered while communicating with <Node [Hi, I am Alice2 <NC2ZQKEFQIL3JZEOB2OZPWXWPOR6LKYHIROCR7PK>] @ [62.75.251.134]>: java.util.concurrent.CompletionException: org.nem.core.connect.BusyPeerException: java.net.SocketTimeoutException (org.nem.peer.services.NodeRefresher a)

2018-12-01 13:06:36.706 情報 validated 400 blocks (818 transactions) in 4514798 ms (5519312 μs/tx) (org.nem.nis.sync.BlockChainUpdateContext fz)

2018-12-01 13:06:36.749 情報 new block's score: 52051775589686566 (org.nem.nis.sync.BlockChainUpdateContext a)

 

「パトラッシュ、僕はもう、、、」的なエラーログを残すこともなくフリーズしました。最終のブロックスコアは52051775589686566。

 


3. 稼働チェック

 

dbファイルを読み終えた時点で、ローカルネットワーク内から、ラズパイ3上で動いているNISに問い合わせできます。僕のラズパイは家庭内ネットワークに、IPアドレス192.168.2.114で接続されているので、他のPCのブラウザから、httpリクエストを出せます(nemlogの仕様でhttpsに自動変換されていますが、httpで叩かないとセキュリティーエラーが出ます)。

 

http://192.168.2.114:7890/status

 

に対して、

 

{"code":5,"type":4,"message":"status"}

 

と、まだブロックチェーンのアップデートが終わってないよ的なメッセージを返してきます。レスポンスには数十秒かかります。

 

http://192.168.2.114:7890/account/get?address=XXXXXXXXXX

 

を叩いてみると(XXXXXXXXXは自分のネムアドレス)、

 

{"meta":{"cosignatories":[],"cosignatoryOf":[],"status":"LOCKED","remoteStatus":"INACTIVE"},"account":
{"address":"XXXXXXXXXX","harvestedBlocks":0,"balance":0,"importance":0.0,"vestedBalance":0,"publicKey":null,"label":null,"multisigInfo":{}}}

 

というような返事が返ってきました。ちなみに使ったアドレスは僕のnemlog用Walletのアドレスですが、空っぽです。これからもブロックチェーン情報のアップデートが追いついていないことがわかります。


4. 終わりに

 

電源や熱対策を施し、取引ボットとしては1週間くらいは平気で稼働するRaspberry Pi3を使いましたが、残念ながら安定稼働には至りませんでした。主要な原因はメモリー不足ですね。一応Maxのスワップ2GBでも試してはいますが、やはりちゃんとした64bitシステムを使う必要がありそうです。

 

細胞管理システム構築のために、だんだんNEMのコアな部分に入り込んできてしまいました。

 

NISのインストールについては、

 

NEM のローカルハーベスト環境を Raspberry Pi にセットアップしてみた

 

を参考にさせて頂きました。この場を借りてお礼申し上げます。今回も最後まで読んでくださり、ありがとうございます!

 

目指せ北海道


5.追記

投げネムをたくさん頂いたので、現在考えられる対策をすべて施した上で最終挑戦しました。ラズパイでは無理でしたが、ついにNISの稼働に成功しました。

【NIS】XeonにNISをインストールしたらすごかった話

 

Comment
目指せ北海道
目指せ北海道
2018-12-02 10:41:26ID:13082

>>shinobu::さんのネムログもとても参考になります。モットーは失敗しながら学ぶです。毎回ほぼ失敗です。
これからも宜しくお願いします。

shinobu
shinobu
2018-12-02 10:31:42ID:13078

目指せ北海道産の技術への取り組み記事はとても勉強になります。
小生は技術分野には明るくないですが、今後も応援しております。

目指せ北海道
目指せ北海道
2018-12-02 08:39:18ID:13060

>>XEMBook::さん、コメントありがとうございます!実際はRaspberry Pi3の1GBの物理メモリ+スワップで、短時間でもなんとか稼働する事自体がすごいと思います。発展途上国への普及など考えても、メモリ圧縮や、機能を絞ったライトバージョンのNIS(スーパーノード用ではなく、コミュニティーノード的なナニカ)が開発されるといいですね。

XEMBook
XEMBook
2018-12-02 08:27:17ID:13058

直結するかどうか分かりませんが、コアデブがパトリシア木を使ってメモリ圧縮に取り組んでいるようです。動くようになるといいですね😀

この記事を書いた人
趣味はバイクでツーリングしながら、ブログを書いたり、動画配信したりすること。暗号通貨はまだまだ初心者。 nemlogに何を書こうかいろいろ考えたのですが、まずはバイクで動画配信をするための工夫や楽しさ、充実感などを伝えられたらと思ってはじめました。ラズパイをバイクに積載して、ボタン一つでYoutubeライブ配信できるシステムを作りました。それを発展させて、XEMの価格を常時監視、取引するボットも作って活用してます。子供の頃から技術書を読むのが好きなので、NEMの白書を訳したりもしています。 本業は再生医療研究者です。歯の神経の中にいる「歯髄(しずい)細胞」を活用して新しい医療を開拓するために、しずい細胞プロジェクトを推進中。細胞の流通(トレーサビリティー)管理にNEMを使っています。管理システムの名称は「ShizuiNet」。NEM.ioのAlexさん、Jeffさんと名刺交換&握手できたのが心の宝物。