From 4600ad0cc29e063a6702cd80c166bd6922cc2501 Mon Sep 17 00:00:00 2001 From: Nuru Date: Mon, 3 Apr 2023 15:01:39 -0700 Subject: [PATCH 1/3] Install stubs for utils missing arm64 support --- os/alpine/Dockerfile.alpine | 10 ++++------ os/debian/Dockerfile.debian | 14 +++++++++++++- packages-amd64-only.txt | 9 +++++++++ packages.txt | 6 +++--- rootfs/usr/local/bin/no-arm64-support | 4 ++++ 5 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 packages-amd64-only.txt create mode 100755 rootfs/usr/local/bin/no-arm64-support diff --git a/os/alpine/Dockerfile.alpine b/os/alpine/Dockerfile.alpine index 3b8904eab..f7e445164 100644 --- a/os/alpine/Dockerfile.alpine +++ b/os/alpine/Dockerfile.alpine @@ -109,13 +109,11 @@ ENV KOPS_CLUSTER_NAME=example.foo.bar USER root # install the cloudposse alpine repository -ADD https://apk.cloudposse.com/ops@cloudposse.com.rsa.pub /etc/apk/keys/ -RUN echo "@cloudposse https://apk.cloudposse.com/3.13/vendor" >> /etc/apk/repositories +RUN apk add --no-cache bash curl && \ + curl -1sLf \ + 'https://dl.cloudsmith.io/public/cloudposse/packages/setup.alpine.sh' \ + | bash -# Use TLS for alpine default repos -RUN sed -i 's|http://dl-cdn.alpinelinux.org|https://alpine.global.ssl.fastly.net|g' /etc/apk/repositories && \ - echo "@testing https://alpine.global.ssl.fastly.net/alpine/edge/testing" >> /etc/apk/repositories && \ - echo "@community https://alpine.global.ssl.fastly.net/alpine/edge/community" >> /etc/apk/repositories ########################################################################################## # See Dockerfile.options for how to install `glibc` for greater compatibility, including # diff --git a/os/debian/Dockerfile.debian b/os/debian/Dockerfile.debian index 3159a3171..4d9d2b7b5 100644 --- a/os/debian/Dockerfile.debian +++ b/os/debian/Dockerfile.debian @@ -99,7 +99,7 @@ USER root # Keep dpkg quiet about running non-interactively RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections -COPY packages.txt os/debian/packages-debian.txt /etc/apt/ +COPY packages.txt packages-amd64-only.txt os/debian/packages-debian.txt /etc/apt/ ## Here is where we would copy in the repo checksum in an attempt to ensure updates bust the Docker build cache @@ -262,6 +262,18 @@ COPY os/debian/rootfs/ / ARG TARGETARCH +# For certain pagkage we like to have but are not available on arm64, +# install them on amd64, and link to a stub script on arm64. +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + apt-get update && apt-get install -y \ + $(grep -h -v '^#' /etc/apt/packages-amd64-only.txt | sed -E 's/@(cloudposse|community|testing)//g' ); \ + else \ + for pkg in $(grep -h -v '^#' /etc/apt/packages-amd64-only.txt | sed -E 's/@(cloudposse|community|testing)//g' ); do \ + ln -s /usr/local/bin/no-arm64-support /usr/local/bin/$pkg; \ + done; \ + fi + + # Move AWS CLI v1 aside and install AWS CLI v2 as default, leaving both available as alternatives. # We do this at the end because we need cache busting from above to get us the latest AWS CLI v2 diff --git a/packages-amd64-only.txt b/packages-amd64-only.txt new file mode 100644 index 000000000..c8ccb9de6 --- /dev/null +++ b/packages-amd64-only.txt @@ -0,0 +1,9 @@ +# These are packages that are only supported on amd64, +# typically because they have not been updated since 2021. +awless@cloudposse +cfssl@cloudposse +emailcli@cloudposse +goofys@cloudposse +rakkess@cloudposse +tfenv@cloudposse +tfmask@cloudposse diff --git a/packages.txt b/packages.txt index 4803635c9..a2cf17e21 100644 --- a/packages.txt +++ b/packages.txt @@ -12,7 +12,7 @@ direnv@community dumb-init emacs-nox fetch@cloudposse -emailcli@cloudposse +# no arm64 emailcli@cloudposse figlet figurine@cloudposse file @@ -20,9 +20,9 @@ fuse fzf@cloudposse gettext git -# no arm64 github-commenter@cloudposse +github-commenter@cloudposse gomplate@cloudposse -goofys@cloudposse +#no arm64 support goofys@cloudposse gosu@cloudposse groff helm@cloudposse diff --git a/rootfs/usr/local/bin/no-arm64-support b/rootfs/usr/local/bin/no-arm64-support new file mode 100755 index 000000000..a12d53ae6 --- /dev/null +++ b/rootfs/usr/local/bin/no-arm64-support @@ -0,0 +1,4 @@ +#!/bin/bash + +printf "$(tput setaf 1)%s is not supported on this platform (arm64)$(tput setaf 0)\n" "$(basename "$0")" >&2 +exit 1 From 82cb92149dcccce14b009400e9ed08c77d68d402 Mon Sep 17 00:00:00 2001 From: Nuru Date: Mon, 3 Apr 2023 17:05:15 -0700 Subject: [PATCH 2/3] Update Alpine image to use Cloudsmith package repo --- os/alpine/Dockerfile.alpine | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/os/alpine/Dockerfile.alpine b/os/alpine/Dockerfile.alpine index f7e445164..892b64587 100644 --- a/os/alpine/Dockerfile.alpine +++ b/os/alpine/Dockerfile.alpine @@ -112,7 +112,9 @@ USER root RUN apk add --no-cache bash curl && \ curl -1sLf \ 'https://dl.cloudsmith.io/public/cloudposse/packages/setup.alpine.sh' \ - | bash + | bash && \ + printf "@cloudposse %s\n\n" "$(grep -h -v '^[@#]' /etc/apk/repositories | grep -F "public/cloudposse/packages" | head -1)" \ + >> /etc/apk/repositories ########################################################################################## From 13e37b5c1a10d394ea51ae13953eba6215d87c76 Mon Sep 17 00:00:00 2001 From: Nuru Date: Mon, 3 Apr 2023 17:21:36 -0700 Subject: [PATCH 3/3] restore previously removed @community and @testing apk repo tags --- os/alpine/Dockerfile.alpine | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/os/alpine/Dockerfile.alpine b/os/alpine/Dockerfile.alpine index 892b64587..26e6a6d10 100644 --- a/os/alpine/Dockerfile.alpine +++ b/os/alpine/Dockerfile.alpine @@ -116,6 +116,12 @@ RUN apk add --no-cache bash curl && \ printf "@cloudposse %s\n\n" "$(grep -h -v '^[@#]' /etc/apk/repositories | grep -F "public/cloudposse/packages" | head -1)" \ >> /etc/apk/repositories +# Install the @community repo tag (community repo is already installed, but not tagged as @community) +RUN printf "@community %s\n" "$(grep -E 'alpine/v[^/]+/community' /etc/apk/repositories | head -1)" >> /etc/apk/repositories + +# Install the @testing repo tag +RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories + ########################################################################################## # See Dockerfile.options for how to install `glibc` for greater compatibility, including #