blob: 1fa966c633b7a48d7c7656ba2f51a8d6befd7702 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
ARG BASE_IMAGE="quay.io/fedora-ostree-desktops/base"
ARG FEDORA_VERSION="${FEDORA_VERSION:-39}"
FROM ${BASE_IMAGE}:${FEDORA_VERSION} as builder
ARG FEDORA_VERSION
ARG NVIDIA_VERSION="${NVIDIA_VERSION:-535}"
COPY certs /tmp/certs
COPY akmods-cert.spec /tmp/akmods-cert/akmods-cert.spec
RUN mkdir -p \
# this is required for ld to work and build akmods
# see https://github.com/coreos/rpm-ostree/issues/4201 &
# https://github.com/coreos/rpm-ostree/issues/1614
/var/lib/alternatives \
# for signed artifacts
/var/cache/rpms/kmods \
# for akmods public cert
/var/cache/rpms/akmods-cert
# setup rpmfusion
RUN rpm-ostree install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-${FEDORA_VERSION}.noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-${FEDORA_VERSION}.noarch.rpm
# install test or real keys
RUN if [ ! -e /tmp/certs/private_key.priv ]; then \
echo "WARNING: Using test signing key" && \
cp /tmp/certs/private_key.priv{.test,} && \
cp /tmp/certs/public_key.der{.test,}; \
fi
RUN install -Dm644 {/tmp/certs,/etc/pki/akmods/certs}/public_key.der && \
install -Dm644 {/tmp/certs,/etc/pki/akmods/private}/private_key.priv
# install kmods
RUN rpm-ostree install \
akmods \
mock \
# nvidia
akmod-nvidia-${NVIDIA_VERSION}* \
xorg-x11-drv-nvidia-{cuda,power}-${NVIDIA_VERSION}*
# nvidia
RUN export kernel_version="$(rpm -q kernel --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')" && \
export akmod_version="$(basename "$(rpm -q akmod-nvidia --queryformat '%{VERSION}-%{RELEASE}')" ".fc${release%%.*}")" && \
akmods --force --kernels "$kernel_version" --kmod nvidia && \
if ! modinfo /usr/lib/modules/"$kernel_version"/extra/nvidia/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz &> /dev/null; then \
cat /var/cache/akmods/nvidia/"$akmod_version"-for-"$kernel_version".failed.log && exit 1; \
fi
# certificate rpm
RUN install -D /etc/pki/akmods/certs/public_key.der /tmp/akmods-cert/rpmbuild/SOURCES/public_key.der
RUN rpmbuild -ba \
--define '_topdir /tmp/akmods-cert/rpmbuild' \
--define '%_tmppath %{_topdir}/tmp' \
/tmp/akmods-cert/akmods-cert.spec
# wrap everything up
RUN cp /tmp/akmods-cert/rpmbuild/RPMS/noarch/getchoo-akmods-cert*.rpm /var/cache/rpms/akmods-cert/
RUN find /var/cache/akmods -type f -name \*.rpm | while read -r rpm; do \
cp "$rpm" /var/cache/rpms/kmods/; \
done
# send it off
FROM scratch as rpms
COPY --from=builder /var/cache/rpms /rpms
|