From e8b6a4d89b8a3405aaa78653fd581aa562523b91 Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Sat, 2 Jan 2021 19:49:39 +0100 Subject: [PATCH] Add support for multi-arch containers Create the kas and kas-isar containers also for arm64. This allows using them for arm-native builds, e.g. in AWS instances. We need to drop a couple of packages from arm64 images which do not exist on that arch. If the kas image is usable for Yocto builds is untested, though. The Isar image works. Signed-off-by: Jan Kiszka --- .github/workflows/master.yml | 6 ++++++ .github/workflows/next.yml | 6 ++++++ .github/workflows/release.yml | 6 ++++++ Dockerfile | 8 ++++++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 504a3a7..67d3b8e 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -22,6 +22,10 @@ jobs: else echo "PUSH_MASTER=true" >> $GITHUB_ENV fi + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 - name: Login to ghcr.io uses: docker/login-action@v1 with: @@ -31,11 +35,13 @@ jobs: - name: Build kas image uses: docker/build-push-action@v2 with: + platforms: linux/amd64,linux/arm64 push: ${{ env.PUSH_MASTER }} tags: ghcr.io/siemens/kas/kas - name: Build kas-isar image uses: docker/build-push-action@v2 with: file: Dockerfile.isar + platforms: linux/amd64,linux/arm64 push: ${{ env.PUSH_MASTER }} tags: ghcr.io/siemens/kas/kas-isar diff --git a/.github/workflows/next.yml b/.github/workflows/next.yml index 2ce52d7..36539c5 100644 --- a/.github/workflows/next.yml +++ b/.github/workflows/next.yml @@ -48,6 +48,10 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 - name: Login to ghcr.io uses: docker/login-action@v1 with: @@ -57,12 +61,14 @@ jobs: - name: Build kas image uses: docker/build-push-action@v2 with: + platforms: linux/amd64,linux/arm64 push: true tags: ghcr.io/siemens/kas/kas:next - name: Build kas-isar image uses: docker/build-push-action@v2 with: file: Dockerfile.isar + platforms: linux/amd64,linux/arm64 build-args: KAS_TAG=next push: true tags: ghcr.io/siemens/kas/kas-isar:next diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e556376..b82ce4c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,6 +14,10 @@ jobs: uses: actions/checkout@v2 - name: Get release run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 - name: Login to ghcr.io uses: docker/login-action@v1 with: @@ -23,6 +27,7 @@ jobs: - name: Build kas image uses: docker/build-push-action@v2 with: + platforms: linux/amd64,linux/arm64 push: true tags: | ghcr.io/siemens/kas/kas @@ -32,6 +37,7 @@ jobs: uses: docker/build-push-action@v2 with: file: Dockerfile.isar + platforms: linux/amd64,linux/arm64 push: true tags: | ghcr.io/siemens/kas/kas-isar diff --git a/Dockerfile b/Dockerfile index 6d1236d..b13bf46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM debian:buster-slim +ARG TARGETPLATFORM ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ @@ -10,14 +11,17 @@ RUN apt-get update && \ ENV LANG=en_US.utf8 RUN apt-get install --no-install-recommends -y \ - gawk wget git-core diffstat unzip texinfo gcc-multilib \ + gawk wget git-core diffstat unzip texinfo \ build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \ pylint3 xterm \ python3-setuptools python3-wheel python3-yaml \ gosu lsb-release file vim less procps tree tar bzip2 zstd bc tmux libncurses-dev \ - dosfstools mtools parted syslinux \ + dosfstools mtools parted \ git-lfs mercurial iproute2 ssh-client curl rsync gnupg awscli && \ + if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \ + apt-get install --no-install-recommends -y gcc-multilib syslinux; \ + fi && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*