mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-09-03 07:55:05 +00:00
kernel: Tweak kernel build
- Combine 'sign' and 'push' targets like it is done for package builds. - Append '-dirty' to the tag if the repository is dirty. - Don't push to hub if the repository is dirty. Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
# in a scratch container, which contains the bzImage, a tar
|
||||
# ball with modules, the kernel sources, and in some case, the perf binary.
|
||||
#
|
||||
# Each kernel is pushed to hub twice, once as
|
||||
# linuxkit/kernel:<kernel>.<major>.<minor>-<hash> and once as
|
||||
# linuxkit/kernel:<kernel>.<major>.x. The <hash> is the git tree hash
|
||||
# of the current directory. The build will only rebuild the kernel
|
||||
# image if the git tree hash changed.
|
||||
# Each kernel is pushed to hub twice:
|
||||
# - linuxkit/kernel:<kernel>.<major>.<minor>-<hash>
|
||||
# - linuxkit/kernel:<kernel>.<major>.<minor>
|
||||
# The <hash> is the git tree hash of the current directory. The build
|
||||
# will only rebuild the kernel image if the git tree hash changed.
|
||||
#
|
||||
# For some kernels we also build a separate package containing the perf utility
|
||||
# which is specific to a given kernel. perf packages are tagged the same way
|
||||
@@ -19,14 +19,25 @@ ORG?=linuxkit
|
||||
IMAGE:=kernel
|
||||
IMAGE_PERF:=kernel-perf
|
||||
|
||||
.PHONY: check tag push sign
|
||||
# Add '-dirty' to hash if the repository is not clean. make does not
|
||||
# concatenate strings without spaces, so we use the documented trick
|
||||
# of replacing the space with nothing.
|
||||
DIRTY=$(shell git diff-index --quiet HEAD --; echo $$?)
|
||||
ifneq ($(DIRTY),0)
|
||||
HASH+=-dirty
|
||||
nullstring :=
|
||||
space := $(nullstring) $(nullstring)
|
||||
TAG=$(subst $(space),,$(HASH))
|
||||
else
|
||||
TAG=$(HASH)
|
||||
endif
|
||||
|
||||
.PHONY: check tag push
|
||||
# Targets:
|
||||
# build: builds all kernels
|
||||
# push: pushes all tagged kernel images to hub
|
||||
# sign: sign and push all kernel images to hub
|
||||
# push: pushes and sign all tagged kernel images to hub
|
||||
build:
|
||||
push:
|
||||
sign:
|
||||
|
||||
# A template for defining kernel build
|
||||
# Arguments:
|
||||
@@ -34,57 +45,45 @@ sign:
|
||||
# $2: Kernel "series", e.g., 4.9.x
|
||||
# $3: Build a debug kernel (used as suffix for image)
|
||||
# This defines targets like:
|
||||
# build_4.9.x, push_4.9.x and sign_4.9.x and adds them as dependencies
|
||||
# build_4.9.x and push_4.9.x and adds them as dependencies
|
||||
# to the global targets
|
||||
# Set $3 to "_dbg", to build debug kernels. This defines targets like
|
||||
# build_4.9.x_dbg and adds "_dbg" to the hub image name.
|
||||
define kernel
|
||||
build_$(2)$(3): Dockerfile Makefile $(wildcard patches-$(2)/*) kernel_config-$(2) kernel_config.debug
|
||||
docker pull $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) || \
|
||||
docker pull $(ORG)/$(IMAGE):$(1)$(3)-$(TAG) || \
|
||||
docker build \
|
||||
--build-arg KERNEL_VERSION=$(1) \
|
||||
--build-arg KERNEL_SERIES=$(2) \
|
||||
--build-arg DEBUG=$(3) \
|
||||
--no-cache -t $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) .
|
||||
--no-cache -t $(ORG)/$(IMAGE):$(1)$(3)-$(TAG) .
|
||||
|
||||
push_$(2)$(3): build_$(2)$(3)
|
||||
docker pull $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) || \
|
||||
(docker push $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) && \
|
||||
docker tag $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) $(ORG)/$(IMAGE):$(2)$(3) && \
|
||||
docker push $(ORG)/$(IMAGE):$(2)$(3))
|
||||
|
||||
sign_$(2)$(3): build_$(2)$(3)
|
||||
DOCKER_CONTENT_TRUST=1 docker pull $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) || \
|
||||
(DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) && \
|
||||
docker tag $(ORG)/$(IMAGE):$(1)$(3)-$(HASH) $(ORG)/$(IMAGE):$(2)$(3) && \
|
||||
DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE):$(2)$(3))
|
||||
@if [ $(DIRTY) -ne 0 ]; then echo "Your repository is not clean. Will not push image"; exit 1; fi
|
||||
DOCKER_CONTENT_TRUST=1 docker pull $(ORG)/$(IMAGE):$(1)$(3)-$(TAG) || \
|
||||
(DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE):$(1)$(3)-$(TAG) && \
|
||||
docker tag $(ORG)/$(IMAGE):$(1)$(3)-$(TAG) $(ORG)/$(IMAGE):$(1)$(3) && \
|
||||
DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE):$(1)$(3))
|
||||
|
||||
build: build_$(2)$(3)
|
||||
push: push_$(2)$(3)
|
||||
sign: sign_$(2)$(3)
|
||||
|
||||
ifneq ($(2), 4.4.x)
|
||||
build_perf_$(2)$(3): build_$(2)$(3)
|
||||
docker pull $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) || \
|
||||
docker pull $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(TAG) || \
|
||||
docker build -f Dockerfile.perf \
|
||||
--build-arg IMAGE=$(ORG)/$(IMAGE):$(1)$(3)-$(HASH) \
|
||||
--no-cache --network=none -t $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) .
|
||||
--build-arg IMAGE=$(ORG)/$(IMAGE):$(1)$(3)-$(TAG) \
|
||||
--no-cache --network=none -t $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(TAG) .
|
||||
|
||||
push_perf_$(2)$(3): build_perf_$(2)$(3)
|
||||
docker pull $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) || \
|
||||
(docker push $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) && \
|
||||
docker tag $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) $(ORG)/$(IMAGE_PERF):$(2)$(3) && \
|
||||
docker push $(ORG)/$(IMAGE_PERF):$(2)$(3))
|
||||
|
||||
sign_perf_$(2)$(3): build_perf_$(2)$(3)
|
||||
DOCKER_CONTENT_TRUST=1 docker pull $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) || \
|
||||
(DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) && \
|
||||
docker tag $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(HASH) $(ORG)/$(IMAGE_PERF):$(2)$(3) && \
|
||||
DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE_PERF):$(2)$(3))
|
||||
@if [ $(DIRTY) -ne 0 ]; then echo "Your repository is not clean. Will not push image"; exit 1; fi
|
||||
DOCKER_CONTENT_TRUST=1 docker pull $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(TAG) || \
|
||||
(DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(TAG) && \
|
||||
docker tag $(ORG)/$(IMAGE_PERF):$(1)$(3)-$(TAG) $(ORG)/$(IMAGE_PERF):$(1)$(3) && \
|
||||
DOCKER_CONTENT_TRUST=1 docker push $(ORG)/$(IMAGE_PERF):$(1)$(3))
|
||||
|
||||
build: build_perf_$(2)$(3)
|
||||
push: push_perf_$(2)$(3)
|
||||
sign: sign_perf_$(2)$(3)
|
||||
endif
|
||||
|
||||
endef
|
||||
|
Reference in New Issue
Block a user