Refactor, add arch/noarch symlinks, simplify and rebase build stages to busybox

This commit is contained in:
2025-03-12 02:55:04 +01:00
parent a1dcabe094
commit b3ac1158ba
2 changed files with 54 additions and 49 deletions

View File

@@ -1,69 +1,74 @@
ARG S6_OVERLAY_VERSION="3.2.0.2"
ARG S6_OVERLAY_RELEASE="https://github.com/just-containers/s6-overlay/releases/download/"
ARG S6_OVERLAY_RELEASE="https://github.com/just-containers/s6-overlay/releases/download"
ARG S6_OVERLAY_PAK_EXT=".tar.xz"
# First stage - Download s6-overlay noarch base and unpack it
FROM scratch AS downloader-s6-base
ARG S6_OVERLAY_VERSION
ARG S6_OVERLAY_RELEASE
ARG S6_OVERLAY_PAK_EXT
ADD "${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-noarch${S6_OVERLAY_PAK_EXT}" /s6overlay-base.tar.xz
# Second stage - Download s6-overlay platform-dependent binaries and unpack
FROM alpine:3.21 AS downloader-s6-bin
# Downloader stage: download s6-overlay base, binary, symlinks and checksums
FROM busybox AS downloader
ARG TARGETPLATFORM
ARG S6_OVERLAY_VERSION
ARG S6_OVERLAY_RELEASE
ARG S6_OVERLAY_PAK_EXT
ARG S6_OVERLAY_RELEASE_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-${TARGETPLATFORM}${S6_OVERLAY_PAK_EXT}"
ARG S6_OVERLAY_HASH_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-${TARGETPLATFORM}${S6_OVERLAY_PAK_EXT}.sha256"
# Set environment variables
ENV BASE_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-noarch${S6_OVERLAY_PAK_EXT}"
ENV BASE_HASH_URL="${BASE_URL}.sha256"
ENV BIN_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-${TARGETPLATFORM}${S6_OVERLAY_PAK_EXT}"
ENV BIN_HASH_URL="${BIN_URL}.sha256"
ENV SYMLINKS_ARCH_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch${S6_OVERLAY_PAK_EXT}"
ENV SYMLINKS_ARCH_HASH_URL="${SYMLINKS_ARCH_URL}.sha256"
ENV SYMLINKS_NOARCH_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch${S6_OVERLAY_PAK_EXT}"
ENV SYMLINKS_NOARCH_HASH_URL="${SYMLINKS_NOARCH_URL}.sha256"
RUN set -eux \
&& apk add --no-cache wget \
&& wget -O /s6overlay-bin.tar.xz "$(echo ${S6_OVERLAY_RELEASE_URL} | sed 's/linux\///g' | sed 's/amd64/x86_64/g' | sed 's/arm64/aarch64/g' | sed 's/arm\/v7/armhf/g')"
# Replace platform
&& BIN_URL_FIXED=$(echo "${BIN_URL}" | sed -e 's/linux\///g' -e 's/amd64/x86_64/g' -e 's/arm64/aarch64/g' -e 's|arm/v7|armhf|g') \
&& BIN_HASH_URL_FIXED=$(echo "${BIN_HASH_URL}" | sed -e 's/linux\///g' -e 's/amd64/x86_64/g' -e 's/arm64/aarch64/g' -e 's|arm/v7|armhf|g') \
# Download s6-overlay binaries
&& wget -O /s6overlay-bin.tar.xz "${BIN_URL_FIXED}" \
&& wget -O /s6overlay-bin.tar.xz.sha256 "${BIN_HASH_URL_FIXED}" \
# Download s6-overlay base and its hash
&& wget -O /s6overlay-base.tar.xz "${BASE_URL}" \
&& wget -O /s6overlay-base.tar.xz.sha256 "${BASE_HASH_URL}" \
# Download s6-overlay symlinks \
&& wget -O /s6overlay-arch-symlinks.tar.xz "${SYMLINKS_ARCH_URL}" \
&& wget -O /s6overlay-arch-symlinks.tar.xz.sha256 "${SYMLINKS_ARCH_HASH_URL}" \
&& wget -O /s6overlay-noarch-symlinks.tar.xz "${SYMLINKS_NOARCH_URL}" \
&& wget -O /s6overlay-noarch-symlinks.tar.xz.sha256 "${SYMLINKS_NOARCH_HASH_URL}" \
# Build SHA256SUMS file
&& echo "$(cut -d' ' -f1 /s6overlay-base.tar.xz.sha256) /s6overlay-base.tar.xz" > /SHA256SUMS \
&& echo "$(cut -d' ' -f1 /s6overlay-bin.tar.xz.sha256) /s6overlay-bin.tar.xz" >> /SHA256SUMS \
&& echo "$(cut -d' ' -f1 /s6overlay-arch-symlinks.tar.xz.sha256) /s6overlay-arch-symlinks.tar.xz" >> /SHA256SUMS \
&& echo "$(cut -d' ' -f1 /s6overlay-noarch-symlinks.tar.xz.sha256) /s6overlay-noarch-symlinks.tar.xz" >> /SHA256SUMS \
# Verify integrity of downloaded files
&& sha256sum -c /SHA256SUMS
# Builder stage
FROM busybox AS builder
# Third stage - Download s6-overlay platform-dependent hashes
FROM alpine:3.21 AS downloader-s6-sha256-sums
ARG TARGETPLATFORM
ARG S6_OVERLAY_VERSION
ARG S6_OVERLAY_RELEASE
ARG S6_OVERLAY_PAK_EXT
ARG S6_OVERLAY_BASE_HASH_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-noarch${S6_OVERLAY_PAK_EXT}.sha256"
ARG S6_OVERLAY_BIN_HASH_URL="${S6_OVERLAY_RELEASE}/v${S6_OVERLAY_VERSION}/s6-overlay-${TARGETPLATFORM}${S6_OVERLAY_PAK_EXT}.sha256"
COPY --from=downloader ["/s6overlay-base.tar.xz", "/s6overlay-bin.tar.xz", "/s6overlay-arch-symlinks.tar.xz", "/s6overlay-noarch-symlinks.tar.xz", "/tmp/s6/"]
RUN set -eux \
&& apk add --no-cache wget \
&& wget -O /s6overlay-base.tar.xz.sha256 "${S6_OVERLAY_BASE_HASH_URL}" \
&& wget -O /s6overlay-bin.tar.xz.sha256 "$(echo "${S6_OVERLAY_BIN_HASH_URL}" | sed 's/linux\///g' | sed 's/amd64/x86_64/g' | sed 's/arm64/aarch64/g' | sed 's/arm\/v7/armhf/g')" \
&& echo "$(cat /s6overlay-base.tar.xz.sha256 | cut -d' ' -f1) /s6overlay-base.tar.xz" > /SHA256SUMS \
&& echo "$(cat /s6overlay-bin.tar.xz.sha256 | cut -d' ' -f1) /s6overlay-bin.tar.xz" >> /SHA256SUMS \
&& rm /s6overlay-base.tar.xz.sha256 \
&& rm /s6overlay-bin.tar.xz.sha256
&& mkdir -p /build \
&& tar -Jxpf /tmp/s6/s6overlay-base.tar.xz -C /build \
&& tar -Jxpf /tmp/s6/s6overlay-bin.tar.xz -C /build \
&& tar -Jxpf /tmp/s6/s6overlay-arch-symlinks.tar.xz -C /build \
&& tar -Jxpf /tmp/s6/s6overlay-noarch-symlinks.tar.xz -C /build
# Fourth stage - Build rootfs from s6 parts
FROM alpine:3.21 AS rootfs-builder
# Rootfs
FROM scratch AS rootfs
COPY --from=downloader-s6-sha256-sums ["/SHA256SUMS", "/"]
COPY --from=downloader-s6-base ["/s6overlay-base.tar.xz", "/s6overlay-base.tar.xz"]
COPY --from=downloader-s6-bin ["/s6overlay-bin.tar.xz", "/s6overlay-bin.tar.xz"]
WORKDIR "/rootfs-build/"
RUN set -eux \
&& sha256sum -c /SHA256SUMS \
&& apk add --no-cache tar xz \
&& tar -Jxpf /s6overlay-base.tar.xz -C /rootfs-build \
&& tar -Jxpf /s6overlay-bin.tar.xz -C /rootfs-build
COPY --from=builder ["/build/", "/"]
# Final stage
FROM scratch AS s6-rootfs
# Final image: minimal rootfs
FROM scratch
LABEL maintainer="Aleksandar Puharic <aleksandar@puharic.com>"
COPY --from=rootfs-builder ["/rootfs-build/", "/"]
COPY --from=rootfs ["/", "/"]

View File

@@ -1,5 +1,5 @@
# First stage - Download s6-overlay and unpack it
FROM alpine:3.21 AS downloader
FROM busybox AS downloader
ARG TARGETPLATFORM
@@ -7,15 +7,15 @@ ARG TARGETPLATFORM
ARG S6_OVERLAY_VERSION="2.2.0.3"
ARG S6_OVERLAY_RELEASE="https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${TARGETPLATFORM}.tar.gz"
WORKDIR "/s6-overlay/"
RUN apk add --no-cache wget tar gzip \
RUN set -eux \
&& mkdir -p /s6-overlay \
&& wget -O /tmp/s6overlay.tar.gz $(echo ${S6_OVERLAY_RELEASE} | sed 's/linux\///g' | sed 's/arm64/aarch64/g' | sed 's/arm\/v7/armhf/g') \
&& tar xzf /tmp/s6overlay.tar.gz -C /s6-overlay
# Final stage
FROM scratch AS s6-rootfs
FROM scratch
LABEL maintainer="Aleksandar Puharic <aleksandar@puharic.com>"