-
Notifications
You must be signed in to change notification settings - Fork 51
/
Dockerfile.optimized
89 lines (69 loc) · 3.13 KB
/
Dockerfile.optimized
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
FROM ubuntu:20.04 AS builder
MAINTAINER Josh Ellithorpe <quest@mac.com>
ARG SMARTBCH_VERSION="v0.6.0"
ARG MOEINGEVM_VERSION="v0.4.6"
ARG CONFIG_VERSION="v0.0.6"
ARG GOLANG_VERSION="1.18"
ARG PATCH_CGO_VERSION="0.1.2"
ARG ROCKSDB_VERSION="5.18.4"
ARG SNAPPY_VERSION="1.1.8"
ARG SMARTBCH_BUILD_TAGS="cppbtree"
ARG CHAIN_ID="0x2710"
ARG TARGETARCH
ENV TARGETARCH=${TARGETARCH:-amd64}
# Install apt based dependencies
RUN apt-get -y update && apt-get -y upgrade
RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install cmake gcc g++ git libgflags-dev make wget
# Make wget produce less visual noise in output
RUN printf "quiet=on\nshow-progress=on\nprogress=bar:force:noscroll" > ~/.wgetrc
# Setup build directory
RUN mkdir /build
WORKDIR /build
# Install Go
ENV GOROOT=/usr/local/go
ENV GOPATH=/go
ENV PATH=$GOPATH/bin:$GOROOT/bin:$PATH
RUN wget -O go.tgz https://dl.google.com/go/go${GOLANG_VERSION}.linux-${TARGETARCH}.tar.gz
RUN tar -zxf go.tgz -C /usr/local
RUN mkdir -p $GOPATH/bin
# Patch Go for larger cgo stack size
RUN wget -O cgo.tgz https://github.com/smartbch/patch-cgo-for-golang/archive/refs/tags/v${PATCH_CGO_VERSION}.tar.gz
RUN tar -zxf cgo.tgz -C $GOROOT/src/runtime/cgo/ --strip-components=1 --wildcards "*.c"
RUN go version
# Build libsnappy
RUN wget -O snappy.tgz https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz
RUN mkdir -p snappy/build && tar -zxf snappy.tgz -C snappy --strip-components=1
RUN cd snappy/build && \
cmake -DSNAPPY_BUILD_TESTS=0 -DCMAKE_BUILD_TYPE=Release ../ && \
make -j4 install
# Build rocksdb
RUN wget -O rocksdb.tgz https://github.com/facebook/rocksdb/archive/refs/tags/v${ROCKSDB_VERSION}.tar.gz
RUN mkdir rocksdb && tar -zxf rocksdb.tgz -C rocksdb --strip-components=1
RUN cd rocksdb && \
wget -O - https://raw.githubusercontent.com/smartbch/artifacts/main/patches/rocksdb.gcc11.patch | git apply -v && \
CXXFLAGS=-Wno-range-loop-construct PORTABLE=1 make -j4 static_lib && \
strip --strip-unneeded librocksdb.a
# Build libevmwrap
RUN git clone -b ${MOEINGEVM_VERSION} --depth 1 https://github.com/smartbch/moeingevm
RUN cd moeingevm/evmwrap && make -j4
# Build smartbchd
ENV ROCKSDB_PATH="/build/rocksdb"
ENV CGO_CFLAGS="-I$ROCKSDB_PATH/include"
ENV CGO_LDFLAGS="-L$ROCKSDB_PATH -L/build/moeingevm/evmwrap/host_bridge/ -l:librocksdb.a -lstdc++ -lm -lsnappy"
RUN git clone -b ${SMARTBCH_VERSION} --depth 1 https://github.com/smartbch/smartbch
RUN cd smartbch && go build -tags ${SMARTBCH_BUILD_TAGS} github.com/smartbch/smartbch/cmd/smartbchd
# Init chain
WORKDIR /root/
RUN /build/smartbch/smartbchd init mynode --chain-id ${CHAIN_ID}
RUN wget https://github.com/smartbch/artifacts/releases/download/${CONFIG_VERSION}/dot.smartbchd.tgz
RUN tar -zxf dot.smartbchd.tgz -C .smartbchd/ --strip-components=1
FROM ubuntu:20.04
RUN apt-get -y update && apt-get -y upgrade && apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Copy smartbchd binary and config files from previous stage
COPY --from=builder /build/smartbch/smartbchd /usr/local/bin/
COPY --from=builder /root/.smartbchd /root/.smartbchd
WORKDIR /root/
VOLUME ["/root/.smartbchd"]
ENTRYPOINT ["smartbchd"]
EXPOSE 8545 8546