Libra ClientをDockerで動かしてみる。

Libra
Libra
スポンサーリンク

はじめに

Libra Clinetのインストールは割と簡単にできますが、ホストの環境によってはうまく行かない事があります。
公式リポジトリ内にdockerfileが用意されていますので、今回はdockerでLibra Clientを立ち上げます。

※投稿日(2020年5月16日)時点でdocker build中にエラーが発生して、buildを完了させられていません。対処が出来次第、対処方法も含めて追記していきます。

環境

私が試した際の環境です。

OS : macOS Catalina 10.15.4
Docker : 19.03.8

必須環境は不明ですがdockerfileの記載から、dockerはver.17.05以上である事が必要だと考えられます。

Libra 公式 github リポジトリ

libra/libra
Libra’s mission is to enable a simple global payment system and financial infrastructure that empowers billions of people. - libra/libra

ソースコードを取得

まずは、適当なディレクトリに公式githubリポジトリをクローンします。

git clone https://github.com/libra/libra.git
cd libra

docker build

docker-imageを作るためのコマンドまで公式で用意してくれているので、それを使います。

./docker/client/build.sh

libra/docker/client/build.sh

#!/bin/sh
# Copyright (c) The Libra Core Contributors
# SPDX-License-Identifier: Apache-2.0
set -e

DIR="$( cd "$( dirname "$0" )" && pwd )"

PROXY=""
if [ "$https_proxy" ]; then
    PROXY=" --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy"
fi

docker build \
-f $DIR/Dockerfile $DIR/../.. --tag libra_client \
--build-arg GIT_REV="$(git rev-parse HEAD)" \
--build-arg GIT_UPSTREAM="$(git merge-base HEAD origin/master)" \
--build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
$PROXY

OSイメージがFROM debian:buster です。
apt-get updateを含んでいるため、docker build 完了までに時間がかかりますので、しばらく待機します。
OSに含まれているパッケージ類を全てupdateするので時間がかかるのですね。
また、FROMが3つ書かれていることからmulti stage build だということがわかります。
この点からdockerのバージョンは17.05以上である事が必要です。

libra/docker/client/Dockerfile

FROM debian:buster AS toolchain

# To use http/https proxy while building, use:
# docker build --build-arg https_proxy=http://fwdproxy:8080 --build-arg http_proxy=http://fwdproxy:8080

RUN apt-get update && apt-get install -y cmake curl clang git

RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none
ENV PATH "$PATH:/root/.cargo/bin"

WORKDIR /libra
COPY rust-toolchain /libra/rust-toolchain
RUN rustup install $(cat rust-toolchain)

FROM toolchain AS builder

COPY . /libra

RUN cargo build --release -p libra-node -p cli -p config-builder -p safety-rules && cd target/release && rm -r build deps incremental
RUN strip target/release/cli

### Production Image ###
FROM debian:buster AS prod

RUN mkdir -p /opt/libra/bin /opt/libra/etc
COPY --from=builder /libra/target/release/cli /opt/libra/bin/libra_client

ENTRYPOINT ["/opt/libra/bin/libra_client"]
CMD ["--url", "http://client.testnet.libra.org"]

ARG BUILD_DATE
ARG GIT_REV
ARG GIT_UPSTREAM

LABEL org.label-schema.schema-version="1.0"
LABEL org.label-schema.build-date=$BUILD_DATE
LABEL org.label-schema.vcs-ref=$GIT_REV
LABEL vcs-upstream=$GIT_UPSTREAM

Dockerfileを見ると、CMD ["--url", "http://client.testnet.libra.org"] となっているので、テストネットに繋がる事がわかります。
libra/scripts/cli/start_cli_testnet.sh の RUN_PARAMS(16行目) 内の引数と同様ですね。

libra/scripts/cli/start_cli_testnet.sh

#!/bin/bash
# Copyright (c) The Libra Core Contributors
# SPDX-License-Identifier: Apache-2.0

print_help()
{
    echo "Build client binary and connect to testnet."
    echo "\`$0 -r|--release\` to use release build or"
    echo "\`$0\` to use debug build."
}

source "$HOME/.cargo/env"

SCRIPT_PATH="$(dirname $0)"

RUN_PARAMS="--url https://client.testnet.libra.org --waypoint_url https://developers.libra.org/testnet_waypoint.txt"
RELEASE=""

while [[ ! -z "$1" ]]; do
    case "$1" in
        -h | --help)
            print_help;exit 0;;
        -r | --release)
            RELEASE="--release"
            ;;
        --)
            shift
            break
            ;;
        *) echo "Invalid option"; print_help; exit 0;
    esac
    shift
done

if [ -z "$RELEASE" ]; then
    echo "Building and running client in debug mode."
else
    echo "Building and running client in release mode."
fi

cargo run -p cli $RELEASE -- $RUN_PARAMS "$@"

docker run

docker build が完了したらdocker runコンテナを作ります。
と思いきや私の環境ではまさかのエラー発生。。。
以下のステップでエラーによりbuild停止となりました。

Step 10/23 : RUN cargo build --release -p libra-node -p cli -p config-builder -p safety-rules && cd target/release && rm -r build deps incremental

エラー内容は以下の通りです。

   Compiling libra-node v0.1.0 (/libra/libra-node)
error: could not compile `libra-node`.

Caused by:
  process didn't exit successfully: \
  `rustc \
  --crate-name libra_node \
  --edition=2018 libra-node/src/main.rs \
  --error-format=json \
  --json=diagnostic-rendered-ansi \
  --crate-type bin \
  --emit=dep-info,link \
  -C opt-level=3 \
  -C lto=thin \
  -C debuginfo=2 \
  --cfg 'feature="default"' \
  -C metadata=96a33b5413f859e5 \
  -C extra-filename=-96a33b5413f859e5 \
  --out-dir /libra/target/release/deps \
  -L dependency=/libra/target/release/deps \
  --extern admission_control_proto=/libra/target/release/deps/libadmission_control_proto-8d8452a9c0975577.rlib \
  --extern admission_control_service=/libra/target/release/deps/libadmission_control_service-67400bf2041e283c.rlib \
  --extern backup_service=/libra/target/release/deps/libbackup_service-f0d8a4efddc6ae52.rlib \
  --extern consensus=/libra/target/release/deps/libconsensus-f1371a3795689926.rlib \
  --extern crash_handler=/libra/target/release/deps/libcrash_handler-928f748a5932986f.rlib \
  --extern debug_interface=/libra/target/release/deps/libdebug_interface-3949a35c14a46f1b.rlib \
  --extern executor=/libra/target/release/deps/libexecutor-89b666f1d81ef44e.rlib \
  --extern executor_types=/libra/target/release/deps/libexecutor_types-e8be8d5989f875bb.rlib \
  --extern futures=/libra/target/release/deps/libfutures-298a5cb0c6a5408c.rlib \
  --extern jemallocator=/libra/target/release/deps/libjemallocator-1ec6195a29d7142b.rlib \
  --extern libra_config=/libra/target/release/deps/liblibra_config-4a9eecda88e25c79.rlib \
  --extern libra_crypto=/libra/target/release/deps/liblibra_crypto-e10f95e242a39a38.rlib \
  --extern libra_json_rpc=/libra/target/release/deps/liblibra_json_rpc-6b0755cc43d049e6.rlib \
  --extern libra_logger=/libra/target/release/deps/liblibra_logger-bec4c3005ae15489.rlib \
  --extern libra_mempool=/libra/target/release/deps/liblibra_mempool-9b9f1f704a1a8f6b.rlib \
  --extern libra_metrics=/libra/target/release/deps/liblibra_metrics-d768a8c1c7b51ee2.rlib \
  --extern libra_node=/libra/target/release/deps/liblibra_node-412e265aaf46f792.rlib \
  --extern libra_types=/libra/target/release/deps/liblibra_types-48a90fd0269ff1f1.rlib \
  --extern libra_vm=/libra/target/release/deps/liblibra_vm-1ce4c30f9f087754.rlib \
  --extern libra_workspace_hack=/libra/target/release/deps/liblibra_workspace_hack-4ad2e3d404a3b7f2.rlib \
  --extern libradb=/libra/target/release/deps/liblibradb-e9113b4d1f626fbf.rlib \
  --extern network=/libra/target/release/deps/libnetwork-4dd7340ffd0d5af4.rlib \
  --extern onchain_discovery=/libra/target/release/deps/libonchain_discovery-9f97ffc5366b0c0a.rlib \
  --extern rayon=/libra/target/release/deps/librayon-7dd857e955b205dd.rlib \
  --extern state_synchronizer=/libra/target/release/deps/libstate_synchronizer-cd410ecc5bf90d68.rlib \
  --extern storage_client=/libra/target/release/deps/libstorage_client-adbcb0843c579de8.rlib \
  --extern storage_interface=/libra/target/release/deps/libstorage_interface-bd98fd2e8b075a5a.rlib \
  --extern storage_service=/libra/target/release/deps/libstorage_service-6540a974cbcd9dfd.rlib \
  --extern structopt=/libra/target/release/deps/libstructopt-950c81f94f0c09cd.rlib \
  --extern subscription_service=/libra/target/release/deps/libsubscription_service-1d4fb903e3f5ef70.rlib \
  --extern tokio=/libra/target/release/deps/libtokio-9513cdb45925981f.rlib \
  --extern tonic=/libra/target/release/deps/libtonic-5e37d7f3e1a90b7c.rlib \
  -L native=/libra/target/release/build/clear_on_drop-d439bb0b63485838/out \
  -L native=/libra/target/release/build/ring-41bad835a91d32f6/out \
  -L native=/libra/target/release/build/librocksdb-sys-8622633f277a3e2d/out \
  -L native=/libra/target/release/build/librocksdb-sys-8622633f277a3e2d/out \
  -L native=/libra/target/release/build/jemalloc-sys-a06c9ea9cd60e357/out/build/lib` (signal: 9, SIGKILL: kill)
warning: build failed, waiting for other jobs to finish...
The command '/bin/sh -c cargo build --release -p libra-node -p cli -p config-builder -p safety-rules && cd target/release && rm -r build deps incremental' returned a non-zero code: 101

libra-nodeのcompileに失敗しています。
原因を調べて対処できれば、また追記していきます。

タイトルとURLをコピーしました