@@ -2,31 +2,14 @@ SELF = $(lastword $(MAKEFILE_LIST))
2
2
ROOT_DIR = $(realpath $(dir $(SELF ) ) )
3
3
4
4
CONTAINER_CMD ?=
5
- ifeq ($(CONTAINER_CMD ) ,)
6
- CONTAINER_CMD:=$(shell podman version >/dev/null 2>&1 && echo podman)
7
- endif
8
- ifeq ($(CONTAINER_CMD ) ,)
9
- CONTAINER_CMD:=$(shell docker version >/dev/null 2>&1 && echo docker)
10
- endif
11
- # handle the case where podman is present but is (defaulting) to remote and is
12
- # not not functioning correctly. Example: mac platform but no 'podman machine'
13
- # vms are ready
14
- ifeq ($(CONTAINER_CMD ) ,)
15
- CONTAINER_CMD:=$(shell podman --version >/dev/null 2>&1 && echo podman)
16
- ifneq ($(CONTAINER_CMD ) ,)
17
- $(warning podman detected but 'podman version' failed. \
18
- this may mean your podman is set up for remote use, but is not working)
19
- endif
20
- endif
21
-
22
- BUILD_CMD: =$(CONTAINER_CMD ) build $(BUILD_OPTS )
23
- PUSH_CMD: =$(CONTAINER_CMD ) push $(PUSH_OPTS )
24
5
25
6
ALT_BIN =$(CURDIR ) /.bin
26
7
SHELLCHECK =$(shell command -v shellcheck || echo $(ALT_BIN ) /shellcheck)
27
8
GITLINT =$(shell command -v gitlint || echo $(ALT_BIN ) /gitlint)
28
9
YAMLLINT_CMD =$(shell command -v yamllint || echo $(ALT_BIN ) /yamllint)
29
- COMMON_DIR: =images/common
10
+ BUILD_IMAGE =$(ROOT_DIR ) /hack/build-image --debug --without-repo-bases
11
+
12
+
30
13
SERVER_DIR: =images/server
31
14
AD_SERVER_DIR: =images/ad-server
32
15
CLIENT_DIR: =images/client
@@ -47,72 +30,17 @@ AD_SERVER_SOURCES=\
47
30
CLIENT_SRC_FILE =$(CLIENT_DIR ) /Containerfile.$(SRC_OS_NAME )
48
31
TOOLBOX_SRC_FILE =$(TOOLBOX_DIR ) /Containerfile.$(SRC_OS_NAME )
49
32
50
-
51
33
BUILDFILE_PREFIX =.build
52
- BUILDFILE_SERVER: =$(BUILDFILE_PREFIX ) .server
53
- BUILDFILE_NIGHTLY_SERVER: =$(BUILDFILE_PREFIX ) .nightly-server
54
- BUILDFILE_AD_SERVER: =$(BUILDFILE_PREFIX ) .ad-server
55
- BUILDFILE_NIGHTLY_AD_SERVER: =$(BUILDFILE_PREFIX ) .nightly-ad-server
56
- BUILDFILE_CLIENT: =$(BUILDFILE_PREFIX ) .client
57
- BUILDFILE_TOOLBOX: =$(BUILDFILE_PREFIX ) .toolbox
58
- OS_PREFIX =$(addsuffix -,$(OS_NAME ) )
59
- TAG =$(OS_PREFIX ) latest
60
- NIGHTLY_TAG =$(OS_PREFIX ) nightly
61
-
62
-
63
- SERVER_NAME =samba-server:$(TAG )
64
- NIGHTLY_SERVER_NAME =samba-server:$(NIGHTLY_TAG )
65
- AD_SERVER_NAME = samba-ad-server:$(TAG )
66
- NIGHTLY_AD_SERVER_NAME =samba-ad-server:$(NIGHTLY_TAG )
67
- CLIENT_NAME =samba-client:$(TAG )
68
- NIGHTLY_CLIENT_NAME =samba-client:$(NIGHTLY_TAG )
69
- TOOLBOX_NAME =samba-toolbox:$(TAG )
70
- NIGHTLY_TOOLBOX_NAME =samba-toolbox:$(NIGHTLY_TAG )
34
+ BUILDFILE_SERVER =$(shell $(call _BUILD_KP,server,default,--print-buildfile) )
35
+ BUILDFILE_NIGHTLY_SERVER =$(shell $(call _BUILD_KP,server,nightly,--print-buildfile) )
36
+ BUILDFILE_AD_SERVER =$(shell $(call _BUILD_KP,ad-server,default,--print-buildfile) )
37
+ BUILDFILE_NIGHTLY_AD_SERVER =$(shell $(call _BUILD_KP,ad-server,nightly,--print-buildfile) )
38
+ BUILDFILE_CLIENT =$(shell $(call _BUILD_KP,client,default,--print-buildfile) )
39
+ BUILDFILE_TOOLBOX =$(shell $(call _BUILD_KP,toolbox,default,--print-buildfile) )
71
40
72
41
REPO_BASE =quay.io/samba.org/
73
- SERVER_REPO_NAME =$(REPO_BASE )$(SERVER_NAME )
74
- NIGHTLY_SERVER_REPO_NAME =$(REPO_BASE )$(NIGHTLY_SERVER_NAME )
75
- AD_SERVER_REPO_NAME =$(REPO_BASE )$(AD_SERVER_NAME )
76
- NIGHTLY_AD_SERVER_REPO_NAME =$(REPO_BASE )$(NIGHTLY_AD_SERVER_NAME )
77
- CLIENT_REPO_NAME =$(REPO_BASE )$(CLIENT_NAME )
78
- NIGHTLY_CLIENT_REPO_NAME =$(REPO_BASE )$(NIGHTLY_CLIENT_NAME )
79
- TOOLBOX_REPO_NAME =$(REPO_BASE )$(TOOLBOX_NAME )
80
- NIGHTLY_TOOLBOX_REPO_NAME =$(REPO_BASE )$(NIGHTLY_TOOLBOX_NAME )
81
42
82
- BUILDFILE_PREFIX =.build
83
- BUILDFILE_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) server
84
- BUILDFILE_NIGHTLY_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-server
85
- BUILDFILE_AD_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) ad-server
86
- BUILDFILE_NIGHTLY_AD_SERVER =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-ad-server
87
- BUILDFILE_CLIENT =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) client
88
- BUILDFILE_NIGHTLY_CLIENT =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-client
89
- BUILDFILE_TOOLBOX =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) toolbox
90
- BUILDFILE_NIGHTLY_TOOLBOX =$(BUILDFILE_PREFIX ) .$(OS_PREFIX ) nightly-toolbox
91
-
92
- HOST_ARCH: =$(shell arch)
93
- HOST_ARCH: =$(subst x86_64,amd64,$(HOST_ARCH ) )
94
- HOST_ARCH: =$(subst aarch64,arm64,$(HOST_ARCH ) )
95
-
96
- # build_fqin is a function macro for building a "Fully Qualified Image Name".
97
- # Usage: $(call build_fqin,<base-name>,<pkg-source>,<os-name>,<arch>,[<extra>])
98
- # base-name: the last part of the repo name eg. 'samba-server'
99
- # pkg-source: source for samba packages (default or nightly)
100
- # os-name: base os name
101
- # arch: architecture of image (amd64, arm64, etc.)
102
- # extra: (optional) an additional unique suffix for the tag
103
- # typically meant for use by devs building custom images
104
- build_fqin =$(REPO_BASE )$(1 ) :$(2 ) -$(3 ) -$(4 )$(if $(5 ) ,-$(5 ) )
105
-
106
- # get_imagename is a function macro for getting only the base image name
107
- # without the tag part.
108
- # Usage: $(call get_imagename,<image-name>)
109
- get_imagename =$(firstword $(subst :, ,$1) )
110
-
111
- # get_pkgsource is a function macro that, given an images name returns
112
- # the name of the package source. Currently only understands the
113
- # difference between default (os packages) and nightly (SIT packages).
114
- # Usage: $(call, get_pkgsource,<image-name>)
115
- get_pkgsource =$(if $(findstring nightly,$1) ,nightly,default)
43
+ _BUILD_KP =$(BUILD_IMAGE ) $(if $(CONTAINER_CMD ) ,--container-engine=$(CONTAINER_CMD ) ) $(BI_PREFIX_ARGS ) --kind=$1 --package-source=$2 --distro-base=$(SRC_OS_NAME ) --repo-base=$(REPO_BASE ) $(if $(BUILD_ARCH ) ,--arch=$(BUILD_ARCH ) ) $3
116
44
117
45
118
46
arch_flag =$(strip $(if $(filter docker,$(CONTAINER_CMD ) ) ,\
@@ -128,34 +56,18 @@ build: build-server build-nightly-server build-ad-server build-client \
128
56
.PHONY : debug-vars
129
57
debug-vars :
130
58
@echo OS_NAME: $(OS_NAME )
131
- @echo OS_PREFIX: $(OS_PREFIX )
132
59
@echo TAG: $(TAG )
133
60
@echo NIGHTLY_TAG: $(NIGHTLY_TAG )
134
61
@echo SERVER_NAME: $(SERVER_NAME )
135
- @echo SERVER_REPO_NAME: $(SERVER_REPO_NAME )
136
- @echo NIGHTLY_SERVER_REPO_NAME: $(NIGHTLY_SERVER_REPO_NAME )
137
62
@echo NIGHTLY_SERVER_NAME: $(NIGHTLY_SERVER_NAME )
138
63
@echo AD_SERVER_NAME: $(AD_SERVER_NAME )
139
- @echo AD_SERVER_REPO_NAME: $(AD_SERVER_REPO_NAME )
140
- @echo NIGHTLY_AD_SERVER_NAME: $(NIGHTLY_AD_SERVER_NAME )
141
- @echo NIGHTLY_AD_SERVER_NAME: $(NIGHTLY_AD_SERVER_NAME )
142
- @echo NIGHTLY_AD_SERVER_REPO_NAME: $(NIGHTLY_AD_SERVER_REPO_NAME )
143
- @echo CLIENT_NAME: $(CLIENT_NAME )
144
- @echo CLIENT_REPO_NAME: $(CLIENT_REPO_NAME )
145
- @echo NIGHTLY_CLIENT_NAME: $(NIGHTLY_CLIENT_NAME )
146
- @echo NIGHTLY_CLIENT_REPO_NAME: $(NIGHTLY_CLIENT_REPO_NAME )
147
- @echo TOOLBOX_NAME: $(TOOLBOX_NAME )
148
- @echo TOOLBOX_REPO_NAME: $(TOOLBOX_REPO_NAME )
149
- @echo NIGHTLY_TOOLBOX_NAME: $(NIGHTLY_TOOLBOX_NAME )
150
- @echo NIGHTLY_TOOLBOX_REPO_NAME: $(NIGHTLY_TOOLBOX_REPO_NAME )
151
64
152
65
@echo BUILDFILE_SERVER: $(BUILDFILE_SERVER)
153
66
@echo BUILDFILE_AD_SERVER: $(BUILDFILE_AD_SERVER)
154
67
@echo BUILDFILE_NIGHTLY_AD_SERVER: $(BUILDFILE_iNIGHTLY_AD_SERVER)
155
68
@echo BUILDFILE_NIGHTLY_SERVER: $(BUILDFILE_NIGHTLY_SERVER)
156
69
@echo BUILDFILE_CLIENT: $(BUILDFILE_CLIENT)
157
70
@echo BUILDFILE_TOOLBOX: $(BUILDFILE_TOOLBOX)
158
- @echo BUILDFILE_NIGHTLY_TOOLBOX: $(BUILDFILE_NIGHTLY_TOOLBOX)
159
71
160
72
@echo SERVER_SRC_FILE: $(SERVER_SRC_FILE)
161
73
@echo AD_SERVER_SRC_FILE: $(AD_SERVER_SRC_FILE)
@@ -168,97 +80,55 @@ debug-vars:
168
80
build-server : $(BUILDFILE_SERVER )
169
81
.PHONY : build-server
170
82
$(BUILDFILE_SERVER ) : Makefile $(SERVER_SRC_FILE ) $(SERVER_SOURCES )
171
- $(MAKE ) _img_build \
172
- BUILD_ARGS=" " \
173
- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
174
- SHORT_NAME=$(SERVER_NAME ) \
175
- REPO_NAME=$(SERVER_REPO_NAME ) \
176
- SRC_FILE=$(SERVER_SRC_FILE ) \
177
- DIR=$(SERVER_DIR ) \
178
- BUILDFILE=$(BUILDFILE_SERVER )
83
+ $(call _BUILD_KP,server,default) $(EXTRA_BUILD_ARGS )
179
84
180
85
push-server : build-server
181
- $(PUSH_CMD ) $( SERVER_REPO_NAME )
86
+ $(call _BUILD_KP,server,default,--push )
182
87
.PHONY : push-server
183
88
184
89
build-nightly-server : $(BUILDFILE_NIGHTLY_SERVER )
185
90
.PHONY : build-nightly-server
186
91
$(BUILDFILE_NIGHTLY_SERVER ) : Makefile $(SERVER_SRC_FILE ) $(SERVER_SOURCES )
187
- $(MAKE ) _img_build \
188
- BUILD_ARGS=" --build-arg=INSTALL_PACKAGES_FROM='samba-nightly'" \
189
- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
190
- SHORT_NAME=$(NIGHTLY_SERVER_NAME ) \
191
- REPO_NAME=$(NIGHTLY_SERVER_REPO_NAME ) \
192
- SRC_FILE=$(SERVER_SRC_FILE ) \
193
- DIR=$(SERVER_DIR ) \
194
- BUILDFILE=$(BUILDFILE_NIGHTLY_SERVER )
92
+ $(call _BUILD_KP,server,nightly) $(EXTRA_BUILD_ARGS )
195
93
196
94
push-nightly-server : build-nightly-server
197
- $(PUSH_CMD ) $( NIGHTLY_SERVER_REPO_NAME )
95
+ $(call _BUILD_KP,server,nightly,--push )
198
96
.PHONY : push-nightly-server
199
97
200
98
build-ad-server : $(BUILDFILE_AD_SERVER )
201
99
.PHONY : build-ad-server
202
100
$(BUILDFILE_AD_SERVER ) : Makefile $(AD_SERVER_SRC_FILE ) $(AD_SERVER_SOURCES )
203
- $(MAKE ) _img_build \
204
- BUILD_ARGS=" " \
205
- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
206
- SHORT_NAME=$(AD_SERVER_NAME ) \
207
- REPO_NAME=$(AD_SERVER_REPO_NAME ) \
208
- SRC_FILE=$(AD_SERVER_SRC_FILE ) \
209
- DIR=$(AD_SERVER_DIR ) \
210
- BUILDFILE=$(BUILDFILE_AD_SERVER )
101
+ $(call _BUILD_KP,ad-server,default) $(EXTRA_BUILD_ARGS )
211
102
212
103
push-ad-server : build-ad-server
213
- $(PUSH_CMD ) $( AD_SERVER_REPO_NAME )
104
+ $(call _BUILD_KP,ad-server,default,--push )
214
105
.PHONY : push-ad-server
215
106
216
107
build-nightly-ad-server : $(BUILDFILE_NIGHTLY_AD_SERVER )
217
108
.PHONY : build-nightly-ad-server
218
109
$(BUILDFILE_NIGHTLY_AD_SERVER ) : Makefile $(AD_SERVER_SRC_FILE ) $(AD_SERVER_SOURCES )
219
- $(MAKE ) _img_build \
220
- BUILD_ARGS=" --build-arg=INSTALL_PACKAGES_FROM='samba-nightly'" \
221
- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
222
- SHORT_NAME=$(NIGHTLY_AD_SERVER_NAME ) \
223
- REPO_NAME=$(NIGHTLY_AD_SERVER_REPO_NAME ) \
224
- SRC_FILE=$(AD_SERVER_SRC_FILE ) \
225
- DIR=$(AD_SERVER_DIR ) \
226
- BUILDFILE=$(BUILDFILE_NIGHTLY_AD_SERVER )
110
+ $(call _BUILD_KP,ad-server,nightly) $(EXTRA_BUILD_ARGS )
227
111
228
112
push-nightly-ad-server : build-nightly-ad-server
229
- $(PUSH_CMD ) $( NIGHTLY_AD_SERVER_REPO_NAME )
113
+ $(call _BUILD_KP,ad-server,nightly,--push )
230
114
.PHONY : push-nightly-ad-server
231
115
232
116
build-client : $(BUILDFILE_CLIENT )
233
117
.PHONY : build-client
234
118
$(BUILDFILE_CLIENT ) : Makefile $(CLIENT_SRC_FILE )
235
- $(MAKE ) _img_build \
236
- BUILD_ARGS=" " \
237
- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
238
- SHORT_NAME=$(CLIENT_NAME ) \
239
- REPO_NAME=$(CLIENT_REPO_NAME ) \
240
- SRC_FILE=$(CLIENT_SRC_FILE ) \
241
- DIR=$(CLIENT_DIR ) \
242
- BUILDFILE=$(BUILDFILE_CLIENT )
119
+ $(call _BUILD_KP,client,default) $(EXTRA_BUILD_ARGS )
243
120
244
121
push-client : build-client
245
- $(PUSH_CMD ) $( CLIENT_REPO_NAME )
122
+ $(call _BUILD_KP,client,default,--push )
246
123
.PHONY : push-client
247
124
248
125
build-toolbox : $(BUILDFILE_TOOLBOX )
249
126
.PHONY : build-toolbox
250
127
$(BUILDFILE_TOOLBOX ) : Makefile $(TOOLBOX_SRC_FILE )
251
- $(MAKE ) _img_build \
252
- BUILD_ARGS=" " \
253
- EXTRA_BUILD_ARGS=" $( EXTRA_BUILD_ARGS) " \
254
- SHORT_NAME=$(TOOLBOX_NAME ) \
255
- REPO_NAME=$(TOOLBOX_REPO_NAME ) \
256
- SRC_FILE=$(TOOLBOX_SRC_FILE ) \
257
- DIR=$(TOOLBOX_DIR ) \
258
- BUILDFILE=$(BUILDFILE_TOOLBOX )
128
+ $(call _BUILD_KP,toolbox,default) $(EXTRA_BUILD_ARGS )
259
129
260
130
push-toolbox : build-toolbox
261
- $(PUSH_CMD ) $( TOOLBOX_REPO_NAME )
131
+ $(call _BUILD_KP,toolbox,default,--push )
262
132
.PHONY : push-toolbox
263
133
264
134
@@ -268,11 +138,15 @@ test: test-server test-nightly-server
268
138
.PHONY : test
269
139
270
140
test-server : build-server
271
- CONTAINER_CMD=$(CONTAINER_CMD ) LOCAL_TAG=$(SERVER_NAME ) tests/test-samba-container.sh
141
+ CONTAINER_CMD=$(CONTAINER_CMD ) \
142
+ LOCAL_TAG=$(shell cat $(BUILDFILE_SERVER ) |cut -d' ' -f2) \
143
+ tests/test-samba-container.sh
272
144
.PHONY : test-server
273
145
274
- test-nightly-server : build-nightly-server
275
- CONTAINER_CMD=$(CONTAINER_CMD ) LOCAL_TAG=$(NIGHTLY_SERVER_NAME ) tests/test-samba-container.sh
146
+ test-nightly-server : $(BUILDFILE_NIGHTLY_SERVER )
147
+ CONTAINER_CMD=$(CONTAINER_CMD ) \
148
+ LOCAL_TAG=$(shell cat $(BUILDFILE_NIGHTLY_SERVER ) |cut -d' ' -f2) \
149
+ tests/test-samba-container.sh
276
150
.PHONY : test-nightly-server
277
151
278
152
@@ -295,48 +169,19 @@ check-gitlint: $(filter $(ALT_BIN)%,$(GITLINT))
295
169
$(GITLINT ) -C .gitlint --commits origin/master.. lint
296
170
.PHONY : check-gitlint
297
171
298
- # _img_build is an "internal" rule to make the building of samba-container
299
- # images regular and more "self documenting". A makefile.foo that includes
300
- # this Makefile can add build rules using _img_build as a building block.
301
- #
302
- # The following arguments are expected to be supplied when "calling" this rule:
303
- # BUILD_ARGS: the default build arguments
304
- # EXTRA_BUILD_ARGS: build args supplied by the user at "runtime"
305
- # SHORT_NAME: a local name for the image
306
- # REPO_NAME: a global name for the image
307
- # SRC_FILE: path to the Containerfile (Dockerfile)
308
- # DIR: path to the directory holding image contents
309
- # BUILDFILE: path to a temporary file tracking build state
310
- _img_build : $(DIR ) /.common
311
- $(BUILD_CMD ) \
312
- $(BUILD_ARGS ) \
313
- $(call arch_flag) \
314
- $(EXTRA_BUILD_ARGS ) \
315
- --tag $(SHORT_NAME ) \
316
- --tag $(REPO_NAME ) \
317
- --tag $(call build_fqin,$(call get_imagename,$(SHORT_NAME ) ) ,$(call get_pkgsource,$(SHORT_NAME ) ) ,$(SRC_OS_NAME ) ,$(if $(BUILD_ARCH ) ,$(BUILD_ARCH ) ,$(HOST_ARCH ) ) ,$(EXTRA_TAG ) ) \
318
- -f $(SRC_FILE ) \
319
- $(DIR )
320
- $(CONTAINER_CMD ) inspect -f ' {{.Id}}' $(SHORT_NAME ) > $(BUILDFILE )
321
- .PHONY : _img_build
322
-
323
- $(DIR ) /.common : $(COMMON_DIR )
324
- $(RM ) -r $(DIR ) /.common
325
- cp -r $(COMMON_DIR ) $(DIR ) /.common
172
+
173
+ # ## Misc. Rules ###
326
174
327
175
$(ALT_BIN ) /% :
328
176
$(CURDIR ) /hack/install-tools.sh --$* $(ALT_BIN )
329
177
330
-
331
-
332
- # ## Misc. Rules ###
333
-
334
178
clean : clean-buildfiles clean-altbin
335
179
.PHONY : clean
180
+
336
181
clean-buildfiles :
337
182
$(RM ) $(BUILDFILE_PREFIX ) *
338
183
.PHONY : clean-buildfiles
184
+
339
185
clean-altbin :
340
186
$(RM ) -r $(ALT_BIN )
341
187
.PHONY : clean-altbin
342
-
0 commit comments