diff --git a/docker/.gitignore b/docker/.gitignore index 11dc30e..e355f33 100644 --- a/docker/.gitignore +++ b/docker/.gitignore @@ -1 +1 @@ -syndicate-server +syndicate-server.* diff --git a/docker/Dockerfile b/docker/Dockerfile index 7cc1939..1c005fd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,5 @@ FROM busybox RUN mkdir /data -COPY ./syndicate-server / -CMD ["/syndicate-server", "-c", "/data"] +ARG TARGETARCH +COPY ./syndicate-server.$TARGETARCH /syndicate-server +CMD ["/syndicate-server", "-c", "/data", "-p", "1"] diff --git a/docker/Makefile b/docker/Makefile index f2be0c8..187712d 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,18 +1,37 @@ +U=leastfixedpoint +I=syndicate-server +ARCHITECTURES:=amd64 arm arm64 +SERVERS:=$(patsubst %,syndicate-server.%,$(ARCHITECTURES)) +VERSION=$(shell ./syndicate-server.$(shell ./docker-architecture $$(uname -m)) --version | cut -d' ' -f2) + all: -.PHONY: all clean image push syndicate-server +.PHONY: all clean image push push-only clean: - rm -f syndicate-server - docker rmi leastfixedpoint/syndicate-server + rm -f syndicate-server.* + -podman images -q $(U)/$(I) | sort -u | xargs podman rmi -f -image: syndicate-server - docker build -t leastfixedpoint/$$(./syndicate-server --version | tr ' ' ':') -t leastfixedpoint/syndicate-server:latest . +image: $(SERVERS) + for A in $(ARCHITECTURES); do set -x; \ + podman build --platform=linux/$$A \ + -t $(U)/$(I):$(VERSION)-$$A \ + -t $(U)/$(I):latest-$$A \ + .; \ + done + rm -f tmp.image -push: image - docker push leastfixedpoint/$$(./syndicate-server --version | tr ' ' ':') - docker push leastfixedpoint/syndicate-server:latest +push: image push-only -syndicate-server: - make -C .. x86_64-binary-release - cp -a ../target/x86_64-unknown-linux-musl/release/syndicate-server $@ +push-only: + $(patsubst %,podman push $(U)/$(I):$(VERSION)-%;,$(ARCHITECTURES)) + $(patsubst %,podman push $(U)/$(I):latest-%;,$(ARCHITECTURES)) + podman rmi -f $(U)/$(I):$(VERSION) $(U)/$(I):latest + podman manifest create $(U)/$(I):$(VERSION) $(patsubst %,$(U)/$(I):$(VERSION)-%,$(ARCHITECTURES)) + podman manifest create $(U)/$(I):latest $(patsubst %,$(U)/$(I):latest-%,$(ARCHITECTURES)) + podman manifest push $(U)/$(I):$(VERSION) + podman manifest push $(U)/$(I):latest + +syndicate-server.%: + make -C .. $$(./alpine-architecture $*)-binary-release + cp -a ../target/$$(./alpine-architecture $*)-unknown-linux-musl*/release/syndicate-server $@ diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000..caf3653 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,9 @@ +# Docker images for syndicate-server + +Build using podman: + + apt install podman + +and at least until the dependencies are fixed (?), + + apt install uidmap slirp4netns diff --git a/docker/alpine-architecture b/docker/alpine-architecture new file mode 100755 index 0000000..faf8655 --- /dev/null +++ b/docker/alpine-architecture @@ -0,0 +1,6 @@ +#!/bin/sh +case $1 in + amd64) echo x86_64;; + arm) echo armv7;; + arm64) echo aarch64;; +esac diff --git a/docker/docker-architecture b/docker/docker-architecture new file mode 100755 index 0000000..e77b69e --- /dev/null +++ b/docker/docker-architecture @@ -0,0 +1,6 @@ +#!/bin/sh +case $1 in + x86_64) echo amd64;; + armv7) echo arm;; + aarch64) echo arm64;; +esac