Skip to content

Commit 02c24cb

Browse files
committed
static: split packages, add plugins, split versions
Signed-off-by: Sebastiaan van Stijn <[email protected]>
1 parent 59c7a85 commit 02c24cb

File tree

3 files changed

+154
-34
lines changed

3 files changed

+154
-34
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ debian-% raspbian-% ubuntu-%: checkout ## build deb packages for the specified d
9595
static: DOCKER_BUILD_PKGS:=static-linux cross-mac cross-win cross-arm
9696
static: checkout ## build static-compiled packages
9797
for p in $(DOCKER_BUILD_PKGS); do \
98-
$(MAKE) -C $@ VERSION=$(VERSION) GO_VERSION=$(GO_VERSION) TARGETPLATFORM=$(TARGETPLATFORM) CONTAINERD_VERSION=$(CONTAINERD_VERSION) RUNC_VERSION=$(RUNC_VERSION) $${p}; \
98+
$(MAKE) -C $@ VERSION=$(VERSION) GO_VERSION=$(GO_VERSION) CONTAINERD_VERSION=$(CONTAINERD_VERSION) RUNC_VERSION=$(RUNC_VERSION) $${p}; \
9999
done
100100

101101
.PHONY: verify

static/Makefile

Lines changed: 138 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ include ../common.mk
22

33
CLI_DIR = $(realpath $(CURDIR)/../src/github.com/docker/cli)
44
ENGINE_DIR = $(realpath $(CURDIR)/../src/github.com/docker/docker)
5+
COMPOSE_DIR = $(realpath $(CURDIR)/../src/github.com/docker/compose)
56
BUILDX_DIR = $(realpath $(CURDIR)/../src/github.com/docker/buildx)
7+
SCAN_DIR = $(realpath $(CURDIR)/../src/github.com/docker/scan-cli-plugin)
68

79
CLI_VERSION = $(shell ./gen-static-ver $(CLI_DIR) $(VERSION))
8-
GEN_STATIC_VER = $(shell ./gen-static-ver $(CLI_DIR) $(VERSION))
10+
ENGINE_VERSION = $(shell ./gen-static-ver $(ENGINE_DIR) $(VERSION))
11+
CONTAINERD_PKG_VER = $(shell ./gen-containerd-ver $(ENGINE_DIR) $(CONTAINERD_VERSION))
912

1013
HASH_CMD=docker run -v $(CURDIR):/sum -w /sum debian:jessie bash hash_files
1114
DIR_TO_HASH:=build/linux
@@ -42,17 +45,28 @@ static: static-linux cross-mac cross-win cross-arm ## create all static packages
4245

4346
.PHONY: static-linux
4447
static-linux: BUILD_DIR=build/linux
45-
static-linux: static-cli static-engine static-buildx-plugin ## create tgz
48+
static-linux: static-cli static-engine static-buildx-plugin static-compose-plugin docker-scan-plugin ## create tgz
4649
# docker cli binaries
47-
mkdir -p $(BUILD_DIR)/docker
48-
cp $(CLI_DIR)/build/docker $(BUILD_DIR)/docker/
50+
mkdir -p $(BUILD_DIR)/docker-cli
51+
cp $(CLI_DIR)/build/docker $(BUILD_DIR)/docker-cli/
52+
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-cli-$(CLI_VERSION).tgz docker-cli
53+
$(RM) -r $(BUILD_DIR)/docker-cli
4954

5055
# docker engine binaries
51-
for f in dockerd containerd ctr containerd-shim containerd-shim-runc-v2 docker-init docker-proxy runc; do \
52-
cp -L $(ENGINE_DIR)/bundles/binary-daemon/$$f $(BUILD_DIR)/docker/$$f; \
56+
mkdir -p $(BUILD_DIR)/docker-engine
57+
for f in dockerd docker-init docker-proxy; do \
58+
cp -L $(ENGINE_DIR)/bundles/binary-daemon/$$f $(BUILD_DIR)/docker-engine/$$f; \
5359
done
54-
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-$(GEN_STATIC_VER).tgz docker
55-
$(RM) -r $(BUILD_DIR)/docker
60+
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-engine-$(ENGINE_VERSION).tgz docker-engine
61+
$(RM) -r $(BUILD_DIR)/docker-engine
62+
63+
# containerd binaries
64+
mkdir -p $(BUILD_DIR)/containerd
65+
for f in containerd ctr containerd-shim-runc-v2 runc; do \
66+
cp -L $(ENGINE_DIR)/bundles/binary-daemon/$$f $(BUILD_DIR)/containerd/$$f; \
67+
done
68+
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/containerd-$(CONTAINERD_PKG_VER).tgz containerd
69+
$(RM) -r $(BUILD_DIR)/containerd
5670

5771
# extra binaries for running rootless
5872
mkdir -p $(BUILD_DIR)/docker-rootless-extras
@@ -61,12 +75,18 @@ static-linux: static-cli static-engine static-buildx-plugin ## create tgz
6175
cp -L $(ENGINE_DIR)/bundles/binary-daemon/$$f $(BUILD_DIR)/docker-rootless-extras/$$f; \
6276
fi \
6377
done
64-
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-rootless-extras-$(GEN_STATIC_VER).tgz docker-rootless-extras
78+
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-rootless-extras-$(ENGINE_VERSION).tgz docker-rootless-extras
6579
$(RM) -r $(BUILD_DIR)/docker-rootless-extras
6680

81+
# docker compose
82+
tar -C $(COMPOSE_DIR)/bin -c -z -f $(BUILD_DIR)/docker-compose-plugin-$(DOCKER_COMPOSE_REF:v%=%).tgz docker-compose
83+
6784
# docker buildx
6885
tar -C $(BUILDX_DIR)/bin -c -z -f $(BUILD_DIR)/docker-buildx-plugin-$(DOCKER_BUILDX_REF:v%=%).tgz docker-buildx
6986

87+
# docker scan
88+
tar -C $(SCAN_DIR)/bin -c -z -f $(BUILD_DIR)/docker-scan-plugin-$(DOCKER_SCAN_REF:v%=%).tgz docker-scan
89+
7090
.PHONY: hash_files
7191
hash_files:
7292
@echo "Hashing directory $(DIR_TO_HASH)"
@@ -77,41 +97,97 @@ buildx:
7797
docker buildx inspect | grep -q 'Driver: docker-container' || docker buildx create --use
7898

7999
.PHONY: cross-mac
80-
cross-mac: buildx
100+
cross-mac: cross-mac-amd64 cross-mac-arm64
101+
@echo "Cross-compiling mac binaries"
102+
103+
.PHONY: cross-mac-amd64
104+
cross-mac-amd64: TARGETPLATFORM=darwin/amd64
105+
cross-mac-amd64: BUILD_DIR=build/mac/amd64
106+
cross-mac-amd64: buildx static-cli static-buildx-plugin static-compose-plugin cross-scan-plugin
81107
# docker cli binaries
82-
cd $(CLI_DIR) && VERSION=$(CLI_VERSION) docker buildx bake --set binary.platform=darwin/amd64,darwin/arm64 binary
83-
dest=$$PWD/build/mac; cd $(CLI_DIR)/build && for platform in *; do \
84-
arch=$$(echo $$platform | cut -d_ -f2); \
85-
mkdir -p $$dest/$$arch/docker; \
86-
cp $$platform/docker-darwin-* $$dest/$$arch/docker/docker && \
87-
tar -C $$dest/$$arch -c -z -f $$dest/$$arch/docker-$(CLI_VERSION).tgz docker; \
88-
$(RM) -r $$dest/$$arch/docker
89-
done
108+
mkdir -p $(BUILD_DIR)/docker-cli
109+
cp -L $(CLI_DIR)/build/docker $(BUILD_DIR)/docker-cli/docker
110+
tar -C $(BUILD_DIR)/ -c -z -f $(BUILD_DIR)/docker-cli-$(CLI_VERSION).tgz docker-cli
111+
$(RM) -r $(BUILD_DIR)/docker-cli
112+
113+
# docker compose
114+
tar -C $(COMPOSE_DIR)/bin -c -z -f $(BUILD_DIR)/docker-compose-plugin-$(DOCKER_COMPOSE_REF:v%=%).tgz docker-compose
115+
116+
# docker buildx
117+
tar -C $(BUILDX_DIR)/bin -c -z -f $(BUILD_DIR)/docker-buildx-plugin-$(DOCKER_BUILDX_REF:v%=%).tgz docker-buildx
118+
119+
# docker scan
120+
mkdir -p $(BUILD_DIR)/docker-scan
121+
cp -L $(SCAN_DIR)/dist/docker-scan_darwin_amd64 $(BUILD_DIR)/docker-scan/docker-scan
122+
tar -C $(BUILD_DIR)/ -c -z -f $(BUILD_DIR)/docker-scan-plugin-$(DOCKER_SCAN_REF:v%=%).tgz docker-scan
123+
$(RM) -r $(BUILD_DIR)/docker-scan
124+
125+
.PHONY: cross-mac-arm64
126+
cross-mac-arm64: TARGETPLATFORM=darwin/arm64
127+
cross-mac-arm64: BUILD_DIR=build/mac/arm64
128+
cross-mac-arm64: buildx static-cli static-buildx-plugin static-compose-plugin cross-scan-plugin
129+
# docker cli binaries
130+
mkdir -p $(BUILD_DIR)/docker-cli
131+
cp -L $(CLI_DIR)/build/docker $(BUILD_DIR)/docker-cli/docker
132+
tar -C $(BUILD_DIR)/ -c -z -f $(BUILD_DIR)/docker-cli-$(CLI_VERSION).tgz docker-cli
133+
$(RM) -r $(BUILD_DIR)/docker-cli
134+
135+
# docker compose
136+
tar -C $(COMPOSE_DIR)/bin -c -z -f $(BUILD_DIR)/docker-compose-plugin-$(DOCKER_COMPOSE_REF:v%=%).tgz docker-compose
137+
138+
# docker buildx
139+
tar -C $(BUILDX_DIR)/bin -c -z -f $(BUILD_DIR)/docker-buildx-plugin-$(DOCKER_BUILDX_REF:v%=%).tgz docker-buildx
140+
141+
# docker scan
142+
mkdir -p $(BUILD_DIR)/docker-scan
143+
cp -L $(SCAN_DIR)/dist/docker-scan_darwin_arm64 $(BUILD_DIR)/docker-scan/docker-scan
144+
tar -C $(BUILD_DIR)/ -c -z -f $(BUILD_DIR)/docker-scan-plugin-$(DOCKER_SCAN_REF:v%=%).tgz docker-scan
145+
$(RM) -r $(BUILD_DIR)/docker-scan
90146

91147
.PHONY: cross-win
148+
cross-win: TARGETPLATFORM=windows/amd64
149+
cross-win: EXT=.exe
92150
cross-win: BUILD_DIR=build/win/amd64
93-
cross-win: cross-win-engine
151+
cross-win: cross-win-engine static-cli static-buildx-plugin static-compose-plugin cross-scan-plugin
94152
# docker cli binaries
95-
mkdir -p $(BUILD_DIR)/docker
96-
cd $(CLI_DIR) && VERSION=$(CLI_VERSION) docker buildx bake --set binary.platform=windows/amd64 binary
97-
cp $(CLI_DIR)/build/docker-windows-amd64.exe $(BUILD_DIR)/docker/docker.exe
153+
mkdir -p $(BUILD_DIR)/docker-cli
154+
cp -L $(CLI_DIR)/build/docker $(BUILD_DIR)/docker-cli/docker.exe
98155

99156
# docker engine binaries
100-
cp $(ENGINE_DIR)/bundles/cross/windows/amd64-daemon/dockerd.exe $(BUILD_DIR)/docker/dockerd.exe
101-
cp $(ENGINE_DIR)/bundles/cross/windows/amd64-daemon/docker-proxy.exe $(BUILD_DIR)/docker/docker-proxy.exe
102-
docker run --rm -v $(CURDIR)/$(BUILD_DIR):/v -w /v alpine sh -c 'apk update&&apk add zip&&zip -r docker-$(GEN_STATIC_VER).zip docker'
157+
mkdir -p $(BUILD_DIR)/docker-engine
158+
for f in dockerd.exe docker-proxy.exe; do \
159+
cp -L $(ENGINE_DIR)/bundles/cross/windows/amd64-daemon/$$f $(BUILD_DIR)/docker-engine/$$f; \
160+
done
161+
162+
# docker compose, docker buildx
163+
mkdir -p $(BUILD_DIR)/docker-compose
164+
cp $(COMPOSE_DIR)/bin/docker-compose/docker-compose.exe $(BUILD_DIR)/docker-compose/docker-compose.exe
165+
166+
# docker buildx
167+
mkdir -p $(BUILD_DIR)/docker-buildx
168+
cp $(BUILDX_DIR)/bin/docker-buildx/docker-buildx.exe $(BUILD_DIR)/docker-buildx/docker-buildx.exe
169+
170+
# docker scan
171+
mkdir -p $(BUILD_DIR)/docker-scan
172+
cp $(SCAN_DIR)/dist/docker-scan_windows_amd64.exe $(BUILD_DIR)/docker-scan/docker-scan.exe
173+
174+
docker run --rm -v $(CURDIR)/$(BUILD_DIR):/v -w /v alpine sh -c 'apk add --no-cache zip \
175+
&& zip -r docker-cli-$(CLI_VERSION).zip docker-cli \
176+
&& zip -r docker-engine-$(ENGINE_VERSION).zip docker-engine \
177+
&& zip -r docker-compose-plugin-$(DOCKER_COMPOSE_REF:v%=%).zip docker-compose \
178+
&& zip -r docker-buildx-plugin-$(DOCKER_BUILDX_REF:v%=%).zip docker-buildx '
103179
$(CHOWN) -R $(shell id -u):$(shell id -g) build
104180

105181
# clean up temporary directories
106-
$(RM) -r $(BUILD_DIR)/docker
182+
$(RM) -r $(BUILD_DIR)/docker-cli $(BUILD_DIR)/docker-engine $(BUILD_DIR)/docker-compose $(BUILD_DIR)/docker-buildx $(BUILD_DIR)/docker-scan
107183

108184
.PHONY: cross-arm
109185
cross-arm: BUILD_DIR=build/arm
110186
cross-arm: cross-all-cli ## create tgz with linux armhf client only
111-
mkdir -p $(BUILD_DIR)/docker
112-
cp $(CLI_DIR)/build/docker-linux-arm $(BUILD_DIR)/docker/docker
113-
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-$(CLI_VERSION).tgz docker
114-
$(RM) -r $(BUILD_DIR)/docker
187+
mkdir -p $(BUILD_DIR)/docker-cli
188+
cp $(CLI_DIR)/build/docker-linux-arm $(BUILD_DIR)/docker-cli/docker
189+
tar -C $(BUILD_DIR) -c -z -f $(BUILD_DIR)/docker-$(CLI_VERSION).tgz docker-cli
190+
$(RM) -r $(BUILD_DIR)/docker-cli
115191

116192
.PHONY: static-cli
117193
static-cli:
@@ -120,16 +196,45 @@ static-cli:
120196

121197
.PHONY: static-engine
122198
static-engine:
123-
$(MAKE) -C $(ENGINE_DIR) VERSION=$(GEN_STATIC_VER) DOCKER_BUILD_OPTS="$(DOCKER_BUILD_OPTS)" binary
199+
$(MAKE) -C $(ENGINE_DIR) VERSION=$(ENGINE_VERSION) DOCKER_BUILD_OPTS="$(DOCKER_BUILD_OPTS)" binary
124200

125201
.PHONY: static-buildx-plugin
126202
static-buildx-plugin:
127-
cd $(BUILDX_DIR) && docker buildx bake --set binaries.platform=$(TARGETPLATFORM) binaries && mv ./bin/buildx ./bin/docker-buildx
203+
cd $(BUILDX_DIR) && docker buildx bake --set binaries.platform=$(TARGETPLATFORM) binaries && mkdir -p ./bin/docker-buildx/ && mv ./bin/buildx$(EXT) ./bin/docker-buildx/docker-buildx$(EXT)
204+
205+
.PHONY: static-compose-plugin
206+
static-compose-plugin:
207+
$(RM) -r "$(COMPOSE_DIR)"/bin
208+
docker buildx build "$(COMPOSE_DIR)" \
209+
--target compose-plugin \
210+
--platform "$(or $(TARGETPLATFORM),local)" \
211+
--build-arg GIT_TAG="$(DOCKER_COMPOSE_REF)" \
212+
--output $(COMPOSE_DIR)/bin/docker-compose/
213+
214+
.PHONY: docker-scan-plugin
215+
docker-scan-plugin:
216+
# Build the scan-plugin
217+
# TODO this should be skipped on non-x86 because there's no image for non-x86?
218+
# TODO change once we support scan-plugin on other architectures
219+
$(MAKE) -C $(SCAN_DIR) GIT_TAG_NAME="$(DOCKER_SCAN_REF)" build
220+
221+
# TODO(thaJeztah) upstream Makefile should pass PLATFORM_BINARY
222+
# Binary is named (e.g.) docker-scan_linux_amd64. Rename it to have something consistent
223+
mv $(SCAN_DIR)/bin/docker-scan_linux_* $(SCAN_DIR)/bin/docker-scan
224+
225+
ls -laR $(SCAN_DIR)/bin
226+
227+
.PHONY: cross-scan-plugin
228+
cross-scan-plugin:
229+
# TODO: Add TARGETPLATFORM support on scan-cli-plugin repo to build efficiently with --platform
230+
$(MAKE) -C $(SCAN_DIR) GIT_TAG_NAME="$(DOCKER_SCAN_REF)" cross
231+
232+
ls -laR $(SCAN_DIR)/dist
128233

129234
.PHONY: cross-all-cli
130235
cross-all-cli:
131236
$(MAKE) -C $(CLI_DIR) -f docker.Makefile VERSION=$(CLI_VERSION) cross
132237

133238
.PHONY: cross-win-engine
134239
cross-win-engine:
135-
$(MAKE) -C $(ENGINE_DIR) VERSION=$(GEN_STATIC_VER) DOCKER_CROSSPLATFORMS=windows/amd64 DOCKER_BUILD_OPTS="$(DOCKER_BUILD_OPTS)" cross
240+
$(MAKE) -C $(ENGINE_DIR) VERSION=$(ENGINE_VERSION) DOCKER_CROSSPLATFORMS=windows/amd64 DOCKER_BUILD_OPTS="$(DOCKER_BUILD_OPTS)" cross

static/gen-containerd-ver

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env bash
2+
3+
engine_dir="$1"
4+
# containerd_pkg_version is used to name the containerd-<version>.tgz file.
5+
containerd_pkg_version="$2"
6+
7+
if [ -z "${containerd_pkg_version}" ]; then
8+
# If no custom version is set for containerd, we select the default version of
9+
# containerd based on the docker engine source.
10+
# which is needed for naming the produced .tgz file.
11+
# TODO containerd binaries should be built as part of containerd-packaging, not as part of docker/docker-ce-packaging
12+
awk -F'=' '$1 == "ARG CONTAINERD_VERSION" {{sub("v","")}; print $2 }' "${engine_dir}/Dockerfile.windows"
13+
else
14+
echo "${containerd_pkg_version#v}"
15+
fi

0 commit comments

Comments
 (0)