- Записки программиста
- Как обновить ядро Linux без перезагрузки системы
- обновление ядра без перезагрузки
- Ksplice
- kexec
- Как настроить автоматические обновления ядра в Linux
- Канонический Livepatch
- KernelCare
- Выводы
- Как пропатчить ядро без перезагрузки: livepatch, kpatch и Canonical Livepatch Service
- Простейший пример: livepatch
- Kpatch
- Canonical Livepatch Service
- Заключение
Записки программиста
Как обновить ядро Linux без перезагрузки системы
27 сентября 2012
Ksplice представляет собой расширение Linux, позволяющее производить «горячее» обновление ядра, то есть, без перезагрузки системы. Под катом представлена небольшая памятка по использованию Ksplice в Ubuntu Linux.
Само собой разумеется, заплаты для ядра появляются не из воздуха. Они создаются и тестируются разработчиками из компании Ksplice, Inc. На создание патча обычно уходит около суток с момента внесения изменения в исходный код ядра Linux. Распространяются патчи через сервис Ksplice Uptrack. Перед началом использования Ksplice требуется получить ключ доступа к этому сервису.
Переходим по ссылке, водим адрес электронной почты и через пару минут на него приходит ключ. Сервис совершенно бесплатен для пользователей Ubuntu Desktop и Fedora. Для использования Ksplice в Debian, Ubuntu Server, CentOS, RHEL и других серверных дистрибутивах Linux требуется оформить платную подписку на сервис. Обнаружить расценки на ksplice.com мне не удалось, но вот тут к примеру говорится о 3$ в месяц (это, по всей видимости, за один сервер).
Итак, получив ключ доступа, создаем файл /etc/apt/sources.list.d/ksplice.list следующего содержания:
sudo apt-get install ca-certificates
wget https: // www.ksplice.com / apt / ksplice-archive.asc
sudo apt-key add ksplice-archive.asc
rm ksplice-archive.asc
sudo apt-get update
sudo apt-get install ksplice uptrack
Во время выполнения последней команды вводим свой ключ.
Если вы хотите, чтобы патчи автоматически применялись к ядру по мере их появления, следует прописать в /etc/uptrack/uptrack.conf:
Чтобы произвести обновление ядра, выполняем команду:
Команда для просмотра «настоящего» uname:
Получения списка установленных заплат:
Получение списка заплат, доступных для установки:
Как видите, ничего сложного. Лично я нахожу Ksplice очень удобным, особенно на десктопе. На серверах Ksplice также может быть полезен. Допустим, вы предоставляете услугу аренды выделенных серверов. С помощью Ksplice вы можете обеспечить дополнительную защиту своих клиентов от взлома, при этом не перезагружая сервера без их спроса.
Не уверен, есть ли профит от использования Ksplice в веб-проектах. Минутный простой обычного сайтика все равно почти никто не заметит. А в проектах с высокой нагрузкой всегда нужно быть готовым к остановке одного или нескольких серверов и вообще это должно быть штатной ситуацией, если можно так выразиться.
Ну что ж, а теперь скажите мне, пользуетесь ли вы Ksplice, где вы его используете и во сколько, если не секрет, вам обходится это удовольствие?
Источник
обновление ядра без перезагрузки
В отличие от Windows, Linux не надо перезагружать после каждого чиха.
Исключением является только обновление ядра. Но сообщество кропотливо работает над улучшением инфраструктуры и ядра Linux, поэтому есть технологии, позволяющие обновить ядро без фактической перезагрузки компьютера.
Ksplice
Представляет собой приложение, которое «замораживает» ядро и заменяет его функции, данные и структуры в памяти обновленными. Приложение должно знать, какой исходный код у текущего ядра и что изменилось с выходом обновлений безопасности, делает унифицированный diff и применяет его к ядру в памяти.
Запущенные приложения продолжат свою работу сразу после обновления. Если какой-то из потоков ядра занят, то обновление может не пройти, такое иногда бывает.
Разработан Ksplice в студентами MIT, которые под руководством Джефри Арнольда основали одноименную компанию. Получив 100000\$ инвестирований они быстро развивались, пока их не выкупила Oracle. Теперь Ksplice представил проект Uptrack, который распространяется на платной основе для Oracle Linux, RedHat и прочих, кроме Ubuntu и Fedora.
Также существует и открытое приложение ksplice, для которого нужно указывать директорию с исходниками запущенного ядра, конфиг, с которым оно собрано и патчи.
Т.к. у нас на блоге стоит дистрибутивное ядро Ubuntu, то мне было лень собирать его из исходников и делать патчи самостоятельно, тем более, что для Ubuntu доступен Uptrack.
Расскажу, как я обновлял ядро на этом сервере (Ubuntu 12.04)
Сначала добавим ключ будущего репозитория:
Затем добавим сам репозиторий:
Для корректной работы приложения нам понадобится API ключ, который бесплатно вышлют по почте, если попросить по этой ссылке:
Обновим базу и установим приложение:
Теперь нужно обновить патчи uptrack, подтянув изменения из его репозитория:
Вы увидите список, вроде следующего:
Это значит, что есть обновления для установки, выполнив:
и подождав немного, вы увидите, что версия ядра изменилась без перезагрузки. Изменения применились и ядро стало свежее.
Напомню, что изменения применились только к оперативной памяти, поэтому рекомендую все же установить ядро по-старинке, чтобы, когда вы все-таки решитесь перезагрузиться, оно уже обновилось полностью.
Чтобы откатиться на старое ядро, выполните
Есть еще команды uptrack-show, uptrack-uname и uptrack-install, которые показывают доступные/установленные обновления, версию ядра и устанавливают патчи выборочно.
Напомню, что на работе сервера обновление ядра никак не сказалось, аптайм остался прежним.
kexec
Kexec — это механизм ядра, позволяющий загрузить ядро Linux из работающего ядра.
Таким образом мы избегаем перезагрузки железа, инициализации BIOS и всех вытекающих прелестей, но система по сути грузится с нуля, что не позволит сохранить uptime и работающие приложения.
Кстати, ядро должно быть собрано с поддержкой kexec.
Для использования kexec нужно установить пакет kexec-tools. Он есть в репозиториях большинства дистрибутивов.
Теперь, имея новое ядро и initrd, можно «перезагрузиться». Внимание, все текущие приложения будут закрыты, как при обычной перезагрузке.
Вот как это выглядит.
Для того, чтобы перезагрузиться обратно в старое ядро, выполните
Для меня более интересным является Ksplice, но т.к. он развивается под крылом Oracle, то ждать чего-то хорошего не стоит, надеюсь, что будут еще аналоги.
Источник
Как настроить автоматические обновления ядра в Linux
Применение обновлений безопасности к ядру Linux — простой процесс, который можно выполнить с помощью таких инструментов, как apt , yum или kexec . Однако при управлении сотнями или тысячами серверов под управлением различных дистрибутивов Linux для исправления этот метод может оказаться сложным и трудоемким.
Для обновления ядра вручную требуется перезагрузка системы. Это приводит к простою, что может быть проблематичным, поэтому перезагрузки обычно планируются через определенные промежутки времени. Поскольку во время этих циклов выполняется ручная установка исправлений, это дает хакерам «временное окно», в котором они могут атаковать инфраструктуру сервера.
Для организаций, использующих более нескольких серверов, установка исправлений в реальном времени является лучшим вариантом. Это автоматизированный способ исправления ядра Linux во время работы сервера, что позволяет ему быть более эффективным и безопасным, чем ручные методы.
В этой статье объясняется, как настроить автоматические обновления ядра без перезагрузки с помощью решений для исправления в реальном времени от Canonical и CloudLinux.
Канонический Livepatch
Canonical Livepatch — это служба, которая исправляет работающее ядро без перезагрузки вашей системы Ubuntu. Сервис Livepatch бесплатен для использования в трех системах Ubuntu. Чтобы использовать эту услугу на более чем трех компьютерах, вам необходимо подписаться на программу Ubuntu Advantage.
Перед установкой сервиса вам необходимо получить токен livepatch с сайта сервиса Livepatch .
После установки токена и включения службы, выполнив следующие две команды:
Чтобы проверить статус службы, запустите:
Позже, если вы захотите отменить регистрацию машины, используйте эту команду:
Те же инструкции применимы для Ubuntu 20.04 и Ubuntu 18.04.
KernelCare
KernelCare — отличный вариант для хостинг-провайдеров и предприятий.
KernelCare работает на Ubuntu, CentOS, Debian и других популярных разновидностях Linux. Он проверяет наличие обновлений каждые 4 часа и устанавливает их автоматически. Патчи можно откатить. KernelCare бесплатен для некоммерческих организаций.
Для установки KernelCare запустите установочный скрипт:
Если вы используете лицензию на основе IP, ничего больше делать не требуется. В противном случае, если вы используете лицензию на основе ключа, выполните следующую команду для регистрации службы:
Где — это строка кода регистрационного ключа, предоставленная при подписке на пробную версию или покупке продукта. Вы можете получить его на этой странице .
Ниже приведены некоторые полезные команды KernelCare:
Чтобы проверить, поддерживается ли работающее ядро KernelCare:
Чтобы отменить регистрацию сервера:
Чтобы проверить статус услуги:
Программное обеспечение будет автоматически проверять наличие новых исправлений каждые 4 часа. Чтобы обновить вручную, запустите:
Выводы
Технология Live Patching позволяет применять исправления к ядру Linux без перезагрузки.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Как пропатчить ядро без перезагрузки: livepatch, kpatch и Canonical Livepatch Service
Тему обновления патчей ядра без перезагрузки мы уже рассматривали в статье, опубликованной в 2014 году. В ней речь шла о KernelCare — инструменте, разработанном нашими партнёрами из компании Cloud Linux. На момент написания статьи KernelCare был чуть ли не единственным пригодным для полноценного использования инструментом для наложения патчей.
Прошло два с небольшим года — и ситуация изменилась, причём кардинально: начиная с версии 4.0 возможность наложения патчей «на лету» была официально добавлена в ядро.
Инструменты kpatch и kGraft, которые в 2014 году находились в «сыром» состоянии, также были существенно усовершенствованы. Kpatch даже был добавлен в официальные репозитории, — например, в Ubuntu 16.04 его уже можно установить с помощью стандартного менеджера пакетов.
А компания Canonical совсем недавно представила сервис Canonical Livepatch Service, с помощью которого можно патчить без перезагрузки ядро Ubuntu.
Более подробно о некоторых современных инструментах для добавления патчей мы расскажем в этой статье.
Простейший пример: livepatch
Начнём с очень простого эксперимента. Для этого нам понадобится любой дистрибутив Linux c ядром версии 4.0 или выше (в нашем случае это Ubuntu 16.04; здесь и далее все примеры команд приводятся именно для этого дистрибутива). В новых версиях ядра функция добавления патчей «на лету»(она так и называется — livepatch) включена по умолчанию.
Чтобы проверить, как она работает, нам потребуется, во-первых, установить заголовки ядра:
Далее установим отладочные символы ядра:
При выполнении этой команды в Ubuntu 16.04 может быть выдано следующее сообщение об ошибке:
Причина ошибки в том, что репозитории deb-src по умолчанию не подключены, а соответствующие строки в файле /etc/apt/sources.list закомментированы. Чтобы мы смогли работать с репозиториями исходных кодов, выполним:
После этого предыдущая команда будет выполняться без ошибок. К эксперименту всё готово, можно начинать:
Мы скачали код модуля ядра, который вносит изменения в основной ядерный код и модифицирует вывод команды cat /proc/cmdline. Теперь этот самый модуль нужно собрать. Для этого создадим следующий make-файл:
Соберём модуль и вставим его в ядро:
Посмотрим, что получилось. Выполним:
Вместо стандартной информации о параметрах ядра мы увидим вот такой текст:
Как видим, патч был успешно применён.
Вся информация о загруженных патчах хранится в директории /sys/kernel/livepatch:
Деактивировать патч можно с помощью команды:
Kpatch
Kpatch — инструмент, разработанный компаний Red Hat. Впервые он был представлен широкой пользовательской аудитории в феврале 2016 года. За это время он был значительно усовершенствован: в Ubuntu 16.04 он уже включён в официальные репозитории. Рассмотрим особенности работы с kpatch на практических примерах.
Начнём с установки необходимых зависимостей:
Для полноценной работы с kpatch также желательно установить ccache:
Вот и всё, зависимости установлены. Можно устанавливать kpatch:
В нашем эксперименте мы будем патчить исходники ядра. Клонируем репозиторий с исходным кодом нашей текущей версии Ubuntu:
По завершении клонирования скопируем исходники в директорию ubuntu-xenial-kpatch (это нужно, чтобы вносить изменения в исходный код и потом создавать на основе этих изменений патчи):
Откроем файл ubuntu-xenial-kpatch/ubuntu-xenial/fs/proc/version.c и внесём в него следующие изменения:
Cоздадим патч с помощью команды:
Патч представляет собой обычный текстовый файл, в котором перечислены внесённые изменения:
Чтобы добавить патч в ядро, выполним:
Как видно из только что приведённого вывода, на выходе мы получаем модуль ядра. Чтобы применить патч, нужно просто добавить этот модуль стандартным способом:
Посмотрим, что получилось в результате:
Canonical Livepatch Service
Несколько месяцев назад компания Canonical запустила официальный сервис Canonical LivePatch Service, который позволяет патчить ядро «на лету» при помощи простейших команд. Этот сервис ориентирован в первую очередь на пользователей enterprise-уровня, и поэтому является платным.
Но рядовые пользователи тоже могут оперативно получать все свежие обновления ядра. Для этого нужно зарегистрироваться на Ubuntu One и получить токен. Токен даёт возможность установить на 3 машины программу canonical-livepatch, которая загружает и добавляет патчи.
Посмотрим, как работает Canonical Livepatch Service. Перейдём по ссылке выше, получим токен, а далее выполним:
По завершении установки выйдем из системы, затем войдём снова и выполним:
Если всё было сделано правильно, мы получим следующее сообщение:
Далее выполним команду:
Вывод показывает, что сanonical-livepatch работает, и в ядро установлены все последние обновления. Более подробную информацию можно получить, воспользовавшись опцией −−verbose:
Также информацию об установленных патчах можно получить, заглянув в уже упомянутую выше директорию /sys/kernel/livepatch:
Kpatch_livepatch_Ubuntu_4_4_0_47_68_generic_14 — это и есть последний загруженный патч. Последние цифры в имени патча (14) совпадают с номером версии, указанным в выводе команды canonical-livepatch status (см. выше).
Убедиться, что новый патч был добавлен, можно и с помощью команды lsmod:
Заключение
В этой статье мы проделали небольшой отбор инструментов для добавления патчей в ядро Linux. Естественно, что все аспекты темы в рамках одной публикации затронуть невозможно. Если у вас есть замечания и дополнения — добро пожаловать в комментарии.
А если вы хотите изучить тему более глубоко, обратите внимание на следующие ссылки:
Источник