10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nemAdvent Calendar 2021

Day 9

Catapult マニュアルビルド

Last updated at Posted at 2022-04-08

ソースからビルドしたい

Catapultのソースコードを少しいじってみたのですが,いざテストの段階になると手動でビルドする必要があります.そこでビルドに挑戦したのですが中々苦労しましたので記録として残したいと思います.
記憶があるうちに記事化したかったのでビルドの内容だけ書きます.このため操作方法については取り扱いません.また記事も書き殴りなので多少ミスがあるかもしれません.

ビルド手順

ビルド手順はmanual,conan,dockerの3通りあります.今回私が試したのはmanualとconanですのでこちらの2つを書き残します

マニュアルビルド(今回苦戦したビルド)

こちらの手順に従っていきます(頻繁にレポジトリが変更されるのでリンクは切れる可能性があります,不明な場合はdiscord等で連絡ください)

ビルドに関して本記事よりも詳しい記載がありますので併せてこちらの記事を読むことをおすすめします(本記事は主にハマった点の周知を目的としています).
ラズベリーパイ4でビルドする場合はまた別のエラーがでるようなので,こちらの記事を参照ください.

ビルドに必要なツールをインストールします

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

レポジトリをクローンします

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

依存するファイルをダウンロード,ビルドします
結構時間がかかります

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

カタパルトをビルドする
これも結構時間がかかります.

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

ビルド成功後,このコマンドが成功すればOKです

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

Conanを利用したビルド(推奨)

マニュアルビルドの記事を読むとこちらの方法が強く推奨されています.私もこちらの方法では難なく成功したので差し支えなければこちらの方法を使ったほうが良いかもしれません.

必要なツールをインストールします

sudo apt install build-essential git cmake ninja-build

今回活躍するConanをインストールします

sudo pip install conan

Conanの設定をします

conan profile update settings.compiler.libcxx=libstdc++11 default

依存関係をインストールします

conan remote add nemtech https://catapult.jfrog.io/artifactory/api/conan/symbol-conan

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

mkdir _build && cd _build
CONAN_REVISIONS_ENABLED=1 conan install .. --build missing

ビルドします(時間がかかります)

cmake -DUSE_CONAN=ON -DCMAKE_BUILD_TYPE=Release -G Ninja ..
ninja publish
ninja -j4

パスを設定します

export LD_LIBRARY_PATH=$PWD/deps

こちらが成功すればOKです

bin/catapult.tools.address --help

失敗したことについて

1 低スペックvpsでビルド失敗

Symbol-bootstrapはそこまでスペックがなくても動作するのでWebarenaの2コアメモリ2GBで試してみたところ,マニュアルビルドの依存関係のインストールの部分で処理落ちし,失敗しました.そこでスペックの高い環境に変更することにしました(ubuntu 20.04)

2 Ubuntu21.10で失敗

1で失敗したので自宅のUbuntu21.10を使用することにしました.
マニュアルビルドの依存関係のインストールで失敗しました

[ 15%] Building CXX object src/bsoncxx/test/CMakeFiles/test_bson.dir/bson_value.cpp.o
In file included from /usr/include/signal.h:328,
                 from /home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/include/catch.hpp:8034,
                 from /home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/main.cpp:16:
/home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/include/catch.hpp:10822:58: error: call to non-‘constexpr’ function ‘long int sysconf(int)’
10822 |     static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
      |                                                          ^~~~~~~~~~~
In file included from /usr/include/x86_64-linux-gnu/bits/sigstksz.h:24,
                 from /usr/include/signal.h:328,
                 from /home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/include/catch.hpp:8034,
                 from /home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/main.cpp:16:
/usr/include/unistd.h:640:17: note: ‘long int sysconf(int)’ declared here
  640 | extern long int sysconf (int __name) __THROW;
      |                 ^~~~~~~
In file included from /home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/main.cpp:16:
/home/ubuntu/symbol/client/catapult/_deps/source/mongo-cxx-driver/src/third_party/catch/include/catch.hpp:10881:45: error: size of array ‘altStackMem’ is not an integral constant-expression
10881 |     char FatalConditionHandler::altStackMem[sigStackSize] = {};
      |                                             ^~~~~~~~~~~~
[ 15%] Building CXX object src/mongocxx/CMakeFiles/mongocxx_shared.dir/client.cpp.o
[ 16%] Building CXX object src/bsoncxx/test/CMakeFiles/test_bson.dir/json.cpp.o
[ 16%] Building CXX object src/bsoncxx/test/CMakeFiles/test_bson.dir/view_or_value.cpp.o
[ 16%] Building CXX object src/mongocxx/CMakeFiles/mongocxx_shared.dir/client_encryption.cpp.o
make[2]: *** [src/bsoncxx/test/CMakeFiles/test_bson.dir/build.make:82: src/bsoncxx/test/CMakeFiles/test_bson.dir/__/__/third_party/catch/main.cpp.o] Error 1

Discordでこの件について報告したところ,mongo-cxx-driverのバグだそうです.このため現状21.10ではビルドが難しいと思います.
今後修正されると思います.

3 Ubuntu20.04で失敗

1でスペックが足りないのが原因としてわかっていたのでwebarenaで8コア32GBのVPSをレンタルし,インストールしました.
すると今まで失敗していた依存関係のインストールまでは成功することができました.しかし,catapalutのビルドで次のエラーが出て失敗しました

./tests/test/nodeps/Stress.h:26:10: fatal error: gtest/gtest.h: No such file or                            directory
   26 | #include <gtest/gtest.h>
      |          ^~~~~~~
compilation terminated.
[232/2147] Building CXX object tests/c...l.server.dir/MemoryCountersTests.cpp.o
FAILED: tests/catapult/local/server/CMakeFiles/tests.catapult.local.server.dir/M                           emoryCountersTests.cpp.o
/usr/bin/c++  -DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB -DBOOST_ASIO_USE_TS_EXECUT                           OR_AS_DEFAULT -DBOOST_ATOMIC_DYN_LINK -DBOOST_CHRONO_DYN_LINK -DBOOST_DATETIME                           DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_LOG_DYN_LINK -DBOOST_LOG_SETUPDYN                           LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_THREADDYN                           LINK -DOPENSSL_API_COMPAT=0x10100000L -D_STDC_WANT_LIBEXT1=1 -DSTDC_WANT_LIB                           _EXT1=1 -I../ -I../src -isystem ../_deps/boost/include -isystem ../_deps/faceb                           ook/include -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wformat-security -We                           rror -Wstrict-aliasing=1 -fvisibility=hidden                    -Wno-dangling-el                           se -O2 -g -DNDEBUG -Wno-maybe-uninitialized -g1 -fno-omit-frame-pointer   -std=g                           nu++17 -MD -MT tests/catapult/local/server/CMakeFiles/tests.catapult.local.serve
r.dir/MemoryCountersTests.cpp.o -MF tests/catapult/local/server/CMakeFiles/tests                           .catapult.local.server.dir/MemoryCountersTests.cpp.o.d -o tests/catapult/local/s                           erver/CMakeFiles/tests.catapult.local.server.dir/MemoryCountersTests.cpp.o -c ..                           /tests/catapult/local/server/MemoryCountersTests.cpp
In file included from ../tests/TestHarness.h:26,
                 from ../tests/catapult/local/server/MemoryCountersTests.cpp:24:
../tests/test/nodeps/Stress.h:26:10: fatal error: gtest/gtest.h: No such file or                            directory
   26 | #include <gtest/gtest.h>
      |          ^~~~~~~
compilation terminated.
[240/2147] Building CXX object src/cat...Files/catapult.recovery.dir/main.cpp.o
ninja: build stopped: subcommand failed.

gtest関係でエラーが発生しました.
Discordで報告したところコアデブではうまくいっているとの返信があったので,コアデブと環境を揃えたりバージョンを合わせたりしてみたのですがやはり失敗しました
新しくレンタルしたVPNにマニュアル通りのコマンドのみを打ち込んで失敗しているので環境の問題だと思います

成功した方法

1 Conanを利用する

ConanをUbuntu20.04で使用してみたところ、特に問題なくインストールできました.マニュアルにもConanを推奨すると書かれていたので特に差し支えなければConanを利用するのが良いと思います

2 マニュアルビルドのテストを無効にする

コアデブから提案を頂き,カタパルトのビルドの段階でテストを無効にすることで解決しました

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

テストがない分,Conanよりもビルドが高速で行えました.デメリットがなければ良い方法かもしれません.

その他

docker版も時間があればやりたいです

謝辞

Wayonさん,jaguarさんにはDiscordで大変お世話になりました.また,cryptoBelieverさんには今回もhelpdeskで助けていただきました.
本当にありがとうございました.

動作環境

webarena indigoのVPS
Ubuntu 20.04
メモリ32GB
コア数 8
gcc 10.3.0
G++ 10.3.0
Conan 1.47.0
cmake 3.16.3

10
5
2

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
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?