mirror of
https://github.com/vtnerd/monero-lws.git
synced 2024-12-22 19:39:23 +00:00
138 lines
4.9 KiB
Docker
138 lines
4.9 KiB
Docker
# Initial base from https://github.com/sethforprivacy/monero-lws/blob/588c7f1965d3afbda8a65dc870645650e063e897/Dockerfile
|
|
|
|
# Set monerod version to install from github
|
|
ARG MONERO_BRANCH=v0.18.2.2
|
|
ARG MONERO_COMMIT_HASH=e06129bb4d1076f4f2cebabddcee09f1e9e30dcc
|
|
|
|
# Select ubuntu:20.04 for the build image base
|
|
FROM ubuntu:20.04 as build
|
|
|
|
# Install all dependencies for a static build
|
|
# Added DEBIAN_FRONTEND=noninteractive to workaround tzdata prompt on installation
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
RUN apt-get update \
|
|
&& apt-get upgrade --no-install-recommends -y
|
|
|
|
RUN apt-get install --no-install-recommends -y \
|
|
build-essential \
|
|
ca-certificates \
|
|
ccache \
|
|
cmake \
|
|
doxygen \
|
|
git \
|
|
graphviz \
|
|
libboost-all-dev \
|
|
libexpat1-dev \
|
|
libldns-dev \
|
|
liblzma-dev \
|
|
libpgm-dev \
|
|
libprotobuf-dev \
|
|
libreadline6-dev \
|
|
libsodium-dev \
|
|
libssl-dev \
|
|
libudev-dev \
|
|
libunwind8-dev \
|
|
libusb-1.0-0-dev \
|
|
libzmq3-dev \
|
|
pkg-config \
|
|
protobuf-compiler \
|
|
qttools5-dev-tools \
|
|
wget \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set necessary args and environment variables for building Monero
|
|
ARG MONERO_BRANCH
|
|
ARG MONERO_COMMIT_HASH
|
|
ARG NPROC
|
|
ARG TARGETARCH
|
|
ENV CFLAGS='-fPIC'
|
|
ENV CXXFLAGS='-fPIC -DELPP_FEATURE_CRASH_LOG'
|
|
ENV USE_SINGLE_BUILDDIR 1
|
|
ENV BOOST_DEBUG 1
|
|
|
|
# Build expat, a dependency for libunbound
|
|
RUN set -ex && wget https://github.com/libexpat/libexpat/releases/download/R_2_4_8/expat-2.4.8.tar.bz2 && \
|
|
echo "a247a7f6bbb21cf2ca81ea4cbb916bfb9717ca523631675f99b3d4a5678dcd16 expat-2.4.8.tar.bz2" | sha256sum -c && \
|
|
tar -xf expat-2.4.8.tar.bz2 && \
|
|
rm expat-2.4.8.tar.bz2 && \
|
|
cd expat-2.4.8 && \
|
|
./configure --enable-static --disable-shared --prefix=/usr && \
|
|
make -j${NPROC:-$(nproc)} && \
|
|
make -j${NPROC:-$(nproc)} install
|
|
|
|
# Build libunbound for static builds
|
|
WORKDIR /tmp
|
|
RUN set -ex && wget https://www.nlnetlabs.nl/downloads/unbound/unbound-1.16.1.tar.gz && \
|
|
echo "2fe4762abccd564a0738d5d502f57ead273e681e92d50d7fba32d11103174e9a unbound-1.16.1.tar.gz" | sha256sum -c && \
|
|
tar -xzf unbound-1.16.1.tar.gz && \
|
|
rm unbound-1.16.1.tar.gz && \
|
|
cd unbound-1.16.1 && \
|
|
./configure --disable-shared --enable-static --without-pyunbound --with-libexpat=/usr --with-ssl=/usr --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads --with-libunbound-only --with-pic && \
|
|
make -j${NPROC:-$(nproc)} && \
|
|
make -j${NPROC:-$(nproc)} install
|
|
|
|
# Switch to Monero source directory
|
|
WORKDIR /monero
|
|
|
|
# Git pull Monero source at specified tag/branch and compile monerod binary
|
|
RUN git clone --recursive --branch ${MONERO_BRANCH} \
|
|
https://github.com/monero-project/monero . \
|
|
&& test `git rev-parse HEAD` = ${MONERO_COMMIT_HASH} || exit 1 \
|
|
&& git submodule init && git submodule update \
|
|
&& mkdir -p build/release && cd build/release \
|
|
# Create make build files manually for release-static-linux-${TARGETARCH}
|
|
&& case ${TARGETARCH:-amd64} in \
|
|
"arm64") cmake -D STATIC=ON -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-armv8" ../.. ;; \
|
|
"amd64") cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-x64" ../.. ;; \
|
|
*) echo "Dockerfile does not support this platform"; exit 1 ;; \
|
|
esac \
|
|
# Build only monerod binary using number of available threads
|
|
&& cd /monero && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon lmdb_lib multisig
|
|
|
|
# Switch to monero-lws source directory
|
|
WORKDIR /monero-lws
|
|
|
|
COPY . .
|
|
|
|
ARG NPROC
|
|
RUN set -ex \
|
|
&& git submodule init && git submodule update \
|
|
&& rm -rf build && mkdir build && cd build \
|
|
&& cmake -D STATIC=ON -D MONERO_SOURCE_DIR=/monero -D MONERO_BUILD_DIR=/monero/build/release .. \
|
|
&& make -j${NPROC:-$(nproc)}
|
|
|
|
# Begin final image build
|
|
# Select Ubuntu 20.04LTS for the image base
|
|
FROM ubuntu:20.04
|
|
|
|
# Added DEBIAN_FRONTEND=noninteractive to workaround tzdata prompt on installation
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Upgrade base image
|
|
RUN apt-get update \
|
|
&& apt-get upgrade --no-install-recommends -y
|
|
|
|
# Install necessary dependencies
|
|
RUN apt-get install --no-install-recommends -y \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Add user and setup directories for monero-lws
|
|
RUN useradd -ms /bin/bash monero-lws \
|
|
&& mkdir -p /home/monero-lws/.bitmonero/light_wallet_server \
|
|
&& chown -R monero-lws:monero-lws /home/monero-lws/.bitmonero
|
|
USER monero-lws
|
|
|
|
# Switch to home directory and install newly built monero-lws binary
|
|
WORKDIR /home/monero-lws
|
|
COPY --chown=monero-lws:monero-lws --from=build /monero-lws/build/src/* /usr/local/bin/
|
|
|
|
# Expose REST server port
|
|
EXPOSE 8443
|
|
|
|
ENTRYPOINT ["monero-lws-daemon", "--db-path=/home/monero-lws/.bitmonero/light_wallet_server"]
|
|
CMD ["--daemon=tcp://monerod:18082", "--sub=tcp://monerod:18083", "--log-level=4"]
|