mirror of
https://github.com/linuxkit/linuxkit.git
synced 2026-01-13 20:06:38 +00:00
These headers are needed for defining kernel probes etc, tested with eBPF. Could also be used for perf, building kernel modules etc. Saved to the media tarball at present, may add to base image or container. Also rationalise the paths in the headers tarball a little to match. Will add an eBPF container using these later. Signed-off-by: Justin Cormack <justin.cormack@docker.com>
101 lines
3.8 KiB
Docker
101 lines
3.8 KiB
Docker
# Tag: b77cfc4ad0033d4366df830ed697afc7bab458a2
|
|
FROM mobylinux/alpine-build-c@sha256:53739ea6042cb0ac39cf6e262012c1c4224206b2c9b719569fe7efa3a381348c
|
|
|
|
ARG KERNEL_VERSION=4.9
|
|
|
|
ENV KERNEL_SOURCE=https://www.kernel.org/pub/linux/kernel/v4.x/linux-${KERNEL_VERSION}.tar.xz
|
|
|
|
RUN curl -fsSL -o linux-${KERNEL_VERSION}.tar.xz ${KERNEL_SOURCE}
|
|
|
|
RUN cat linux-${KERNEL_VERSION}.tar.xz | tar --absolute-names -xJ && mv /linux-${KERNEL_VERSION} /linux
|
|
|
|
# this is aufs4.9 20161219
|
|
ENV AUFS_REPO https://github.com/sfjro/aufs4-standalone
|
|
ENV AUFS_BRANCH aufs4.9
|
|
ENV AUFS_COMMIT 0d8e71c28da317ec6371b6b95b46a70cefe13777
|
|
|
|
# Download AUFS
|
|
RUN git clone -b "$AUFS_BRANCH" "$AUFS_REPO" /aufs && \
|
|
cd /aufs && \
|
|
git checkout -q "$AUFS_COMMIT"
|
|
|
|
# aufs-util 20151116
|
|
ENV AUFS_TOOLS_REPO https://github.com/ncopa/aufs-util.git
|
|
ENV AUFS_TOOLS_COMMIT 3b7c5e262b53598a8204a915e485489c46d4e7a4
|
|
|
|
# Download aufs tools
|
|
RUN git clone ${AUFS_TOOLS_REPO} && \
|
|
cd /aufs-util && \
|
|
git checkout "$AUFS_TOOLS_COMMIT"
|
|
|
|
#BUILD
|
|
# patch kernel with aufs
|
|
RUN cd /linux && \
|
|
cp -r /aufs/Documentation /linux && \
|
|
cp -r /aufs/fs /linux && \
|
|
cp -r /aufs/include/uapi/linux/aufs_type.h /linux/include/uapi/linux/ && \
|
|
set -e && for patch in \
|
|
/aufs/aufs*-kbuild.patch \
|
|
/aufs/aufs*-base.patch \
|
|
/aufs/aufs*-mmap.patch \
|
|
/aufs/aufs*-standalone.patch \
|
|
/aufs/aufs*-loopback.patch \
|
|
/aufs/lockdep-debug.patch \
|
|
; do \
|
|
patch -p1 < "$patch"; \
|
|
done
|
|
|
|
COPY kernel_config /linux/arch/x86/configs/x86_64_defconfig
|
|
COPY kernel_config.debug /linux/debug_config
|
|
COPY kernel_config.aufs /linux/aufs_config
|
|
RUN cat /linux/aufs_config >> /linux/arch/x86/configs/x86_64_defconfig
|
|
|
|
ARG DEBUG=0
|
|
|
|
RUN if [ $DEBUG -ne "0" ]; then \
|
|
sed -i 's/CONFIG_PANIC_ON_OOPS=y/# CONFIG_PANIC_ON_OOPS is not set/' /linux/arch/x86/configs/x86_64_defconfig; \
|
|
cat /linux/debug_config >> /linux/arch/x86/configs/x86_64_defconfig; \
|
|
fi
|
|
|
|
# Apply local patches
|
|
COPY patches-4.9 /patches
|
|
RUN cd /linux && \
|
|
set -e && for patch in /patches/*.patch; do \
|
|
echo "Applying $patch"; \
|
|
patch -p1 < "$patch"; \
|
|
done
|
|
|
|
WORKDIR /linux
|
|
RUN make defconfig && \
|
|
make oldconfig && \
|
|
make -j "$(getconf _NPROCESSORS_ONLN)" KCFLAGS="-fno-pie"
|
|
RUN make INSTALL_MOD_PATH=/tmp/kernel-modules modules_install && \
|
|
( DVER=$(basename $(find /tmp/kernel-modules/lib/modules/ -mindepth 1 -maxdepth 1)) && \
|
|
cd /tmp/kernel-modules/lib/modules/$DVER && \
|
|
rm build source && \
|
|
ln -s /usr/src/linux-headers-$DVER build ) && \
|
|
mkdir -p /tmp/kernel-headers/usr && \
|
|
make INSTALL_HDR_PATH=/tmp/kernel-headers/usr headers_install && \
|
|
( cd /tmp/kernel-headers && tar cf /kernel-headers.tar usr ) && \
|
|
( cd /tmp/kernel-modules && tar cf /kernel-modules.tar lib ) && \
|
|
cp vmlinux arch/x86_64/boot/bzImage /
|
|
|
|
RUN DVER=$(basename $(find /tmp/kernel-modules/lib/modules/ -mindepth 1 -maxdepth 1)) && \
|
|
dir=/tmp/usr/src/linux-headers-$DVER && \
|
|
mkdir -p $dir && \
|
|
cp /linux/.config $dir && \
|
|
cd /linux && \
|
|
cp -a include "$dir" && \
|
|
mkdir -p "$dir"/arch/x86 && cp -a arch/x86/include "$dir"/arch/x86/ && \
|
|
( cd /tmp && tar cf /kernel-dev.tar usr/src )
|
|
|
|
# Build aufs tools, do this here as they need kernel headers and to match aufs
|
|
# Fortunately they are built statically linked
|
|
RUN cd /aufs-util && \
|
|
CPPFLAGS="-I/tmp/include" CFLAGS=$CPPFLAGS LDFLAGS=$CPPFLAGS make && \
|
|
DESTDIR=/tmp/aufs-utils make install && \
|
|
rm -rf /tmp/aufs-utils/usr/lib /tmp/aufs-utils/usr/share && \
|
|
cd /tmp/aufs-utils && rm libau* && tar cf /aufs-utils.tar .
|
|
|
|
RUN printf "KERNEL_SOURCE=${KERNEL_SOURCE}\nAUFS_REPO=${AUFS_REPO}\nAUFS_BRANCH=${AUFS_BRANCH}\nAUFS_COMMIT=${AUFS_COMMIT}\nAUFS_TOOLS_REPO=${AUFS_TOOLS_REPO}\nAUFS_TOOLS_COMMIT=${AUFS_TOOLS_COMMIT}\n" > /kernel-source-info
|