From b3ac1158ba62dae92be4a92ba64914cf657b22b8 Mon Sep 17 00:00:00 2001 From: xZero707 Date: Wed, 12 Mar 2025 02:55:04 +0100 Subject: [PATCH] Refactor, add arch/noarch symlinks, simplify and rebase build stages to busybox --- Dockerfile | 93 +++++++++++++++++++++++++---------------------- Dockerfile.legacy | 10 ++--- 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/Dockerfile b/Dockerfile index c23b43f..8ed882d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 " -COPY --from=rootfs-builder ["/rootfs-build/", "/"] +COPY --from=rootfs ["/", "/"] diff --git a/Dockerfile.legacy b/Dockerfile.legacy index 5472c19..e240af3 100644 --- a/Dockerfile.legacy +++ b/Dockerfile.legacy @@ -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 "