Установка драйверов 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— ищет строки с NVIDIAtail -30— показывает последние 30 строк
Зачем: увидеть конкретную причину, почему модуль не загрузился.
Частые ошибки:
Key was rejected by service— проблема с Secure BootNo 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:
- Выберите
Enroll MOK ContinueYes- Введите тот самый одноразовый пароль
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 Toolkitruntime 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:...— официальный образ с CUDAnvidia-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 разных гайдов и сэкономит дни экспериментов.