pkg/firmware: Add a package with firmware required by enabled device drivers

This new 'firmware' package contains the firmware blobs required
by the device drivers in a LinuxKit kernel. The list of required
blobs is determined by calling 'modinfo' on each module.

We also unconditionally include the AMD CPU microcode and the
licence files.

Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
This commit is contained in:
Rolf Neugebauer
2018-01-16 15:16:24 +00:00
parent f09d0227bc
commit 1d9c4361c0
3 changed files with 58 additions and 0 deletions

44
pkg/firmware/Dockerfile Normal file
View File

@@ -0,0 +1,44 @@
# Make modules from a recentish kernel available
FROM linuxkit/kernel:4.14.12 AS kernel
FROM linuxkit/alpine:34518265c6cb63ff02074549cc5b64bef40c336f AS build
RUN apk add --no-cache git kmod
# Clone the firmware repository
# Make sure you also update the FW_COMMIT in ../firmware-all/Dockerfile
ENV FW_URL=git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
ENV FW_COMMIT=65b1c68c63f974d72610db38dfae49861117cae2
WORKDIR /
RUN git clone ${FW_URL} && \
cd /linux-firmware && \
git checkout ${FW_COMMIT}
# Copy files we always need/want: Licenses, docs and AMD CPU microcode
WORKDIR /linux-firmware
RUN set -e && \
mkdir -p /out/lib/firmware && \
cp README WHENCE /out/lib/firmware && \
cp GPL-? LICENSE.* LICENCE.* /out/lib/firmware && \
case $(uname -m) in \
x86_64) \
cp -r amd-ucode /out/lib/firmware; \
;; \
esac
# Extract kernel modules for
WORKDIR /
COPY --from=kernel /kernel.tar /kernel.tar
RUN tar xf /kernel.tar
# Copy files required by the modules
RUN set -e && \
for fw in $(find /lib/modules -name \*.ko -exec modinfo --field=firmware {} \;); do \
mkdir -p "/out/lib/firmware/$fw" && \
cp "/linux-firmware/$fw" "/out/lib/firmware/$fw"; \
done
FROM scratch
WORKDIR /
ENTRYPOINT []
COPY --from=build /out/lib/ /lib/