-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
191 lines (147 loc) · 6.82 KB
/
Dockerfile
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# Use an official Python runtime as the base image
FROM ubuntu
# Set the working directory in the container
WORKDIR /app
# required to install from apt-get
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/London
# some optional dev programs, no hard dependencies (only for cli)
RUN apt-get update -y
RUN apt-get install -y ca-certificates
RUN apt-get install -y net-tools dnsutils iputils-ping traceroute curl wget git unzip
## install some dependencies
RUN apt-get install -y \
build-essential \
libncurses-dev \
psmisc \
zlib1g \
htop \
screen \
zlib1g-dev \
libffi-dev \
libssl-dev
# Download additional dependencies and workarounds
RUN mkdir /deps
RUN curl https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz --output /deps/python.tgz
RUN curl https://gmplib.org/download/gmp/gmp-6.2.0.tar.xz --output /deps/gmp.tar.xz
RUN curl https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz --output /deps/pbc.tar.gz
RUN curl https://github.com/GrahamDumpleton/mod_wsgi/archive/refs/tags/4.9.4.tar.gz --output /deps/mod_wsgi.tar.gz
RUN wget https://github.com/python/typing_extensions/archive/refs/tags/4.7.1.zip -O /deps/typing_extensions.zip
RUN cd /deps && git clone https://github.com/JHUISI/charm.git && cd charm && git checkout 2be48f2e1b4e94d8686f11321b0f1d5569e2ea0e
RUN cd /deps && git clone https://github.com/jpmorganchase/quorum.git && cd quorum && git checkout fbfb5dd12a8c2b8abd053f858ef539ab38196b75
RUN cd /deps && git clone https://github.com/GrahamDumpleton/mod_wsgi && cd mod_wsgi && git checkout 7fba9934e8631cdc08d48bbc2983598b4586db80
# Extract additional dependencies and workarounds
RUN cd /deps \
&& tar xzf python.tgz && cp -r Python-3.7.* python \
&& tar xf gmp.tar.xz && cp -r gmp-6.2.0 gmp\
&& tar xzf pbc.tar.gz\
&& unzip typing_extensions.zip -d typing_extensions
# Install python3.7
ENV PYTHON_VERSION 3.7.17
RUN cd /deps/python && ./configure --enable-shared && make && make install # && make test
RUN ldconfig /usr/local/lib # fix python (src: https://stackoverflow.com/questions/58649177/python3-7-error-while-loading-shared-libraries-libpython3-7m-so-1-0)
# Install gmp 6
RUN apt-get install -y m4
RUN cd /deps/gmp && ./configure && make && make install
# install pbc 0.5
RUN apt-get install -y flex bison
RUN cd /deps/pbc-0.5.14 && ./configure && make && make install
# install charm
RUN apt-get install -y wget
RUN cd /deps/charm && ./configure.sh && make && make install && ldconfig
# install apache2
RUN apt-get install -y apache2
COPY /misc/apache.conf /etc/apache2/sites-enabled/apache.conf
# install quorum
ENV PATH="/app/quorum/build/bin:${PATH}"
RUN apt-get install -y golang
RUN cd /deps/quorum && make all
RUN mkdir -p /app/eth/nodes
# Link all binaries to be available
RUN ln -s /deps/quorum/build/bin/* /bin/
# required for apache2
COPY /misc/ld.so.conf /etc/ld.so.conf
RUN /sbin/ldconfig -v
# Install Node.js 18 (copied from corresponding official docker file)
ENV NODE_VERSION 18.17.1
RUN groupadd --gid 1000 node \
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
&& case "${dpkgArch##*-}" in \
amd64) ARCH='x64';; \
ppc64el) ARCH='ppc64le';; \
s390x) ARCH='s390x';; \
arm64) ARCH='arm64';; \
armhf) ARCH='armv7l';; \
i386) ARCH='x86';; \
*) echo "unsupported architecture"; exit 1 ;; \
esac \
# gpg keys listed at https://github.com/nodejs/node#release-keys
&& set -ex \
&& for key in \
4ED778F539E3634C779C87C6D7062848A1AB005C \
141F07595B7B3FFE74309A937405533BE57C7D57 \
74F12602B6F1C4E913FAA37AD3A89613643B6201 \
DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 \
61FC681DFB92A079F1685E77973F295594EC4689 \
8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 \
C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \
108F52B48DB57BB0CC439B2997B01419BD92F80A \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs \
# smoke tests
&& node --version \
&& npm --version
ENV YARN_VERSION 1.22.19
RUN set -ex \
&& for key in \
6A010C5166006599AA17F08146C2130DFD2497F5 \
; do \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \
done \
&& curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
&& curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
&& gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
&& mkdir -p /opt \
&& tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \
&& ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \
&& ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \
&& rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
# smoke test
&& yarn --version
RUN npm install -g truffle @truffle/hdwallet-provider
COPY quorum/sc/truffle-config-template.js /
# install mod_wsgi
RUN apt-get install -y apache2 apache2-dev
RUN apt-get install -y libffi-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev checkinstall
RUN apt-get install -y libapache2-mod-wsgi-py3 pkg-config libreadline-dev
RUN cd /deps/mod_wsgi && ./configure --with-python=/usr/local/bin/python3.7 && make && make install
# Replace typing_extensions package (workaround to support the installation of pip)
RUN rm -rf /usr/local/lib/python3.7/site-packages/typing_extensions-4.9.0-*/
COPY /misc/setup.py /deps/typing_extensions/setup.py
RUN cd /deps/typing_extensions && python3 setup.py install
# Install pip3
RUN python3.7 -m ensurepip
# activate wsgi
RUN pip3 install --upgrade pip Cython
RUN a2enmod wsgi
# Copy the requirements file into the container
COPY privaccichain/requirements.txt .
# Install the project dependencies
RUN pip3 install --no-cache-dir -r requirements.txt
# Copy additional files into the container
COPY entrypoint.sh /
# Specify the command to run when the container starts
ENTRYPOINT [ "/usr/bin/bash", "-c", "/entrypoint.sh" ]