diff --git a/Dockerfile b/Dockerfile index 2aab878cdc13..32cd6a520809 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,26 +3,26 @@ # There are four main stages: # * downloader: Downloads specific binaries needed for c-lightning for each architecture. # * builder: Cross-compiles for each architecture. -# * builder-python: Builds Python dependencies for cln-rest with QEMU. +# * builder-python: Builds Python dependencies for clnrest & wss-proxy with QEMU. # * final: Creates the runtime image. ARG BASE_DISTRO="debian:bullseye-slim" -FROM --platform=$BUILDPLATFORM ${BASE_DISTRO} as base-downloader +FROM --platform=$BUILDPLATFORM ${BASE_DISTRO} AS base-downloader RUN set -ex \ && apt-get update \ && apt-get install -qq --no-install-recommends ca-certificates dirmngr wget qemu-user-static binfmt-support -FROM base-downloader as base-downloader-linux-amd64 +FROM base-downloader AS base-downloader-linux-amd64 ENV TARBALL_ARCH_FINAL=x86_64-linux-gnu -FROM base-downloader as base-downloader-linux-arm64 +FROM base-downloader AS base-downloader-linux-arm64 ENV TARBALL_ARCH_FINAL=aarch64-linux-gnu -FROM base-downloader as base-downloader-linux-arm +FROM base-downloader AS base-downloader-linux-arm ENV TARBALL_ARCH_FINAL=arm-linux-gnueabihf -FROM base-downloader-${TARGETOS}-${TARGETARCH} as downloader +FROM base-downloader-${TARGETOS}-${TARGETARCH} AS downloader RUN set -ex \ && apt-get update \ @@ -54,7 +54,7 @@ RUN mkdir /opt/litecoin && cd /opt/litecoin \ && tar -xzvf litecoin.tar.gz litecoin-$LITECOIN_VERSION/bin/litecoin-cli --strip-components=1 --exclude=*-qt \ && rm litecoin.tar.gz -FROM --platform=linux/amd64 ${BASE_DISTRO} as base-builder +FROM --platform=linux/amd64 ${BASE_DISTRO} AS base-builder RUN apt-get update -qq && \ apt-get install -qq -y --no-install-recommends \ autoconf \ @@ -90,6 +90,8 @@ ENV PYTHON_VERSION=3 RUN curl -sSL https://install.python-poetry.org | python3 - RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 RUN pip3 install --upgrade pip setuptools wheel +ENV PATH="/root/.local/bin:$PATH" +RUN poetry --version RUN wget -q https://zlib.net/fossils/zlib-1.2.13.tar.gz -O zlib.tar.gz && \ wget -q https://www.sqlite.org/2019/sqlite-src-3290000.zip -O sqlite.zip @@ -101,13 +103,13 @@ RUN git clone --recursive /tmp/lightning . && \ # Do not build python plugins (clnrest & wss-proxy) here, python doesn't support cross compilation. RUN sed -i '/^clnrest\|^wss-proxy/d' pyproject.toml && \ - /root/.local/bin/poetry export -o requirements.txt --without-hashes + poetry export -o requirements.txt --without-hashes RUN pip3 install -r requirements.txt && pip3 cache purge WORKDIR / -FROM base-builder as base-builder-linux-amd64 +FROM base-builder AS base-builder-linux-amd64 -FROM base-builder as base-builder-linux-arm64 +FROM base-builder AS base-builder-linux-arm64 ENV target_host=aarch64-linux-gnu \ target_host_rust=aarch64-unknown-linux-gnu \ target_host_qemu=qemu-aarch64-static @@ -133,7 +135,7 @@ ENV \ ZLIB_CONFIG="--prefix=${QEMU_LD_PREFIX}" \ SQLITE_CONFIG="--host=${target_host} --prefix=$QEMU_LD_PREFIX" -FROM base-builder as base-builder-linux-arm +FROM base-builder AS base-builder-linux-arm ENV target_host=arm-linux-gnueabihf \ target_host_rust=armv7-unknown-linux-gnueabihf \ @@ -160,7 +162,7 @@ ENV \ ZLIB_CONFIG="--prefix=${QEMU_LD_PREFIX}" \ SQLITE_CONFIG="--host=${target_host} --prefix=$QEMU_LD_PREFIX" -FROM base-builder-${TARGETOS}-${TARGETARCH} as builder +FROM base-builder-${TARGETOS}-${TARGETARCH} AS builder ENV LIGHTNINGD_VERSION=master @@ -179,7 +181,7 @@ RUN unzip sqlite.zip \ && make install && cd .. && rm sqlite.zip && rm -rf sqlite-* ENV RUST_PROFILE=release -ENV PATH=$PATH:/root/.cargo/bin/ +ENV PATH="/root/.cargo/bin:/root/.local/bin:$PATH" RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ${RUSTUP_INSTALL_OPTS} RUN rustup toolchain install stable --component rustfmt --allow-downgrade @@ -196,53 +198,45 @@ RUN ( ! [ "${target_host}" = "arm-linux-gnueabihf" ] ) || \ # Ensure that the desired grpcio-tools & protobuf versions are installed # https://github.com/ElementsProject/lightning/pull/7376#issuecomment-2161102381 -RUN /root/.local/bin/poetry lock --no-update && \ - /root/.local/bin/poetry install +RUN poetry lock --no-update && \ + poetry install RUN ./configure --prefix=/tmp/lightning_install --enable-static && \ make && \ - /root/.local/bin/poetry run make install + poetry run make install # We need to build python plugins on the target's arch because python doesn't support cross build -FROM ${BASE_DISTRO} as builder-python +FROM ${BASE_DISTRO} AS builder-python RUN apt-get update -qq && \ apt-get install -qq -y --no-install-recommends \ - git \ curl \ - libtool \ - pkg-config \ - autoconf \ - automake \ - build-essential \ - libffi-dev \ - libssl-dev \ - python3.9 \ - python3-dev \ python3-pip && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -RUN curl -sSL https://install.python-poetry.org | python3 - +# Copy poetry from builder stage +COPY --from=builder /root/.local /root/.local RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 - ENV PYTHON_VERSION=3 +ENV PATH="/root/.local/bin:$PATH" +RUN poetry --version WORKDIR /opt/lightningd COPY plugins/clnrest/pyproject.toml plugins/clnrest/pyproject.toml COPY plugins/wss-proxy/pyproject.toml plugins/wss-proxy/pyproject.toml RUN cd plugins/clnrest && \ - /root/.local/bin/poetry export -o requirements.txt --without-hashes && \ + poetry export -o requirements.txt --without-hashes && \ pip3 install -r requirements.txt && \ cd /opt/lightningd RUN cd plugins/wss-proxy && \ - /root/.local/bin/poetry export -o requirements.txt --without-hashes && \ + poetry export -o requirements.txt --without-hashes && \ pip3 install -r requirements.txt && \ cd /opt/lightningd && \ pip3 cache purge -FROM ${BASE_DISTRO} as final +FROM ${BASE_DISTRO} AS final RUN apt-get update && \ apt-get install -y --no-install-recommends \