Skip to content

Commit ab12663

Browse files
p5KyleGospo
andauthored
feat: build nvidia open source kernel module (#220)
Co-authored-by: Kyle Gospodnetich <me@kylegospodneti.ch>
1 parent a7027b9 commit ab12663

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

.github/workflows/reusable-build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ jobs:
3838
- common
3939
- extra
4040
- nvidia
41+
- nvidia-open
4142
- zfs
4243
exclude:
4344
- fedora_version: 39

Containerfile.nvidia

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ RUN --mount=type=cache,dst=/var/cache/dnf \
4848
; else \
4949
export KERNEL_NAME="kernel-surface" \
5050
; fi && \
51-
/tmp/build-kmod-nvidia.sh 550 && \
51+
/tmp/build-kmod-nvidia.sh kernel && \
5252
/tmp/dual-sign.sh && \
5353
for RPM in $(find /var/cache/akmods/ -type f -name \*.rpm); do \
5454
cp "${RPM}" /var/cache/rpms/kmods/; \

Containerfile.nvidia-open

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
###
2+
### Containerfile.nvidia - used to build ONLY NVIDIA kmods
3+
###
4+
5+
ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}"
6+
ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-main}"
7+
ARG KERNEL_IMAGE="${KERNEL_IMAGE:-${KERNEL_FLAVOR}-kernel}"
8+
ARG KERNEL_ORG="${KERNEL_ORG:-ublue-os}"
9+
ARG KERNEL_BASE="ghcr.io/${KERNEL_ORG}/${KERNEL_IMAGE}:${FEDORA_MAJOR_VERSION}"
10+
ARG BUILDER_IMAGE="${BUILDER_IMAGE:-quay.io/fedora/fedora}"
11+
ARG BUILDER_BASE="${BUILDER_IMAGE}:${FEDORA_MAJOR_VERSION}"
12+
FROM ${KERNEL_BASE} AS kernel_cache
13+
FROM ${BUILDER_BASE} AS builder
14+
15+
ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}"
16+
ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-main}"
17+
ARG RPMFUSION_MIRROR=""
18+
ARG DUAL_SIGN="true"
19+
20+
COPY build*.sh dual-sign*.sh /tmp/
21+
COPY certs /tmp/certs
22+
23+
# cached kernel rpms
24+
COPY --from=kernel_cache /tmp/rpms /tmp/kernel_cache
25+
26+
# files for nvidia
27+
COPY ublue-os-nvidia-addons.spec /tmp/ublue-os-nvidia-addons/ublue-os-nvidia-addons.spec
28+
COPY ublue-os-ucore-nvidia.spec /tmp/ublue-os-ucore-nvidia/ublue-os-ucore-nvidia.spec
29+
COPY files/etc/sway/environment /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/environment
30+
COPY files/usr/lib/systemd/system/ublue-nvctk-cdi.service /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/ublue-nvctk-cdi.service
31+
COPY files/usr/lib/systemd/system/ublue-nvctk-cdi.service /tmp/ublue-os-ucore-nvidia/rpmbuild/SOURCES/ublue-nvctk-cdi.service
32+
COPY files/usr/lib/systemd/system-preset/70-ublue-nvctk-cdi.preset /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/70-ublue-nvctk-cdi.preset
33+
COPY files/usr/lib/systemd/system-preset/70-ublue-nvctk-cdi.preset /tmp/ublue-os-ucore-nvidia/rpmbuild/SOURCES/70-ublue-nvctk-cdi.preset
34+
35+
36+
RUN --mount=type=cache,dst=/var/cache/dnf \
37+
/tmp/build-prep.sh && \
38+
if [[ "${KERNEL_FLAVOR}" =~ "coreos" ]]; then \
39+
/tmp/build-ublue-os-ucore-nvidia.sh && \
40+
cp /tmp/ublue-os-ucore-nvidia/rpmbuild/RPMS/noarch/ublue-os-ucore-nvidia*.rpm \
41+
/var/cache/rpms/ucore/ \
42+
; fi && \
43+
/tmp/build-ublue-os-nvidia-addons.sh && \
44+
cp /tmp/ublue-os-nvidia-addons/rpmbuild/RPMS/noarch/ublue-os-nvidia-addons*.rpm \
45+
/var/cache/rpms/ublue-os/ && \
46+
if grep -qv "surface" <<< "${KERNEL_FLAVOR}"; then \
47+
export KERNEL_NAME="kernel" \
48+
; else \
49+
export KERNEL_NAME="kernel-surface" \
50+
; fi && \
51+
/tmp/build-kmod-nvidia.sh kernel-open && \
52+
/tmp/dual-sign.sh && \
53+
for RPM in $(find /var/cache/akmods/ -type f -name \*.rpm); do \
54+
cp "${RPM}" /var/cache/rpms/kmods/; \
55+
done && \
56+
for RPM in $(find /root/rpmbuild/RPMS/"$(uname -m)"/ -type f -name \*.rpm); do \
57+
cp "${RPM}" /var/cache/rpms/kmods/; \
58+
done && \
59+
find /var/cache/rpms
60+
61+
FROM scratch
62+
63+
COPY --from=builder /var/cache/rpms /rpms

build-kmod-nvidia.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
set -oeux pipefail
44

55
RELEASE="$(rpm -E '%fedora.%_arch')"
6+
KERNEL_MODULE_TYPE="${1:-kernel}"
67

78
cd /tmp
89

@@ -20,20 +21,23 @@ rpm -qa |grep nvidia
2021
KERNEL_VERSION="$(rpm -q "${KERNEL_NAME}" --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')"
2122
NVIDIA_AKMOD_VERSION="$(basename "$(rpm -q "akmod-nvidia" --queryformat '%{VERSION}-%{RELEASE}')" ".fc${RELEASE%%.*}")"
2223

24+
sed -i "s/^MODULE_VARIANT=.*/MODULE_VARIANT=$KERNEL_MODULE_TYPE/" /etc/nvidia/kernel.conf
2325

2426
akmods --force --kernels "${KERNEL_VERSION}" --kmod "nvidia"
2527

2628
modinfo /usr/lib/modules/${KERNEL_VERSION}/extra/nvidia/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz > /dev/null || \
2729
(cat /var/cache/akmods/nvidia/${NVIDIA_AKMOD_VERSION}-for-${KERNEL_VERSION}.failed.log && exit 1)
2830

31+
# View license information
32+
modinfo -l /usr/lib/modules/${KERNEL_VERSION}/extra/nvidia/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz
2933

3034
# create a directory for later copying of resulting nvidia specific artifacts
3135
mkdir -p /var/cache/rpms/kmods/nvidia
3236

3337

3438
cat <<EOF > /var/cache/rpms/kmods/nvidia-vars
3539
KERNEL_VERSION=${KERNEL_VERSION}
40+
KERNEL_MODULE_TYPE=${KERNEL_MODULE_TYPE}
3641
RELEASE=${RELEASE}
3742
NVIDIA_AKMOD_VERSION=${NVIDIA_AKMOD_VERSION}
3843
EOF
39-

0 commit comments

Comments
 (0)