pkgname: nvidia-dkms pkgver: '610.57.04' pkgrel: '2' pkgdesc: NVIDIA drivers, xorg config, udev rules and DKMS kernel modules url: https://www.nvidia.com/en-us/drivers/unix/ arch: x86_64 license: - custom # `kernel` (a NIE `linux-headers`) – DKMS musi budować pod TO SAMO jądro, które # dostarcza `nvidia-kernel` i które jest w obrazie ISO. Wcześniejszy # `linux-headers` to meta na `kernel-lts` (6.18), więc moduły powstawały pod # inne jądro niż uruchomione („moduły nvidia zbudowane pod …” w pagan-drivers). depends: - kernel - dkms makedepends: - grep source: - https://us.download.nvidia.com/XFree86/Linux-x86_64/610.57.04/NVIDIA-Linux-x86_64-610.57.04.run sha256sums: - SKIP build: | sh NVIDIA-Linux-x86_64-${pkgver}.run --extract-only cd NVIDIA-Linux-x86_64-${pkgver} # --- 1. Przygotowanie źródeł DKMS --- _srcdir="${PKGDIR}/usr/src/nvidia-${pkgver}" install -dm0755 "${_srcdir}" cp -r kernel/* "${_srcdir}/" # Tworzenie pliku dkms.conf w katalogu źródeł cat > "${_srcdir}/dkms.conf" << EOF PACKAGE_NAME="nvidia" PACKAGE_VERSION="${pkgver}" AUTOINSTALL="yes" BUILT_MODULE_NAME[0]="nvidia" BUILT_MODULE_LOCATION[0]="." DEST_MODULE_LOCATION[0]="/kernel/drivers/video/nvidia" BUILT_MODULE_NAME[1]="nvidia-modeset" BUILT_MODULE_LOCATION[1]="." DEST_MODULE_LOCATION[1]="/kernel/drivers/video/nvidia" BUILT_MODULE_NAME[2]="nvidia-uvm" BUILT_MODULE_LOCATION[2]="." DEST_MODULE_LOCATION[2]="/kernel/drivers/video/nvidia" BUILT_MODULE_NAME[3]="nvidia-drm" BUILT_MODULE_LOCATION[3]="." DEST_MODULE_LOCATION[3]="/kernel/drivers/video/nvidia" EOF # --- 2. Tworzenie struktury dla przestrzeni użytkownika --- install -dm0755 ${PKGDIR}/usr/{lib,{bin,share/{applications,pixmaps,man/man1,doc/nvidia}}} install -dm0755 ${PKGDIR}/usr/share/glvnd/egl_vendor.d install -dm0755 ${PKGDIR}/usr/share/vulkan/implicit_layer.d install -dm0755 ${PKGDIR}/lib/udev/rules.d # Instalacja bibliotek użytkownika for _lib in *.so.${pkgver}; do if [ -f "$_lib" ]; then install -m 0755 "$_lib" ${PKGDIR}/usr/lib/ fi done # Narzędzia i podręcznik MAN install -m 0755 nvidia-{xconfig,settings,smi} ${PKGDIR}/usr/bin/ install -m 0644 nvidia-{xconfig,settings,smi}.1.gz ${PKGDIR}/usr/share/man/man1/ # Skróty i ikony sed -e "s@__UTILS_PATH__/@@" -e "s@__PIXMAP_PATH__/@@" nvidia-settings.desktop \ > ${PKGDIR}/usr/share/applications/nvidia-settings.desktop install -m 0644 nvidia-settings.png ${PKGDIR}/usr/share/pixmaps/ # Sterownik i rozszerzenia Xorg install -dm0755 ${PKGDIR}/usr/lib/xorg/modules/{drivers,extensions} install -m 0755 nvidia_drv.so ${PKGDIR}/usr/lib/xorg/modules/drivers/ install -m 0755 libglxserver_nvidia.so.${pkgver} ${PKGDIR}/usr/lib/xorg/modules/extensions/ ln -s libglxserver_nvidia.so.${pkgver} ${PKGDIR}/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so # Pliki profilu GLVND (EGL) i Vulkan ICD if [ -f 10_nvidia.json ]; then install -m 0644 10_nvidia.json ${PKGDIR}/usr/share/glvnd/egl_vendor.d/ fi if [ -f nvidia_icd.json ]; then install -m 0644 nvidia_icd.json ${PKGDIR}/usr/share/vulkan/implicit_layer.d/ fi # Symlinki SONAME dla bibliotek find ${PKGDIR}/usr/lib -maxdepth 1 -type f -name '*.so.*' -print0 | while read -d $'\0' _lib; do _soname=$(readelf -d "${_lib}" 2>/dev/null | grep -Elo 'soname.*: \[[^]]*' | sed "s/soname: \[//" || true) if [ -n "${_soname}" ]; then _base=$(echo ${_soname} | sed -r 's/(.*)\.so.*/\1.so/') _dir=$(dirname "${_lib}") [[ -e "${_dir}/${_soname}" ]] || ln -s $(basename "${_lib}") "${_dir}/${_soname}" [[ -e "${_dir}/${_base}" ]] || ln -s $(basename "${_soname}") "${_dir}/${_base}" fi done # Dokumentacja if [ -d html ]; then cp -r html/* ${PKGDIR}/usr/share/doc/nvidia/ fi # --- 3. Konfiguracja Xorg --- install -dm0755 ${PKGDIR}/etc/X11/xorg.conf.d cat > ${PKGDIR}/etc/X11/xorg.conf.d/10-nvidia-drm.conf << "EOF" Section "OutputClass" Identifier "nvidia" MatchDriver "nvidia-drm" Driver "nvidia" Option "AllowEmptyInitialConfiguration" ModulePath "/usr/lib/xorg/modules" EndSection Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" EndSection EOF # --- 4. Reguły udev dla /dev/nvidia* --- cat > ${PKGDIR}/lib/udev/rules.d/60-nvidia.rules << "EOF" KERNEL=="nvidia", RUN+="/usr/bin/bash -c '/usr/bin/mknod -Z -m 666 /dev/nvidiactl c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 255'" KERNEL=="nvidia", RUN+="/usr/bin/bash -c 'for i in $$(cat /proc/driver/nvidia/gpus/*/information | grep Minor | cut -d \ -f 4); do /usr/bin/mknod -Z -m 666 /dev/nvidia$${i} c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) $${i}; done'" KERNEL=="nvidia_modeset", RUN+="/usr/bin/bash -c '/usr/bin/mknod -Z -m 666 /dev/nvidia-modeset c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 254'" KERNEL=="nvidia_uvm", RUN+="/usr/bin/bash -c '/usr/bin/mknod -Z -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'" KERNEL=="nvidia_uvm", RUN+="/usr/bin/bash -c '/usr/bin/mknod -Z -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'" EOF # Czarna lista Nouveau install -dm0755 ${PKGDIR}/etc/modprobe.d cat > ${PKGDIR}/etc/modprobe.d/nouveau.conf << "EOF" blacklist nouveau options nouveau modeset=0 EOF # Czyszczenie kolidujących bibliotek EGL rm -f ${PKGDIR}/usr/lib/libEGL.so* rm -f ${PKGDIR}/usr/lib/libGLES*.so* hooks: post-install: | # Rejestracja i budowanie modułów przez DKMS dla zainstalowanych jąder dkms add -m nvidia -v 610.57.04 || true dkms build -m nvidia -v 610.57.04 || true dkms install -m nvidia -v 610.57.04 || true ldconfig udevadm control --reload-rules || true pre-remove: | # Usunięcie modułów z DKMS PRZED odinstalowaniem pakietu. Wcześniej ta # komenda leżała w `package:` (faza BUDOWY), więc przy odinstalowaniu moduły # zostawały w /usr/lib/modules i psuły `depmod`/kolejne wersje sterownika. dkms remove -m nvidia -v 610.57.04 --all || true package: | true