diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu index dce08a2..cdad233 100644 --- a/docker/Dockerfile.ubuntu +++ b/docker/Dockerfile.ubuntu @@ -5,13 +5,21 @@ ARG BUILDPLATFORM ENV DEBIAN_FRONTEND=noninteractive -# 安装构建依赖 +# 安装构建依赖(包括 depends 系统所需工具) RUN apt-get update && apt-get install -y \ git \ wget \ + curl \ build-essential \ cmake \ pkg-config \ + autoconf \ + automake \ + libtool \ + bzip2 \ + xz-utils \ + python3 \ + gperf \ libboost-all-dev \ libssl-dev \ libzmq3-dev \ @@ -51,43 +59,45 @@ COPY ./init.sh ./init.sh RUN chmod +x ./init.sh && ./init.sh -# 构建 Monero (mond) - 使用动态链接 +# 使用 depends 系统构建所有静态依赖 +RUN if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \ + MAKE_JOBS=2; \ + else \ + MAKE_JOBS=$(nproc); \ + fi && \ + if [ "$TARGETARCH" = "arm64" ]; then \ + DEPENDS_HOST="aarch64-linux-gnu"; \ + else \ + DEPENDS_HOST="x86_64-linux-gnu"; \ + fi && \ + echo "Building dependencies for $DEPENDS_HOST with $MAKE_JOBS parallel jobs" && \ + cd contrib/depends && \ + make HOST=$DEPENDS_HOST -j$MAKE_JOBS + +# 构建 Monero (mond) - 使用静态链接和 depends RUN if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \ MAKE_JOBS="-j2"; \ else \ MAKE_JOBS="-j$(nproc)"; \ fi && \ - echo "Building with parallel jobs: $MAKE_JOBS" && \ + if [ "$TARGETARCH" = "arm64" ]; then \ + DEPENDS_HOST="aarch64-linux-gnu"; \ + else \ + DEPENDS_HOST="x86_64-linux-gnu"; \ + fi && \ + echo "Building mond for $DEPENDS_HOST with parallel jobs: $MAKE_JOBS" && \ mkdir -p build/release && cd build/release && \ - cmake ../.. -DCMAKE_BUILD_TYPE=Release -DBUILD_GUI_DEPS=OFF -DARCH=default && \ + cmake ../.. \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_GUI_DEPS=OFF \ + -DARCH=default \ + -DSTATIC=ON \ + -DCMAKE_TOOLCHAIN_FILE=/monero/contrib/depends/$DEPENDS_HOST/share/toolchain.cmake && \ make $MAKE_JOBS daemon -# 最终阶段 - 使用 Ubuntu 基础镜像以支持动态链接 -FROM ubuntu:22.04 +# 最终阶段 - 只复制静态链接的二进制文件 +FROM scratch ARG TARGETARCH -# 安装运行时依赖 -RUN apt-get update && apt-get install -y \ - libboost-chrono1.74.0 \ - libboost-date-time1.74.0 \ - libboost-filesystem1.74.0 \ - libboost-locale1.74.0 \ - libboost-program-options1.74.0 \ - libboost-regex1.74.0 \ - libboost-serialization1.74.0 \ - libboost-system1.74.0 \ - libboost-thread1.74.0 \ - libssl3 \ - libzmq5 \ - libunbound8 \ - libsodium23 \ - libunwind8 \ - libreadline8 \ - libhidapi-libusb0 \ - libprotobuf23 \ - libudev1 \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - COPY --from=build /monero/build/release/bin/mond /linux_${TARGETARCH}/mond