From c0a1a64d0390f980f8cca9d3b6c3fba1d1c96089 Mon Sep 17 00:00:00 2001 From: thespad Date: Fri, 24 May 2024 18:20:24 +0100 Subject: [PATCH] Use jq over file for more resilient tarball discovery --- Dockerfile | 11 +++++++++-- Dockerfile.aarch64 | 23 +++++++++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index f4e97cd..4dd754e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,16 +12,23 @@ RUN \ apk add --no-cache \ bash \ curl \ - file \ git \ + jq \ tzdata \ xz # grab base tarball RUN \ git clone --depth=1 https://git.launchpad.net/cloud-images/+oci/ubuntu-base -b ${TAG} /build && \ + cd /build/oci && \ + DIGEST=$(jq -r '.manifests[0].digest[7:]' < index.json) && \ cd /build/oci/blobs/sha256 && \ - for i in ./*; do if $(file -b $i | grep -q 'gzip'); then TARBALL=$i;fi; done && \ + if jq -e '.layers // empty' < "${DIGEST}" >/dev/null 2>&1; then \ + TARBALL=$(jq -r '.layers[0].digest[7:]' < ${DIGEST}); \ + else \ + MULTIDIGEST=$(jq -r ".manifests[] | select(.platform.architecture == \"${ARCH}\") | .digest[7:]" < ${DIGEST}) && \ + TARBALL=$(jq -r '.layers[0].digest[7:]' < ${MULTIDIGEST}); \ + fi && \ mkdir /root-out && \ tar xf \ ${TARBALL} -C \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 1d742a4..7e369ba 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -9,19 +9,26 @@ ENV TAG=dist-noble-arm64v8-20240429-4129f303 # install packages RUN \ -apk add --no-cache \ -bash \ -curl \ -file \ -git \ -tzdata \ -xz + apk add --no-cache \ + bash \ + curl \ + git \ + jq \ + tzdata \ + xz # grab base tarball RUN \ git clone --depth=1 https://git.launchpad.net/cloud-images/+oci/ubuntu-base -b ${TAG} /build && \ + cd /build/oci && \ + DIGEST=$(jq -r '.manifests[0].digest[7:]' < index.json) && \ cd /build/oci/blobs/sha256 && \ - for i in ./*; do if $(file -b $i | grep -q 'gzip'); then TARBALL=$i;fi; done && \ + if jq -e '.layers // empty' < "${DIGEST}" >/dev/null 2>&1; then \ + TARBALL=$(jq -r '.layers[0].digest[7:]' < ${DIGEST}); \ + else \ + MULTIDIGEST=$(jq -r ".manifests[] | select(.platform.architecture == \"${ARCH}\") | .digest[7:]" < ${DIGEST}) && \ + TARBALL=$(jq -r '.layers[0].digest[7:]' < ${MULTIDIGEST}); \ + fi && \ mkdir /root-out && \ tar xf \ ${TARBALL} -C \