Skip to content

Commit edfdea7

Browse files
luxasstealthybox
andauthored
Completely restructure & document the kernel image build (weaveworks#506)
* Completely restructure & document the kernel image build Co-Authored-By: leigh capili <[email protected]>
1 parent e6f4bfb commit edfdea7

13 files changed

+17374
-26
lines changed

images/kernel/Dockerfile

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ RUN git fetch --tags
55
RUN git checkout v${KERNEL_VERSION} && \
66
make clean && make mrproper
77

8-
COPY config-${KERNEL_VERSION}${KERNEL_EXTRA} .config
8+
COPY generated/config-amd64-${KERNEL_VERSION}${KERNEL_EXTRA} .config
99

10-
RUN make EXTRAVERSION=${KERNEL_EXTRA} LOCALVERSION= olddefconfig && \
11-
make EXTRAVERSION=${KERNEL_EXTRA} LOCALVERSION= olddefconfig
10+
RUN make EXTRAVERSION=${KERNEL_EXTRA} LOCALVERSION= olddefconfig
1211

1312
RUN make EXTRAVERSION=${KERNEL_EXTRA} LOCALVERSION= -j32
1413
RUN make EXTRAVERSION=${KERNEL_EXTRA} LOCALVERSION= modules_install

images/kernel/Makefile

+19-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
1-
KERNEL_VERSION ?= 4.19.47
2-
KERNEL_EXTRA ?=
1+
# Check https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/ for updates
2+
KERNEL_VERSIONS ?= 4.14.166 4.19.97 5.4.13
33

44
all: build
5-
build:
6-
docker build -t weaveworks/ignite-kernel:${KERNEL_VERSION}${KERNEL_EXTRA} \
7-
--build-arg KERNEL_VERSION=${KERNEL_VERSION} \
8-
--build-arg KERNEL_EXTRA=${KERNEL_EXTRA} .
95

10-
push:
11-
docker push weaveworks/ignite-kernel:${KERNEL_VERSION}${KERNEL_EXTRA}
6+
upgrade: $(addprefix upgrade-,$(KERNEL_VERSIONS))
7+
./patch-config.sh
8+
for file in generated/*; do \
9+
./upgrade-config.sh $$file $$file; done
10+
11+
upgrade-%:
12+
for file in upstream/*; do \
13+
./upgrade-config.sh $$file versioned/$$(basename $$file)-$*; done
14+
15+
build: $(addprefix build-,$(KERNEL_VERSIONS))
16+
build-%:
17+
docker build -t weaveworks/ignite-kernel:$* \
18+
--build-arg KERNEL_VERSION=$* .
19+
20+
push: build $(addprefix push-,$(KERNEL_VERSIONS))
21+
push-%:
22+
docker push weaveworks/ignite-kernel:${KERNEL_VERSION}

images/kernel/README.md

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Kernel Images
2+
3+
These kernel OCI images contain the kernel binary (at `/boot/vmlinux`) and supporting modules (in `/lib/modules`)
4+
for guest VMs ran by Ignite.
5+
6+
## Building the Kernel Images
7+
8+
```console
9+
$ make
10+
```
11+
12+
## Versions
13+
14+
All LTS versions starting from 4.14 and above are supported by the Ignite team.
15+
This means in practice:
16+
17+
- 4.14.x
18+
- 4.19.x
19+
- 5.4.x
20+
21+
The exact patch versions may be found in the [Makefile](Makefile).
22+
The available versions exist in the [stable kernel git tree](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/).
23+
24+
## Upgrading to a new kernel version
25+
26+
The kernel Makefile has an `upgrade` command that will generate patched kernel configs for each specific version in `KERNEL_VERSIONS`.
27+
28+
The linux kernel source code is checked out in a build container for each target version, and a resulting "olddefconfig" based on each Firecracker recommended base-config in the `upstream/` directory is then output to the `versioned/` directory.
29+
30+
Once `make upgrade-%` has produced a firecracker base-config for all `KERNEL_VERSIONS`, the resulting versioned configs are copied to the `generated/` dir and are patched with ignite specific `./config-patches`. These configs under `generated/` are used for the matching kernel builds.
31+
32+
Run:
33+
34+
```console
35+
$ make upgrade
36+
```
37+
38+
after you've upgraded the values in the Makefile.
39+
40+
## Kernel Config Parameters we care about
41+
42+
Some options to the kernel are specifically important for making guest software work.
43+
44+
Please see: [config-patches](config-patches) for what kernel configs we've changed.
45+
The base kernel config is the MicroVM-optimized config file from the Firecracker team.
46+
We're storing it in [upstream/config-amd64](upstream/config-amd64). It's available online
47+
at [firecracker/resources](https://github.com/firecracker-microvm/firecracker/tree/master/resources).

images/kernel/config-patches

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# In this file, the recipe for patching all kernel configs (all versions & architectures) is
2+
3+
# For making Weave Net work
4+
CONFIG_DUMMY=y
5+
# Enable VXLAN support as a module so that e.g. Flannel works
6+
CONFIG_VXLAN=m
7+
# Enable support for soft shutdown of amd64 VMs
8+
# See https://github.com/firecracker-microvm/firecracker/blob/master/docs/api_requests/actions.md#sendctrlaltdel
9+
CONFIG_KEYBOARD_ATKBD=y
10+
CONFIG_SERIO=y
11+
CONFIG_SERIO_I8042=y
12+
CONFIG_SERIO_LIBPS2=y
13+
# Make the guest's wall clock not drift
14+
# https://github.com/firecracker-microvm/firecracker/blob/master/FAQ.md#my-guest-wall-clock-is-drifting-how-can-i-fix-it
15+
CONFIG_PTP_1588_CLOCK=y
16+
CONFIG_PTP_1588_CLOCK_KVM=y
17+
18+
# Some patches for keeping network functionalities that Kubernetes needs/might need
19+
CONFIG_IPVLAN=y
20+
CONFIG_IPVTAP=y
21+
CONFIG_TAP=y
22+
CONFIG_IP_VS_MH=m

images/kernel/config-4.14.123 renamed to images/kernel/generated/config-amd64-4.14.166

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#
22
# Automatically generated file; DO NOT EDIT.
3-
# Linux/x86 4.14.123 Kernel Configuration
3+
# Linux/x86 4.14.166 Kernel Configuration
44
#
55
CONFIG_64BIT=y
66
CONFIG_X86_64=y
@@ -592,6 +592,9 @@ CONFIG_ARCH_RANDOM=y
592592
CONFIG_X86_SMAP=y
593593
# CONFIG_X86_INTEL_MPX is not set
594594
CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
595+
CONFIG_X86_INTEL_TSX_MODE_OFF=y
596+
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
597+
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
595598
CONFIG_SECCOMP=y
596599
# CONFIG_HZ_100 is not set
597600
CONFIG_HZ_250=y
@@ -1313,6 +1316,7 @@ CONFIG_DNS_RESOLVER=m
13131316
# CONFIG_BATMAN_ADV is not set
13141317
CONFIG_OPENVSWITCH=m
13151318
CONFIG_OPENVSWITCH_GRE=m
1319+
CONFIG_OPENVSWITCH_VXLAN=m
13161320
CONFIG_VSOCKETS=y
13171321
CONFIG_VIRTIO_VSOCKETS=y
13181322
CONFIG_VIRTIO_VSOCKETS_COMMON=y
@@ -1837,7 +1841,7 @@ CONFIG_I2C_ALGOBIT=m
18371841
# CONFIG_SPI is not set
18381842
# CONFIG_SPMI is not set
18391843
# CONFIG_HSI is not set
1840-
CONFIG_PPS=m
1844+
CONFIG_PPS=y
18411845
CONFIG_PPS_DEBUG=y
18421846

18431847
#
@@ -1854,12 +1858,12 @@ CONFIG_PPS_CLIENT_GPIO=m
18541858
#
18551859
# PTP clock support
18561860
#
1857-
CONFIG_PTP_1588_CLOCK=m
1861+
CONFIG_PTP_1588_CLOCK=y
18581862

18591863
#
18601864
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
18611865
#
1862-
CONFIG_PTP_1588_CLOCK_KVM=m
1866+
CONFIG_PTP_1588_CLOCK_KVM=y
18631867
# CONFIG_GPIOLIB is not set
18641868
# CONFIG_W1 is not set
18651869
# CONFIG_POWER_AVS is not set
@@ -3260,6 +3264,7 @@ CONFIG_ASSOCIATIVE_ARRAY=y
32603264
CONFIG_HAS_IOMEM=y
32613265
CONFIG_HAS_IOPORT_MAP=y
32623266
CONFIG_HAS_DMA=y
3267+
# CONFIG_SGL_ALLOC is not set
32633268
# CONFIG_DMA_NOOP_OPS is not set
32643269
# CONFIG_DMA_VIRT_OPS is not set
32653270
CONFIG_CPU_RMAP=y

images/kernel/config-4.19.47 renamed to images/kernel/generated/config-amd64-4.19.97

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
#
22
# Automatically generated file; DO NOT EDIT.
3-
# Linux/x86 4.19.47 Kernel Configuration
3+
# Linux/x86 4.19.97 Kernel Configuration
44
#
55

66
#
7-
# Compiler: gcc (Ubuntu 7.4.0-1ubuntu1~18.10) 7.4.0
7+
# Compiler: gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
88
#
99
CONFIG_CC_IS_GCC=y
1010
CONFIG_GCC_VERSION=70400
1111
CONFIG_CLANG_VERSION=0
12+
CONFIG_CC_HAS_ASM_GOTO=y
1213
CONFIG_IRQ_WORK=y
1314
CONFIG_BUILDTIME_EXTABLE_SORT=y
1415
CONFIG_THREAD_INFO_IN_TASK=y
@@ -358,6 +359,9 @@ CONFIG_X86_SMAP=y
358359
CONFIG_X86_INTEL_UMIP=y
359360
# CONFIG_X86_INTEL_MPX is not set
360361
CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
362+
CONFIG_X86_INTEL_TSX_MODE_OFF=y
363+
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
364+
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
361365
CONFIG_SECCOMP=y
362366
# CONFIG_HZ_100 is not set
363367
CONFIG_HZ_250=y
@@ -758,7 +762,7 @@ CONFIG_PACKET_DIAG=m
758762
CONFIG_UNIX=y
759763
CONFIG_UNIX_DIAG=m
760764
CONFIG_TLS=m
761-
CONFIG_TLS_DEVICE=y
765+
# CONFIG_TLS_DEVICE is not set
762766
CONFIG_XFRM=y
763767
CONFIG_XFRM_OFFLOAD=y
764768
CONFIG_XFRM_ALGO=y
@@ -1338,6 +1342,7 @@ CONFIG_DNS_RESOLVER=m
13381342
# CONFIG_BATMAN_ADV is not set
13391343
CONFIG_OPENVSWITCH=m
13401344
CONFIG_OPENVSWITCH_GRE=m
1345+
CONFIG_OPENVSWITCH_VXLAN=m
13411346
CONFIG_VSOCKETS=y
13421347
CONFIG_VSOCKETS_DIAG=y
13431348
CONFIG_VIRTIO_VSOCKETS=y
@@ -1393,7 +1398,6 @@ CONFIG_LWTUNNEL=y
13931398
CONFIG_LWTUNNEL_BPF=y
13941399
CONFIG_DST_CACHE=y
13951400
CONFIG_GRO_CELLS=y
1396-
CONFIG_SOCK_VALIDATE_XMIT=y
13971401
# CONFIG_NET_DEVLINK is not set
13981402
CONFIG_MAY_USE_DEVLINK=y
13991403
CONFIG_FAILOVER=y
@@ -1871,7 +1875,7 @@ CONFIG_I2C_ALGOBIT=m
18711875
# CONFIG_SPI is not set
18721876
# CONFIG_SPMI is not set
18731877
# CONFIG_HSI is not set
1874-
CONFIG_PPS=m
1878+
CONFIG_PPS=y
18751879
CONFIG_PPS_DEBUG=y
18761880

18771881
#
@@ -1888,12 +1892,12 @@ CONFIG_PPS_CLIENT_GPIO=m
18881892
#
18891893
# PTP clock support
18901894
#
1891-
CONFIG_PTP_1588_CLOCK=m
1895+
CONFIG_PTP_1588_CLOCK=y
18921896

18931897
#
18941898
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
18951899
#
1896-
CONFIG_PTP_1588_CLOCK_KVM=m
1900+
CONFIG_PTP_1588_CLOCK_KVM=y
18971901
# CONFIG_PINCTRL is not set
18981902
# CONFIG_GPIOLIB is not set
18991903
# CONFIG_W1 is not set
@@ -2165,10 +2169,10 @@ CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m
21652169
#
21662170
# Frame buffer Devices
21672171
#
2168-
CONFIG_FB=m
2169-
# CONFIG_FIRMWARE_EDID is not set
21702172
CONFIG_FB_CMDLINE=y
21712173
CONFIG_FB_NOTIFY=y
2174+
CONFIG_FB=m
2175+
# CONFIG_FIRMWARE_EDID is not set
21722176
CONFIG_FB_CFB_FILLRECT=m
21732177
CONFIG_FB_CFB_COPYAREA=m
21742178
CONFIG_FB_CFB_IMAGEBLIT=m
@@ -2266,7 +2270,7 @@ CONFIG_HID_GENERIC=m
22662270
# CONFIG_HID_LOGITECH is not set
22672271
# CONFIG_HID_MAGICMOUSE is not set
22682272
# CONFIG_HID_MAYFLASH is not set
2269-
# CONFIG_HID_REDRAGON is not set
2273+
CONFIG_HID_REDRAGON=y
22702274
# CONFIG_HID_MICROSOFT is not set
22712275
# CONFIG_HID_MONTEREY is not set
22722276
# CONFIG_HID_MULTITOUCH is not set
@@ -2404,7 +2408,6 @@ CONFIG_IOMMU_SUPPORT=y
24042408
#
24052409
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
24062410
# CONFIG_RPMSG_VIRTIO is not set
2407-
# CONFIG_SOUNDWIRE is not set
24082411

24092412
#
24102413
# SOC (System On Chip) specific Drivers

0 commit comments

Comments
 (0)