🔒 Repository is read-only – file editing is disabled.

recipes/gui/nvidia/PAGBUILD.yaml main

161 linii Raw ← Powrót
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
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