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/Makefile b/opencloud/Makefile index 3e40e7ade1..f87b35fe7f 100644 --- a/opencloud/Makefile +++ b/opencloud/Makefile @@ -35,6 +35,19 @@ 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: + @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 + 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..7a04aada97 --- /dev/null +++ b/opencloud/docker/Dockerfile.linux.multiarch @@ -0,0 +1,51 @@ +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 + +COPY ./ /opencloud/ + +WORKDIR /opencloud/opencloud +RUN GOOS="${TARGETOS:-linux}" GOARCH="${TARGETARCH:-amd64}" make ci-go-generate build ENABLE_VIPS=true + +FROM alpine:3.20 +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