kernel: Use local kernel source if available

The kernel build currently downloads the source tar ball every
time, which is a little tedious when experimenting with kernel
configs or when compiling the kernel multiple times.

This commit adds a new 'fetch' make target which downloads the
kernel sources into ./sources. Then in the Dockerfile we add
the directory and only download the source if it is not present.

The tarballs signature is till checked on each build.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
This commit is contained in:
Rolf Neugebauer 2017-08-20 11:41:59 +01:00
parent 9362de0adb
commit ffcf5db6ee
3 changed files with 17 additions and 4 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@ Dockerfile.media
*.vmdk
*.vmdk.lck
*.tar
*.tar.xz
*.gz
*.vhdx
*.efi

View File

@ -46,11 +46,12 @@ ENV WIREGUARD_URL=https://git.zx2c4.com/WireGuard/snapshot/WireGuard-${WIREGUARD
COPY keys.asc keys.asc
# Download and verify kernel
COPY sources/ /
RUN curl -fsSLO ${KERNEL_SHA256_SUMS} && \
gpg2 -q --import keys.asc && \
gpg2 --verify sha256sums.asc && \
KERNEL_SHA256=$(grep linux-${KERNEL_VERSION}.tar.xz sha256sums.asc | cut -d ' ' -f 1) && \
curl -fsSLO ${KERNEL_SOURCE} && \
[ -f linux-${KERNEL_VERSION}.tar.xz ] || curl -fsSLO ${KERNEL_SOURCE} && \
echo "${KERNEL_SHA256} linux-${KERNEL_VERSION}.tar.xz" | sha256sum -c - && \
xz -d linux-${KERNEL_VERSION}.tar.xz && \
curl -fsSLO ${KERNEL_PGP2_SIGN} && \

View File

@ -51,11 +51,16 @@ LABELS=$(REPO_LABEL) $(COMMIT_LABEL)
.PHONY: check tag push
# Targets:
# build: builds all kernels
# push: pushes and sign all tagged kernel images to hub
# fetch: Downloads the kernel sources into ./sources
# build: Builds all kernels
# push: Pushes and sign all tagged kernel images to hub
fetch:
build:
push:
sources:
mkdir -p $@
# A template for defining kernel build
# Arguments:
# $1: Full kernel version, e.g., 4.9.22
@ -68,7 +73,12 @@ push:
# build_4.9.x_dbg and adds "_dbg" to the hub image name.
define kernel
build_$(2)$(3): Dockerfile Makefile $(wildcard patches-$(2)/*) $(wildcard kernel_config-$(2)*) kernel_config.debug
ifeq ($(3),)
sources/linux-$(1).tar.xz: Makefile | sources
curl -fsSLo sources/linux-$(1).tar.xz https://www.kernel.org/pub/linux/kernel/v4.x/linux-$(1).tar.xz
endif
build_$(2)$(3): Dockerfile Makefile $(wildcard patches-$(2)/*) $(wildcard kernel_config-$(2)*) kernel_config.debug | sources
docker pull $(ORG)/$(IMAGE):$(1)$(3)-$(TAG)$(SUFFIX) || \
docker build \
--build-arg KERNEL_VERSION=$(1) \
@ -92,6 +102,7 @@ show-tag_$(2)$(3):
build: build_$(2)$(3)
push: push_$(2)$(3)
show-tags: show-tag_$(2)$(3)
fetch: sources/linux-$(1).tar.xz
ifneq ($(2), 4.4.x)
build_perf_$(2)$(3): build_$(2)$(3)