ceph-mirror/Dockerfile.build
Sun Yuechi e25810d879 Dockerfile.build: install sccache from distro packages when available
Prefer the distro-packaged sccache (installed via dnf) over downloading a
release tarball with curl. Fall back to the curl download when the package
is absent or on non-dnf distros, so existing behavior is unchanged.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-15 11:53:53 +08:00

48 lines
1.6 KiB
Docker

ARG DISTRO
FROM scratch as bootstrap
ARG CEPH_CTR_SRC=/usr/local/src/ceph
COPY \
src/script/lib-build.sh \
src/script/run-make.sh \
${CEPH_CTR_SRC}/src/script/
COPY debian ${CEPH_CTR_SRC}/debian
COPY \
ceph.spec.in \
do_cmake.sh \
install-deps.sh \
run-make-check.sh \
src/script/buildcontainer-setup.sh \
${CEPH_CTR_SRC}/
FROM $DISTRO
ARG DISTRO
ARG CEPH_CTR_SRC=/usr/local/src/ceph
ARG CLEAN_DNF=yes
ARG CEPH_BASE_BRANCH=main
ARG SCCACHE_VERSION=v0.15.0
ARG SCCACHE_REPO=https://github.com/mozilla/sccache
ARG WITH_CRIMSON=true
ARG FOR_MAKE_CHECK=1
COPY --from=bootstrap ${CEPH_CTR_SRC} ${CEPH_CTR_SRC}
# Note that we do not use ENV for the following. This is because we do not
# want them permamently stored in the container's layer.
RUN DISTRO=$DISTRO \
CEPH_BASE_BRANCH=$CEPH_BASE_BRANCH \
CLEAN_DNF=$CLEAN_DNF \
CEPH_CTR_SRC=${CEPH_CTR_SRC} \
WITH_CRIMSON=${WITH_CRIMSON} \
FOR_MAKE_CHECK=${FOR_MAKE_CHECK} \
bash -x ${CEPH_CTR_SRC}/buildcontainer-setup.sh
RUN \
if rpm --quiet --query sccache 2>/dev/null || { command -v dnf >/dev/null 2>&1 && dnf install -y sccache 2>/dev/null; }; then \
echo "sccache provided by distro packages"; \
elif [ $(uname -m) != ppc64le ]; then \
SCCACHE_ARCH="$(uname -m)"; \
if [ "$SCCACHE_ARCH" = riscv64 ]; then SCCACHE_ARCH=riscv64gc; fi; \
SCCACHE_URL="${SCCACHE_REPO}/releases/download/${SCCACHE_VERSION}/sccache-${SCCACHE_VERSION}-${SCCACHE_ARCH}-unknown-linux-musl.tar.gz"; \
echo "${SCCACHE_URL}"; \
curl -sS -L $SCCACHE_URL | tar --no-anchored --strip-components=1 -C /usr/local/bin/ -xzf - sccache; \
fi