Главная >> Ядро >> Обновление ядра Linux до новой версии

Обновление ядра Linux до новой версии

В последнее время новые версии ядер выходят достаточно часто. Раз в несколько месяцев выходит стабильный релиз. Ну а нестабильные кандидаты в релизы выходят и того чаще. Линус Торвальдс и множество разработчиков по всему миру постоянно работают над улучшением новых ядер и добавлением в них все больше и больше функциональности.

С каждой новой версией в ядре Linux появляется поддержка нескольких новых устройств, например, новых процессоров, видеокарт или даже сенсорных экранов. За последнее время, поддержка нового оборудования очень сильно улучшилась. Также в ядро включаются новые файловые системы, улучшается работа сетевого стека, исправляются ошибки и баги.

Если вам нужна более подробная информация об изменениях в какой-то определенной версии ядра смотрите ее Changelog на kernel.org, а в этой статье мы рассмотрим обновление ядра Linux до самой новой версии. Я попытаюсь не привязывать инструкцию к определенной версии ядра, новые ядра выходят достаточно часто и она будет актуальна для каждого из них. Рассмотрим обновление ядра Ubuntu и CentOS. Сначала давайте рассмотрим как обновить ядро в Ubuntu.


Содержание статьи

Обновление ядра Ubuntu вручную

Давайте сначала посмотрим какое ядро у вас установлено. Для этого откройте терминал и выполните:

uname -r

Например, у меня сейчас используется версия 5.4, и я могу обновиться к самой новой версии. Разработчики Ubuntu уже позаботились о том чтобы их пользователи не собирали ядро вручную и сделали deb пакеты новой версии ядра. Их можно скачать с официального сайта Canonical.

Я мог бы привести здесь команды wget для загрузки, если была бы известна версия ядра, но в нашем случае лучше будет использовать браузер. Откройте сайт http://kernel.ubuntu.com/~kernel-ppa/mainline/. Здесь находятся все, собираемые командой Ubuntu ядра.

Пролистайте вниз, именно там находятся более новые версии ядер:

Кроме того, в самом верху есть папка daily/current, в которой находятся самые свежие, ночные сборки ядер. Выберите нужную версию ядра, затем выберите архитектуру. Для 64-битных систем вам понадобится архитектура amd64:

Далее надо скачать четыре файла: два linux-headers, linux-image и linux-modules. Как видите, там есть несколько типов ядер: lowlatency и generic. Ядро lowlatency судя из названия имеет более низкие задержки при работе с прерываниями. Зато ядро generic имеет большую пропускную способность. В большинстве случаев достаточно ядра generic. Скачайте linux-headers для all и generic, а также linux-image-generic и linux-modules-generic:

После завершения загрузки можно переходить к установке. Перейдите в папку с установочными пакетами, например, ~/Downloads:

cd ~/Downloads

Запустите установку:

dpkg -i linux-headers* linux-image* linux-modules*

Если эта команда не сработала, можно пойти другим путем. Установите утилиту gdebi:

sudo apt install gdebi

Затем с помощью нее установите ядро:

sudo gdebi linux-headers*.deb linux-image-*.deb linux-modules-*.deb

Ядро установлено, осталось обновить загрузчик:

sudo update-grub

Теперь можно перезагружать компьютер и смотреть что получилось. После перезагрузки убедимся, что обновление ядра Linux до самой новой версии прошло успешно:

uname -r

Как видите ядро успешно установлено и работает. Но не спешите удалять старую версию ядра, рекомендуется иметь несколько версий ядра в системе, чтобы в случае неполадок иметь возможность загрузиться со старой рабочей версии. Если вы хотите настроить автоматическое обновление ядра в Ubuntu - используйте утилиту UKKU.

Если во время установки произошли какие-либо ошибки или ядро обновилось неправильно, и теперь система не загружается с новым ядром, вы можете использовать старое ядро. Также система может не запускаться, если вы используете проприетарный драйвер для видеокарты NVIDIA в таком случае не спешите качать самую новую версию ядра, используйте только стабильные ядра, в них, как правило, уже добавлена поддержка этого модуля.

А чтобы восстановить работу системы выберите пункт Advanced options for Ubuntu в меню Grub:

kernel12

И запустите предыдущее работающее ядро:

kernel13

После загрузки останется удалить неверно установленное ядро и еще раз обновить Grub. Найдите точное имя пакета ядра с помощью apt search. Например:

sudo apt search linux-headers-5.8

Затем удалите этот пакет:

sudo apt remove linux-headers-5.8-000055-generic

Аналогично надо поступить с ядром. После этого обновите конфигурацию Grub:

sudo update-grub

Теперь ваша система вернулась к прежнему состоянию. Вы можете попробовать устанавливать более старую версию ядра или попробовать еще раз.

Обновление ядра Linux до в CentOS

А теперь давайте рассмотрим как обновить ядро Linux самой новой версии в CentOS. Инструкция проверена на CentOS 8, но скорее всего, будет работать и на RHEL 8, Fedora и других подобных дистрибутивах.

Как правило, новые ядра не включены в официальные репозитории CentOS, поэтому чтобы получить последнюю стабильную версию нам необходимо будет добавить репозиторий ELRepo. Это репозиторий коммерческих пакетов (Enterprise Linux Packages) он также поддерживается в RHEL и Fedora.

Для добавления репозитория сначала необходимо импортировать ключ:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

Для того чтобы добавить репозиторий и необходимые компоненты в RHEL 7 и CentOS 7 выполните:

sudo yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

В CentOS 8 выполните:

sudo dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

В CentOS 6:

sudo yum install https://www.elrepo.org/elrepo-release-6.el6.elrepo.noarch.rpm

Готово, теперь посмотрим текущую версию ядра:

uname -r

Можем устанавливать самую новую версию ядра Linux командой:

sudo yum --enablerepo=elrepo-kernel install kernel-ml

Пакет kernel-ml, это текущий стабильный mainline релиз, на данный момент, это 5.8. После того как установка нового ядра Linux завершена, обновите конфигурационный файл загрузчика:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Затем можете перезагружать систему. Обновление ядра в CentOS завершено.

Если после перезагрузки у вас возникли какие-либо проблемы с новым ядром, просто удалите его с помощью команды:

yum remove kernel-ml -y

Или:

dnf remove kernel-ml -y

И перезагрузите компьютер, чтобы вернуть систему к прежнему состоянию.

Выводы

В этой инструкции мы рассмотрели как обновить ядро Linux до 4.4 в Ubuntu и CentOS, но мы говорили только об обновлении ядра из бинарников. Также можно собрать ядро из исходных кодов, которые доступны для загрузки на официальном сайте ядра. О сборке ядра Linux я писал в отдельной статье. Вроде все разобрали, если остались вопросы - пишите в комментариях.

23 комментария к “Обновление ядра Linux до новой версии”

  1. Спасибо за статью.
    Подписан на вашу рассылку, так что в качестве обратной связи с читателями передаю вам привет!

    Ответить
  2. Система Минт 17.3 Роза, ядро 3.16. Делаю все как описано в статье - после рестарта ядро 3.16. Иду в диспетчер обновлений, вижу предлагаемые ядра для обновления, 4-ки нет ни одной, рекомендуемое ядро 3.19, устанавливаю - работает, 3.16 убиваю. Ошибок нигде не выдавало. Остался пока без 4.4.

    Ответить
    • Выполните в место: sudo dpkg -i linux*.deb - sudo dpkg -i *.deb И выполнять команду обязательно в папке, в которую были загружены установочные пакеты.

      Ответить
    • Да у меня такая же беда, обновился на 4.2 правда, было 3.19. Теперь вай фай с блютузом, не запускаются, пока остался на 3.19.

      Подожду уже выхода Ubuntu 16.04 посмотрим, что будет в релизе, должны пофиксить по идее...

      Ответить
  3. Ребзя а чего у меня не хочет обновлять? Сейчас стоит на VPS Ubuntu Xenial (16.04 LTS) (GNU/Linux 4.5.7-std-3 x86_64). Пробую обновить до 4.7.3 и ошибку пишет:

    Selecting previously unselected package linux-headers-4.7.3-040703-generic.
    (Reading database ... 20139 files and directories currently installed.)
    Preparing to unpack linux-headers-4.7.3-040703-generic_4.7.3-040703.201609070334_amd64.deb ...
    Unpacking linux-headers-4.7.3-040703-generic (4.7.3-040703.201609070334) ...
    Selecting previously unselected package linux-image-4.7.3-040703-generic.
    Preparing to unpack linux-image-4.7.3-040703-generic_4.7.3-040703.201609070334_amd64.deb ...
    Done.
    Unpacking linux-image-4.7.3-040703-generic (4.7.3-040703.201609070334) ...
    dpkg: dependency problems prevent configuration of linux-headers-4.7.3-040703-generic:
    linux-headers-4.7.3-040703-generic depends on linux-headers-4.7.3-040703; however:
    Package linux-headers-4.7.3-040703 is not installed.

    dpkg: error processing package linux-headers-4.7.3-040703-generic (--install):
    dependency problems - leaving unconfigured
    dpkg: dependency problems prevent configuration of linux-image-4.7.3-040703-generic:
    linux-image-4.7.3-040703-generic depends on initramfs-tools | linux-initramfs-tool; however:
    Package initramfs-tools is not installed.
    Package linux-initramfs-tool is not installed.

    dpkg: error processing package linux-image-4.7.3-040703-generic (--install):
    dependency problems - leaving unconfigured
    Errors were encountered while processing:
    linux-headers-4.7.3-040703-generic
    linux-image-4.7.3-040703-generic

    Ответить
  4. На 16.10 вывод следующий:
    KernelUpdateChecker
    Traceback (most recent call last):
    File "/usr/bin/lsb_release", line 95, in
    main()
    File "/usr/bin/lsb_release", line 59, in main
    distinfo = lsb_release.get_distro_information()
    File "/usr/lib/python3/dist-packages/lsb_release.py", line 383, in get_distro_information
    distinfo = guess_debian_release()
    File "/usr/lib/python3/dist-packages/lsb_release.py", line 281, in guess_debian_release
    get_distro_info(distinfo['ID'])
    File "/usr/lib/python3/dist-packages/lsb_release.py", line 41, in get_distro_info
    RELEASES_ORDER.sort(key=lambda n: float(n[0]))
    File "/usr/lib/python3/dist-packages/lsb_release.py", line 41, in
    RELEASES_ORDER.sort(key=lambda n: float(n[0]))
    ValueError: could not convert string to float: '8.04 LTS'

    Ответить
  5. E: Невозможно получить блокировку внешнего интерфейса dpkg (/var/lib/dpkg/lock-frontend); у вас есть права суперпользователя?

    Ответить
  6. При запуске закачанных двух файлов вышла ошибка: dpkg: пакет обработки ошибок linux-image-4.18.16-041816-generic (--install):
    проблемы зависимостей - оставляем"не задано"
    При обработке были обнаружены ошибки:
    linux-заголовки-4.18.16-041816-дженерик
    linux-образ-4.18.16-041816-дженерик

    Ответить
    • Ден, тут надо качать три файла. хедерс, модулес, кернел. Причём хедерс на версии 5.7 сработал только тот что с приставкой "all". Админ! Поправь статью! Она слегка устарела, но полезна многим!

      Ответить
  7. Здравствуйте.
    Поставил Ubuntu 20.04. Была проблема с черным экраном при выключении.
    Обновил ядро с 5.4.0-58 на 5.10.0-051000. Проблема исчезла. Но сейчас при выключении/перезагрузке сразу после логотипа ноутбука подгружает или настраивает что-то(загружает это ядро мб. Пишет с самого чала Loading 5.10..... , дальше много строк, а слева [OK] зеленым). Фотки не прикрепляются.
    Пробовал ядро вернуть. Но тогда комп не выключается, а такое включение остается.

    Ответить
  8. 7.7равсвсвуйте, подскажите пожалуйста как обновить версию ядра на Centos 7.7 3.10.0-1062.4.3 до версии CentOS 7.7 версия ядра 3.10.0-1062.9.1.el7.x86_64

    Ответить
  9. Подскажите, пробую обновить по Вашей инструкции ядро Ubuntu Server 20.04 с 5.4.0-97-generic до последнего 5.17-rc7 и в момент установки, возникает ошибка.
    Не подскажите что это значит?

    sudo dpkg -i linux-headers* linux-image* linux-modules*
    Выбор ранее не выбранного пакета linux-headers-5.17.0-051700rc7.
    (Чтение базы данных … на данный момент установлено 257589 файлов и каталогов.)
    Подготовка к распаковке linux-headers-5.17.0-051700rc7_5.17.0-051700rc7.202203062330_all.deb …
    Распаковывается linux-headers-5.17.0-051700rc7 (5.17.0-051700rc7.202203062330) …
    Выбор ранее не выбранного пакета linux-headers-5.17.0-051700rc7-generic.
    Подготовка к распаковке linux-headers-5.17.0-051700rc7-generic_5.17.0-051700rc7.202203062330_amd64.deb …
    Распаковывается linux-headers-5.17.0-051700rc7-generic (5.17.0-051700rc7.202203062330) …
    Выбор ранее не выбранного пакета linux-image-unsigned-5.17.0-051700rc7-generic.
    Подготовка к распаковке linux-image-unsigned-5.17.0-051700rc7-generic_5.17.0-051700rc7.202203062330_amd64.deb …
    Распаковывается linux-image-unsigned-5.17.0-051700rc7-generic (5.17.0-051700rc7.202203062330) …
    Выбор ранее не выбранного пакета linux-modules-5.17.0-051700rc7-generic.
    Подготовка к распаковке linux-modules-5.17.0-051700rc7-generic_5.17.0-051700rc7.202203062330_amd64.deb …
    Распаковывается linux-modules-5.17.0-051700rc7-generic (5.17.0-051700rc7.202203062330) …
    Настраивается пакет linux-headers-5.17.0-051700rc7 (5.17.0-051700rc7.202203062330) …
    dpkg: зависимости пакетов не позволяют настроить пакет linux-headers-5.17.0-051700rc7-generic:
    linux-headers-5.17.0-051700rc7-generic зависит от libc6 (>= 2.34), однако:
    Версия libc6:amd64 в системе — 2.31-0ubuntu9.7.
    linux-headers-5.17.0-051700rc7-generic зависит от libssl3 (>= 3.0.0~~alpha1), однако:
    Пакет libssl3 не установлен.

    dpkg: ошибка при обработке пакета linux-headers-5.17.0-051700rc7-generic (--install):
    проблемы зависимостей — оставляем не настроенным
    Настраивается пакет linux-image-unsigned-5.17.0-051700rc7-generic (5.17.0-051700rc7.202203062330) …
    I: /boot/vmlinuz.old is now a symlink to vmlinuz-5.4.0-104-generic
    I: /boot/initrd.img.old is now a symlink to initrd.img-5.4.0-104-generic
    I: /boot/vmlinuz is now a symlink to vmlinuz-5.17.0-051700rc7-generic
    I: /boot/initrd.img is now a symlink to initrd.img-5.17.0-051700rc7-generic
    Настраивается пакет linux-modules-5.17.0-051700rc7-generic (5.17.0-051700rc7.202203062330) …
    Обрабатываются триггеры для linux-image-unsigned-5.17.0-051700rc7-generic (5.17.0-051700rc7.202203062330) …
    /etc/kernel/postinst.d/initramfs-tools:
    update-initramfs: Generating /boot/initrd.img-5.17.0-051700rc7-generic

    /etc/kernel/postinst.d/zz-update-grub:
    Sourcing file `/etc/default/grub'
    Sourcing file `/etc/default/grub.d/init-select.cfg'
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-5.17.0-051700rc7-generic
    Found initrd image: /boot/initrd.img-5.17.0-051700rc7-generic
    Found linux image: /boot/vmlinuz-5.4.0-104-generic
    Found initrd image: /boot/initrd.img-5.4.0-104-generic
    Found linux image: /boot/vmlinuz-5.4.0-100-generic
    Found initrd image: /boot/initrd.img-5.4.0-100-generic
    Found linux image: /boot/vmlinuz-5.4.0-99-generic
    Found initrd image: /boot/initrd.img-5.4.0-99-generic
    Found linux image: /boot/vmlinuz-5.4.0-97-generic
    Found initrd image: /boot/initrd.img-5.4.0-97-generic
    done
    При обработке следующих пакетов произошли ошибки:
    linux-headers-5.17.0-051700rc7-generic

    Ответить
  10. Мб запоздал с ответом, но все же. Если image и modules установились, но не ставится headers generic - попробуйте headers all. Сам с этим столкнулся, headers all стал без проблем. Проверял на разных ядрах.

    Ответить

Оставьте комментарий