mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-09-09 02:41:49 +00:00
Add a target for building kernel with buildx (#3792)
* Use latest kernel in linuxkit Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> * Parallelize kernel source compression This surpringly saves a lot of time: M1: from 340 to 90 seconds Intel: from 527 to 222 seconds (2 cores 4 threads) Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> * Add buildx target buildx can use remote builders and automatically generate the multiarch manifest. A properly configured builder is required : First create docker context for the remote builders : $ docker context create node-<arch> --docker "host=ssh://<user>@<host>" Then create a buildx configuration using the remote builders: $ docker buildx create --name kernel_builder --platform linux/amd64 $ docker buildx create --name kernel_builder --node node-arm64 --platform linux/arm64 --append $ docker buildx use kernel_builder $ docker buildx ls Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> * Add a PLATFORMS variable to declare platforms needed for buildx Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> * Make image name customizable Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> * Do not tag use the architecture suffix for images built with buildx Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> * Add make kconfigx to upgrade configs using buildx To update configuration for 5.10 kernels use : make -C kernel KERNEL_VERSIONS=5.10.104 kconfigx Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com> --------- Signed-off-by: Frédéric Dalleau <frederic.dalleau@docker.com>
This commit is contained in:
71
kernel/Dockerfile.kconfigx
Normal file
71
kernel/Dockerfile.kconfigx
Normal file
@@ -0,0 +1,71 @@
|
||||
# syntax=docker/dockerfile:1.3-labs
|
||||
|
||||
ARG BUILD_IMAGE
|
||||
|
||||
FROM ${BUILD_IMAGE} AS kernel-build
|
||||
ARG KERNEL_VERSIONS
|
||||
ARG TARGETARCH
|
||||
|
||||
RUN apk add \
|
||||
argp-standalone \
|
||||
bison \
|
||||
build-base \
|
||||
curl \
|
||||
diffutils \
|
||||
flex \
|
||||
gmp-dev \
|
||||
libarchive-tools \
|
||||
mpc1-dev \
|
||||
mpfr-dev \
|
||||
ncurses-dev \
|
||||
patch \
|
||||
xz
|
||||
|
||||
COPY / /
|
||||
|
||||
# Unpack kernels (download if not present)
|
||||
RUN <<EOF
|
||||
set -e
|
||||
for VERSION in ${KERNEL_VERSIONS}; do
|
||||
MAJOR=$(echo ${VERSION} | cut -d . -f 1)
|
||||
MAJOR=v${MAJOR}.x
|
||||
echo "Downloading/Unpacking $VERSION"
|
||||
KERNEL_SOURCE=https://www.kernel.org/pub/linux/kernel/${MAJOR}/linux-${VERSION}.tar.xz
|
||||
if [ ! -f sources/linux-${VERSION}.tar.xz ] ; then
|
||||
curl -fSLo sources/linux-${VERSION}.tar.xz --create-dirs ${KERNEL_SOURCE}
|
||||
fi
|
||||
bsdtar xf sources/linux-${VERSION}.tar.xz
|
||||
done
|
||||
EOF
|
||||
|
||||
# Apply patches to all kernels and move config files into place
|
||||
RUN <<EOF
|
||||
set -e
|
||||
for VERSION in ${KERNEL_VERSIONS}; do
|
||||
SERIES=${VERSION%.*}.x
|
||||
echo "Patching $VERSION $SERIES"
|
||||
cd /linux-${VERSION}
|
||||
if [ -d /patches-${SERIES} ]; then
|
||||
for patch in /patches-${SERIES}/*.patch; do
|
||||
echo "Applying $patch"
|
||||
patch -t -F0 -N -u -p1 < "$patch"
|
||||
done
|
||||
fi
|
||||
if [ ${TARGETARCH} = "amd64" ] ; then
|
||||
cp /config-${SERIES}-x86_64 .config
|
||||
ARCH=x86 make oldconfig
|
||||
ls
|
||||
elif [ ${TARGETARCH} = "arm64" ] ; then
|
||||
cp /config-${SERIES}-aarch64 .config
|
||||
ARCH=arm64 make oldconfig
|
||||
fi
|
||||
done
|
||||
EOF
|
||||
|
||||
ENTRYPOINT ["/bin/sh"]
|
||||
|
||||
FROM scratch
|
||||
ARG KERNEL_VERSIONS
|
||||
ARG TARGETARCH
|
||||
WORKDIR /
|
||||
COPY --from=kernel-build /linux-${KERNEL_VERSIONS}/.config config-${KERNEL_VERSIONS}-$TARGETARCH
|
Reference in New Issue
Block a user