LoginSignup
11
10

More than 3 years have passed since last update.

Raspberry Pi 3 Model B+でカタパルトを動かす

Last updated at Posted at 2019-05-30

はじめに

カタパルトとは

ブロックチェーン/暗号資産/暗号通貨/仮想通貨であるNEMの次期バージョンである。

現行をNEM1やNIS1やv1、次期をNEM2やNIS2やv2やカタパルトと呼んだり書いたりする。

NIS = NEM Infrastructure Server

きっかけ

nem2のSlackで、ラズパイでカタパルトノードが動くかみたいな話があった。たしか、結論として、難しいみたいな話だったと思う。

まぁでも、たぶん安いからやってみようかなと思った。

情報を探してみると、Ubuntuがインストールできるやつがあるみたい的なことがわかった。

なのでやってみた。

買う

Raspberry Pi 3 B+

ここで買いました

microSD

64GBを買いました

セットアップ

イメージのダウンロード

Ubuntu 18.04.02 では、ラズパイのインストールが簡単になったようです。

こちらをダウンロードします。

Hard-Floatではなくて、64-bit ARMのほうです。

rufusでmicroSDにイメージを書き込みます。

RasPi起動

電源をさします。

SSHが使えるので、リモートから入ります。IDもパスワードもubuntuです。ログインするとパスワードの変更を求められます。

カタパルトのビルド

基本的にはこちらの手順に従います。

少しずつ変えたところがあるので、各項目ごとに説明します。

Prerequisites

手順通り

Boost

最後から2番目のコマンドのみ変更しました。スペックが低いので、1多重で動かします。

./b2 --prefix=${HOME}/boost-build-1.69.0 -j 1 stage release

Gtest

手順通り

Google benchmark

手順通り

Mongo

mongocxxのインストール中に、メモリ不足になります。

...
[ 79%] Building CXX object src/mongocxx/test/CMakeFiles/test_driver.dir/collection.cpp.o

cc1plus: out of memory allocating 28380688 bytes after a total of 391139328 bytes
src/mongocxx/test/CMakeFiles/test_driver.dir/build.make:206: recipe for target 'src/mongocxx/test/CMakeFiles/test_driver.dir/collection.cpp.o' failed
make[2]: *** [src/mongocxx/test/CMakeFiles/test_driver.dir/collection.cpp.o] Error 1
CMakeFiles/Makefile2:942: recipe for target 'src/mongocxx/test/CMakeFiles/test_driver.dir/all' failed
make[1]: *** [src/mongocxx/test/CMakeFiles/test_driver.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

swapを作成します。

sudo su -
dd if=/dev/zero of=tmpswap bs=1024 count=1M
mkswap tmpswap
swapon tmpswap

freeコマンドでSwapが出てきたら成功です。

$ free
              total        used        free      shared  buff/cache   available
Mem:         933944      105236      406924        4400      421784      809076
Swap:       1048572           0     1048572

そのあと、手順通り

ZMQ

手順通り

Rocks

手順通り

CATAPULT

最後のコマンドのみ変更しました。スペックが低いので、1多重で動かします。

ninja -j1

コツ

とても時間がかかります。24時間くらいかかると思います。

Boostのビルドとcatapult-serverのビルドが長いです。

あらかじめスワップを作成しておき、そのあと全コマンドを羅列したシェルスクリプトを作って、nohupで走らせておくのがよいと思います。

nohup ./build.sh &

nohup.outに標準出力が出るので、好きな時にtail -f nohup.outするとのぞけます。

24時間くらいたつと、ビルドできていると思います。

ubuntu@ubuntu:~$ ls -l catapult-server/_build/bin/
uotal 378152
urwxrwxr-x 1 ubuntu ubuntu   741312 May 29 02:05 bench.catapult.crypto.hashers
urwxrwxr-x 1 ubuntu ubuntu   823496 May 29 02:05 bench.catapult.crypto.verify
urwxrwxr-x 2 ubuntu ubuntu     4096 May 29 01:55 boost
urwxrwxr-x 1 ubuntu ubuntu  3337768 May 29 08:21 catapult.server
urwxrwxr-x 1 ubuntu ubuntu  1047512 May 29 15:17 catapult.tools.address
urwxrwxr-x 1 ubuntu ubuntu  1239680 May 29 15:17 catapult.tools.benchmark
urwxrwxr-x 1 ubuntu ubuntu  2479736 May 29 15:17 catapult.tools.health
urwxrwxr-x 1 ubuntu ubuntu  3141312 May 29 15:17 catapult.tools.nemgen
urwxrwxr-x 1 ubuntu ubuntu  2290848 May 29 15:17 catapult.tools.network
urwxrwxr-x 1 ubuntu ubuntu   795592 May 29 15:17 catapult.tools.statusgen
...

起動

起動方法は以下のと同じです。

2019-05-29 23:56:29.992477 0x0000ffffa9714440: <info> (nemgen::main.cpp@87) *** Nemesis Summary ***
           Height: 1
  Generation Hash: C6871CB9FA666FF20B93DCE6D7E25196EFBAFDFF3989AC00C76BD8E1DCEE9AEE
Transactions Hash: 814C8164E99927A30BD6D06212EB10D1A5C3F6A4458045B40E0AD7FDF702117F
    Receipts Hash: 6419DD8BAA202763D1B5946F877C9B728F344D7A5365FBC3622CB049EB7B88A5
       State Hash: E20FE3D20B709572558E21C13A99BF7CFE66D3BED9C4BF082AAE0E6FC1A95612
--- Components (7) ---
 + 13067B2FEB08F5C99547B4A5C30D9581D1D8E22F817A542AEF8E02684CADA2DC
 + 7EA827EB9A862C95EED988E3D5757C7B0F23BC99757FF6925F6FCC4447C6B864
 + 1CA8F8AB2C2513B1ADFE050AB85C91D648837A52B82A19A69A9DBFCC78405B51
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
2019-05-29 23:57:52.309073 0x0000ffff8b60a010: <info> (extensions::NemesisBlockLoader.cpp@54) 
      nemesis network id: Mijin_Test
      nemesis public key: 7F78559C556642FE132616910B1C9F2C36BC144D2D3A9E909092D64A0D0DE0DE
 nemesis generation hash: C6871CB9FA666FF20B93DCE6D7E25196EFBAFDFF3989AC00C76BD8E1DCEE9AEE
2019-05-29 23:57:52.325668 0x0000ffff8b60a010: <debug> (utils::StackLogger.h@35) pushing scope 'PosImportanceCalculator::recalculate'
2019-05-29 23:57:52.326198 0x0000ffff8b60a010: <debug> (observers::PosImportanceCalculator.cpp@67) recalculated importances (11 / 35 eligible)
2019-05-29 23:57:52.326373 0x0000ffff8b60a010: <debug> (utils::StackLogger.h@41) popping scope 'PosImportanceCalculator::recalculate' (0ms)
2019-05-29 23:57:52.326691 0x0000ffff8b60a010: <info> (extensions::NemesisBlockLoader.cpp@76) Nemesis Mosaics:
      C 119E15661E9B2758: 8999999998000000
      H 2AECBFD76AE7411B: 17000000
2019-05-29 23:57:52.337125 0x0000ffff8b60a010: <info> (extensions::NemesisBlockLoader.cpp@54) 
      nemesis network id: Mijin_Test
      nemesis public key: 7F78559C556642FE132616910B1C9F2C36BC144D2D3A9E909092D64A0D0DE0DE
 nemesis generation hash: C6871CB9FA666FF20B93DCE6D7E25196EFBAFDFF3989AC00C76BD8E1DCEE9AEE
2019-05-29 23:57:52.341646 0x0000ffff8b60a010: <debug> (utils::StackLogger.h@35) pushing scope 'PosImportanceCalculator::recalculate'
2019-05-29 23:57:52.341932 0x0000ffff8b60a010: <debug> (observers::PosImportanceCalculator.cpp@67) recalculated importances (11 / 35 eligible)
2019-05-29 23:57:52.342057 0x0000ffff8b60a010: <debug> (utils::StackLogger.h@41) popping scope 'PosImportanceCalculator::recalculate' (0ms)
2019-05-29 23:57:52.342179 0x0000ffff8b60a010: <info> (extensions::NemesisBlockLoader.cpp@76) Nemesis Mosaics:
      C 119E15661E9B2758: 8999999998000000
      H 2AECBFD76AE7411B: 17000000
2019-05-29 23:58:35.836514 0x0000ffff83ffeee0: <debug> (utils::StackLogger.h@35) pushing scope 'generating candidate block'
2019-05-29 23:58:35.839656 0x0000ffff83ffeee0: <debug> (utils::StackLogger.h@41) popping scope 'generating candidate block' (3ms)
2019-05-29 23:58:35.840067 0x0000ffff83ffeee0: <info> (src::ScheduledHarvesterTask.cpp@35) successfully harvested block at 3 with signer 392378EA2BD2829CAEFE6955600EDD8E4CA86DA690A202BE03A017F805BFD8F3
2019-05-29 23:58:35.840290 0x0000ffff83ffeee0: <debug> (disruptor::Disruptor.cpp@42) disruptor queuing element 2 (1 blocks (heights 3 - 3) [946E50E9] from Local)
2019-05-29 23:58:35.883109 0x0000ffff4affcee0: <debug> (consumers::BlockChainProcessor.cpp@49) cache state hash (7 components) at height 2
4EAD940B032801AA7ACA4AD6E42955BB696C1F7582E0E5F624DFA23A5FDF2F7D
 + 54B46FB6BD08EA549C78CCFF1893B1B6CD060690522FC95D0B37320F39C41433
 + 7EA827EB9A862C95EED988E3D5757C7B0F23BC99757FF6925F6FCC4447C6B864
 + 1CA8F8AB2C2513B1ADFE050AB85C91D648837A52B82A19A69A9DBFCC78405B51
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
2019-05-29 23:58:35.884942 0x0000ffff4affcee0: <debug> (consumers::BlockChainProcessor.cpp@49) cache state hash (7 components) at height 3
4EAD940B032801AA7ACA4AD6E42955BB696C1F7582E0E5F624DFA23A5FDF2F7D
 + 54B46FB6BD08EA549C78CCFF1893B1B6CD060690522FC95D0B37320F39C41433
 + 7EA827EB9A862C95EED988E3D5757C7B0F23BC99757FF6925F6FCC4447C6B864
 + 1CA8F8AB2C2513B1ADFE050AB85C91D648837A52B82A19A69A9DBFCC78405B51
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
 + 0000000000000000000000000000000000000000000000000000000000000000
2019-05-29 23:58:36.063642 0x0000ffff4a7fbee0: <debug> (consumers::NewBlockConsumer.cpp@53) forwarding a new block with height 3
2019-05-29 23:58:36.064072 0x0000ffff4a7fbee0: <info> (disruptor::ConsumerDispatcher.cpp@43) completing processing of element 2 (1 blocks (heights 3 - 3) [EAAF6E7C] empty from Local), last consumer is 0 elements behind

普通にできました。

おわりに

普通にできた。

次があれば、100万ブロックくらいの同期だったらどうなるか、APIノードにしたらどうなるか、とかを試してみたい。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10