From a209d66e4da79618ad13cbd274e4638562aea712 Mon Sep 17 00:00:00 2001 From: bxq2011hust Date: Thu, 17 Aug 2017 20:42:58 +0800 Subject: [PATCH] add docker --- docker/Dockerfile-alpine | 38 ++ docker/Dockerfile-centos | 32 ++ docker/Dockerfile-ubuntu | 60 +++ docker/README.md | 118 +++++ docker/nodeConfig/node-0/config.json | 34 ++ docker/nodeConfig/node-0/genesis.json | 13 + docker/nodeConfig/node-0/log.conf | 24 + docker/nodeConfig/node-0/network.rlp | 2 + docker/nodeConfig/node-0/network.rlp.pub | 1 + docker/nodeConfig/node-0/node.json | 10 + docker/nodeConfig/node-1/config.json | 43 ++ docker/nodeConfig/node-1/genesis.json | 13 + docker/nodeConfig/node-1/log.conf | 24 + docker/nodeConfig/node-1/network.rlp | 1 + docker/nodeConfig/node-1/network.rlp.pub | 1 + docker/nodeConfig/node-1/node.json | 10 + docker/scripts/genConfig.sh | 164 +++++++ docker/scripts/install-docker.sh | 597 +++++++++++++++++++++++ docker/scripts/start_bcos_docker.sh | 45 ++ 19 files changed, 1230 insertions(+) create mode 100644 docker/Dockerfile-alpine create mode 100644 docker/Dockerfile-centos create mode 100644 docker/Dockerfile-ubuntu create mode 100644 docker/README.md create mode 100644 docker/nodeConfig/node-0/config.json create mode 100644 docker/nodeConfig/node-0/genesis.json create mode 100644 docker/nodeConfig/node-0/log.conf create mode 100644 docker/nodeConfig/node-0/network.rlp create mode 100644 docker/nodeConfig/node-0/network.rlp.pub create mode 100644 docker/nodeConfig/node-0/node.json create mode 100644 docker/nodeConfig/node-1/config.json create mode 100644 docker/nodeConfig/node-1/genesis.json create mode 100644 docker/nodeConfig/node-1/log.conf create mode 100644 docker/nodeConfig/node-1/network.rlp create mode 100644 docker/nodeConfig/node-1/network.rlp.pub create mode 100644 docker/nodeConfig/node-1/node.json create mode 100644 docker/scripts/genConfig.sh create mode 100644 docker/scripts/install-docker.sh create mode 100644 docker/scripts/start_bcos_docker.sh diff --git a/docker/Dockerfile-alpine b/docker/Dockerfile-alpine new file mode 100644 index 0000000000..6d7213fed8 --- /dev/null +++ b/docker/Dockerfile-alpine @@ -0,0 +1,38 @@ +FROM alpine:3.6 + +LABEL maintainer hi@bcos.org.cn + +RUN echo -e "http://mirrors.aliyun.com/alpine/edge/testing\nhttp://mirrors.aliyun.com/alpine/v3.6/main\nhttp://mirrors.aliyun.com/alpine/v3.6/community\n" > /etc/apk/repositories +RUN apk update && apk add --no-cache \ + libstdc++ \ + # boost-dev \ + boost-system \ + boost-filesystem \ + boost-random \ + boost-regex \ + boost-thread \ + gmp \ + libcurl libmicrohttpd libcrypto1.0 leveldb + +RUN apk add --no-cache --virtual .build-deps \ + unzip \ + git \ + cmake \ + g++ \ + make \ + curl-dev boost-dev libmicrohttpd-dev openssl-dev leveldb-dev \ + && sed -i -E -e 's/include /include /' /usr/include/boost/asio/detail/socket_types.hpp \ + && git clone https://github.com/bcosorg/bcos.git \ + && cd bcos && mkdir build && cd build \ + # && sed -i 's/boost_thread/boost_thread-mt/g' ../libdevcore/CMakeLists.txt \ + && cmake -DEVMJIT=OFF -DTESTS=OFF -DTOOLS=OFF -DMINIUPNPC=OFF .. \ + && make \ + && make install \ + && mkdir /nodedata && cd ../docker && cp nodeConfig/node-0/* /nodedata \ + && cd / && rm -rf bcos \ + && apk del .build-deps \ + && rm /var/cache/apk/* -f + +EXPOSE 35500 53300 + +CMD ["/usr/local/bin/bcoseth","--genesis","/nodedata/genesis.json", "--config","/nodedata/config.json"] diff --git a/docker/Dockerfile-centos b/docker/Dockerfile-centos new file mode 100644 index 0000000000..2d088c584d --- /dev/null +++ b/docker/Dockerfile-centos @@ -0,0 +1,32 @@ +FROM centos:7 + +LABEL maintainer hi@bcos.org.cn + +# aliyun +# RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \ +# && yum clean all && yum makecache fast && yum -y update + +RUN yum -y -q install epel-release && yum -q -y install \ + git \ + cmake3 \ + make \ + gcc-c++ \ + boost-devel \ + leveldb-devel \ + curl-devel \ + libmicrohttpd-devel \ + gmp-devel \ + openssl-devel \ + && git clone https://github.com/bcosorg/bcos.git \ + && cd bcos && mkdir build && cd build \ + && cmake3 -DEVMJIT=OFF -DTESTS=OFF -DTOOLS=Off -DMINIUPNPC=OFF .. \ + && make \ + && make install \ + && mkdir /nodedata && cd ../docker && cp nodeConfig/node-0/* /nodedata \ + && cd / && rm -rf bcos \ + && yum -y remove git cmake3 make gcc-c++ unzip \ + && yum clean all + +EXPOSE 35500 53300 + +CMD ["/usr/local/bin/bcoseth","--genesis","/nodedata/genesis.json", "--config","/nodedata/config.json"] diff --git a/docker/Dockerfile-ubuntu b/docker/Dockerfile-ubuntu new file mode 100644 index 0000000000..5844129118 --- /dev/null +++ b/docker/Dockerfile-ubuntu @@ -0,0 +1,60 @@ +FROM ubuntu:16.04 + +LABEL maintainer hi@bcos.org.cn + +## tencentyun +# RUN echo "deb http://mirrors.tencentyun.com/ubuntu xenial main restricted universe multiverse \n \ +# deb http://mirrors.tencentyun.com/ubuntu xenial-updates main restricted universe multiverse \n \ +# deb http://mirrors.tencentyun.com/ubuntu-security xenial-security main restricted universe multiverse \n \ +# deb-src http://mirrors.tencentyun.com/ubuntu xenial main restricted universe multiverse \n \ +# deb-src http://mirrors.tencentyun.com/ubuntu xenial-updates main restricted universe multiverse" > /etc/apt/sources.list + +## aliyun +RUN echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted \n \ +deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties \n \ +deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted \n \ +deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial universe \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse \n \ +deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties \n \ +deb http://archive.canonical.com/ubuntu xenial partner \n \ +deb-src http://archive.canonical.com/ubuntu xenial partner \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted \n \ +deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe \n \ +deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse" > /etc/apt/sources.list + +RUN apt-get -q update && apt-get install -qy --no-install-recommends \ + build-essential \ + cmake \ + git \ + libboost-all-dev \ + libleveldb-dev \ + libcurl4-openssl-dev \ + libgmp-dev \ + libmicrohttpd-dev \ + libminiupnpc-dev \ + libssl-dev \ + ca-certificates \ + && git clone https://github.com/bcosorg/bcos.git \ + && cd bcos && mkdir build && cd build \ + && cmake -DEVMJIT=OFF -DTESTS=OFF -DTOOLS=Off -DMINIUPNPC=OFF .. \ + && make \ + && make install \ + && mkdir /nodedata && cd ../docker && cp nodeConfig/node-0/* /nodedata \ + && cd / && rm -rf bcos \ + # clean + && apt-get purge git cmake build-essential -y \ + && apt-get autoremove -y \ + && apt-get clean \ + && rm /tmp/* -rf \ + && rm -rf /var/lib/apt/lists/* + +EXPOSE 35500 53300 + +CMD ["/usr/local/bin/bcoseth","--genesis","/nodedata/genesis.json", "--config","/nodedata/config.json"] + diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000000..afce533efd --- /dev/null +++ b/docker/README.md @@ -0,0 +1,118 @@ +# BCOS-Docker使用 + + +- [BCOS-Docker使用](#bcos-docker使用) + - [1. 单节点网络](#1-单节点网络) + - [1.1 生成配置文件与启动容器](#11-生成配置文件与启动容器) + - [1.2 查看工作状态](#12-查看工作状态) + - [2. 多节点网络](#2-多节点网络) + - [2.1 配置系统合约](#21-配置系统合约) + - [2.2 生成新节点配置文件](#22-生成新节点配置文件) + - [2.3 新加节点入网](#23-新加节点入网) + - [2.4 查看网络状态](#24-查看网络状态) + + + +## 1. 单节点网络 + +我们提供Dockerfile文件和`Docker Hub`上预构建的镜像([地址][bcos-docker]),下面示例中当`bcosorg/bcos`镜像不存在时,Docker会自动去仓库拉取,考虑到网络问题,建议配置国内的Docker镜像加速服务。Docker安装参照[官方文档][Docker-Install]。 + +### 1.1 生成配置文件与启动容器 + +```bash +$ cd bcos/docker && chmod +x scripts/genConfig.sh && chmod +x scripts/start_bcos_docker.sh +# 产生配置文件位于文件夹node-0 +$ ./scripts/genConfig.sh +# 启动容器 +$ ./scripts/start_bcos_docker.sh $PWD/node-0 +``` + +### 1.2 查看工作状态 + +```bash +# 连接到容器 +$ docker exec -it $(docker ps -a | grep bcos-node-0 | awk 'NR==1{print $1}') sh +# 查看日志,blk不断增长说明单节点网络已正常工作 + +$ tail -f /nodedata/logs/info* | grep "Report" +INFO |2017-07-05 07:37:15|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Report: blk=314,hash=881cff6fe6f7f8863ee3f9ba6cffa69614337d15523f6a4332503b4b6879b6fe,idx=0, Next: blk=315 +INFO |2017-07-05 07:37:16|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Report: blk=315,hash=2aede959eabe75405ef2a7b718111e9bf32aa047c3b1d5b6d173a25c228fea96,idx=0, Next: blk=316 +``` + +********************************************************* + +## 2. 多节点网络 + +按照[步骤1](#1-单节点网络)**启动单节点网络**,然后按下述步骤操作 + +### 2.1 配置系统合约 + +```bash +$ cd bcos/systemcontractv2 +$ cnpm install +# 修改config.js中proxy端口为35500 +$ sed -i 's/127.0.0.1:8545/127.0.0.1:35500/' config.js +$ babel-node deploy.js +# 将输出中,SystemProxy合约地址记下来 +SystemProxy合约地址 0xff27dc5cc5144c626b9fdc26b2f292d9df062470 + +# 修改docker/node-0/config.json中systemproxyaddress为上述输出 +$ sed -i 's/"systemproxyaddress":"0x0"/"systemproxyaddress":"0xff27dc5cc5144c626b9fdc26b2f292d9df062470"/' ../docker/node-0/config.json +# 重启node-0 +$ docker restart $(docker ps -a | grep bcos-node-0 | awk 'NR==1{print$1}') + +# 创世节点信息写入合约 +$ babel-node tool.js NodeAction registerNode ../docker/node-0/node.json +``` + +### 2.2 生成新节点配置文件 + +执行下面命令生成`node-1`节点配置文件。 + +```bash +$ cd bcos/docker +# genConfig.sh的参数分别是除创世节点外的组网节点数和创世节点配置文件路径 +$ ./scripts/genConfig.sh 1 node-0 +``` + +### 2.3 新加节点入网 + +```bash +$ cd bcos/systemcontractv2 +# 新加节点信息写入合约 +$ babel-node tool.js NodeAction registerNode ../docker/node-1/node.json +# 启动新加入节点,参数为新节点配置文件完整路径 +$ ../docker/scripts/start_bcos_docker.sh $PWD/node-1 +# 要加入更多节点只需要重复步骤2.2-2.3,启动新节点时参数改为新节点配置文件路径即可 +``` + +### 2.4 查看网络状态 + +```bash +# 查看工作状态 +# 块高增长说明网络工作正常 +$ cd bcos/systemcontractv2 +$ babel-node monitor.js +RPC=http://127.0.0.1:35500 +Ouputpath=./output/ +已连接节点数:1 +...........Node 0......... +NodeId:ae8f25ee89f00db93283f7f05be1441780581716e7890b60de87ae49d4bf5e4b4436f496780c10dbed8f85d819a3e2333ef7dcd06bc114ea98ef827cf074d8f3 +Host:172.17.0.1:53301 + +当前块高377 +-------------------------------------------------------------- +已连接节点数:1 +...........Node 0......... +NodeId:ae8f25ee89f00db93283f7f05be1441780581716e7890b60de87ae49d4bf5e4b4436f496780c10dbed8f85d819a3e2333ef7dcd06bc114ea98ef827cf074d8f3 +Host:172.17.0.1:53301 + +当前块高378 +``` + +********************************************************* +[Docker-Install]:https://docs.docker.com/engine/installation/ +[official mirror]:https://docs.docker.com/registry/recipes/mirror/#configure-the-docker-daemon +[docker-accelerate]:https://yq.aliyun.com/articles/29941?spm=5176.100239.blogcont7695.18.jyYdbj +[bcos-manual]:https://github.com/bcosorg/bcos/blob/master/doc/manual/manual.md +[bcos-docker]:https://hub.docker.com/r/bcosorg/bcos/ \ No newline at end of file diff --git a/docker/nodeConfig/node-0/config.json b/docker/nodeConfig/node-0/config.json new file mode 100644 index 0000000000..125fef57cb --- /dev/null +++ b/docker/nodeConfig/node-0/config.json @@ -0,0 +1,34 @@ +{ + "sealEngine": "PBFT", + "systemproxyaddress":"0xff27dc5cc5144c626b9fdc26b2f292d9df062470", + "listenip":"0.0.0.0", + "rpcport":"35500", + "p2pport":"53300", + "wallet":"/nodedata/keys.info", + "keystoredir":"/nodedata/keystore/", + "datadir":"/nodedata/", + "vm":"interpreter", + "networkid":"123456", + "logverbosity":"4", + "coverlog":"OFF", + "eventlog":"ON", + "logconf":"/nodedata/log.conf", + "params": { + "accountStartNonce": "0x0", + "maximumExtraDataSize": "0x0", + "tieBreakingGas": false, + "blockReward": "0x0", + "networkID" : "0x0" + }, + "NodeextraInfo":[ +{ + "Nodeid":"6b58b7ad8602c247a52e07bf17180e6a0a6e3c5a8809af5f51e84bec2c3894ad5a311245086e895d832c0756440b7f341d3e9fc7bbbd4e32299634200b11ffc6", + "Nodedesc": "node0", + "Agencyinfo": "node0", + "Peerip": "172.17.0.1", + "Identitytype": 1, + "Port":53300, + "Idx":0 + } + ] +} diff --git a/docker/nodeConfig/node-0/genesis.json b/docker/nodeConfig/node-0/genesis.json new file mode 100644 index 0000000000..b7cad0044b --- /dev/null +++ b/docker/nodeConfig/node-0/genesis.json @@ -0,0 +1,13 @@ +{ + "nonce": "0x0", + "difficulty": "0x0", + "mixhash": "0x0", + "coinbase": "0x0", + "timestamp": "0x0", + "parentHash": "0x0", + "extraData": "0x0", + "gasLimit": "0x13880000000000", + "god":"0x4d23de3297034cdd4a58db35f659a9b61fc7577b", + "alloc": {}, + "initMinerNodes":["6b58b7ad8602c247a52e07bf17180e6a0a6e3c5a8809af5f51e84bec2c3894ad5a311245086e895d832c0756440b7f341d3e9fc7bbbd4e32299634200b11ffc6"] +} diff --git a/docker/nodeConfig/node-0/log.conf b/docker/nodeConfig/node-0/log.conf new file mode 100644 index 0000000000..8f4a7f49a7 --- /dev/null +++ b/docker/nodeConfig/node-0/log.conf @@ -0,0 +1,24 @@ +* GLOBAL: + ENABLED = true + TO_FILE = true + TO_STANDARD_OUTPUT = false + FORMAT = "%level|%datetime{%Y-%M-%d %H:%m:%s}|%msg" + FILENAME = "/nodedata/logs/log_%datetime{%Y%M%d%H}.log" + MILLISECONDS_WIDTH = 3 + PERFORMANCE_TRACKING = false + MAX_LOG_FILE_SIZE = 209715200 ## 200MB - Comment starts with two hashes (##) + LOG_FLUSH_THRESHOLD = 100 ## Flush after every 100 logs +* TRACE: + ENABLED = false +* DEBUG: + ENABLED = false +* FATAL: + ENABLED = false +* ERROR: + FILENAME = "/nodedata/logs/error_log_%datetime{%Y%M%d%H}.log" +* WARNING: + ENABLED = false +* INFO: + FILENAME = "/nodedata/logs/info_log_%datetime{%Y%M%d%H}.log" +* VERBOSE: + ENABLED = false diff --git a/docker/nodeConfig/node-0/network.rlp b/docker/nodeConfig/node-0/network.rlp new file mode 100644 index 0000000000..0000cbce08 --- /dev/null +++ b/docker/nodeConfig/node-0/network.rlp @@ -0,0 +1,2 @@ +ցHbL +w[٢ؑYc!Ѡ- \ No newline at end of file diff --git a/docker/nodeConfig/node-0/network.rlp.pub b/docker/nodeConfig/node-0/network.rlp.pub new file mode 100644 index 0000000000..a0285aa0e5 --- /dev/null +++ b/docker/nodeConfig/node-0/network.rlp.pub @@ -0,0 +1 @@ +6b58b7ad8602c247a52e07bf17180e6a0a6e3c5a8809af5f51e84bec2c3894ad5a311245086e895d832c0756440b7f341d3e9fc7bbbd4e32299634200b11ffc6 \ No newline at end of file diff --git a/docker/nodeConfig/node-0/node.json b/docker/nodeConfig/node-0/node.json new file mode 100644 index 0000000000..81da1d5f7e --- /dev/null +++ b/docker/nodeConfig/node-0/node.json @@ -0,0 +1,10 @@ +{ + "id":"6b58b7ad8602c247a52e07bf17180e6a0a6e3c5a8809af5f51e84bec2c3894ad5a311245086e895d832c0756440b7f341d3e9fc7bbbd4e32299634200b11ffc6", + "ip":"172.17.0.1", + "port":53300, + "category":1, + "desc":"node0", + "CAhash":"", + "agencyinfo":"node0", + "idx":0 +} diff --git a/docker/nodeConfig/node-1/config.json b/docker/nodeConfig/node-1/config.json new file mode 100644 index 0000000000..30af10b854 --- /dev/null +++ b/docker/nodeConfig/node-1/config.json @@ -0,0 +1,43 @@ +{ + "sealEngine": "PBFT", + "systemproxyaddress":"0xff27dc5cc5144c626b9fdc26b2f292d9df062470", + "listenip":"0.0.0.0", + "rpcport":"35501", + "p2pport":"53301", + "wallet":"/nodedata/keys.info", + "keystoredir":"/nodedata/keystore/", + "datadir":"/nodedata/", + "vm":"interpreter", + "networkid":"123456", + "logverbosity":"4", + "coverlog":"OFF", + "eventlog":"ON", + "logconf":"/nodedata/log.conf", + "params": { + "accountStartNonce": "0x0", + "maximumExtraDataSize": "0x0", + "tieBreakingGas": false, + "blockReward": "0x0", + "networkID" : "0x0" + }, + "NodeextraInfo":[ +{ + "Nodeid":"6b58b7ad8602c247a52e07bf17180e6a0a6e3c5a8809af5f51e84bec2c3894ad5a311245086e895d832c0756440b7f341d3e9fc7bbbd4e32299634200b11ffc6", + "Nodedesc": "node0", + "Agencyinfo": "node0", + "Peerip": "172.17.0.1", + "Identitytype": 1, + "Port":53300, + "Idx":0 + }, + { + "Nodeid":"ae8f25ee89f00db93283f7f05be1441780581716e7890b60de87ae49d4bf5e4b4436f496780c10dbed8f85d819a3e2333ef7dcd06bc114ea98ef827cf074d8f3", + "Nodedesc": "node1", + "Agencyinfo": "node1", + "Peerip": "172.17.0.1", + "Identitytype": 1, + "Port":53301, + "Idx":1 + } + ] +} diff --git a/docker/nodeConfig/node-1/genesis.json b/docker/nodeConfig/node-1/genesis.json new file mode 100644 index 0000000000..b7cad0044b --- /dev/null +++ b/docker/nodeConfig/node-1/genesis.json @@ -0,0 +1,13 @@ +{ + "nonce": "0x0", + "difficulty": "0x0", + "mixhash": "0x0", + "coinbase": "0x0", + "timestamp": "0x0", + "parentHash": "0x0", + "extraData": "0x0", + "gasLimit": "0x13880000000000", + "god":"0x4d23de3297034cdd4a58db35f659a9b61fc7577b", + "alloc": {}, + "initMinerNodes":["6b58b7ad8602c247a52e07bf17180e6a0a6e3c5a8809af5f51e84bec2c3894ad5a311245086e895d832c0756440b7f341d3e9fc7bbbd4e32299634200b11ffc6"] +} diff --git a/docker/nodeConfig/node-1/log.conf b/docker/nodeConfig/node-1/log.conf new file mode 100644 index 0000000000..8f4a7f49a7 --- /dev/null +++ b/docker/nodeConfig/node-1/log.conf @@ -0,0 +1,24 @@ +* GLOBAL: + ENABLED = true + TO_FILE = true + TO_STANDARD_OUTPUT = false + FORMAT = "%level|%datetime{%Y-%M-%d %H:%m:%s}|%msg" + FILENAME = "/nodedata/logs/log_%datetime{%Y%M%d%H}.log" + MILLISECONDS_WIDTH = 3 + PERFORMANCE_TRACKING = false + MAX_LOG_FILE_SIZE = 209715200 ## 200MB - Comment starts with two hashes (##) + LOG_FLUSH_THRESHOLD = 100 ## Flush after every 100 logs +* TRACE: + ENABLED = false +* DEBUG: + ENABLED = false +* FATAL: + ENABLED = false +* ERROR: + FILENAME = "/nodedata/logs/error_log_%datetime{%Y%M%d%H}.log" +* WARNING: + ENABLED = false +* INFO: + FILENAME = "/nodedata/logs/info_log_%datetime{%Y%M%d%H}.log" +* VERBOSE: + ENABLED = false diff --git a/docker/nodeConfig/node-1/network.rlp b/docker/nodeConfig/node-1/network.rlp new file mode 100644 index 0000000000..981fc368b7 --- /dev/null +++ b/docker/nodeConfig/node-1/network.rlp @@ -0,0 +1 @@ +UPV mťd $,eJb \ No newline at end of file diff --git a/docker/nodeConfig/node-1/network.rlp.pub b/docker/nodeConfig/node-1/network.rlp.pub new file mode 100644 index 0000000000..d7365790e7 --- /dev/null +++ b/docker/nodeConfig/node-1/network.rlp.pub @@ -0,0 +1 @@ +ae8f25ee89f00db93283f7f05be1441780581716e7890b60de87ae49d4bf5e4b4436f496780c10dbed8f85d819a3e2333ef7dcd06bc114ea98ef827cf074d8f3 \ No newline at end of file diff --git a/docker/nodeConfig/node-1/node.json b/docker/nodeConfig/node-1/node.json new file mode 100644 index 0000000000..be51a337ce --- /dev/null +++ b/docker/nodeConfig/node-1/node.json @@ -0,0 +1,10 @@ +{ + "id":"ae8f25ee89f00db93283f7f05be1441780581716e7890b60de87ae49d4bf5e4b4436f496780c10dbed8f85d819a3e2333ef7dcd06bc114ea98ef827cf074d8f3", + "ip":"172.17.0.1", + "port":53301, + "category":1, + "desc":"node1", + "CAhash":"", + "agencyinfo":"node1", + "idx":1 +} diff --git a/docker/scripts/genConfig.sh b/docker/scripts/genConfig.sh new file mode 100644 index 0000000000..4ec1f415da --- /dev/null +++ b/docker/scripts/genConfig.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +set -e +dockerImage="bcosorg/bcos:latest" + +genConfig() +{ + idx=0 + miner_path=$PWD/node-0 + genesis="false" + minerInfo="" + systemproxyaddress=0x0 + if [ $# = 0 ];then + genesis="true" + elif [ $# = 2 ];then + idx=$1 + miner_path=$2 + if [ ! -f "${miner_path}/config.json" ];then + echo "${miner_path}/config.json doesn't exist." + return -1 + fi + minerInfo=`cat ${miner_path}/config.json | tail -n +24|head -n 9` + systemproxyaddress=`cat ${miner_path}/config.json |grep systemproxyaddress| awk -F ':' '{print $2}'|sed 's/\([^0-9a-z]\)//g'` + else + return -1 + fi + + if [ ${idx} -gt 99 ]; then + echo "Node numbers > 99 isn't supported." + return -1 + fi + + port=${idx} + if [ ${idx} -lt 10 ]; then + port=`printf "%02d" ${idx}` + fi + + output=$PWD/node-${idx} + + while ([ ${idx} -gt 0 ] && [ -d ${output} ]); do + idx=`expr ${idx} + 1` + output=$PWD/node-${idx} + done + if [ ! -d ${output} ]; then + mkdir ${output} + fi + echo "------generate node-${idx}------" + if ! id -nG $(whoami)|grep -qw "docker"; then SUDO='sudo'; else SUDO=''; fi + $SUDO docker run -it --rm -v $output:/nodedata ${dockerImage} bcoseth --gennetworkrlp /nodedata/network.rlp + sudo chown -R ${USER} node-${idx} + nodeId=`sudo cat $output/network.rlp.pub` + +echo "{ + \"sealEngine\": \"PBFT\", + \"systemproxyaddress\":\"${systemproxyaddress}\", + \"listenip\":\"0.0.0.0\", + \"rpcport\":\"355${port}\", + \"p2pport\":\"533${port}\", + \"wallet\":\"/nodedata/keys.info\", + \"keystoredir\":\"/nodedata/keystore/\", + \"datadir\":\"/nodedata/\", + \"vm\":\"interpreter\", + \"networkid\":\"123456\", + \"logverbosity\":\"4\", + \"coverlog\":\"OFF\", + \"eventlog\":\"ON\", + \"logconf\":\"/nodedata/log.conf\", + \"params\": { + \"accountStartNonce\": \"0x0\", + \"maximumExtraDataSize\": \"0x0\", + \"tieBreakingGas\": false, + \"blockReward\": \"0x0\", + \"networkID\" : \"0x0\" + }, + \"NodeextraInfo\":[" >$output/config.json +if [ ${genesis} == "false" ];then + cp ${miner_path}/genesis.json node-${idx} + echo " ${minerInfo}," >>$output/config.json +fi +echo " { + \"Nodeid\":\"$nodeId\", + \"Nodedesc\": \"node${idx}\", + \"Agencyinfo\": \"node${idx}\", + \"Peerip\": \"172.17.0.1\", + \"Identitytype\": 1, + \"Port\":533${port}, + \"Idx\":${idx} + } + ] +}" >>$output/config.json + +echo "* GLOBAL: + ENABLED = true + TO_FILE = true + TO_STANDARD_OUTPUT = false + FORMAT = \"%level|%datetime{%Y-%M-%d %H:%m:%s}|%msg\" + FILENAME = \"/nodedata/logs/log_%datetime{%Y%M%d%H}.log\" + MILLISECONDS_WIDTH = 3 + PERFORMANCE_TRACKING = false + MAX_LOG_FILE_SIZE = 209715200 ## 200MB - Comment starts with two hashes (##) + LOG_FLUSH_THRESHOLD = 100 ## Flush after every 100 logs +* TRACE: + ENABLED = false +* DEBUG: + ENABLED = false +* FATAL: + ENABLED = false +* ERROR: + FILENAME = \"/nodedata/logs/error_log_%datetime{%Y%M%d%H}.log\" +* WARNING: + ENABLED = false +* INFO: + FILENAME = \"/nodedata/logs/info_log_%datetime{%Y%M%d%H}.log\" +* VERBOSE: + ENABLED = false" > $output/log.conf + +echo "{ + \"id\":\"$nodeId\", + \"ip\":\"172.17.0.1\", + \"port\":533${port}, + \"category\":1, + \"desc\":\"node${idx}\", + \"CAhash\":\"\", + \"agencyinfo\":\"node${idx}\", + \"idx\":${idx} +}" > $output/node.json + + if [ ${genesis} == "true" ];then +echo "{ + \"nonce\": \"0x0\", + \"difficulty\": \"0x0\", + \"mixhash\": \"0x0\", + \"coinbase\": \"0x0\", + \"timestamp\": \"0x0\", + \"parentHash\": \"0x0\", + \"extraData\": \"0x0\", + \"gasLimit\": \"0x13880000000000\", + \"god\":\"0x4d23de3297034cdd4a58db35f659a9b61fc7577b\", + \"alloc\": {}, + \"initMinerNodes\":[\"$nodeId\"] +}" > $output/genesis.json + fi +} + +configPath=$PWD +numbers=1 +minerPath=$PWD/node-0 + +if [ $# = 0 ];then + echo "Generate config file to ./node-0" + genConfig +elif [ $# = 2 ];then + numbers=$1 + minerPath=$2 + for id in $( seq 1 ${numbers} ) + do + genConfig ${id} ${minerPath} + done +else + echo "Usage: $0 [numbers of node config files] [node-0 path]" + exit -1 +fi + +echo "Config files in $configPath" diff --git a/docker/scripts/install-docker.sh b/docker/scripts/install-docker.sh new file mode 100644 index 0000000000..99dc12b7c8 --- /dev/null +++ b/docker/scripts/install-docker.sh @@ -0,0 +1,597 @@ +#!/bin/sh +set -e + +# This script is meant for quick & easy install via: +# $ curl -fsSL get.docker.com -o get-docker.sh +# $ sh get-docker.sh +# +# For test builds (ie. release candidates): +# $ curl -fsSL test.docker.com -o test-docker.sh +# $ sh test-docker.sh +# +# NOTE: Make sure to verify the contents of the script +# you downloaded matches the contents of install.sh +# located at https://github.com/docker/docker-install +# before executing. + +# This value will automatically get changed for: +# * edge +# * test +# * experimental +DEFAULT_CHANNEL_VALUE="stable" +if [ -z "$CHANNEL" ]; then + CHANNEL=$DEFAULT_CHANNEL_VALUE +fi + +# TODO: Once raspbian support is figured out we can remove from: +# HERE ========================================================= +url="https://test.docker.com/" +apt_url="https://apt.dockerproject.org" +yum_url="https://yum.dockerproject.org" + +docker_key="-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +EJOQTvBR8Q== +=Yhur +-----END PGP PUBLIC KEY BLOCK----- +" + +mirror='Aliyun' +while [ $# -gt 0 ]; do + case "$1" in + --mirror) + mirror="$2" + shift + ;; + *) + echo "Illegal option $1" + ;; + esac + shift $(( $# > 0 ? 1 : 0 )) +done + +case "$mirror" in + AzureChinaCloud) + apt_url="https://mirror.azure.cn/docker-engine/apt" + yum_url="https://mirror.azure.cn/docker-engine/yum" + ;; + Aliyun) + apt_url="https://mirrors.aliyun.com/docker-engine/apt" + yum_url="https://mirrors.aliyun.com/docker-engine/yum" + ;; +esac +# HERE ========================================================= + +command_exists() { + command -v "$@" > /dev/null 2>&1 +} + +echo_docker_as_nonroot() { + if command_exists docker && [ -e /var/run/docker.sock ]; then + ( + set -x + $sh_c 'docker version' + ) || true + fi + your_user=your-user + [ "$user" != 'root' ] && your_user="$user" + # intentionally mixed spaces and tabs here -- tabs are stripped by "<<-EOF", spaces are kept in the output + cat <<-EOF + + If you would like to use Docker as a non-root user, you should now consider + adding your user to the "docker" group with something like: + + sudo usermod -aG docker $your_user + + Remember that you will have to log out and back in for this to take effect! + + WARNING: Adding a user to the "docker" group will grant the ability to run + containers which can be used to obtain root privileges on the + docker host. + Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface + for more information. + + EOF +} + +# Check if this is a forked Linux distro +check_forked() { + + # Check for lsb_release command existence, it usually exists in forked distros + if command_exists lsb_release; then + # Check if the `-u` option is supported + set +e + lsb_release -a -u > /dev/null 2>&1 + lsb_release_exit_code=$? + set -e + + # Check if the command has exited successfully, it means we're in a forked distro + if [ "$lsb_release_exit_code" = "0" ]; then + # Print info about current distro + cat <<-EOF + You're using '$lsb_dist' version '$dist_version'. + EOF + + # Get the upstream release info + lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[[:space:]]') + dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[[:space:]]') + + # Print info about upstream distro + cat <<-EOF + Upstream release is '$lsb_dist' version '$dist_version'. + EOF + else + if [ -r /etc/debian_version ] && [ "$lsb_dist" != "ubuntu" ] && [ "$lsb_dist" != "raspbian" ]; then + # We're Debian and don't even know it! + lsb_dist=debian + dist_version="$(cat /etc/debian_version | sed 's/\/.*//' | sed 's/\..*//')" + case "$dist_version" in + 9) + dist_version="stretch" + ;; + 8|'Kali Linux 2') + dist_version="jessie" + ;; + 7) + dist_version="wheezy" + ;; + esac + fi + fi + fi +} + +semverParse() { + major="${1%%.*}" + minor="${1#$major.}" + minor="${minor%%.*}" + patch="${1#$major.$minor.}" + patch="${patch%%[-.]*}" +} + +deprecation_notice() { + echo + echo + echo " WARNING: $1 is no longer updated @ $url" + echo " Installing the legacy docker-engine package..." + echo + echo + sleep 10; +} + +ee_notice() { + echo + echo + echo " WARNING: $1 is now only supported by Docker EE" + echo " Check https://store.docker.com for information on Docker EE" + echo + echo +} + +do_install() { + + architecture=$(uname -m) + case $architecture in + # officially supported + amd64|x86_64) + ;; + # unofficially supported with available repositories + armv6l|armv7l) + ;; + # unofficially supported without available repositories + aarch64|arm64|ppc64le|s390x) + cat 1>&2 <<-EOF + Error: This install script does not support $architecture, because no + $architecture package exists in Docker's repositories. + + Other install options include checking your distribution's package repository + for a version of Docker, or building Docker from source. + EOF + exit 1 + ;; + # not supported + *) + cat >&2 <<-EOF + Error: $architecture is not a recognized platform. + EOF + exit 1 + ;; + esac + + if command_exists docker; then + version="$(docker -v | cut -d ' ' -f3 | cut -d ',' -f1)" + MAJOR_W=1 + MINOR_W=10 + + semverParse $version + + shouldWarn=0 + if [ $major -lt $MAJOR_W ]; then + shouldWarn=1 + fi + + if [ $major -le $MAJOR_W ] && [ $minor -lt $MINOR_W ]; then + shouldWarn=1 + fi + + cat >&2 <<-'EOF' + Warning: the "docker" command appears to already exist on this system. + + If you already have Docker installed, this script can cause trouble, which is + why we're displaying this warning and provide the opportunity to cancel the + installation. + + If you installed the current Docker package using this script and are using it + EOF + + if [ $shouldWarn -eq 1 ]; then + cat >&2 <<-'EOF' + again to update Docker, we urge you to migrate your image store before upgrading + to v1.10+. + + You can find instructions for this here: + https://github.com/docker/docker/wiki/Engine-v1.10.0-content-addressability-migration + EOF + else + cat >&2 <<-'EOF' + again to update Docker, you can safely ignore this message. + EOF + fi + + cat >&2 <<-'EOF' + + You may press Ctrl+C now to abort this script. + EOF + ( set -x; sleep 20 ) + fi + + user="$(id -un 2>/dev/null || true)" + + sh_c='sh -c' + if [ "$user" != 'root' ]; then + if command_exists sudo; then + sh_c='sudo -E sh -c' + elif command_exists su; then + sh_c='su -c' + else + cat >&2 <<-'EOF' + Error: this installer needs the ability to run commands as root. + We are unable to find either "sudo" or "su" available to make this happen. + EOF + exit 1 + fi + fi + + curl='' + if command_exists curl; then + curl='curl -sSL' + elif command_exists wget; then + curl='wget -qO-' + elif command_exists busybox && busybox --list-modules | grep -q wget; then + curl='busybox wget -qO-' + fi + + # check to see which repo they are trying to install from + if [ -z "$repo" ]; then + repo='main' + if [ "https://test.docker.com/" = "$url" ]; then + repo='testing' + elif [ "https://experimental.docker.com/" = "$url" ]; then + repo='experimental' + fi + fi + + # perform some very rudimentary platform detection + lsb_dist='' + dist_version='' + if command_exists lsb_release; then + lsb_dist="$(lsb_release -si)" + fi + if [ -z "$lsb_dist" ] && [ -r /etc/lsb-release ]; then + lsb_dist="$(. /etc/lsb-release && echo "$DISTRIB_ID")" + fi + if [ -z "$lsb_dist" ] && [ -r /etc/debian_version ]; then + lsb_dist='debian' + fi + if [ -z "$lsb_dist" ] && [ -r /etc/fedora-release ]; then + lsb_dist='fedora' + fi + if [ -z "$lsb_dist" ] && [ -r /etc/oracle-release ]; then + lsb_dist='oracleserver' + fi + if [ -z "$lsb_dist" ] && [ -r /etc/centos-release ]; then + lsb_dist='centos' + fi + if [ -z "$lsb_dist" ] && [ -r /etc/redhat-release ]; then + lsb_dist='redhat' + fi + if [ -z "$lsb_dist" ] && [ -r /etc/os-release ]; then + lsb_dist="$(. /etc/os-release && echo "$ID")" + fi + + lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')" + + # Special case redhatenterpriseserver + if [ "${lsb_dist}" = "redhatenterpriseserver" ]; then + # Set it to redhat, it will be changed to centos below anyways + lsb_dist='redhat' + fi + + case "$lsb_dist" in + + ubuntu) + if command_exists lsb_release; then + dist_version="$(lsb_release --codename | cut -f2)" + fi + if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then + dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")" + fi + ;; + + debian|raspbian) + dist_version="$(cat /etc/debian_version | sed 's/\/.*//' | sed 's/\..*//')" + case "$dist_version" in + 9) + dist_version="stretch" + ;; + 8) + dist_version="jessie" + ;; + 7) + dist_version="wheezy" + ;; + esac + ;; + + oracleserver) + # need to switch lsb_dist to match yum repo URL + lsb_dist="oraclelinux" + dist_version="$(rpm -q --whatprovides redhat-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//')" + ;; + + fedora|centos|redhat) + dist_version="$(rpm -q --whatprovides ${lsb_dist}-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//' | sort | tail -1)" + ;; + + *) + if command_exists lsb_release; then + dist_version="$(lsb_release --codename | cut -f2)" + fi + if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then + dist_version="$(. /etc/os-release && echo "$VERSION_ID")" + fi + ;; + + + esac + + # Check if this is a forked Linux distro + check_forked + + # Run setup for each distro accordingly + case "$lsb_dist" in + ubuntu|debian) + pre_reqs="apt-transport-https ca-certificates curl" + if [ "$lsb_dist" = "debian" ] && [ "$dist_version" = "wheezy" ]; then + pre_reqs="$pre_reqs python-software-properties" + backports="deb http://ftp.debian.org/debian wheezy-backports main" + if ! grep -Fxq "$backports" /etc/apt/sources.list; then + (set -x; $sh_c "echo \"$backports\" >> /etc/apt/sources.list") + fi + else + pre_reqs="$pre_reqs software-properties-common" + fi + if ! command -v gpg > /dev/null; then + pre_reqs="$pre_reqs gnupg" + fi + apt_repo="deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/$lsb_dist $dist_version $CHANNEL" + ( + set -x + $sh_c 'apt-get update' + $sh_c "apt-get install -y -q $pre_reqs" + curl -fsSl "https://download.docker.com/linux/$lsb_dist/gpg" | $sh_c 'apt-key add -' + $sh_c "add-apt-repository \"$apt_repo\"" + if [ "$lsb_dist" = "debian" ] && [ "$dist_version" = "wheezy" ]; then + $sh_c 'sed -i "/deb-src.*download\.docker/d" /etc/apt/sources.list' + fi + $sh_c 'apt-get update' + $sh_c 'apt-get install -y -q docker-ce' + ) + echo_docker_as_nonroot + exit 0 + ;; + centos|fedora) + yum_repo="https://download.docker.com/linux/centos/docker-ce.repo" + if [ "$lsb_dist" = "fedora" ]; then + if [ "$dist_version" -lt "24" ]; then + echo "Error: Only Fedora >=24 are supported by $url" + exit 1 + fi + pkg_manager="dnf" + config_manager="dnf config-manager" + enable_channel_flag="--set-enabled" + pre_reqs="dnf-plugins-core" + else + pkg_manager="yum" + config_manager="yum-config-manager" + enable_channel_flag="--enable" + pre_reqs="yum-utils" + fi + ( + set -x + $sh_c "$pkg_manager install -y -q $pre_reqs" + $sh_c "$config_manager --add-repo $yum_repo" + if [ "$CHANNEL" != "stable" ]; then + echo "Info: Enabling channel '$CHANNEL' for docker-ce repo" + $sh_c "$config_manager $enable_channel_flag docker-ce-$CHANNEL" + fi + $sh_c "$pkg_manager makecache fast" + $sh_c "$pkg_manager install -y -q docker-ce" + if [ -d '/run/systemd/system' ]; then + $sh_c 'service docker start' + else + $sh_c 'systemctl start docker' + fi + ) + echo_docker_as_nonroot + exit 0 + ;; + raspbian) + deprecation_notice "$lsb_dist" + export DEBIAN_FRONTEND=noninteractive + + did_apt_get_update= + apt_get_update() { + if [ -z "$did_apt_get_update" ]; then + ( set -x; $sh_c 'sleep 3; apt-get update' ) + did_apt_get_update=1 + fi + } + + if [ "$lsb_dist" != "raspbian" ]; then + # aufs is preferred over devicemapper; try to ensure the driver is available. + if ! grep -q aufs /proc/filesystems && ! $sh_c 'modprobe aufs'; then + if uname -r | grep -q -- '-generic' && dpkg -l 'linux-image-*-generic' | grep -qE '^ii|^hi' 2>/dev/null; then + kern_extras="linux-image-extra-$(uname -r) linux-image-extra-virtual" + + apt_get_update + ( set -x; $sh_c 'sleep 3; apt-get install -y -q '"$kern_extras" ) || true + + if ! grep -q aufs /proc/filesystems && ! $sh_c 'modprobe aufs'; then + echo >&2 'Warning: tried to install '"$kern_extras"' (for AUFS)' + echo >&2 ' but we still have no AUFS. Docker may not work. Proceeding anyways!' + ( set -x; sleep 10 ) + fi + else + echo >&2 'Warning: current kernel is not supported by the linux-image-extra-virtual' + echo >&2 ' package. We have no AUFS support. Consider installing the packages' + echo >&2 ' "linux-image-virtual" and "linux-image-extra-virtual" for AUFS support.' + ( set -x; sleep 10 ) + fi + fi + fi + + # install apparmor utils if they're missing and apparmor is enabled in the kernel + # otherwise Docker will fail to start + if [ "$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)" = 'Y' ]; then + if command -v apparmor_parser >/dev/null 2>&1; then + echo 'apparmor is enabled in the kernel and apparmor utils were already installed' + else + echo 'apparmor is enabled in the kernel, but apparmor_parser is missing. Trying to install it..' + apt_get_update + ( set -x; $sh_c 'sleep 3; apt-get install -y -q apparmor' ) + fi + fi + + if [ ! -e /usr/lib/apt/methods/https ]; then + apt_get_update + ( set -x; $sh_c 'sleep 3; apt-get install -y -q apt-transport-https ca-certificates' ) + fi + if [ -z "$curl" ]; then + apt_get_update + ( set -x; $sh_c 'sleep 3; apt-get install -y -q curl ca-certificates' ) + curl='curl -sSL' + fi + if ! command -v gpg > /dev/null; then + apt_get_update + ( set -x; $sh_c 'sleep 3; apt-get install -y -q gnupg2 || apt-get install -y -q gnupg' ) + fi + + # dirmngr is a separate package in ubuntu yakkety; see https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1634464 + if ! command -v dirmngr > /dev/null; then + apt_get_update + ( set -x; $sh_c 'sleep 3; apt-get install -y -q dirmngr' ) + fi + + ( + set -x + echo "$docker_key" | $sh_c 'apt-key add -' + $sh_c "mkdir -p /etc/apt/sources.list.d" + $sh_c "echo deb \[arch=$(dpkg --print-architecture)\] ${apt_url}/repo ${lsb_dist}-${dist_version} ${repo} > /etc/apt/sources.list.d/docker.list" + $sh_c 'sleep 3; apt-get update; apt-get install -y -q docker-engine' + ) + echo_docker_as_nonroot + exit 0 + ;; + + redhat|oraclelinux) + ee_notice "$lsb_dist" + exit 1 + ;; + esac + + # intentionally mixed spaces and tabs here -- tabs are stripped by "<<-'EOF'", spaces are kept in the output + cat >&2 <<-'EOF' + + Either your platform is not easily detectable or is not supported by this + installer script. + Please visit the following URL for more detailed installation instructions: + + https://docs.docker.com/engine/installation/ + + EOF + exit 1 +} + +# wrapped up in a function so that we have some protection against only getting +# half the file during "curl | sh" +do_install \ No newline at end of file diff --git a/docker/scripts/start_bcos_docker.sh b/docker/scripts/start_bcos_docker.sh new file mode 100644 index 0000000000..947ccf0c6e --- /dev/null +++ b/docker/scripts/start_bcos_docker.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# example: ./start_docker.sh /nodedata/node-1 node1 +set -e + +configPath="~/nodedata" +dockerImage="bcosorg/bcos:latest" +containerName="bcos" +containerDataPath="/nodedata" + +if [ $# = 1 ];then + configPath=$1 + containerName=$containerName"-"${configPath##*/} +elif [ $# = 2 ];then + configPath=$1 + containerName=$2 +else + echo "Please input path of config.json" + echo "Usage: $0 [full/path/to/config.json & genesis.json] [container name]" + exit -1 +fi + +if [ ! -f $configPath/genesis.json ];then + echo "$configPath/genesis.json doesn't exists." + exit -1 +fi + +if [ ! -f $configPath/config.json ];then + echo "$configPath/config.json doesn't exists." + exit -1 +fi + +rpcport=`cat $configPath/config.json | grep -i "rpcport" | awk -F ':' '{print $2}' | sed 's/\([^0-9]\)//g'` +p2pport=`cat $configPath/config.json | grep -i "p2pport" | awk -F ':' '{print $2}' | sed 's/\([^0-9]\)//g'` + +echo "--------------------------------------" +echo "configPath: $configPath" +echo "rpcport: $rpcport" +echo "p2pport: $p2pport" +echo "dockerImage: $dockerImage" +echo "containerName: $containerName" +echo "--------------------------------------" + +docker run -d --rm --name $containerName -v $configPath:$containerDataPath -p $rpcport:$rpcport -p $p2pport:$p2pport $dockerImage +