この記事ではRaspberryPi4でブロックチェーンノードを構築して運用する方法を紹介します。
機器
機種 | 備考 |
---|---|
Raspberry Pi 4B | Raspberry Pi 4 AmazonまたはRSオンライン で購入 |
SDカード | できるだけ大容量なもの(2022.07現在で約80Gほど使用しています) |
※手元の環境では、1TBのSSDをUSBブートで起動して使っています。
手順
まず、ラズパイOSのイメージの準備から行います。
ライズパイのイメージの準備はいいよって方は「OSの初期設定」まで飛ばして下さい。
SDカードに起動イメージを焼く
OSはUbuntu20.04.4LTSを使用します。(恐らく22.04でも動くと思いますが確証はありません)
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
Raspberry Piに公式のイメージ書き込みツール「Raspberry Pi Imager」を使ってOSイメージを書き込みます。
公式ページより「Raspberry Pi Imager」をダウンロードします。
起動するとこんな感じの画面が表示されます(バージョンはダウンロードタイミングによって変わります)
「OSを選ぶ」を押すと下記のようなリストが表示されます。
3番めの「Other general-purpose OS」を選びます。
「Ubuntu」を選択。
リストが表示されたら少し下の方へスクロールすると「Ubuntu Server 20.04.4 LTS(RPi 3/4/400」というのがあるのでそれをクリックします。(64bit版を選択してください)
OSのイメージを選択すると最初の画面に戻ります。
OSのところが「UBUNTU SERVER 20.04.4LTS(RPI 3/4/400)」となっていることを確認して下さい。
「ストレージを選ぶ」をクリックします。
SDカードをPCに接続していると下記のような状態になると思うので、書き込むストレージを選択します。
ストレージを選択すると最初の画面に戻ります。
選択したOSとストレージが正しいことを確認したら「書き込む」をクリックしてOSのイメージを書き込みます。
OSの初期設定
OSの初期設定を行います。
細かなことは下記の記事がとても参考になるのでそちらを参照下さい。全て設定する必要はないと思いますので自身に必要な部分のみ設定して下さい。
(※今回はパッケージ自動アップデートは切っておいたほうが良いです)
上記以外の設定(パッケージのインストール等)を下記で行います。
Dockerインストール
まずはDockerをインストールします。
現在Dockerはarm64環境でも動作するのでUbuntu標準のパッケージから導入してみました。
$ sudo apt install --yes docker.io
インストールが完了したらバージョンを確認します。
$ sudo docker version
上記コマンドを打ってバージョン情報が表示されればOKです。
DcokerをUbuntuユーザー(root以外)で使用できる様にする
Dockerをインストールした状態ではRootユーザーでDockerを実行する必要があるので下記のコマンドを実行してUbuntuユーザーでも使用出来るようにします。
$ sudo usermod -aG docker ${USER}
一旦、コンソールからログアウトするか下記のコマンドで新しいグループメンバーシップを適用します。
$ su - ${USER}
dcoker-composeのインストール
$ sudo apt install docker-compose
Nodejsとnpmをインストールする
Symbolノードを構築する上でnpmが必要になるのでNodejsとnpmをインストールします。
$ sudo apt install nodejs npm
Symbol-bootstrapをインストールする
Symbol-bootstrapはSymbolノードを構築するためのツールです。
$ npm install -g symbol-bootstrap
ブロックチェーンノードの構築
さて、事前準備が全て整ったのでこれよりブロックチェーンノード(Symbolノード)を構築していきます。
ただ、ここで1つ注意点があります。
先程インストールしたSymbol-bootstrapはlinux/amd64しかサポートしていません。
ラズパイのCPUアーキテクチャはarm64です。
ですのでこのままではノードの起動に失敗してしまうので、symbol-bootstrapの設定ファイルを修正します。
2022/09/19追記
Symbol-bootstrapで参照するDockerイメージの修正についての作業は不要ということが判明しました。
Symbol-bootstrapで参照するDockerイメージの修正(※この作業は不要です)
まず、npmのグローバルインストール先を調べます。
$ npm list -g | head -1
私の場合は下記のように表示されます。
$ /usr/local/lib
下記のファイルを修正します。(ファイルのパスは上記で確認したインストール先を指定して下さい)
$ sudo vi /usr/local/lib/node_modules/symbol-bootstrap/presets/shared.yml
symbolServerImageとsymbolRestImageを変更します。
(ishidad2/symbol-server:gcc-10-1.0.3.3とishidad2/symbol-rest:2.4.0は私のDockerHubのリポジトリです)
参考:こちらの記事で作成したイメージです。
-symbolServerImage: symbolplatform/symbol-server:gcc-10-1.0.3.3
+symbolServerImage: ishidad2/symbol-server:gcc-10-1.0.3.3
-symbolRestImage: symbolplatform/symbol-rest:2.4.0
+symbolRestImage: ishidad2/symbol-rest:2.4.0
67行目から70行目にかけて修正。
修正は以上です。
ノードを起動する
これ以降は通常のSymbol-bootstrapでのノード構築と同じになります。
コンフィグの作成
コンフィグを作成する際のカスタムプリセットに以下の記述をします。(その他必要がある設定は各自してください)
nodes:
-
host: ****.localhost
friendlyName: **********
mainPrivateKey: *****************
vrfPrivateKey: ****************
remotePrivateKey: ****************
transportPrivateKey: ****************
# httpsProxiesは必要に応じて有効化してください
# httpsProxies:
# - excludeDockerService: false
maxChainBytesPerSyncAttempt: 50MB
messageSynchronizationMaxResponseSize: 10MB
blockDisruptorMaxMemorySize: 1000MB
# 以下でコンテナイメージを置き換えます
symbolRestImage: ishidad2/symbol-rest:2.4.2
symbolServerImage: ishidad2/symbol-server:gcc-1.0.3.5
※「******」の部分はご自身の環境に合わせて設定してください。
例)
$ symbol-bootstrap config -p <preset> -a <assembly> -c <custom_parameters_file.yml>
実際には下記のような感じになります。
$ symbol-bootstrap config -p mainnet -a dual -c custom_parameters.yml
詳しい情報はこちら(PDF)を参考にしてください。特にcustom_parameters.ymlはリンク先の「2. ノード設定ファイルの生成」を参考に作成して下さい。(重要なファイルですが作成しなくても起動はできます)
必要な Docker ファイルを準備
$symbol-bootstrap compose
一応イメージを確認。
ここまでエラーなく実行できていれば、targetというフォルダが作成されているはずです。
$ cat target/docker/docker-compose.yml
...
node:
user: '1000:1000'
container_name: node
image: ishidad2/symbol-server:gcc-10-1.0.3.3
command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true
stop_signal: SIGINT
...
rest-gateway:
container_name: rest-gateway
user: '1000:1000'
image: ishidad2/symbol-rest:2.4.0
command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json
stop_signal: SIGINT
...
nodeとrest-gatewayのimage名が指定したイメージとなっていればOKです。
確認が取れたら起動します。
$ symbol-bootstrap run -d
色々とログが流れノードが起動します。途中パスワードを入力する画面になると思うので、適当なパスワードを設定して下さい(起動の度必要になるので忘れないで下さい)
正常に起動したかどうかのチェックは下記のコマンドを実行します。
$ symbol-bootstrap healthCheck
下記のようにヘルスチェックでエラーがでなければ成功です。
その他の確認の仕方として、自身のサーバーへアクセスして確認することもできます。
http://IPアドレス(またはFQDN):3000/node/info
ノードにアクセスして情報が表示されればOKです。
以上、RaspberryPi でブロックチェーンノードを構築する方法を終わります。
補足
ラズパイ用のイメージはこちらで公開しています。