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

В этой статье мы рассмотрим как установить оболочку bash для Windows 10. Для этого нам нужно включить подсистему Linux для Windows и установить Ubuntu из Microsoft Store.

Подготовка к обновлению Linux Mint

Обновление дистрибутива Linux Mint хоть дело-то и простое, но застраховаться на случай непредвиденных ситуаций, вследствие которых операционная система может работать некорректно, все-таки желательно.

Для такой страховки разработчики рекомендуют перед обновлением сделать снимок системы с помощью приложения Timeshift, поэтому сначала нам необходимо сделать резервную копию (снимок) системы, а как это делается, мы рассмотрели в отдельной статье «Как создать снимок системы в Linux Mint? Создание резервной копии системы и ее восстановление».

Также разработчики рекомендуют на время обновления отключить заставку (хранитель экрана), для этого снимите соответствующие галочки в параметрах хранителя экрана (Меню -> Параметры -> Хранитель экрана).

После этого можно переходить к процессу обновления дистрибутива Linux Mint.

На заметку! Новичкам рекомендую почитать мою книгу «Linux для обычных пользователей» – в ней я подробно рассказываю про основы операционной системы Linux и как пользоваться этой системой без командной строки

Как включить подсистему Linux для Windows

Для ОС Windows 10 с обновлениями Fall Creators Update (версия 1709) и новее.

Открыть PowerShell от имени администратора. Для этого нужно нажать правой кнопкой мыши на Windows PowerShell » Дополнительно » Запуск от имени администратора.

Ввести следующую команду:

/online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Нужно будет нажать Y и ваш компьютер будет перезагружен для установки необходимых компонентов.

Для десятки версией ниже 1709

Читайте также:  Как узнать MAC адрес: 3 самых простых способа

Открываем «Параметры Windows». Для этого нажмём на клавиатуре клавиши Win + I. Выбираем Обновления и безопасность.

Вкладка Для разработчиков. В ней выбираем Режим разработчика.

Ksplice

Самый старый проект. Начат приблизительно в 2006 году как магистерская диссертация в MIT одного из пяти разработчиков Джеффа Арнольда (Jeff Arnold). Идея создать технологию, позволяющую безопасно обновлять ОС без перезагрузки, возникла после неудачного обновления серверов MIT, когда процедура готовилась неделю, но в итоге из-за ошибки оказалась проблемной. Проведенный разработчиками анализ патчей безопасности за период с 2005 по 2008 год показал, что в 87% случаев патч только добавлял проверку некоторых параметров, а поэтому такие исправления можно применять без остановки работы. Это и послужило толчком к старту проекта.

Изначально поддерживалась только x86/x64 Linux, но, по заявлениям разработчиков, код написан таким образом, что его очень легко можно перенести на Mac и Win (хотя этого до сих пор никто не сделал). В 2009 году проект привлек внимание инвесторов, получив премию в 100 тысяч долларов. В это же время разработчики организовали компанию Ksplice, Inc.

Ksplice первоначально был ограничен патчами, не использовавшими семантические изменения в структурах данных, что присуще многим (но не всем) патчам безопасности. Сегодня возможно применить Ksplice и при изменении семантики, но в автоматическом режиме генерировать такие патчи невозможно, поскольку это потребует дать Ksplice дополнительные инструкции. А вот четких указаний, как составить такие инструкции, у разработчиков нет, да и для этого требуются специфические знания, поэтому вряд ли сисадмин или пользователь будет этим заниматься. Кроме того, сборку патча нужно производить ровно в таком же окружении, как у используемого ядра. Разные версии GCC генерируют разный код, предсказать, как будет выглядеть бинарный патч в таком случае, невозможно. Именно поэтому разработчики основой технологии считали специальный сервис обновления Ksplice Uptrack, упрощавший все операции, так как все необходимые патчи готовились и проверялись на работоспособность специальной командой.

Ksplice

Первым дистрибутивом, официально поддерживающим технологию, стал Ubuntu, пользователи которого при помощи Ksplice Uptrack могли устанавливать критические обновления ядра в дистрибутиве Ubuntu без перезагрузки и остановки работы системы. Позже к ним присоединилась и Fedora Linux, коммерческую поддержку Ksplice получили RHEL, CentOS, CloudLinux, Ubuntu Server и Debian GNU/Linux.

Читайте также:  Rsync (gulp-rsync) – настройка deploy сайта на хостинг

В 2011 году Ksplice, Inc. была выкуплена Oracle, и теперь это основной компонент всех Oracle Linux. Компания сразу закрыла доступ к разработке. Сегодня можно скачать и свободно использовать для своих сборок лишь старую версию 0.9.9.1. Поддержка для RHEL была прекращена, но остался доступным 30-дневный пробный период. С 2015 года бесплатная поддержка доступна для Ubuntu Desktop (а настоящее время , , , ) и Fedora 23 и 24. Чтобы начать работать, достаточно установить пакет с сайта разработчика. Метод получения обновлений не изменялся — они по-прежнему загружаются из стандартных репозиториев Ubuntu, а затем транслируются в представление, подходящее для использования в Ksplice.

Ksplice универсален, так как не требует специальной модификации ядра и теоретически может работать с любым. Необходимо лишь установить пакет, содержащий модуль ядра и пользовательские утилиты, а также оформить файл изменений, который будет спроецирован на работающее ядро. Обновление ядра производится в два этапа. На первом шаге специальная утилита ksplice-create собирает ядро, используя исходные тексты и патч к ядру, и сравнивает получившийся образ со старым ядром. В результате генерируется модуль ядра, содержащий код измененных функций.

Ksplice доступен для подписчиков Установка обновлений при помощи Ksplice Uptrack в Ubuntu

Откат, при необходимости, делается в таком же порядке (утилитой ksplice-undo). Если модуль содержит патч для не загруженного в данный момент объекта, он не делает ничего, информация обновится, как только он будет запущен. Некоторые основные системные функции, постоянно используемые ядром, обновить при помощи Ksplice не получится.

Ksplice

Ksplice изначально позволял применять исправления только к ядру Linux, но новые возможности Ksplice, реализованные в Oracle Linux 7 и чуть позже для 6, позволяют вносить изменения в разделяемые библиотеки без необходимости перезапуска связанных с ними работающих процессов. Применение исправлений также производится на лету и позволяет избавиться от необходимости планового перезапуска длительно работающих приложений. На сегодня user space возможность обновления реализована для glibc и OpenSSL.

Читайте также:  Apple выпустили четвертую бета-версию iOS 10.3.3 и tvOS 10.2.2 для разработчиков

Как обновить программы в Kali Linux

Обновление программ в системах Linux отличается от обновления в Windows. Причём отличается в лучшую сторону – на мой взгляд, система управления и обновлениями программами (в Linux обычно используют слово «пакеты») является одним из ключевых преимуществ ОС семейства Linux.

Если в Windows обновление каждой программы выполняется в индивидуальном порядке: какие-то программы делают это автоматически, какие-то выводят соответствующее уведомление, для каких-то нужно самому заходить на официальный сайт и проверять информацию о новой версии. В Linux все программы (пакеты) собраны в одно или несколько хранилищ, которые называются репозиториями. Обычно, у каждого дистрибутива свой собственный репозиторий. Одна система может использовать сразу несколько репозиториев, например, Linux Mint «из коробки» использует пакеты из хранилища Ubuntu и из своего собственного хранилища.

Результатом такого подхода является то, что проверить обновления сразу для всех пакетов и обновить их можно буквально несколькими кликами мышки (если вы используете графический интерфейс), либо двумя командами (если вы предпочитаете командную строку).