summaryrefslogtreecommitdiff
path: root/akmods/Containerfile
blob: 5677271a1523e8f017c14009b16c3b5170a54465 (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
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:-550}"


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}')" && \
	if ! akmods --force --kernels "$kernel_version" --kmod nvidia; then \
		cat /var/cache/akmods/nvidia/*"$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