華文網

區塊鏈技術EOS測試版Docker方式安裝指南

互聯網技術EOS團隊正式發佈測試版本,開發者可以利用介面創建合約。本文主要介紹如何用Docker方式安裝,主要因為作者用Mac原生機器安裝時,出現各種問題。Docker完美解決本地環境影響。

注意:下面是ubuntu環境下安裝Docker,如果是Mac環境,請自行搜索Mac環境安裝Docker。

Docker安裝

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update

apt-cache policy docker-ce

sudo apt-get install -y docker-ce git

sudo systemctl status docker

生成Docker的eos鏡像檔(這裡Ubuntu和Mac一致)

git clone https://github.com/EOSIO/eos

cd eos/Docker

cp ../genesis.json .

注意我們要在ini設定檔做改動

nano config.ini

加入下面

plugin = eos::chain_api_plugin

這裡需要注意官方的DockerFile,我們需要做改動,make install因為docker對記憶體的限制,我們需要將make -j4改為make -j2。避免編譯時記憶體管理問題。

還有一點,

編譯eos時會提示Could NOT find GMP (missing: GMP_LIBRARIES GMP_INCLUDE_DIR),也就是gmp這個包沒裝上,需要我們編譯安裝

修改Dockerfile後代碼如下:

FROM ubuntu

MAINTAINER xiaobo (peterwillcn@gmail.com)

RUN echo 'APT::Install-Recommends 0;' >> /etc/apt/apt.conf.d/01norecommends

&& echo 'APT::Install-Suggests 0;' >> /etc/apt/apt.conf.d/01norecommends

&& apt-get update

&& DEBIAN_FRONTEND=noninteractive apt-get install -y sudo wget net-tools ca-certificates unzip

RUN echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-4.0 main" >> /etc/apt/sources.list.d/llvm.list

&& wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -

&& apt-get update

&& DEBIAN_FRONTEND=noninteractive apt-get install -y git-core automake autoconf libtool build-essential pkg-config libtool

mpi-default-dev libicu-dev python-dev python3-dev libbz2-dev zlib1g-dev libssl-dev

clang-4.0 lldb-4.0 lld-4.0

&& rm -rf /var/lib/apt/lists/*

RUN update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-4.0/bin/clang 400

&& update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-4.0/bin/clang++ 400

RUN cd /tmp && wget https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.sh

&& mkdir /opt/cmake && chmod +x /tmp/cmake-3.9.0-Linux-x86_64.sh

&& sh /tmp/cmake-3.9.0-Linux-x86_64.sh --prefix=/opt/cmake --skip-license

&& ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake

RUN cd /tmp && wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz

&& tar zxf boost_1_64_0.tar.gz

&& cd boost_1_64_0

&& ./bootstrap.sh --with-toolset=clang

&& ./b2 -a -j$(nproc) stage release -sHAVE_ICU=1 --sICU_PATH=/usr

&& ./b2 install --prefix=/usr

&& rm -rf /tmp/boost_1_64_0*

RUN cd /tmp && git clone https://github.com/cryptonomex/secp256k1-zkp.git

&& cd secp256k1-zkp

&& ./autogen.sh && ./configure && make && make install

&& ldconfig && rm -rf /tmp/secp256k1-zkp*

RUN cd /tmp && mkdir wasm-compiler && cd wasm-compiler

&& git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git

&& cd llvm/tools && git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git

&& cd .. && mkdir build && cd build

&& cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/opt/wasm -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../

&& make -j2 install && rm -rf /tmp/wasm-compiler

RUN cd /tmp && wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2

&& tar -xvf gmp-6.1.2.tar.bz2 && cd gmp-6.1.2

&& ./configure && make && sudo make install

&& rm -rf /tmp/gmp-6.1.2

RUN cd /tmp && git clone https://github.com/EOSIO/eos.git --recursive

&& cd eos && mkdir build && cd build

&& WASM_LLVM_CONFIG=/opt/wasm/bin/llvm-config cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/opt/eos ../

&& make -j2 && make install

&& rm -rf /tmp/eos*

RUN mkdir -p /opt/eos/bin/data-dir

COPY config.ini genesis.json /

COPY entrypoint.sh /sbin

RUN cd /opt/eos/bin && chmod +x /sbin/entrypoint.sh

VOLUME /opt/eos/bin/data-dir

EXPOSE 9876 8888

ENTRYPOINT ["/sbin/entrypoint.sh"]

運行

sudo docker build --rm -t eosio/eos .

如下圖所示build成功

生成eos的容器

sudo docker run --rm --name eos -d -p 8888:8888 -p 9876:9876 eosio/eos

sudo docker logs --tail 10 eos # 檢查日誌

測試

執行

sudo docker exec eos /opt/eos/bin/eosc info