Установка драйверов NVIDIA в Rocky Linux

Установка драйверов NVIDIA в Rocky Linux 8, 9, 10: полное руководство с пояснением каждой команды.
В этой инструкции вы узнаете, как установить проприетарные драйверы NVIDIA или открытые модули (open‑kernel), настроить DKMS для автоматической пересборки после обновления ядра, обойти Secure Boot через MOK, установить CUDA для разработки (nvcc и полный toolkit) и подключить GPU к Docker или Podman.
Для новичков: подробные комментарии под каждой командой — что она делает и зачем.
Для сисадминов: автоматизация, диагностика через dmesg/journalctl, чек-лист перед продом.
Для разработчиков: CUDA, nvidia-smi, контейнеры с GPU.
Подходит для Rocky Linux 8, 9, 10 (RHEL-совместимые). Решает проблемы с Nouveau, Secure Boot и отсутствием модулей в Rocky 10.
✅ Драйвер NVIDIA + CUDA + Docker/Podman + DKMS за один гайд.


Оглавление

Часть 1. Подготовка системы

1.1 Узнаём модель видеокарты

lspci -nn | grep -E "VGA|3D" | grep -i nvidia

Что делает:

  • lspci — показывает все устройства на шине PCI
  • -nn — добавляет числовые идентификаторы производителя и устройства
  • grep -E "VGA|3D" — оставляет только видеоадаптеры
  • grep -i nvidia — ищет NVIDIA (без учёта регистра)

Зачем: убедиться, что в системе действительно есть карта NVIDIA, и узнать её модель и PCI ID. Это поможет выбрать правильную ветку драйвера (например, для очень старых карт нужна legacy‑ветка).

Пример вывода:
03:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10de:1f82] (rev a1)


1.2 Обновляем все пакеты системы

sudo dnf upgrade --refresh -y

Что делает:

  • sudo — выполняет команду от имени суперпользователя
  • dnf upgrade — обновляет все установленные пакеты до свежих версий
  • --refresh — принудительно перечитывает метаданные репозиториев (не берёт из кэша)
  • -y — автоматически отвечает «yes» на все вопросы (для неинтерактивной установки)

Зачем: старые версии пакетов могут конфликтовать с драйвером NVIDIA. Особенно важно обновить ядро и связанные с ним пакеты.


1.3 Проверяем, нужно ли перезагружаться после обновления

needs-restarting -r

Что делает: проверяет, требует ли система перезагрузки (например, после обновления ядра)

Зачем: если ядро обновилось, а вы не перезагрузитесь — драйвер NVIDIA будет пытаться собраться под старое ядро, что вызовет ошибку.

Если команда вернула «Reboot is required» — обязательно перезагрузитесь:

sudo reboot

Что делает: перезагружает систему

Зачем: загрузить новое ядро, под которое мы будем ставить драйвер


1.4 Устанавливаем инструменты для сборки модулей

sudo dnf install -y dnf-plugins-core epel-release

Что делает:

  • dnf install -y — устанавливает пакеты с автоматическим подтверждением
  • dnf-plugins-core — набор плагинов для DNF (нужен для config-manager)
  • epel-release — подключает репозиторий EPEL (Extra Packages for Enterprise Linux)

Зачем: драйверу NVIDIA нужны пакеты из EPEL (например, DKMS). Без EPEL вы не сможете их установить.


sudo dnf install -y kernel-devel kernel-headers gcc make dkms \
  acpid libglvnd-glx libglvnd-opengl pkgconf-pkg-config

Что делает: устанавливает пакеты для компиляции ядерных модулей

Разберём каждый пакет:

  • kernel-devel — заголовочные файлы и скрипты для сборки модулей ядра
  • kernel-headers — заголовки для пользовательского пространства
  • gcc — компилятор C (NVIDIA модуль пишется на C)
  • make — система сборки
  • dkms — Dynamic Kernel Module Support — автоматически пересобирает модуль при обновлении ядра
  • acpid — демон для управления питанием ACPI (нужен для правильного сна/пробуждения GPU)
  • libglvnd-* — библиотеки для OpenGL (без них не будет ускорения графики)
  • pkgconf-pkg-config — утилита для поиска установленных библиотек

Зачем: без этих пакетов установка драйвера NVIDIA либо упадёт с ошибкой, либо соберётся неправильно.


Часть 2. Добавление репозитория NVIDIA

2.1 Выбираем команду под вашу версию Rocky Linux

Для Rocky Linux 8:

sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo

Что делает:

  • dnf config-manager --add-repo — добавляет внешний репозиторий в систему
  • URL указывает на официальный репозиторий NVIDIA CUDA для RHEL 8

Зачем: оттуда мы будем скачивать сам драйвер и утилиты.


Для Rocky Linux 9:

sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/cuda-rhel9.repo

Что делает: то же самое, но для RHEL 9 (Rocky 9 совместим с ним)


Для Rocky Linux 10:

sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/cuda-rhel10.repo

Что делает: то же самое, но для RHEL 10

Важно: Rocky 10 пока не имеет модульной поддержки драйверов NVIDIA, поэтому установка будет через обычные пакеты.


2.2 Проверяем, что репозиторий добавился

ls -la /etc/yum.repos.d/ | grep -i cuda

Что делает:

  • ls -la — показывает список файлов в каталоге репозиториев
  • grep -i cuda — ищет строки, содержащие «cuda» (без учёта регистра)

Зачем: убедиться, что файл .repo создался. Если нет — возможно, ошибка в URL или нет доступа в интернет.


Часть 3. Блокировка свободного драйвера Nouveau

3.1 Создаём конфиг для чёрного списка

echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf

Что делает:

  • echo "blacklist nouveau" — выводит строку
  • | — передаёт вывод следующей команде
  • sudo tee /etc/modprobe.d/blacklist-nouveau.conf — записывает строку в файл с правами root

Зачем: запрещает ядру загружать модуль nouveau (свободный драйвер NVIDIA). Без этого проприетарный драйвер не сможет загрузиться — они конфликтуют.


echo 'omit_drivers+=" nouveau "' | sudo tee /etc/dracut.conf.d/blacklist-nouveau.conf

Что делает: добавляет инструкцию для dracut (инструмента сборки initramfs) исключить nouveau из начального образа

Зачем: даже если модуль заблокирован, он может попасть в initramfs и загрузиться на раннем этапе. Эта команда удаляет его оттуда.


3.2 Пересобираем initramfs

sudo dracut --regenerate-all --force

Что делает:

  • dracut — утилита для создания initramfs (начального дискового образа)
  • --regenerate-all — пересоздаёт образ для всех установленных ядер
  • --force — принудительно перезаписывает существующие файлы

Зачем: применить изменения — исключить nouveau из загрузочного образа.


sudo depmod -a

Что делает: depmod -a — перестраивает базу зависимостей модулей ядра

Зачем: обновить список модулей после блокировки nouveau.


3.3 Перезагружаемся для применения

sudo reboot

Что делает: перезагрузка системы

Зачем: загрузиться с новыми настройками, где nouveau уже заблокирован.


3.4 Проверяем, что Nouveau отключён

lsmod | grep nouveau || echo "Nouveau отключён, можно продолжать"

Что делает:

  • lsmod — показывает загруженные модули ядра
  • grep nouveau — ищет модуль nouveau
  • || — выполняет следующую команду, если предыдущая не нашла ничего

Зачем: убедиться, что блокировка сработала. Если видите «Nouveau отключён» — всё хорошо.


Часть 4. Установка драйвера

🔹 Для Rocky Linux 8 и 9 (через модули DNF)

sudo dnf module list nvidia-driver

Что делает: показывает все доступные ветки (streams) драйвера NVIDIA в репозитории

Зачем: убедиться, что репозиторий подключился правильно, и посмотреть, какие версии доступны.

Пример вывода:

nvidia-driver    latest-dkms    [d]    default    Nvidia driver for latest-dkms branch
nvidia-driver    open-dkms       [d]    default    Nvidia driver for open-dkms branch

sudo dnf module install -y nvidia-driver:latest-dkms

Что делает:

  • dnf module install — устанавливает модуль (группу пакетов)
  • nvidia-driver:latest-dkms — выбирает ветку latest-dkms (последний стабильный драйвер с поддержкой DKMS)
  • -y — автоматически подтверждает установку

Зачем: это самый надёжный способ для Rocky 8/9. DKMS гарантирует, что после обновления ядра драйвер пересоберётся автоматически.


🔹 Для Rocky Linux 10 (через обычные пакеты)

sudo dnf install -y nvidia-driver nvidia-driver-cuda

Что делает: устанавливает два пакета:

  • nvidia-driver — сам драйвер и утилиты
  • nvidia-driver-cuda — поддержка CUDA и утилита nvidia-smi

Зачем: в Rocky 10 нет модулей для драйвера, поэтому ставим как обычные RPM‑пакеты.

Альтернатива (если нужен DKMS):

sudo dnf install -y kmod-nvidia-latest-dkms nvidia-driver nvidia-driver-libs

Что делает: устанавливает драйвер с поддержкой DKMS через специальный kmod‑пакет

Зачем: DKMS автоматически пересобирает модуль при обновлении ядра. Это сильно упрощает жизнь сисадмину.

⚠️ Примечание: пакет kmod-nvidia-latest-dkms может отсутствовать в репозитории для новых версий Rocky 10. Если команда выдаёт ошибку «No match» — используйте первый вариант без kmod.


Часть 5. Перезагрузка и проверка

sudo reboot

Что делает: перезагрузка

Зачем: загрузить новый модуль NVIDIA. Драйвер не начнёт работать до перезагрузки.


nvidia-smi

Что делает: утилита NVIDIA System Management Interface — показывает состояние GPU

Зачем: главная проверка, что драйвер установился и работает.

Успешный вывод выглядит так:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.120    Driver Version: 550.120    CUDA Version: 12.4         |
| GPU  Name             | Memory-Usage | GPU-Util  Compute M. |
|   0  GeForce GTX 1650 |    123MiB    |    0%       Default  |
+-----------------------------------------------------------------------------+

Если ошибка — смотрите Часть 7 (Диагностика).


Часть 6. Установка CUDA (для разработчиков)

6.1 Только компилятор nvcc (минимальный вариант)

sudo dnf install -y cuda-nvcc-12-4

Что делает: устанавливает только компилятор CUDA и минимальные библиотеки

Зачем: если вам нужно только компилировать .cu файлы, не нужно ставить весь 5‑гигабайтный toolkit.

Проверка:

/usr/local/cuda-12.4/bin/nvcc --version

Что делает: запускает компилятор с флагом --version

Зачем: убедиться, что nvcc установлен и показывает версию.


6.2 Полный CUDA Toolkit

sudo dnf install -y cuda-toolkit-12-4

Что делает: устанавливает всё: компилятор, профилировщик, отладчик, библиотеки, примеры

Зачем: для серьёзной разработки под CUDA (Nsight, nvprof, nvrtc).

Размер: ~5 ГБ. Убедитесь, что есть место.


6.3 Добавляем CUDA в PATH (чтобы работало везде)

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
source ~/.bashrc

Что делает:

  • >> ~/.bashrc — дописывает строки в конфиг командной оболочки
  • PATH — переменная, где система ищет исполняемые файлы
  • LD_LIBRARY_PATH — где ищет динамические библиотеки
  • CUDA_HOME — стандартная переменная для многих сборщиков (CMake)
  • source ~/.bashrc — применяет изменения без перелогина

Зачем: чтобы nvcc работал из любого места, а не только из /usr/local/cuda/bin.


Часть 7. Диагностика проблем (для сисадминов и продвинутых)

7.1 Проверка загрузки модуля ядра

lsmod | grep nvidia

Что делает: показывает, загружен ли модуль nvidia в ядро

Зачем: если модуль не загружен — nvidia-smi не сработает.

Нормальный вывод:

nvidia_drm            77824  4
nvidia_modeset       1392640  2 nvidia_drm
nvidia              56770560  225 nvidia_modeset

Пустой вывод — модуль не загружен.


7.2 Просмотр ошибок в логах ядра

sudo dmesg | grep -i nvidia | tail -30

Что делает:

  • dmesg — кольцевой буфер сообщений ядра
  • grep -i nvidia — ищет строки с NVIDIA
  • tail -30 — показывает последние 30 строк

Зачем: увидеть конкретную причину, почему модуль не загрузился.

Частые ошибки:

  • Key was rejected by service — проблема с Secure Boot
  • No NVIDIA GPU found — драйвер не видит карту (возможно, legacy‑ветка)
  • Unknown symbol — несовместимость с версией ядра

7.3 Журнал systemd за текущую загрузку

sudo journalctl -b | grep -i nvidia

Что делает:

  • journalctl -b — показывает логи только с момента последней загрузки
  • grep -i nvidia — фильтрует по NVIDIA

Зачем: иногда ошибки дублируются в systemd, их легче читать, чем dmesg.


7.4 Какие пакеты NVIDIA установлены

rpm -qa | grep -E "nvidia|cuda" | sort

Что делает:

  • rpm -qa — список всех установленных RPM‑пакетов
  • grep -E "nvidia|cuda" — ищет пакеты, содержащие «nvidia» или «cuda»
  • sort — сортирует по алфавиту

Зачем: убедиться, что установлены именно те пакеты, которые вы ожидаете, и нет конфликтующих.


Часть 8. Secure Boot (самый частый блокер)

8.1 Проверяем статус Secure Boot

mokutil --sb-state

Что делает: показывает, включён ли Secure Boot в UEFI

Зачем: если включён — NVIDIA модуль не загрузится без подписи.

Вывод:

  • SecureBoot enabled — нужно подписывать модуль
  • SecureBoot disabled — проблем не будет

8.2 Генерируем ключ для подписи (если Secure Boot включён)

sudo dkms generate_mokSigning

Что делает: генерирует пару ключей (закрытый и открытый) для подписи модулей в каталоге /var/lib/dkms/

Зачем: ключ нужен, чтобы подписать модуль NVIDIA и разрешить его загрузку при Secure Boot.


8.3 Импортируем публичный ключ в MOK

sudo mokutil --import /var/lib/dkms/mok.pub

Что делает: импортирует публичный ключ в базу Machine Owner Key (MOK) UEFI

Зачем: система должна доверять этому ключу при загрузке.

Что произойдёт:
Вас попросят придумать одноразовый пароль. Запомните его — он понадобится после перезагрузки.


8.4 Перезагружаемся и завершаем импорт

sudo reboot

Что делает: перезагрузка

Зачем: при загрузке появится синий экран MOK Manager.

Инструкция в MOK Manager:

  1. Выберите Enroll MOK
  2. Continue
  3. Yes
  4. Введите тот самый одноразовый пароль
  5. Reboot

После этого модуль NVIDIA будет подписан и загрузится даже при включённом Secure Boot.


Часть 9. Контейнеры с GPU (Docker/Podman)

9.1 Установка NVIDIA Container Toolkit

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

Что делает: определяет текущий дистрибутив и версию (например, rocky9) и сохраняет в переменную distribution

Зачем: репозиторий NVIDIA требует указать дистрибутив в URL.


curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/libnvidia-container.repo

Что делает:

  • curl -s -L — скачивает файл репозитория
  • | sudo tee — сохраняет его в каталог /etc/yum.repos.d/

Зачем: добавляет официальный репозиторий NVIDIA Container Toolkit.


sudo dnf install -y nvidia-container-toolkit

Что делает: устанавливает сам toolkit

Зачем: без него Docker/Podman не смогут пробрасывать GPU в контейнер.


9.2 Настройка для Docker

sudo nvidia-ctk runtime configure --runtime=docker

Что делает:

  • nvidia-ctk — утилита конфигурации NVIDIA Container Toolkit
  • runtime configure — настраивает рантайм
  • --runtime=docker — применяет настройки для Docker

Зачем: добавляет в /etc/docker/daemon.json настройки для NVIDIA runtime.


sudo systemctl restart docker

Что делает: перезапускает службу Docker

Зачем: применить изменения конфигурации.


9.3 Проверка работы GPU в Docker

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

Что делает:

  • docker run --rm — запускает контейнер и удаляет его после остановки
  • --gpus all — пробрасывает все GPU внутрь контейнера
  • nvidia/cuda:... — официальный образ с CUDA
  • nvidia-smi — команда внутри контейнера

Зачем: финальная проверка, что GPU виден из контейнера.


Часть 10. Удаление драйвера (полный откат)

10.1 Удаляем драйвер (Rocky 8/9)

sudo dnf module reset -y nvidia-driver

Что делает: сбрасывает состояние модуля nvidia-driver

Зачем: перед удалением нужно «отвязать» модуль.


sudo dnf remove -y nvidia-driver\*

Что делает: удаляет все пакеты, начинающиеся с nvidia-driver

Зачем: полностью убрать драйвер.


10.2 Удаляем драйвер (Rocky 10)

sudo dnf remove -y nvidia-driver nvidia-driver-cuda

Что делает: удаляет два основных пакета драйвера


10.3 Возвращаем Nouveau (если нужно)

sudo rm -f /etc/modprobe.d/blacklist-nouveau.conf
sudo rm -f /etc/dracut.conf.d/blacklist-nouveau.conf

Что делает: удаляет файлы, которые блокировали Nouveau

Зачем: разрешить загрузку свободного драйвера обратно.


sudo dracut --regenerate-all --force
sudo reboot

Что делает: пересобирает initramfs без блокировок и перезагружается

Зачем: вернуть систему в состояние «до установки NVIDIA драйвера».


Часть 11. Чек-лист перед вводом в эксплуатацию

Скопируйте этот список и отмечайте пункты:

# 1. Проверка драйвера
nvidia-smi
# Должна показывать таблицу с GPU

# 2. Проверка загрузки модуля
lsmod | grep -i nvidia
# Должно быть 3 строки: nvidia, nvidia_modeset, nvidia_drm

# 3. Проверка Secure Boot
mokutil --sb-state
# Если enabled — проверьте, что MOK импортирован

# 4. Проверка CUDA (если нужна)
nvcc --version
# Должна быть версия компилятора

# 5. Проверка DKMS
dkms status
# Должен быть модуль nvidia с состоянием installed

# 6. Проверка логов
sudo dmesg | grep -i nvidia | grep -i error
# Не должно быть ошибок

# 7. Проверка контейнеров (если используете)
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
# Должен работать

Заключение

Вы прошли полный цикл — от определения GPU до автоматизации и контейнеров.

Что теперь есть в системе:

  • ✅ Рабочий драйвер NVIDIA с DKMS
  • ✅ CUDA (полный или минимальный)
  • ✅ Поддержка GPU в Docker/Podman
  • ✅ Secure Boot (обход через MOK)
  • ✅ Инструменты диагностики

Дальнейшие действия:

  • Добавьте мониторинг GPU через Prometheus/Zabbix
  • Настройте автоматическую установку через Ansible (пример в статье)
  • При обновлении ядра просто выполняйте sudo dnf upgrade — DKMS сам пересоберёт модуль

📌 Сохраните эту статью. Она заменит вам 5 разных гайдов и сэкономит дни экспериментов.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *