Андрей Смирнов
Время чтения: ~15 мин.
Просмотров: 0

Hotpatching: как обновить ядро Linux без перезагрузки системы

Часто бывает так, что поставив новую стабильную систему, да ещё и отмеченную как LTS, вам всё равно хочется установить новое ядро (в котором, например, улучшено энергосбережение и наконец-то заработает ваш новый планшет Genius). Патчить и собирать ядро из исходников — игра, конечно, интересная, но для ленивых пользователей Ubuntu существует готовый репозиторий. Одна беда — скачивать пакеты и следить за обновлениями придётся вручную. До недавнего времени за обновлениями можно было следить, к примеру, на сайте где ко всему прочему публиковались списки команд для каждой архитектуры, которые можно было просто скопировать в терминал. Но недавно появился скрипт который и послужил мотивом для создания этого очерка. Я искренне верю, что авторы скрипта задавались единственной целью — перестать публиковать надоевшие списки команд и объяснять в комментариях какая у кого архитектура, но тем не менее скупая мужская слеза покатилась по моей щеке когда я смотрел на его содержимое. Поэтому я решил сделать паузу и вспомнить как же это делалось раньше, когда деревья были большими, а иногда даже бинарными. Итак, мы хотим получать новейшее ядро для своей версии Ubuntu из репозитория и устанавливать его в интерактивном или автоматическом (для работы с anachron) режимах. Ядра помеченные как rc (release candidate) устанавливать не будем, так как они часто ведут себя плохо, да и репозиторий не всегда содержат их полные версии. Кроме ядер для нашей версии Ubuntu не плохо было бы иметь возможность получать новые стабильные ядра для следующей версии (как показывает практика такие ядра часто работают хорошо и содержат полезные обновления). Таким образом придём к синтаксису

sudo bash kernel_upd.sh [-a] [-u] [-h] 

где опции означают следующее: -a Включает автоустановку (скрипт не задаёт никаких дополнительных вопросов, что позволяет включить его как задание для anacron) -u Позволяет устанавливать ядра для версии Ubuntu отличной от нашей -h Короткая справка Далее я не буду полностью разбирать скрипт, а покажу только общую стратегию и некоторые полезные приёмы bash программирования.

Стратегия
  • С помощью wget будем скачивать список доступных ядер.
  • С помощью grep и регулярного выражения будем отфильтровывать только те ядра, которые нам нужны (не являются rc и возможно соответствуют нашей версии Ubuntu).
  • Структура репозитория такова, что новые ядра размещаются в конце списка, поэтому дополнительная сортировка не требуется и последнее ядро будет самым новым. Получим его версию с помощью команды tail.
  • С помощью команды uname получим версию установленного в системе ядра.
  • Выделяем при помощи регулярных выражений мажорные версии установленного и доступного ядер, и в случае если доступна более новая версия — скачиваем её и устанавливаем с помощью команды dpkg.
Полезные мелочи в Bash
Используем в сообщениях имя скрипта $0

Сообщения скрипта становятся намного более информативны если они показывают из какого скрипта они пришли. Параметр $0 содержит в себе имя выполняемого скрипта. Например, просьба запустить скрипт с правами суперпользователя может выглядеть так

if [ `whoami` != 'root' ]; then   echo "Permission denied. Run $0 as the root"   exit 1; fi 
Получаем имя установленной версии Ubuntu

В скриптах для Ubuntu очень полезно знать какая версия этого дистрибутива у нас установлена. Команда lsb_release помогает получить эту информацию

RELEASE_CDN=`lsb_release -sc` 
Использование дополнительных команд

Если мы хотим опционально использовать команды, которые возможно установлены в системе (например, оповещать пользователя с помощью send-notify если он доступен или kdialog если нет) то можно использовать следующий пример. Получаем пути для нужных команд с помощью which

KNOTIFY=`which kdialog` NOTIFY=`which notify-send` 

Если полученный путь не пустой — то команда доступна

if [[ -n $NOTIFY ]]; then   notify-send 'Installation finished' "Kernel $KERNEL_A was succesfuly installed   Please, reboot your computer for the changes to take effect" elif [[ -n $KNOTIFY ]]; then   kdialog --title 'Installation finished' --passivepopup "Kernel $KERNEL_A was succesfuly installed   Please, reboot your computer for the changes to take effect" fi 
Запрос подтверждения у пользователя

Запуская скрипт в интерактивном режиме хорошим тоном будет попросить у пользователя подтверждения выполнения каких-либо действий. Для этого существует команда read которая вместе с if или case может стать мощным инструментом для общения с пользователем. Например,

read -p 'Do you want to reboot computer now (y/n)?' REPLY if [ $REPLY == 'y' ]; then   shutdown -r 0 fi 

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

Анализ опций скрипта

Команда getopts предлагает мощное средство для анализа опций скрипта в каком бы виде они не были заданы -a -u или -au. Опции без параметров задаются с помощью двоеточия перед ними ":auh", опции с параметрами — с помощью двоеточия после них.

while getopts ":auh" opt; do   case "$opt" in     "a") AUTO=1;;     "u") RELEASE='';;     "h")       echo -e $USAGE       exit 0;;     "?")       echo "Invalid option $OPTARG. Try $0 -h for help"       exit 1;;     *)       echo "Unknown error while processing options"       exit 1;;   esac done 
Проверка статуса выполнения предыдущей команды $?

Во время выполнения скрипта некоторые команды могут завершаться неудачно и рушить дальнейшее выполнение скрипта. Поэтому важно проверять статус выполнения таких команд. Этот статус содержится в параметре $?

dpkg -i *.deb if [ $? -eq 0 ]; then   echo "..." fi 
Перенаправление ввода вывода через |

Не стоит забывать о полезной возможности перенаправить вывод одной команды на ввод другой с помощью оператора |

KERNEL_A=`wget -qO - $REP | grep -o "v[0-9].[0-9].[0-9]*-"$RELEASE"w*" | tail -n 1` 

Это позволяет совмещать базовые команды в одну, которая делает как раз то, что нам нужно (Команда выше получает последнюю стабильную версию ядра из репозитория и сохраняет её в переменной KERNEL_A).

Использование пользовательских функций

Пользовательские функции доступные в Bash позволяют значительно сократить объём кода скрипта.

function clean {   cd /   echo 'Cleaning...'   rm -rf /tmp/KERNEL_UPD }  clean 

Готовый скрипт доступен тут. Изменяйте его, правьте, используйте его части для своих целей.

Заключение

Что хочется сказать напоследок — конечно, Ubuntu — это Linux для людей, но это в первую очередь Linux, и приложив небольшие усилия вы получите не просто красивую оболочку для просмотра видео и сёрфинга в интернете, но и мощный конструктор, с помощью которого можно творить чудеса. И да прибудет с вами сила! P.S.: Спасибо пользователю за полезное уточнение, которое может улучшить сложные скрипты. P.P.S.: Все те, кто с шипящим «не нужжжжно!» сливал мне карму, все те, кто сначала пишет комментарий, а потом думает, все те, кто знает единственный расово-верный способ как нужно жить ПРАВИЛЬНО — горите в аду! Чмоки =*

kak-obnovit-yadro-v-ubuntu.png

Ядро дистрибутивов Linux — основа операционной системы, которая отвечает за совместимость с устройствами и выполняет другие важные опции. Сейчас разработчики стараются раз в несколько месяцев или даже чаще выпускать обновления ядер для введения новых функций и поддержки производимого оборудования. К Ubuntu эта тема тоже относится, поэтому некоторые обладатели данного дистрибутива сталкиваются с необходимостью инсталляции апдейтов. Выполняется данная процедура относительно сложно, поскольку каждое действие будет производиться через «Терминал». Далее мы хотим продемонстрировать два способа, позволяющих справиться с поставленной задачей.

Обновляем ядро в Ubuntu

Официальный сайт, на котором находится информация по каждому обновлению ядра, называется kernel.org. Именно там вы можете просмотреть абсолютно все апдейты и изменения, внесенные в интересующую версию. Что же касается самого процесса обновления, то происходит он в ручном или автоматическом режиме. Каждый из этих вариантов имеет свои сложности и особенности, поэтому мы предлагаем детально изучить их по очереди, чтобы в итоге остановиться на оптимальном. Однако для начала давайте разберемся, как узнать текущую версию ядра.

Определяем текущую версию ядра в Ubuntu

Определение текущей версии ядра в Убунту происходит через стандартный «Терминал» путем ввода всего одной команды. Для этого даже не понадобятся права суперпользователя, а весь процесс займет всего несколько секунд.

  1. Откройте меню приложений и запустите оттуда «Терминал». Вы можете открыть консоль и другим удобным для вас способом.

zapusk-terminala-dlya-proverki-tekushhej-versii-yadra-v-ubuntu.png

Введите команду uname -r и нажмите на клавишу Enter.</li>

komanda-dlya-proverki-tekushhej-versii-yadra-v-distributive-ubuntu.png

В новой строке отобразится тип ядра и его версия.</li>

rezultaty-posle-vvedeniya-komandy-dlya-proverki-versii-yadra-v-ubuntu.png

</ol>

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

Способ 1: Ручной режим обновления

Ручной режим обновления ядра в Ubuntu займет немного больше времени, нежели автоматический, но при этом вы получите вариативность в выборе версий и даже сможете их скачать заранее с другого компьютера, например, на флешку, если подключение к сети на главном ПК отсутствует. От вас потребуется лишь предварительно выбрать подходящую сборку и задействовать приведенные команды, чтобы инсталлировать ее.

Перейти на официальный сайт для скачивания файлов ядра Linux

  1. Откройте браузер и перейдите по указанной выше ссылке. Здесь вы можете выбрать первую директорию под названием «daily». В ней находятся последние версии ядра, обновляемые каждый день. В противном случае просто опускайтесь в самый низ по списку, чтобы отыскать последнюю подходящую сборку.

vybor-yadra-dlya-skachivaniya-na-oficzialnom-sajte-v-ubuntu.png

Откройте директорию с версией, чтобы получить DEB-пакеты.</li>

vybor-versii-yadra-dlya-skachivaniya-na-oficzialnom-sajte-ubuntu.png

Скачайте «linux-headers» и «linux-image» подходящих архитектур и одинаковых версий в удобное расположение. Для этого достаточно будет кликнуть по синим ссылкам.</li>

skachivanie-obrazov-i-ostalnyh-fajlov-yadra-dlya-obnovleniya-ubuntu.png

При появлении уведомления об обработке файлов отметьте маркером пункт «Сохранить файл».</li>

podtverzhdenie-skachivaniya-fajlov-s-oficzialnogo-sajta-dlya-obnovleniya-yadra-v-ubuntu.png

Перейдите к расположению загруженных пакетов и щелкните по одному из них правой кнопкой мыши.</li>

prosmotr-svedenij-o-skachannyh-fajlah-pered-ustanovkoj-v-ubuntu.png

В появившемся контекстном меню вас интересует пункт «Свойства».</li>

perehod-k-svojstvam-skachannyh-paketov-dlya-obnovleniya-yadra-ubuntu.png

Обратите внимание на сноску «Родительская папка». Скопируйте этот путь, если вы затрудняетесь ввести его самостоятельно в консоли при необходимости.</li>

opredelenie-mesta-sohraneniya-fajlov-yadra-dlya-obnovleniya-ubuntu.png

Теперь запустите новый сеанс в «Терминале», откуда перейдите к папке назначения, определенной ранее, введя cd + путь.</li>

vvod-komandy-dlya-perehoda-k-raspolozheniyu-fajlov-dlya-obnovleniya-yadra-ubuntu.png

Если перемещение прошло успешно, в новой строке ввода дополнительно появится надпись текущей директории, из которой и будут выполняться последующие команды.</li>

uspeshnyj-perehod-k-papke-raspolozheniya-fajlov-dlya-obnovleniya-yadra-v-ubuntu.png

Задействуйте команду dpkg -i *.deb для запуска инсталляции.</li>

vvod-komandy-dlya-ustanovki-paketov-pri-obnovlenii-yadra-v-ubuntu.png

Если появится уведомление о том, что операция требуется привилегий суперпользователя, добавьте перед основной строкой слово sudo.</li>

informacziya-o-pravah-dostupa-pri-ustanovke-fajlov-obnovleniya-yadra-v-ubuntu.png

Для подтверждения прав суперпользователя потребуется ввести пароль. Учитывайте, что символы при написании не отображаются, но вводятся. Как только наберете свой пароль, нажмите на Enter для подтверждения.</li>Начнется распаковка имеющихся архивов. Она займет определенный промежуток времени. Не прерывайте терминальную сессию и не выполняйте других действий во время данной операции.</li>Вы будете уведомлены об успешном завершении операции или же на экране может появиться ошибка, свидетельствующая о нарушении зависимостей. Если этого не произошло, обратите внимание только на последние действия следующей инструкции, а если установка прервалась, потребуется выполнять дополнительные манипуляции.</li></ol>

Проблемы с инсталляцией ядра через стандартный менеджер пакетов — ситуация часто встречающаяся. В большинстве случаев она решается путем использования стороннего установщика. Для начала его следует добавить, а потом уже воспользоваться встроенными функциями.

  1. Вы можете задействовать эту же сессию «Терминала» или создать новую. Введите в ней команду sudo apt-get install gdebi и нажмите на Enter.
  2. Для подтверждения прав доступа потребуется ввести пароль суперпользователя.
  3. При появлении уведомления о расширении объема занятого дискового пространства выберите вариант Д.
  4. После этого снова переместитесь к тому пути, куда были помещены DEB-пакеты, например, через команду cd ~/Загрузки.
  5. Используйте строку sudo gdebi linux-headers*.deb linux-image-*.deb.
  6. Ожидайте окончания чтения и распаковки файлов.
  7. Подтвердите операцию инсталляции пакетов.
  8. Для применения всех изменений потребуется обновить загрузчик путем ввода sudo update-grub.
  9. Вы будете уведомлены, что обновление прошло успешно.

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

Способ 2: Автоматическое обновление ядра

Этот метод подойдет тем пользователям, которые хотят получать обновления регулярно, задействовав для этого одно и то же средство, устанавливающее на ПК самую последнюю версию ядра. Осуществляется эта операция путем использования скрипта. Давайте рассмотрим, как создать его и инсталлировать апдейты для ядра Ubuntu.

  1. Для начала перейдите в папку, куда будет инсталлирован скрипт. Запустите консоль и введите команду cd /tmp.
  2. Используйте команду git clone git://github.com/GM-Script-Writer-62850/Ubuntu-Mainline-Kernel-Updater.
  3. Если вы получили уведомление об отсутствии команды git, следуйте приведенной рекомендации по инсталляции.
  4. После останется только записать скрипт путем вода bash Ubuntu-Mainline-Kernel-Updater/install.
  5. Подтвердите добавление файлов, выбрав положительный вариант ответа.
  6. Проверка обновлений запускается через KernelUpdateChecker -r yakkety. Учтите, что ветка -r используется для определения версии дистрибутива. Указывайте опцию в соответствии со своими потребностями.
  7. Если апдейты ядра будут найдены, установите их через sudo /tmp/kernel-update.
  8. По окончании обязательно проверьте текущее активное ядро через uname -r и обновите GRUB.

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

rm ~/.config/autostart/KernelUpdate.desktop sudo rm /usr/local/bin/KernelUpdate{Checker,ScriptGenerator}

Решение проблем с загрузчиком GRUB после обновления ядра

Иногда во время инсталляции апдейтов для ядра происходят ошибки или же пользователь сам завершил установку файлов невовремя. В таких ситуациях возникает неполадка, при которой операционная система попросту перестает загружаться. Касается это и обладателей проприетарных драйверов от компании NVIDIA. Решение здесь одно: загрузиться со старого ядра и удалить новое с дальнейшей переустановкой или выбором более стабильной версии.

  1. Включите компьютер и сразу же нажмите на клавишу Esc, чтобы перейти к меню загрузок. Используйте стрелки для перемещения к пункту «Дополнительные параметры для Ubuntu», а затем нажмите на Enter.
  2. Отыщите здесь ваше старое рабочее ядро и выберите его для загрузки.
  3. Войдите в свою учетную запись, и после успешного включения графической оболочки запустите консоль.
  4. Введите sudo apt remove linux-header-5.2* linux-image-5.2*, где 5.2 — версия установленного ранее ядра.
  5. Укажите пароль для предоставления прав суперпользователя.
  6. После успешного удаления обновите загрузчик через sudo update-grub.
  7. Вы будете уведомлены о том, что генерация файла прошла успешно, и теперь вы снова будете загружаться со старого ядра.

В рамках сегодняшнего материала вы узнали о двух методах обновления ядра в Ubuntu. Как видите, для осуществления каждого из них придется выполнить ряд консольных команд, но выбор самого варианта уже зависит от ваших потребностей. Используйте представленную в конце статьи инструкцию, чтобы быстро решить возникшие неполадки с загрузкой ПК после инсталляции новой версии ядра. Мы рады, что смогли помочь Вам в решении проблемы.Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Помогла ли вам эта статья?

149.png

Linux — это ядро операционной системы. Ubuntu — это операционная система построенная на ядре Linux. Грубо говоря, ядро Linux — это «головной мозг» всей операционной системы, который контролирует работу устройств между собой.

Для чего нужно обновлять ядро в Ubuntu?

Ничего не стоит на месте, все технологии двигаются вперед и развиваются. Выпускаются новые процессоры, чипсеты и другие компоненты, которые для корректной работы требуют поддержки со стороны операционной системе.

Для особо продвинутых пользователей ОС Linux позволяет пересобрать ядро под свои нужды из исходного кода. При этом можно получить некоторую прибавку в производительности, путем исключения ненужных компонентов, но это довольно долгий процесс, который требует некоторых дополнительных знаний.

В этой статье предлагается обновить системное ядро в ОС Ubuntu без компилирования ядра Linux из исходного кода.

</span>

Немного теории

Как сообщает , в названии ядра заложена достаточно важная информация, которая не просто показывает его версию.

Обычно ядро обозначается так: 2.6.33.3, где:

  • первое число 2 — это версия ядра, которая меняется очень редко,
  • второе число 6 — это старшая версия ревизии ядра, где четные числа обозначают стабильные версии, а нечетные числа — не стабильные версии ядра,
  • третье число 33 изменяется в том случае, если были внесены в состав ядра дополнительные драйвера и улучшения,
  • четвертое число 3 — это число изменяется в том случае, если были внесены небольшие исправления, но требующие незамедлительного добавления.

Как определить версию установленного ядра?

Чтобы посмотреть версию установленного ядра можно открыть Системный монитор или в консоли набрать:

# uname -a

Оба действия покажут версию установленного ядра.

Обновление стабильного ядра в Ubuntu

На официальном сайте ядра Linux можно посмотреть текущую версию доступного стабильного ядра (stable kernel). Если доступное ядро имеет более высокую версию, то вам необходимо обновить ОС Ubuntu стандартными командами из официального репозитория Canonical:

# sudo apt-get update && sudo apt-get upgrade

Стабильные версии ядер включаются в официальный репозиторий Ubuntu с исправной регулярностью.

Обновление нестабильного ядра в Ubuntu

В некоторых случаях необходимо установить версию ядра, которое еще не до конца протестировано и находится в разделе нестабильного ядра (unstable kernel). Установка нестабильного ядра в Ubuntu требуется, к примеру, для корректной работы нового устройства.

Для unstable-версии ядра нет полноценного репозитория, как для других приложений Ubuntu. Это сделано из соображений безопасности и стабильности работы дисрибутива Ubuntu.

Для обновления такого ядра в Ubuntu требуется загрузить 3 deb-пакета, которые находятся здесь: http://kernel.ubuntu.com/~kernel-ppa/mainline, где можно выбрать любую доступную версии.

Пакеты следует загружать согласно разряду вашего дистрибутива (i386 — для 32bit, amd64 — для 64bit):

  • linux-headers- … _i386.deb
  • linux-headers … _all.deb
  • linux-image- … _i386.deb

После этого устанавливаем вручную загруженные пакеты и перезагружаем компьютер.

На заметку:

Наши любимые женщины всегда ждут от нас знаков внимания. К примеру, женщине можно подарить красивый дизайнерский кулон. Цена не такая уж высокая, а блеска много. В сети Интернет бижутерия продается на большом количестве интернет-сайтов. Поэтому выбор всегда есть. Лучший подарок — это подарок сделанный от всего сердца.

Так же можно удивить девушку, доставив ей расширенный оргазм, о котором можно прочитать на сайте kamasutra21veka.ru

Статья опубликована 30.04.2010 · Автор статьи:Зюзгин Иван Статья относится к linux, ubuntu, безопасность, компиляцияСлучайные 7 статей: Комментарии [10] IT-новостиПопулярное

  • RedNotebook — личный дневник в Linux[3602190]
  • Основные команды Linux — Справочник команд Линукс[1619389]
  • Как сделать загрузочную флешку из ISO-образа ОС[1053359]
  • Команда mount в Linux или все о монтировании разделов, дисков, образов ISO и SMB ресурсов.[1027223]
  • Скрипт Winetricks или доводим Wine до ума[603546]
  • Список радиостанций для Rhythmbox[579329]
  • Yarssr — RSS-напоминалка о новых поступлениях на сайте[564831]

TOP 100Облако теговВсе тегиИспользуемые источники:

  • https://habr.com/post/145945/
  • https://lumpics.ru/how-to-update-kernel-in-ubuntu/
  • https://itshaman.ru/articles/154/kak-obnovit-v-ubuntu-yadro

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации