From 8cbaedc039ccd3a3357f36f1c498b2f2280e5f50 Mon Sep 17 00:00:00 2001 From: Dom Del Nano Date: Mon, 6 Apr 2026 20:26:17 -0700 Subject: [PATCH 1/2] Rebuild using latest kernel versions. Ran into issues with arm64 kernel header builds Signed-off-by: Dom Del Nano --- tools/docker/Makefile | 53 ++++++------------- tools/docker/linux_headers_image/Dockerfile | 9 ++++ .../build_linux_headers.sh | 8 ++- 3 files changed, 31 insertions(+), 39 deletions(-) diff --git a/tools/docker/Makefile b/tools/docker/Makefile index 7a478cb7f9d..775d540a462 100644 --- a/tools/docker/Makefile +++ b/tools/docker/Makefile @@ -72,36 +72,15 @@ SYSROOT_CREATOR_IMAGE_TAG := sysroot-creator-$(SYSROOT_REV) ## Linux image parameters LINUX_HEADER_BUILD_DIR := $(BUILD_DIR)/linux_headers LINUX_HEADER_ASSETS_BUILD_DIR := $(LINUX_HEADER_BUILD_DIR)/assets -LINUX_KERNEL_VERSIONS := 4.14.309 \ - 4.15.18 \ - 4.16.18 \ - 4.17.19 \ - 4.18.20 \ - 4.19.325 \ - 4.20.17 \ - 5.0.21 \ - 5.1.21 \ - 5.2.21 \ - 5.3.18 \ - 5.4.293 \ - 5.5.19 \ - 5.6.19 \ - 5.7.19 \ - 5.8.18 \ - 5.9.16 \ - 5.10.237 \ - 5.11.22 \ - 5.12.19 \ - 5.13.19 \ +LINUX_KERNEL_VERSIONS := 4.18.20 \ + 5.10.252 \ 5.14.21 \ - 5.15.181 \ - 5.16.20 \ - 5.17.15 \ - 5.18.19 \ - 5.19.17 \ - 6.0.19 \ - 6.1.137 \ - 6.6.89 + 6.1.167 \ + 6.6.132 \ + 6.12.80 \ + 6.18.21 \ + 6.19.10 + LINUX_HEADER_TEMPLATE := linux-headers-%.tar.gz LINUX_HEADER_X86_64_TARGETS = $(addprefix $(LINUX_HEADER_ASSETS_BUILD_DIR)/, \ @@ -135,14 +114,12 @@ elasticsearch_image_tag := "gcr.io/pixie-oss/pixie-dev-public/elasticsearch:$(EL ## Linux kernel for qemu/BPF tests. KERNEL_BUILD_DIR := $(BUILD_DIR)/kernel_build -# 4.19.276, 4.14.304 are the correct versions here, but there is a bug with patch > 255. -KERNEL_BUILD_VERSIONS := 4.14.254 \ - 4.19.254 \ - 5.4.254 \ - 5.10.224 \ - 5.15.165 \ - 6.1.106 \ - 6.8.12 +KERNEL_BUILD_VERSIONS := 5.10.252 \ + 5.14.21 \ + 6.1.167 \ + 6.6.132 \ + 6.12.80 \ + 6.18.21 KERNEL_BUILD_TEMPLATE := linux-build-%.tar.gz KERNEL_BUILD_TARGETS = $(addprefix $(KERNEL_BUILD_DIR)/, $(patsubst %,$(KERNEL_BUILD_TEMPLATE), $(KERNEL_BUILD_VERSIONS))) @@ -251,7 +228,7 @@ $(LINUX_HEADERS_ARM64_MERGED_FILE): $(LINUX_HEADER_ARM64_TARGETS) .PHONY: upload_linux_headers upload_linux_headers: $(LINUX_HEADERS_X86_64_MERGED_FILE) $(LINUX_HEADERS_ARM64_MERGED_FILE) ## Target to build and upload linux headers image - gsutil cp $^ $(LINUX_HEADERS_GS_PATH) + # gsutil cp $^ $(LINUX_HEADERS_GS_PATH) $(GH_RELEASE_UPLOAD) linux-headers $(LINUX_HEADERS_REV) $^ sha256sum $^ diff --git a/tools/docker/linux_headers_image/Dockerfile b/tools/docker/linux_headers_image/Dockerfile index 844e9632173..963ad75d77b 100644 --- a/tools/docker/linux_headers_image/Dockerfile +++ b/tools/docker/linux_headers_image/Dockerfile @@ -27,6 +27,7 @@ RUN apt-get update RUN apt-get upgrade -y -q RUN apt-get install -y -q build-essential \ bc \ + libdw-dev \ libelf-dev \ libssl-dev \ flex \ @@ -41,6 +42,14 @@ RUN apt-get install -y -q build-essential \ debhelper \ python3 +# opensslconf.h lives at the multiarch path (e.g. /usr/include/x86_64-linux-gnu/openssl/). +# During cross-compilation, dpkg-buildpackage alters include paths so host tools +# (like scripts/sign-file) can no longer find it. Symlink it to the standard path. +RUN if [ -f /usr/include/x86_64-linux-gnu/openssl/opensslconf.h ] && \ + [ ! -f /usr/include/openssl/opensslconf.h ]; then \ + ln -s /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/openssl/opensslconf.h; \ + fi + WORKDIR /configs ADD x86_64_config /configs/x86_64 ADD arm64_config /configs/arm64 diff --git a/tools/docker/linux_headers_image/build_linux_headers.sh b/tools/docker/linux_headers_image/build_linux_headers.sh index 7f40674b657..55364387d2d 100644 --- a/tools/docker/linux_headers_image/build_linux_headers.sh +++ b/tools/docker/linux_headers_image/build_linux_headers.sh @@ -73,7 +73,13 @@ if [ "${KERN_MAJ}" -lt 6 ] || { [ "${KERN_MAJ}" -le 6 ] && [ "${KERN_MIN}" -lt 3 fi echo "Building ${TARGET} for ${KERN_VERSION}${LOCALVERSION} (${ARCH})" -make ARCH="${ARCH}" -j "$(nproc)" "${TARGET}" LOCALVERSION="${LOCALVERSION}" +EXTRA_MAKE_ARGS="" +if [ "${ARCH}" != "$(uname -m)" ]; then + # Skip dpkg dependency checks when cross-compiling, since host packages + # (e.g. libssl-dev) won't satisfy target arch requirements. + EXTRA_MAKE_ARGS="DPKG_FLAGS=-d" +fi +make ARCH="${ARCH}" -j "$(nproc)" "${TARGET}" LOCALVERSION="${LOCALVERSION}" ${EXTRA_MAKE_ARGS} popd || exit popd || exit From c6ed97867f196ea583faa3074b82f9d72a771b7c Mon Sep 17 00:00:00 2001 From: Dom Del Nano Date: Tue, 7 Apr 2026 05:56:39 -0700 Subject: [PATCH 2/2] Successfully build x86 and arm64 kernel headers for new linux versions Signed-off-by: Dom Del Nano --- tools/docker/Makefile | 15 +++--- tools/docker/linux_headers_image/Dockerfile | 13 ----- .../build_linux_headers.sh | 51 ++++++------------- 3 files changed, 24 insertions(+), 55 deletions(-) diff --git a/tools/docker/Makefile b/tools/docker/Makefile index 775d540a462..eb4c7a19ad2 100644 --- a/tools/docker/Makefile +++ b/tools/docker/Makefile @@ -74,12 +74,12 @@ LINUX_HEADER_BUILD_DIR := $(BUILD_DIR)/linux_headers LINUX_HEADER_ASSETS_BUILD_DIR := $(LINUX_HEADER_BUILD_DIR)/assets LINUX_KERNEL_VERSIONS := 4.18.20 \ 5.10.252 \ - 5.14.21 \ - 6.1.167 \ - 6.6.132 \ - 6.12.80 \ - 6.18.21 \ - 6.19.10 + 5.14.21 \ + 6.1.167 \ + 6.6.132 \ + 6.12.80 \ + 6.18.21 \ + 6.19.10 LINUX_HEADER_TEMPLATE := linux-headers-%.tar.gz @@ -114,7 +114,8 @@ elasticsearch_image_tag := "gcr.io/pixie-oss/pixie-dev-public/elasticsearch:$(EL ## Linux kernel for qemu/BPF tests. KERNEL_BUILD_DIR := $(BUILD_DIR)/kernel_build -KERNEL_BUILD_VERSIONS := 5.10.252 \ +KERNEL_BUILD_VERSIONS := 4.14.309 \ + 5.10.252 \ 5.14.21 \ 6.1.167 \ 6.6.132 \ diff --git a/tools/docker/linux_headers_image/Dockerfile b/tools/docker/linux_headers_image/Dockerfile index 963ad75d77b..85bffb74d6f 100644 --- a/tools/docker/linux_headers_image/Dockerfile +++ b/tools/docker/linux_headers_image/Dockerfile @@ -27,29 +27,16 @@ RUN apt-get update RUN apt-get upgrade -y -q RUN apt-get install -y -q build-essential \ bc \ - libdw-dev \ libelf-dev \ libssl-dev \ flex \ bison \ - kmod \ - cpio \ rsync \ wget \ binutils-aarch64-linux-gnu \ gcc-aarch64-linux-gnu \ - dwarves \ - debhelper \ python3 -# opensslconf.h lives at the multiarch path (e.g. /usr/include/x86_64-linux-gnu/openssl/). -# During cross-compilation, dpkg-buildpackage alters include paths so host tools -# (like scripts/sign-file) can no longer find it. Symlink it to the standard path. -RUN if [ -f /usr/include/x86_64-linux-gnu/openssl/opensslconf.h ] && \ - [ ! -f /usr/include/openssl/opensslconf.h ]; then \ - ln -s /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/openssl/opensslconf.h; \ - fi - WORKDIR /configs ADD x86_64_config /configs/x86_64 ADD arm64_config /configs/arm64 diff --git a/tools/docker/linux_headers_image/build_linux_headers.sh b/tools/docker/linux_headers_image/build_linux_headers.sh index 55364387d2d..eb5b6c8df01 100644 --- a/tools/docker/linux_headers_image/build_linux_headers.sh +++ b/tools/docker/linux_headers_image/build_linux_headers.sh @@ -49,56 +49,37 @@ mkdir -p "${WORKSPACE}"/src pushd "${WORKSPACE}"/src || exit KERN_MAJ=$(echo "${KERN_VERSION}" | cut -d'.' -f1); -KERN_MIN=$(echo "${KERN_VERSION}" | cut -d'.' -f2); wget -nv http://mirrors.edge.kernel.org/pub/linux/kernel/v"${KERN_MAJ}".x/linux-"${KERN_VERSION}".tar.gz tar zxf linux-"${KERN_VERSION}".tar.gz pushd linux-"${KERN_VERSION}" || exit -cp /configs/"${ARCH}" .config -make ARCH="${ARCH}" olddefconfig -make ARCH="${ARCH}" clean - LOCALVERSION="-pl" -DEB_ARCH="${ARCH//x86_64/amd64}" -# binary builds are required for non git trees after linux v6.3 (inclusive). -# The .deb file suffix is also different. -TARGET='bindeb-pkg' -DEB_SUFFIX="-1_${DEB_ARCH}.deb" -if [ "${KERN_MAJ}" -lt 6 ] || { [ "${KERN_MAJ}" -le 6 ] && [ "${KERN_MIN}" -lt 3 ]; }; then - TARGET='deb-pkg' - DEB_SUFFIX="${LOCALVERSION}-1_${DEB_ARCH}.deb" -fi -echo "Building ${TARGET} for ${KERN_VERSION}${LOCALVERSION} (${ARCH})" +cp /configs/"${ARCH}" .config +make ARCH="${ARCH}" olddefconfig -EXTRA_MAKE_ARGS="" -if [ "${ARCH}" != "$(uname -m)" ]; then - # Skip dpkg dependency checks when cross-compiling, since host packages - # (e.g. libssl-dev) won't satisfy target arch requirements. - EXTRA_MAKE_ARGS="DPKG_FLAGS=-d" -fi -make ARCH="${ARCH}" -j "$(nproc)" "${TARGET}" LOCALVERSION="${LOCALVERSION}" ${EXTRA_MAKE_ARGS} +# Only generate headers — no kernel or module compilation needed. +# 'make prepare' generates include/generated/ and arch/*/include/generated/ +# which are the only outputs we package. +echo "Generating headers for ${KERN_VERSION}${LOCALVERSION} (${ARCH})" +make ARCH="${ARCH}" prepare LOCALVERSION="${LOCALVERSION}" popd || exit popd || exit -# Extract headers into a tarball -dpkg -x src/linux-headers-"${KERN_VERSION}${LOCALVERSION}_${KERN_VERSION}${DEB_SUFFIX}" . +# Package headers into the same directory structure the old deb-pkg approach produced +# (usr/src/linux-headers-/{include,arch}). +KERNEL_ARCH="${ARCH//x86_64/x86}" +HEADERS_DIR="usr/src/linux-headers-${KERN_VERSION}${LOCALVERSION}" + +mkdir -p "${HEADERS_DIR}/arch" +cp -a "src/linux-${KERN_VERSION}/include" "${HEADERS_DIR}/" +cp -a "src/linux-${KERN_VERSION}/arch/${KERNEL_ARCH}" "${HEADERS_DIR}/arch/" # Remove broken symlinks -find usr/src/linux-headers-"${KERN_VERSION}${LOCALVERSION}" -xtype l -exec rm {} + - -# Remove uneeded files to reduce size -# Keep only: -# - usr/src/linux-headers-x.x.x-pl/include -# - usr/src/linux-headers-x.x.x-pl/arch/${ARCH} -# This reduces the size by a little over 2x. -rm -rf usr/share -find usr/src/linux-headers-"${KERN_VERSION}${LOCALVERSION}" -maxdepth 1 -mindepth 1 ! -name include ! -name arch -type d \ - -exec rm -rf {} + -find usr/src/linux-headers-"${KERN_VERSION}${LOCALVERSION}"/arch -maxdepth 1 -mindepth 1 ! -name "${ARCH//x86_64/x86}" -type d -exec rm -rf {} + +find "${HEADERS_DIR}" -xtype l -exec rm {} + tar zcf linux-headers-"${ARCH}"-"${KERN_VERSION}".tar.gz usr