From 712ce06a5834c8fda60c2eb91099fed361cf49cb Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Fri, 21 Feb 2025 15:44:46 +0100 Subject: [PATCH 1/3] experimental multi-arch build Signed-off-by: Christian Richter --- opencloud/Makefile | 9 +++ opencloud/docker/Dockerfile.linux.multiarch | 62 +++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 opencloud/docker/Dockerfile.linux.multiarch diff --git a/opencloud/Makefile b/opencloud/Makefile index 3e40e7ade1..523ea45b35 100644 --- a/opencloud/Makefile +++ b/opencloud/Makefile @@ -35,6 +35,15 @@ dev-docker: $(MAKE) --no-print-directory release-linux-docker-$(GOARCH) docker build -f docker/Dockerfile.linux.$(GOARCH) -t opencloud-eu/opencloud:dev . +########### multiarch-docker ########### +.PHONY: dev-docker-multiarch +dev-docker-multiarch: + docker buildx rm opencloudbuilder || true + docker buildx create --platform linux/arm64,linux/amd64 --name opencloudbuilder + docker buildx use opencloudbuilder + cd .. && docker buildx build --platform linux/arm64,linux/amd64 --output type=docker --file opencloud/docker/Dockerfile.linux.multiarch --tag opencloud-eu/opencloud:dev-multiarch . + docker buildx rm opencloudbuilder + ############ debug-docker ############ .PHONY: debug-docker debug-docker: diff --git a/opencloud/docker/Dockerfile.linux.multiarch b/opencloud/docker/Dockerfile.linux.multiarch new file mode 100644 index 0000000000..4e6ba650b7 --- /dev/null +++ b/opencloud/docker/Dockerfile.linux.multiarch @@ -0,0 +1,62 @@ +FROM owncloudci/nodejs:18 AS generate +ARG TARGETARCH + +COPY ./ /opencloud/ + +WORKDIR /opencloud/opencloud +ARG TARGETARCH + +RUN make ci-node-generate + +FROM golang:alpine3.20 AS build +ARG TARGETARCH + +RUN apk add bash make git curl gcc musl-dev libc-dev binutils-gold inotify-tools vips-dev + +COPY --from=generate /opencloud /opencloud + +WORKDIR /opencloud/opencloud +RUN GOOS=linux GOARCH="${TARGETARCH}" make ci-go-generate build ENABLE_VIPS=true + +FROM alpine:3.20 +ARG TARGETARCH + +ARG VERSION="" +ARG REVISION="" + +RUN apk add --no-cache attr bash ca-certificates curl inotify-tools libc6-compat mailcap tree vips patch && \ + echo 'hosts: files dns' >| /etc/nsswitch.conf + +LABEL maintainer="openCloud GmbH " \ + org.opencontainers.image.title="OpenCloud" \ + org.opencontainers.image.vendor="OpenCloud GmbH" \ + org.opencontainers.image.authors="OpenCloud GmbH" \ + org.opencontainers.image.description="OpenCloud is a modern file-sync and share platform" \ + org.opencontainers.image.licenses="Apache-2.0" \ + org.opencontainers.image.documentation="https://github.com/opencloud-eu/opencloud" \ + org.opencontainers.image.url="https://hub.docker.com/r/opencloud-eu/opencloud" \ + org.opencontainers.image.source="https://github.com/opencloud-eu/opencloud" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.revision="${REVISION}" + +RUN addgroup -g 1000 -S opencloud-group && \ + adduser -S --ingroup opencloud-group --uid 1000 opencloud-user --home /var/lib/opencloud + +RUN mkdir -p /var/lib/opencloud && \ + chown -R opencloud-user:opencloud-group /var/lib/opencloud && \ + chmod -R 751 /var/lib/opencloud && \ + mkdir -p /etc/opencloud && \ + chown -R opencloud-user:opencloud-group /etc/opencloud && \ + chmod -R 751 /etc/opencloud + +VOLUME [ "/var/lib/opencloud", "/etc/opencloud" ] +WORKDIR /var/lib/opencloud + +USER 1000 + +EXPOSE 9200/tcp + +ENTRYPOINT ["/usr/bin/opencloud"] +CMD ["server"] + +COPY --from=build /opencloud/opencloud/bin/opencloud /usr/bin/opencloud From 9545fccbef376e8b4e8d7fdf3c7b05ed4429c099 Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Mon, 24 Feb 2025 09:22:33 +0100 Subject: [PATCH 2/3] remove generate stap from image Signed-off-by: Christian Richter --- opencloud/Makefile | 4 ++++ opencloud/docker/Dockerfile.linux.multiarch | 12 +----------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/opencloud/Makefile b/opencloud/Makefile index 523ea45b35..f87b35fe7f 100644 --- a/opencloud/Makefile +++ b/opencloud/Makefile @@ -38,6 +38,10 @@ dev-docker: ########### multiarch-docker ########### .PHONY: dev-docker-multiarch dev-docker-multiarch: + @echo "+-------------------------------------------------------------------------+" + @echo "| Are you sure you have run make ci-node-generate in the repository root? |" + @echo "+-------------------------------------------------------------------------+" + sleep 10 docker buildx rm opencloudbuilder || true docker buildx create --platform linux/arm64,linux/amd64 --name opencloudbuilder docker buildx use opencloudbuilder diff --git a/opencloud/docker/Dockerfile.linux.multiarch b/opencloud/docker/Dockerfile.linux.multiarch index 4e6ba650b7..213f708dbc 100644 --- a/opencloud/docker/Dockerfile.linux.multiarch +++ b/opencloud/docker/Dockerfile.linux.multiarch @@ -1,19 +1,9 @@ -FROM owncloudci/nodejs:18 AS generate -ARG TARGETARCH - -COPY ./ /opencloud/ - -WORKDIR /opencloud/opencloud -ARG TARGETARCH - -RUN make ci-node-generate - FROM golang:alpine3.20 AS build ARG TARGETARCH RUN apk add bash make git curl gcc musl-dev libc-dev binutils-gold inotify-tools vips-dev -COPY --from=generate /opencloud /opencloud +COPY ./ /opencloud/ WORKDIR /opencloud/opencloud RUN GOOS=linux GOARCH="${TARGETARCH}" make ci-go-generate build ENABLE_VIPS=true From 7c1acbcd48793e2785a47ae52f885297cb7d77cf Mon Sep 17 00:00:00 2001 From: Florian Schade Date: Mon, 24 Feb 2025 12:56:01 +0100 Subject: [PATCH 3/3] fix: propagate make build DOCKER_LDFLAGS --- .make/go.mk | 10 +++++++++- opencloud/docker/Dockerfile.linux.multiarch | 9 ++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.make/go.mk b/.make/go.mk index 04ef6acb10..c304052821 100644 --- a/.make/go.mk +++ b/.make/go.mk @@ -39,6 +39,14 @@ endif LDFLAGS += -X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn -s -w -X "$(OC_REPO)/pkg/version.String=$(STRING)" -X "$(OC_REPO)/pkg/version.Tag=$(VERSION)" -X "$(OC_REPO)/pkg/version.Date=$(DATE)" DEBUG_LDFLAGS += -X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn -X "$(OC_REPO)/pkg/version.String=$(STRING)" -X "$(OC_REPO)/pkg/version.Tag=$(VERSION)" -X "$(OC_REPO)/pkg/version.Date=$(DATE)" +DOCKER_LDFLAGS += -X "$(OC_REPO)/pkg/config/defaults.BaseDataPathType=path" -X "$(OC_REPO)/pkg/config/defaults.BaseDataPathValue=/var/lib/opencloud" +DOCKER_LDFLAGS += -X "$(OC_REPO)/pkg/config/defaults.BaseConfigPathType=path" -X "$(OC_REPO)/pkg/config/defaults.BaseConfigPathValue=/etc/opencloud" + +# We can't link statically when vips is enabled but we still +# prefer static linking where possible +ifndef ENABLE_VIPS + DOCKER_LDFLAGS += -extldflags "-static" +endif GCFLAGS += all=-N -l @@ -99,7 +107,7 @@ build: $(BIN)/$(EXECUTABLE) build-debug: $(BIN)/$(EXECUTABLE)-debug $(BIN)/$(EXECUTABLE): $(SOURCES) - $(GOBUILD) -v -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $@ ./cmd/$(NAME) + $(GOBUILD) -v -tags '$(TAGS)' -ldflags '$(LDFLAGS) $(DOCKER_LDFLAGS)' -o $@ ./cmd/$(NAME) $(BIN)/$(EXECUTABLE)-debug: $(SOURCES) $(GOBUILD) -v -tags '$(TAGS)' -ldflags '$(DEBUG_LDFLAGS)' -gcflags '$(GCFLAGS)' -o $@ ./cmd/$(NAME) diff --git a/opencloud/docker/Dockerfile.linux.multiarch b/opencloud/docker/Dockerfile.linux.multiarch index 213f708dbc..7a04aada97 100644 --- a/opencloud/docker/Dockerfile.linux.multiarch +++ b/opencloud/docker/Dockerfile.linux.multiarch @@ -1,4 +1,5 @@ FROM golang:alpine3.20 AS build +ARG TARGETOS ARG TARGETARCH RUN apk add bash make git curl gcc musl-dev libc-dev binutils-gold inotify-tools vips-dev @@ -6,13 +7,11 @@ RUN apk add bash make git curl gcc musl-dev libc-dev binutils-gold inotify-tools COPY ./ /opencloud/ WORKDIR /opencloud/opencloud -RUN GOOS=linux GOARCH="${TARGETARCH}" make ci-go-generate build ENABLE_VIPS=true +RUN GOOS="${TARGETOS:-linux}" GOARCH="${TARGETARCH:-amd64}" make ci-go-generate build ENABLE_VIPS=true FROM alpine:3.20 -ARG TARGETARCH - -ARG VERSION="" -ARG REVISION="" +ARG VERSION +ARG REVISION RUN apk add --no-cache attr bash ca-certificates curl inotify-tools libc6-compat mailcap tree vips patch && \ echo 'hosts: files dns' >| /etc/nsswitch.conf