From 8632a6efcd7413aad488bbc454cc5290809d8104 Mon Sep 17 00:00:00 2001 From: Marcus Noble Date: Fri, 11 Sep 2020 22:17:27 +0100 Subject: [PATCH] Multi-arch builds --- Dockerfile | 25 ++++++++++++++++++------- Makefile | 16 ++++++++++++++-- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1fd134d..7f4031f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,29 @@ -FROM ubuntu:19.10 +FROM --platform=${BUILDPLATFORM:-linux/amd64} ubuntu:19.10 as builder -RUN apt-get update && apt-get install -y curl -RUN curl -o megacmd-xUbuntu_19.10_amd64.deb https://mega.nz/linux/MEGAsync/xUbuntu_19.10/amd64/megacmd-xUbuntu_19.10_amd64.deb -RUN apt install -y ./megacmd-xUbuntu_19.10_amd64.deb +ARG BUILDPLATFORM +ARG TARGETPLATFORM +ARG TARGETOS +ARG TARGETARCH + +RUN apt-get update && apt-get install -y curl ca-certificates +RUN export URL="https://mega.nz/linux/MEGAsync/Raspbian_10.0/armhf/megacmd-Raspbian_10.0_armhf.deb" && \ + if [ "${TARGETARCH}" = "amd64" ] ; then export URL="https://mega.nz/linux/MEGAsync/xUbuntu_19.10/amd64/megacmd-xUbuntu_19.10_amd64.deb" ; fi && \ + curl -k -o /megacmd.deb $URL +RUN adduser --disabled-password --gecos '' mega && adduser mega sudo && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers ADD entrypoint.sh / RUN chmod +x /entrypoint.sh -RUN adduser --disabled-password --gecos '' mega && adduser mega sudo && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers -USER mega +FROM --platform=${TARGETPLATFORM:-linux/amd64} ubuntu:19.10 +USER mega WORKDIR /home/mega +COPY --from=builder /etc/sudoers /etc/sudoers +COPY --from=builder /entrypoint.sh /entrypoint.sh +COPY --from=builder /megacmd.deb /megacmd.deb +RUN apt install -y ./megacmd.deb + ENV PASSWORD= ENV EMAIL= - CMD /entrypoint.sh diff --git a/Makefile b/Makefile index 7010890..0366280 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ .DEFAULT_GOAL := default IMAGE ?= docker.cluster.fun/averagemarcus/megasync:latest +PLATFORMS ?= linux/amd64,linux/arm/v7 + +export DOCKER_CLI_EXPERIMENTAL=enabled .PHONY: test # Run all tests, linting and format checks test: lint check-format run-tests @@ -31,11 +34,20 @@ build: lint check-format fetch-deps .PHONY: docker-build # Build the docker image docker-build: - @docker build -t $(IMAGE) . + @docker buildx create --use --name=crossplat --node=crossplat && \ + docker buildx build \ + --output "type=docker,push=false" \ + --tag $(IMAGE) \ + . .PHONY: docker-publish # Push the docker image to the remote registry docker-publish: - @docker push $(IMAGE) + @docker buildx create --use --name=crossplat --node=crossplat && \ + docker buildx build \ + --platform $(PLATFORMS) \ + --output "type=image,push=true" \ + --tag $(IMAGE) \ + . .PHONY: run # Run the application run: