Docker上のUbuntu22でCatapultをビルドする

はじめに

catapult サーバーの中身にも興味が出てきたので、気軽にビルド&実行できる環境を作ってみました。

環境

  • Windows 11 Home
  • Ryzen 5 3600
  • メモリ 16GB

Ubuntu の準備

Windows 版 Docker のインストール

まずは Windows 版 Docker をインストールします。
インストーラーに沿っていくだけなので、詰まるところはないと思います。

https://docs.docker.com/desktop/install/windows-install/

Docker 上に Ubuntu を構築

Docker 用のフォルダを作成します。
今回は私は H ドライブ直下にdocker_ubuntuフォルダを作成しました。
そして、作成したフォルダの中にdocker-compose.ymlを作成します。

docker-compose.yml
version: "3.8"

services:
  ubuntu:
    image: ubuntu:22.04
    container_name: ubuntu01
    tty: true
    volumes:
      - ./opt:/opt
YAML

コマンドプロンプトでこのフォルダまで移動して、ubuntu コンテナを起動します。(フォルダのアドレス欄にcmdって打つと楽)

Bash
docker compose up -d
Bash

停止する場合は下記コマンドです。

Bash
docker compose stop
Bash

初回はイメージのダウンロードがあるので少し時間かかります。
起動したら、コンテナ内に入ります。なんと root で入れます。root じゃないよ!て方は-u 0オプションを追加すればよいです。

Bash
docker exec -it ubuntu01 bash
Bash

入れたら、パッケージの更新をしておきましょう。あと、vi 入ってないので vim とか好きなテキストエディタもインストールしておいて下さい。

Bash
apt update
apt -y upgrade
apt -y install vim
Bash

catapult のビルド

ここに書いてあることのほぼコピーですが…

https://github.com/symbol/symbol/blob/dev/client/catapult/docs/BUILD-manual.md

ここからはUbuntu01コンテナに入って作業します。

必要なパッケージのインストール

Bash
apt -y install git gcc g++ cmake curl libssl-dev libgtest-dev ninja-build pkg-config python3-pip
Bash

catapult-client クローン

Bash
cd /opt
git clone https://github.com/symbol/symbol.git
cd symbol/client/catapult
Bash

依存関係をダウンロード&ビルド&インストール

1,2 時間かかります。メモリ 5GB 程使用します。
ビルド中にエラー出たら解消して、再実行してください。再実行時は--downloadオプション不要です。

Bash
PYTHONPATH="../../jenkins/catapult/" python3 "../../jenkins/catapult/installDepsLocal.py" \
    --target "./_deps" \
    --versions "../../jenkins/catapult/versions.properties" \
    --download \
    --build
Bash

catapult をビルド

テスト無効にしてビルドする。
ちなみに、-DENABLE_TESTS=OFF を削除すればテストしてビルドします。

Bash
mkdir -p _build && cd _build
Bash
Bash
BOOST_ROOT="$(realpath ../_deps/boost)" cmake .. \
    -DENABLE_TESTS=OFF \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_PREFIX_PATH="$(realpath ../_deps/facebook);$(realpath ../_deps/google);$(realpath ../_deps/mongodb);$(realpath ../_deps/zeromq)" \
    -GNinja
Bash
Bash
ninja publish
Bash
Bash
ninja
Bash

一時間くらい?かかる。CPU 結構使う。

OpenSSL でエラー

Plaintext
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR: Found unsuitable version "3.0.2", but
  required is exact version "3.1.0" (found
  /usr/lib/x86_64-linux-gnu/libcrypto.so, )
Call Stack (most recent call first):
  /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:592 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.22/Modules/FindOpenSSL.cmake:574 (find_package_handle_standard_args)
  CMakeLists.txt:57 (find_package)
Plaintext

OS の openssl を参照してるみたいなので、書いてあるとおりにパスを指定してあげる。

Bash
export OPENSSL_ROOT_DIR=/opt/symbol/client/catapult/_deps/openssl
Bash

キャッシュが残ってるので、_build ディレクトリ内を全て削除する。

RocksDB でエラー

Plaintext
--- locating rocksdb dependencies ---
rocksdb   ver:
CMake Error at CMakeLists.txt:80 (get_property):
  get_property could not find TARGET RocksDB::rocksdb-shared.  Perhaps it has
  not yet been created.


rocksdb   inc:
CMake Error at CMakeLists.txt:26 (get_property):
  get_property could not find TARGET RocksDB::rocksdb-shared.  Perhaps it has
  not yet been created.
Call Stack (most recent call first):
  CMakeLists.txt:82 (get_library_path)
Plaintext

リアルマシンに入れた Ubuntu では出なかったエラー。
なぜか../CMakeList.txtの 71 行目のfind_package(RocksDB 7.10.2 EXACT REQUIRED)がコメントになってたので解除。

CMake
### setup rocksdb
message("--- locating rocksdb dependencies ---")
find_package(RocksDB 7.10.2 EXACT REQUIRED) #コメント解除

if(WIN32)
    set(RocksDB_LIBRARY RocksDB::rocksdb)
else()
    set(RocksDB_LIBRARY RocksDB::rocksdb-shared)
endif()
CMake

catapult 動作確認

パスを通す。

Bash
vi ~/.bashrc
Bash

末行に追加。

Bash
export LD_LIBRARY_PATH=/opt/symbol/client/catapult/_deps/facebook/lib:/opt/symbol/client/catapult/_deps/boost/lib:/opt/symbol/client/catapult/_build/lib
Bash

.bashrcを再読込。

Bash
source ~/.bashrc
Bash

実行

下記コマンドでツールが動くことを確認。

Bash
./bin/catapult.tools.address --help
Bash

参考にした記事

https://qiita.com/monakaJP/items/c8846231a3ecc621e777

https://qiita.com/ishidad2/items/9592363992e0f96840fc

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

one × two =

ABOUT US
MimosaHarvestasya

COBOL系Javerさ。Blockchain Symbolのノードを運営していることもあり、主にバック側の事を色々調べたり作ったりしています。
https://symbol01.harvestasya.com:3001/node/info

FF14ではMimosa SamiとしてGaiaDC/Ifritで遊んでます。 FF14緑化運動家(目立った活動はしていない)。FF14トレジャーハンター(魔門開かない)。

did:symbol:NC3XK5WRNQSDZRDBRD6NWL3RHYV5QNLU4WTXODA

Amazon欲しいものリスト