ラズパイでSymbolノードを建てる(失敗)


おもむろにラズパイでSymbolのノードを建ててみたいと思って挑戦したので、備忘録を残します。
ちなにみにラズパイのアーキテクチャはarmですので通常のsymbol-bootstrapの築城手順ではノードが建てれません。。

結果からお知らせすると現在のところラズパイ3ではSymbolノードは建てれませんでした。

このTwitterの報告を見る限りラズパイ4でならいけるかもしれません、が手元にラズパイ3しかないので、、
(アマゾンでラズパイ4をポチったけど、届くのはしばらく先になりそう。。)

環境

機材:RaspberryPi3
OS:
Linux rasperrypi 5.10.92-v8+ aarch64
Linux rasperrypi 5.10.92-v7+ armv7l
ubuntu server 21.10 ubuntu 5.13.0-1008raspi aarch64
上記、3つで試しました。

結果

いずれのOS(アーキテクチャ)も失敗しました(ライズパイ3だからなのか??)

それでは以下より、行った手順を説明します。

OSをSDカードに焼く

各OSは公式のRaspberry Pi Imagerを使いSDカードに焼きました。
(OSインストールの手順は省略します)

各ソフトウェアのインストール

SDカードをラズパイにセットした後の手順です。

パッケージのアップデート

sudo apt-get update

nodejs、npmのインストール

sudo apt-get install nodejs npm

Symbol-bootstrapのインストール

sudo npm install -g symbol-bootstrap

Dockerのインストール

ラズパイは通常の手順ではDockerをインストール出来ないので下記のスクリプトを使います。
(これは公式にも載っています。https://docs.docker.com/engine/install/debian/)

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

piユーザーでもdockerが使えるように設定

sudo usermod -aG docker pi

docker-composeのインストール

sudo pip3 install docker-compose

※ubuntu版にはpip3が入っていないので下記のコマンドでインストールが必要です。

sudo apt install python3-pip

ネットワークモージュールのインストール

※ネットワークモジュールのインストールはubuntu server 21.10を使った場合のみです。

sudo apt install linux-modules-extra-raspi

設定ファイルの書き換え

通常のSymbol-bootstrapはlinux/amd64しかサポートしていません。
https://hub.docker.com/layers/symbol-server/symbolplatform/symbol-server/gcc-10-1.0.3.3/images/sha256-21706ccb37148ab46ccc79f7a44a1761c01c0b3376cdc7eb320fff70c65fad05?context=explore

symbol-bootstrapで使用するdocker imageは下記(67行目付近)で確認出来ます。
https://github.com/fboucquez/symbol-bootstrap/blob/dev/presets/shared.yml

ちなみに、ここからはかなり力技なのですが、、npmでインストールしたsymbol-bootstrapの設定ファイルを書き換えます。

まず、symbol-bootstrapのインストールで参照される設定ファイルを探します。基本的にnpm install -g ~ でインストールしたパッケージは
/usr/local/bin以下に入っていると思います。
今回、設定ファイルは下記にありますので、これを編集します。
/usr/local/lib/node_modules/symbol-bootstrap/presets/shared.yml

...

- symbolServerImage: symbolplatform/symbol-server:gcc-10-1.0.3.3
+ symbolServerImage: bekirdag/symbol:gcc-1.0.0.0@sha256:4595e4b54173bf117080673d45c2edc01b68f168c006c4f280f19771925a7bf3
- symbolRestImage: symbolplatform/symbol-rest:2.4.0
+ symbolRestImage: bekirdag/symbol:rest@sha256:1519c26afab2c7387e1d9eda80274b5a6a33922b8ac683f0400eb6bf2541ceb6
symbolExplorerImage: symbolplatform/symbol-explorer:1.1.1-alpha-202110290945
symbolFaucetImage: symbolplatform/symbol-faucet:1.0.1-alpha-202110131930
mongoImage: mongo:4.4.3-bionic

...

今回、下記Dockerリポジトリを見つけたのでこちらに変更します。

このDockerイメージは、
linux/arm/v7
linux/arm/v6
linux/arm64
をサポートしています。

設定ファイルを書き換えた後は、通常通りsymbol-bootstrapのコマンドを実行します。

symbol-bootstrap config -p testnet -a api

ぐはぁぁエラー。。。

standard_init_linux.go:228: exec user process caused: exec format error

このエラーはアーキテクチャの問題などで出るようです。(詳しくはわかってない。。)

最後に

ただ、残念ながら今回はどのディストリビューションを使用しても上記のようにエラーになって実行はできませんでした。
現在、アマゾンでライズパイ4を注文しているので、届き次第再チャレンジしてみたいと思います。

また、今回使用したserver、restイメージはいずれも古いバージョン(restはそうでもないかもしれない)なので、Dockerのイメージをlinux/amd64からlinux/arm64等に変更出来る方法を現在模索中です。(公式がlinux/arm64のイメージも作成してくれたらいいんですけど。。。)
知ってる人が入れば教えて下さい。。。