Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 17 additions & 39 deletions tools/docker/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
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
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


LINUX_HEADER_TEMPLATE := linux-headers-%.tar.gz
LINUX_HEADER_X86_64_TARGETS = $(addprefix $(LINUX_HEADER_ASSETS_BUILD_DIR)/, \
Expand Down Expand Up @@ -135,14 +114,13 @@ 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 := 4.14.309 \
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)))
Expand Down Expand Up @@ -251,7 +229,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 $^

Expand Down
4 changes: 0 additions & 4 deletions tools/docker/linux_headers_image/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,10 @@ RUN apt-get install -y -q build-essential \
libssl-dev \
flex \
bison \
kmod \
cpio \
rsync \
wget \
binutils-aarch64-linux-gnu \
gcc-aarch64-linux-gnu \
dwarves \
debhelper \
python3

WORKDIR /configs
Expand Down
45 changes: 16 additions & 29 deletions tools/docker/linux_headers_image/build_linux_headers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,50 +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

make ARCH="${ARCH}" -j "$(nproc)" "${TARGET}" LOCALVERSION="${LOCALVERSION}"
# 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-<version><localversion>/{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

Expand Down
Loading