-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
1 parent
eb81457
commit c2df261
Showing
4 changed files
with
106 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters