Skip to content

Commit d2c1108

Browse files
committed
Improve Makefile for podman and SELinux
1 parent d7fd217 commit d2c1108

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

Makefile

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ REGISTRY_PASS ?=
6767
ARCH ?= $(if $(findstring x86_64,$(shell uname -m)),amd64,$(shell uname -m))
6868
# LTS is a boolean value to enable/disable LTS container build
6969
LTS ?= false
70+
# VOLUME_MOUNT_OPTIONS is used when bind-mounting files from the "downloads" directory into the container. By default, SELinux labels are automatically re-written, but this doesn't work on some filesystems with extended attributes (xattrs). You can turn off the label re-writing by setting this variable to be blank.
71+
VOLUME_MOUNT_OPTIONS ?= :Z
7072

7173
###############################################################################
7274
# Other variables
@@ -80,7 +82,7 @@ MQ_ARCHIVE_DEV_TYPE=Linux
8082
BUILD_SERVER_CONTAINER=build-server
8183
# NUM_CPU is the number of CPUs available to Docker. Used to control how many
8284
# test run in parallel
83-
NUM_CPU ?= $(or $(shell docker info --format "{{ .NCPU }}"),2)
85+
NUM_CPU ?= $(or $(shell $(COMMAND) info --format "{{ .NCPU }}"),2)
8486
# BASE_IMAGE_TAG is a normalized version of BASE_IMAGE, suitable for use in a Docker tag
8587
BASE_IMAGE_TAG=$(lastword $(subst /, ,$(subst :,-,$(BASE_IMAGE))))
8688
#BASE_IMAGE_TAG=$(subst /,-,$(subst :,-,$(BASE_IMAGE)))
@@ -258,12 +260,12 @@ test/docker/vendor:
258260
# Shortcut to just run the unit tests
259261
.PHONY: test-unit
260262
test-unit:
261-
docker build --target builder --file Dockerfile-server .
263+
$(COMMAND) build --target builder --file Dockerfile-server .
262264

263265
.PHONY: test-advancedserver
264266
test-advancedserver: test/docker/vendor
265-
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) on $(shell docker --version)"$(END)))
266-
docker inspect $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)
267+
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) on $(shell $(COMMAND) --version)"$(END)))
268+
$(COMMAND) inspect $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)
267269
cd test/docker && TEST_IMAGE=$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) EXPECTED_LICENSE=Production go test -parallel $(NUM_CPU) -timeout $(TEST_TIMEOUT_DOCKER) $(TEST_OPTS_DOCKER)
268270

269271
.PHONY: build-devjmstest
@@ -273,8 +275,8 @@ build-devjmstest: registry-login
273275

274276
.PHONY: test-devserver
275277
test-devserver: test/docker/vendor
276-
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_DEVSERVER):$(MQ_TAG) on $(shell docker --version)"$(END)))
277-
docker inspect $(MQ_IMAGE_DEVSERVER):$(MQ_TAG)
278+
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_DEVSERVER):$(MQ_TAG) on $(shell $(COMMAND) --version)"$(END)))
279+
$(COMMAND) inspect $(MQ_IMAGE_DEVSERVER):$(MQ_TAG)
278280
cd test/docker && TEST_IMAGE=$(MQ_IMAGE_DEVSERVER):$(MQ_TAG) EXPECTED_LICENSE=Developer DEV_JMS_IMAGE=$(DEV_JMS_IMAGE) IBMJRE=true go test -parallel $(NUM_CPU) -timeout $(TEST_TIMEOUT_DOCKER) -tags mqdev $(TEST_OPTS_DOCKER)
279281

280282
.PHONY: coverage
@@ -283,7 +285,7 @@ coverage:
283285

284286
.PHONY: test-advancedserver-cover
285287
test-advancedserver-cover: test/docker/vendor coverage
286-
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) with code coverage on $(shell docker --version)"$(END)))
288+
$(info $(SPACER)$(shell printf $(TITLE)"Test $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) with code coverage on $(shell $(COMMAND) --version)"$(END)))
287289
rm -f ./coverage/unit*.cov
288290
# Run unit tests with coverage, for each package under 'internal'
289291
go list -f '{{.Name}}' ./internal/... | xargs -I {} go test -cover -covermode count -coverprofile ./coverage/unit-{}.cov ./internal/{}
@@ -307,8 +309,8 @@ test-advancedserver-cover: test/docker/vendor coverage
307309
# Build an MQ image. The commands used are slightly different between Docker and Podman
308310
define build-mq
309311
$(if $(findstring docker,$(COMMAND)), @docker network create build,)
310-
$(if $(findstring docker,$(COMMAND)), @docker run --rm --name $(BUILD_SERVER_CONTAINER) --network build --network-alias build --volume $(DOWNLOADS_DIR):/opt/app-root/src:ro --detach registry.redhat.io/ubi8/nginx-118 nginx -g "daemon off;",)
311-
$(eval EXTRA_ARGS=$(if $(findstring docker,$(COMMAND)), --network build --build-arg MQ_URL=http://build:8080/$4, --volume $(DOWNLOADS_DIR):/var/downloads --build-arg MQ_URL=file:///var/downloads/$4))
312+
$(if $(findstring docker,$(COMMAND)), @docker run --rm --name $(BUILD_SERVER_CONTAINER) --network build --network-alias build --volume $(DOWNLOADS_DIR):/opt/app-root/src$(VOLUME_MOUNT_OPTIONS) --detach registry.redhat.io/ubi8/nginx-118 nginx -g "daemon off;",)
313+
$(eval EXTRA_ARGS=$(if $(findstring docker,$(COMMAND)), --network build --build-arg MQ_URL=http://build:8080/$4, --volume $(DOWNLOADS_DIR):/var/downloads$(VOLUME_MOUNT_OPTIONS) --build-arg MQ_URL=file:///var/downloads/$4))
312314
# Build the new image
313315
$(COMMAND) build \
314316
--tag $1:$2 \
@@ -321,26 +323,26 @@ define build-mq
321323
--label name=$1 \
322324
--label build-date=$(shell date +%Y-%m-%dT%H:%M:%S%z) \
323325
--label architecture="$(ARCH)" \
324-
--label run="docker run -d -e LICENSE=accept $1:$2" \
326+
--label run="podman run -d -e LICENSE=accept $1:$2" \
325327
--label vcs-ref=$(IMAGE_REVISION) \
326328
--label vcs-type=git \
327329
--label vcs-url=$(IMAGE_SOURCE) \
328330
$(EXTRA_LABELS) \
329331
--target $5 \
330-
.
332+
.
331333
$(if $(findstring docker,$(COMMAND)), @docker kill $(BUILD_SERVER_CONTAINER))
332334
$(if $(findstring docker,$(COMMAND)), @docker network rm build)
333335
endef
334336

335-
DOCKER_SERVER_VERSION=$(shell docker version --format "{{ .Server.Version }}")
336-
DOCKER_CLIENT_VERSION=$(shell docker version --format "{{ .Client.Version }}")
337+
COMMAND_SERVER_VERSION=$(shell $(COMMAND) version --format "{{ .Server.Version }}")
338+
COMMAND_CLIENT_VERSION=$(shell $(COMMAND) version --format "{{ .Client.Version }}")
337339
PODMAN_VERSION=$(shell podman version --format "{{ .Version }}")
338340
.PHONY: command-version
339341
command-version:
340342
# If we're using Docker, then check it's recent enough to support multi-stage builds
341343
ifneq (,$(findstring docker,$(COMMAND)))
342-
@test "$(word 1,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker client 17.05 or greater is required" && exit 1)
343-
@test "$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker server 17.05 or greater is required" && exit 1)
344+
@test "$(word 1,$(subst ., ,$(COMMAND_CLIENT_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(COMMAND_CLIENT_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(COMMAND_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker client 17.05 or greater is required" && exit 1)
345+
@test "$(word 1,$(subst ., ,$(COMMAND_SERVER_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(COMMAND_SERVER_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(COMMAND_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker server 17.05 or greater is required" && exit 1)
344346
endif
345347
ifneq (,$(findstring podman,$(COMMAND)))
346348
@test "$(word 1,$(subst ., ,$(PODMAN_VERSION)))" -ge "1" || (echo "Error: Podman version 1.0 or greater is required" && exit 1)
@@ -463,7 +465,7 @@ endif
463465

464466
.PHONY: build-skopeo-container
465467
build-skopeo-container:
466-
$(COMMAND) images | grep -q "skopeo"; if [ $$? != 0 ]; then docker build -t skopeo:latest ./docker-builds/skopeo/; fi
468+
$(COMMAND) images | grep -q "skopeo"; if [ $$? != 0 ]; then $(COMMAND) build -t skopeo:latest ./docker-builds/skopeo/; fi
467469

468470
.PHONY: clean
469471
clean:

0 commit comments

Comments
 (0)