# ============================================================================ # CKPool-solo build stage # ============================================================================ # Builds a patched ckpool binary from upstream source at a pinned commit. # Binaries land in /build/ckpool/src/ — we copy `ckpool` and `ckpmsg` into # the runtime image. We do NOT `make install` because upstream's # install-exec-hook calls setcap which fails inside a docker build. # # Portability: # - No yasm installed -> ckpool falls back to its portable C SHA256 # implementation. This trades some per-core hashrate validation # throughput for a binary that runs on any x86_64/aarch64 CPU # regardless of the build machine's feature flags. # - We override CFLAGS to drop the upstream default `-march=native` # for the same reason. # ---------------------------------------------------------------------------- FROM debian:bookworm-slim AS ckpool-build ARG CKPOOL_REPO=https://bitbucket.org/ckolivas/ckpool.git ARG CKPOOL_COMMIT=cfb0f83b70d7b382b85d2bd0710cf4cb2dda4007 RUN apt-get update && apt-get install --no-install-recommends -y \ build-essential \ autoconf \ automake \ libtool \ pkg-config \ libzmq3-dev \ ca-certificates \ git \ && rm -rf /var/lib/apt/lists/* WORKDIR /build RUN git clone "${CKPOOL_REPO}" ckpool \ && cd ckpool \ && git checkout "${CKPOOL_COMMIT}" # Apply Kamado patches in alphabetical order, if any exist COPY patches/ /tmp/kamado-patches/ RUN set -eux; \ cd /build/ckpool; \ for p in /tmp/kamado-patches/*.patch; do \ [ -f "$p" ] || continue; \ echo "Applying $(basename "$p")"; \ git apply --verbose "$p"; \ done # Configure and build. Explicit CFLAGS override upstream's default # `-O2 -Wall -march=native`. We keep -O2 -Wall but drop -march=native. RUN cd /build/ckpool \ && ./autogen.sh \ && CFLAGS="-O2 -Wall -pipe" ./configure --prefix=/usr/local \ && make -j"$(nproc)" # Sanity check RUN test -x /build/ckpool/src/ckpool \ && test -x /build/ckpool/src/ckpmsg \ && file /build/ckpool/src/ckpool || true # ============================================================================ # Runtime stage (minimal) # ============================================================================ FROM debian:bookworm-slim AS ckpool-runtime RUN apt-get update && apt-get install --no-install-recommends -y \ libzmq5 \ ca-certificates \ tini \ && rm -rf /var/lib/apt/lists/* COPY --from=ckpool-build /build/ckpool/src/ckpool /usr/local/bin/ckpool COPY --from=ckpool-build /build/ckpool/src/ckpmsg /usr/local/bin/ckpmsg COPY config/ckpool.conf.template /etc/ckpool/ckpool.conf.template COPY entrypoint.sh /usr/local/bin/ckpool-entrypoint.sh RUN chmod +x /usr/local/bin/ckpool-entrypoint.sh RUN mkdir -p /run/ckpool /var/lib/ckpool /var/log/ckpool EXPOSE 3333 ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/ckpool-entrypoint.sh"]