The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Компания Red Hat открыла код kpatch для организации обновления на лету ядра Linux

04.03.2014 20:34

Компания Red Hat открыла под лицензией GPLv2 наработки проекта kpatch, в рамках которого подготовлена система динамического применения патчей к работающему ядру Linux. По своему назначению kpatch напоминает развиваемую компанией Oracle систему KSplice и анонсированный компанией SUSE проект kGraft, и также позволяет администраторам на лету устранять уязвимости и некоторые типы ошибок в ядре, без перезагрузки и остановки работы системы.

Принцип организации обновления ядра в kpatch напоминает kGraft и основывается на замене функций в ядре целиком, используя штатные средства подсистемы ftrace для перенаправления на новую функцию. Методы формирования и загрузки патча более близки к ksplice и также основаны на сравнении бинарных сборок. Отмечается, что реализация kpatch ещё до конца не стабилизирована, поэтому систему динамического обновления ядра пока не стоит использовать для промышленного применения. Инструкция по сборке и экспериментах с kpatch подготовлена для Fedora 20 (см. видеодемонстрацию). Горячие обновления могут быть сформированы для ядер Linux, начиная с выпуска 3.7.

После открытия кода kGraft, которое запланировано на март, между системами динамического обновления ядра от Red Hat и SUSE разразится конкурентная борьба по продвижению в состав основного ядра Linux. Не вызовет удивления, если компания Oracle откроет свежий исходный код KSplice и также подключится к борьбе за upstream. В настоящее время Ksplice является проприетарной разработкой. Ранний вариант Ksplice был открыт, но очень давно не обновлялся.

В состав kpatch входят следующие компоненты:

  • kpatch-build - набор утилит для преобразования патча к исходным текстам ядра, созданного утилитой diff, в специализированный модуль ядра, осуществляющий наложение изменений на работающее ядро. Для оценки подлежащих замене компонентов осуществляется сборка двух бинарных образов ядра (vmlinux), один для состояния до наложения патча на код ядра, а второй - после наложения патча. Далее выявляются отличия между бинарными сборками и генерируется модуль горячего обновления ядра.
  • Модуль горячего обновления ядра представляет собой обычный модуль ядра (файл с разрешением.ko), содержащий бинарные варианты изменённых функций ядра и метаданные об размещении оригинальных функций, подлежащих замене. Для применения патча нужно загрузить в ядро соответствующий модуль горячего обновления, для отката изменения и возвращения к исходному состоянию функций достаточно выгрузить модуль горячего обновления из ядра;
  • Базовый модуль kpatch - модуль ядра, предоставляющий интерфейс для регистрации новых функций, определённых в модуле горячего обновления ядра. Для перенаправления вызова на новую функцию используется подсистема ftrace, при помощи которой ставится хук на инструкцию вызова старой функции для перенаправления обращения на новую функцию.
  • Утилита kpatch с интерфейсом командной строки для управления коллекцией модулей горячего обновления ядра. Один или более подобных модулей могут быть настроены для применения в процессе загрузки, что позволяет системе сохранить работоспособность применённых в процессе работы горячих патчей, даже в случае перезагрузки сервера.

Основные ограничения:

  • kpatch не может отслеживать изменение патчем динамически выделяемых структур данных, вся работа по анализу возможного пересечения с подобными структурами ложится на пользователя;
  • Пока не поддерживаются патчи, затрагивающие статически определённые структуры данных. Присутствие подобных структур в патче определяется и приводит к выводу ошибки;
  • Патчи не могут применяться к постоянно вызванным функциям ядра, таким как schedule(), а также к функциям, вызываемым только на стадии инициализации ядра;
  • Пока не поддерживаются патчи к функциям модулей ядра (поддерживаются только патчи к функциям в его базовом образе).

Дополнение: интервью с руководителем SUSE Labs по поводу разработки kGraft.

  1. Главная ссылка к новости (http://rhelblog.redhat.com/201...)
  2. OpenNews: Компания SUSE развивает свободную систему для обновления ядра без перезагрузки
  3. OpenNews: Компания Oracle представила сервис для проверки необходимости обновления ядер произвольных дистрибутивов
  4. OpenNews: Oracle поглотил компанию Ksplice, развивающую технологию обновления Linux-ядра без перезагрузки
  5. OpenNews: Выпуск CRIU 1.0, системы для заморозки и восстановления состояния процессов в Linux
  6. OpenNews: Компания Red Hat работает над собственной технологией обновления ядра Linux на лету
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/39235-ksplice
Ключевые слова: ksplice, kpatch, patch, linux, kernel
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (36) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, pavlinux (ok), 21:05, 04/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Опердили SuSE :)

    ---
    Пара патчей

    https://github.com/pavlinux/kpatch/commit/041c7ccae68e36b771156896776ccbb3b862
    https://github.com/pavlinux/kpatch/commit/db9c6e989b7c1a5005633291f7bb2eebd949
    ---

     
     
  • 2.14, FractalizeR (ok), 23:26, 04/03/2014 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Патчи гениальны. Они изменят судьбу мира Linux.
     
     
  • 3.17, pavlinux (ok), 23:41, 04/03/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ты как большой специалист знаешь же, где найти руткит на неправильные спецификаторы printf/scanf
     
     
  • 4.23, анонимус (??), 01:07, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    руткит — это немного не о том, наверное эксплойт
     
     
  • 5.46, pavlinux (ok), 17:09, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    руткит - это цель, эксплойт - это инструмент, как черепно-мозговая травма тупым предметом и молоток.
     
  • 2.29, Аноним (-), 03:56, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Нафиг нужны твои патчи?
     
     
  • 3.42, pavlinux (ok), 14:25, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Нафиг нужны твои патчи?

    лохов раздражать

     
  • 2.31, Аноним (-), 06:24, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Так вот ты какой, северный pavlinux https://identicons.github.com/35a2ad62b28e3c7cf02bdc9d1c2932a6.png
     
  • 2.36, qwerty (??), 08:45, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >Type coeection

    *facepalm*

     
     
  • 3.47, pavlinux (ok), 17:10, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>Type coeection
    > *facepalm*

    Да, вот так,... не хватило сил дотянуть палец до соседней кнопки. :-P

     

  • 1.2, umbr (ok), 21:19, 04/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Новые фичи - новые дыры.
    Вопрос к специалистам: не повлияет-ли это на совместимость ядер?
     
     
  • 2.3, pavlinux (ok), 21:34, 04/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Новые фичи - новые дыры.
    > Вопрос к специалистам: не повлияет-ли это на совместимость ядер?

    Кроме как CONFIG_FTRACE и CONFIG_FUNCTION_TRACER вроде ничего волшебного не просит,
    и само в код ядра не просится.  

     
     
  • 3.5, umbr (ok), 21:58, 04/03/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Теперь бэкдоры можно пихать прямо в работающее ядро?
    И никаких следов, разве что оперативку сканировать.
     
     
  • 4.16, pavlinux (ok), 23:37, 04/03/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Теперь бэкдоры можно пихать прямо в работающее ядро?

    Да, от рута всё можно.

     
  • 3.21, pavlinux (ok), 00:38, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > CONFIG_FUNCTION_TRACER

    А с этой фичей, оверхед проца-то вырос, прим. на 10°C

    В общем, поюзал... глюкалово страшное. Если патч на модуль, то раз в 500 проще
    перекомпилить модуль, остановить сервис, rmmod/insmod и снова в путь.
    Если на ROOTFS, в принципе, через mount --bind на ramfs, перегрузить модуль и обратно.
    Но это, по сути, тот же reboot. :)

    И во-вторых kpatch - это временное средство, ядро всё равно обновлять придётся.
    Не, можно и так работать, но есть вероятность, что модуль прибьёт OOM_killer,
    или при крэшдампе отвалится.    

    > ... не могут применяться к функциям, вызываемым только на стадии инициализации ядра;

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


    Лучше бы за пилили работу с двумя ядрами - master/slave ©
    В каждом ядре список символов с версиями, менеджер версий.
    Например та же schedule() была бы ссылкой на более старшую
    версию из таблицы: schedule()_3121155 и schedule()_3121157  
    При появлении символа schedule()_3140000, все новые вызовы  
    schedule(), вызывали бы schedule()_3140000.


     
     
  • 4.28, Геннадий Кернес (?), 02:50, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >в 500 проще перекомпилить модуль, остановить сервис

    Что _проще_ - никто и не спорил.
    Только дороговато некоторые сервисы останавливать.

     
     
  • 5.33, Anonymus (?), 08:41, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    тщательнее надо проектировать, остановка сервера не должна приводить к остановке сервиса
     
     
  • 6.39, Маленькая Серая Мышка (?), 13:54, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    То есть вы предлагаете перепроектировать этот мир вместо того чтобы использовать kpatch, я так понимаю.
    Ну что ж, предложение интересное, практичное.
     

  • 1.8, Аноним (-), 22:05, 04/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Господа, а как на счет безопасности для параноикрв?
     
     
  • 2.11, backbone (ok), 22:17, 04/03/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Безопасности, в смысле, security или безопасности процесса применения патча?

    Ради 1-го и развиваются эти технологии. По поводу 2-го - в новости сказано, что не готово для production.

     
  • 2.25, Аноним (-), 01:48, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Для параноиков ее нет.
     
  • 2.43, Нанобот (ok), 15:33, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    для параноиков ничего не изменилось - всё как было опасно, так и остаётся
     

  • 1.12, AlexAT (ok), 22:40, 04/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >>> Не вызовет удивления, если компания Oracle откроет свежий исходный код KSplice и также подключится к борьбе за upstream

    Поздновато. У редхата большой опыт по пропихиванию разработок в апстрим. В отличие от.

     
  • 1.13, AlexAT (ok), 22:43, 04/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Блин, в который раз редхату эпическое шпасибо за следование GPL. У меня даже есть место для применения этой штуки, весьма специфичное, но реальное.
     
     
  • 2.18, pavlinux (ok), 00:06, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    # This script currently only works on Fedora and will need to be adapted to
    # work on other distros.
     
     
  • 3.24, anonymous (??), 01:38, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Да там три с половиной строки поправить. Кто не сможет - тому рано пока это использовать.
     
  • 2.26, Аноним (-), 02:08, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    секретничает, какое?
     
     
  • 3.32, AlexAT (ok), 08:36, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > секретничает, какое?

    Есть определенная операторская сетевая платформа, которой возможность проапдейтить ядро (особенно собственные модули, например, для добавления мелкофич или затыкания мелкобагов) на ходу очень даже пригодится. Цена останова - обрыв всех абонентских сеансов в случае PPPoE/PPTP. Даже если есть резерв. Но это применение скорее типовое.

    И при разработке оной иметь такую штуку тоже очень даже неплохо, ибо можно не перегружая тестовую площадку и не выгружая/перезагружая модулей (т.е. с сохранением состояния) проапдейтить кусок ядра (если не меняются структуры данных и API/ABI), и сразу на живую посмотреть, как оно работает. Это как раз "специфичное" применение.

     

  • 1.22, Аноним (-), 01:01, 05/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    <delirium>Ага, значит наклепали за 5 минут, дабы пропихнуть побыстрее своё, чтоб не дай рандом клиенты не ушли к зелёным из-за фичи, которой у них нет, а потом будут это чинить годами в манере одного своего известного сотрудника.</delirium>
     
     
  • 2.30, Мегазаычы (?), 05:22, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    5 лет не уходили (см. ksplice) а тут вдруг подорвались.
     

  • 1.34, Anonymus (?), 08:42, 05/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    неужто великим умищам нечем боле заняться чем костыли клепать?
     
     
  • 2.35, AlexAT (ok), 08:45, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > неужто великим умищам нечем боле заняться чем костыли клепать?

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

     
     
     
    Часть нити удалена модератором

  • 4.50, Аноним (50), 21:59, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В любой системе есть время на техническое обслуживание, в течении которого проводится в т.ч. обновление ПО.

    И что делать если даунтайм запланирован на следующей неделе, а проблему надо исправить уже сейчас ?

     
  • 3.40, Маленькая Серая Мышка (?), 13:56, 05/03/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > - там и часовой простой может быть нормой, бизнес от одной
    > системы не встанет.

    Ну да, помнится вот у Сбербанка "не встал".

     

  • 1.52, Аноним (-), 17:54, 07/03/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    IBM K24 же
     
     
  • 2.53, Аноним (-), 17:55, 07/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    K42 (:
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру