mirror of
https://github.com/ublue-os/akmods.git
synced 2026-11-03 23:09:54 -09:00
feat: build nvidia open source kernel module (#220)
Co-authored-by: Kyle Gospodnetich <me@kylegospodneti.ch>
This commit is contained in:
parent
a7027b950b
commit
ab12663f64
4 changed files with 70 additions and 2 deletions
1
.github/workflows/reusable-build.yml
vendored
1
.github/workflows/reusable-build.yml
vendored
|
|
@ -38,6 +38,7 @@ jobs:
|
|||
- common
|
||||
- extra
|
||||
- nvidia
|
||||
- nvidia-open
|
||||
- zfs
|
||||
exclude:
|
||||
- fedora_version: 39
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ RUN --mount=type=cache,dst=/var/cache/dnf \
|
|||
; else \
|
||||
export KERNEL_NAME="kernel-surface" \
|
||||
; fi && \
|
||||
/tmp/build-kmod-nvidia.sh 550 && \
|
||||
/tmp/build-kmod-nvidia.sh kernel && \
|
||||
/tmp/dual-sign.sh && \
|
||||
for RPM in $(find /var/cache/akmods/ -type f -name \*.rpm); do \
|
||||
cp "${RPM}" /var/cache/rpms/kmods/; \
|
||||
|
|
|
|||
63
Containerfile.nvidia-open
Normal file
63
Containerfile.nvidia-open
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
###
|
||||
### Containerfile.nvidia - used to build ONLY NVIDIA kmods
|
||||
###
|
||||
|
||||
ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}"
|
||||
ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-main}"
|
||||
ARG KERNEL_IMAGE="${KERNEL_IMAGE:-${KERNEL_FLAVOR}-kernel}"
|
||||
ARG KERNEL_ORG="${KERNEL_ORG:-ublue-os}"
|
||||
ARG KERNEL_BASE="ghcr.io/${KERNEL_ORG}/${KERNEL_IMAGE}:${FEDORA_MAJOR_VERSION}"
|
||||
ARG BUILDER_IMAGE="${BUILDER_IMAGE:-quay.io/fedora/fedora}"
|
||||
ARG BUILDER_BASE="${BUILDER_IMAGE}:${FEDORA_MAJOR_VERSION}"
|
||||
FROM ${KERNEL_BASE} AS kernel_cache
|
||||
FROM ${BUILDER_BASE} AS builder
|
||||
|
||||
ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}"
|
||||
ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-main}"
|
||||
ARG RPMFUSION_MIRROR=""
|
||||
ARG DUAL_SIGN="true"
|
||||
|
||||
COPY build*.sh dual-sign*.sh /tmp/
|
||||
COPY certs /tmp/certs
|
||||
|
||||
# cached kernel rpms
|
||||
COPY --from=kernel_cache /tmp/rpms /tmp/kernel_cache
|
||||
|
||||
# files for nvidia
|
||||
COPY ublue-os-nvidia-addons.spec /tmp/ublue-os-nvidia-addons/ublue-os-nvidia-addons.spec
|
||||
COPY ublue-os-ucore-nvidia.spec /tmp/ublue-os-ucore-nvidia/ublue-os-ucore-nvidia.spec
|
||||
COPY files/etc/sway/environment /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/environment
|
||||
COPY files/usr/lib/systemd/system/ublue-nvctk-cdi.service /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/ublue-nvctk-cdi.service
|
||||
COPY files/usr/lib/systemd/system/ublue-nvctk-cdi.service /tmp/ublue-os-ucore-nvidia/rpmbuild/SOURCES/ublue-nvctk-cdi.service
|
||||
COPY files/usr/lib/systemd/system-preset/70-ublue-nvctk-cdi.preset /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/70-ublue-nvctk-cdi.preset
|
||||
COPY files/usr/lib/systemd/system-preset/70-ublue-nvctk-cdi.preset /tmp/ublue-os-ucore-nvidia/rpmbuild/SOURCES/70-ublue-nvctk-cdi.preset
|
||||
|
||||
|
||||
RUN --mount=type=cache,dst=/var/cache/dnf \
|
||||
/tmp/build-prep.sh && \
|
||||
if [[ "${KERNEL_FLAVOR}" =~ "coreos" ]]; then \
|
||||
/tmp/build-ublue-os-ucore-nvidia.sh && \
|
||||
cp /tmp/ublue-os-ucore-nvidia/rpmbuild/RPMS/noarch/ublue-os-ucore-nvidia*.rpm \
|
||||
/var/cache/rpms/ucore/ \
|
||||
; fi && \
|
||||
/tmp/build-ublue-os-nvidia-addons.sh && \
|
||||
cp /tmp/ublue-os-nvidia-addons/rpmbuild/RPMS/noarch/ublue-os-nvidia-addons*.rpm \
|
||||
/var/cache/rpms/ublue-os/ && \
|
||||
if grep -qv "surface" <<< "${KERNEL_FLAVOR}"; then \
|
||||
export KERNEL_NAME="kernel" \
|
||||
; else \
|
||||
export KERNEL_NAME="kernel-surface" \
|
||||
; fi && \
|
||||
/tmp/build-kmod-nvidia.sh kernel-open && \
|
||||
/tmp/dual-sign.sh && \
|
||||
for RPM in $(find /var/cache/akmods/ -type f -name \*.rpm); do \
|
||||
cp "${RPM}" /var/cache/rpms/kmods/; \
|
||||
done && \
|
||||
for RPM in $(find /root/rpmbuild/RPMS/"$(uname -m)"/ -type f -name \*.rpm); do \
|
||||
cp "${RPM}" /var/cache/rpms/kmods/; \
|
||||
done && \
|
||||
find /var/cache/rpms
|
||||
|
||||
FROM scratch
|
||||
|
||||
COPY --from=builder /var/cache/rpms /rpms
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
set -oeux pipefail
|
||||
|
||||
RELEASE="$(rpm -E '%fedora.%_arch')"
|
||||
KERNEL_MODULE_TYPE="${1:-kernel}"
|
||||
|
||||
cd /tmp
|
||||
|
||||
|
|
@ -20,12 +21,15 @@ rpm -qa |grep nvidia
|
|||
KERNEL_VERSION="$(rpm -q "${KERNEL_NAME}" --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')"
|
||||
NVIDIA_AKMOD_VERSION="$(basename "$(rpm -q "akmod-nvidia" --queryformat '%{VERSION}-%{RELEASE}')" ".fc${RELEASE%%.*}")"
|
||||
|
||||
sed -i "s/^MODULE_VARIANT=.*/MODULE_VARIANT=$KERNEL_MODULE_TYPE/" /etc/nvidia/kernel.conf
|
||||
|
||||
akmods --force --kernels "${KERNEL_VERSION}" --kmod "nvidia"
|
||||
|
||||
modinfo /usr/lib/modules/${KERNEL_VERSION}/extra/nvidia/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz > /dev/null || \
|
||||
(cat /var/cache/akmods/nvidia/${NVIDIA_AKMOD_VERSION}-for-${KERNEL_VERSION}.failed.log && exit 1)
|
||||
|
||||
# View license information
|
||||
modinfo -l /usr/lib/modules/${KERNEL_VERSION}/extra/nvidia/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz
|
||||
|
||||
# create a directory for later copying of resulting nvidia specific artifacts
|
||||
mkdir -p /var/cache/rpms/kmods/nvidia
|
||||
|
|
@ -33,7 +37,7 @@ mkdir -p /var/cache/rpms/kmods/nvidia
|
|||
|
||||
cat <<EOF > /var/cache/rpms/kmods/nvidia-vars
|
||||
KERNEL_VERSION=${KERNEL_VERSION}
|
||||
KERNEL_MODULE_TYPE=${KERNEL_MODULE_TYPE}
|
||||
RELEASE=${RELEASE}
|
||||
NVIDIA_AKMOD_VERSION=${NVIDIA_AKMOD_VERSION}
|
||||
EOF
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue