Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017) — различия между версиями

Материал из 0x1.tv

<tt>dkms</tt> ([https://rpmfusion.org/Packaging/KernelModules/Kmods2#Why_not_simply_use_dkms])




{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->


{{fblink|1951759578410387}}                                          
{{vklink|766}}                                          
<references/>
[[File:{{#setmainimage:Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017)!.jpg}}|center|640px]]



{{stats|disqus_comments=0|refresh_time=2021-08-25T02:55:0131T17:33:41.458556272971|vimeo_comments=0|vimeo_plays=43|youtube_comments=0|youtube_plays=524}}

[[Категория:OSSDEVCONF-2017]]
[[Категория:Linux]]
[[Категория:Инструменты майнтейнеров]]

Версия 14:33, 31 августа 2021

Докладчик
Евгений Сыромятников.jpg
Евгений Сыромятников

Доклад являет собой отражение имеющегося у автора опыта разработки, адаптации (backporting) и пакетирования различных модулей ядра Linux для различных дистрибутивов Linux.

В рамках доклада планируется рассмотреть некоторые особенности разработки и адаптации out-of-tree модулей ядра Linux, а также некоторый инструментарий, облегчающий процесс пакетирования данных модулей.


Видео

on youtube

Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.


Презентация

Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017).pdf

Thesis

Out-of-tree modules

Linux — монолитное ядро операционной системы, поддерживающее загрузку модулей — кода, который может быть загружен и исполнен (и, зачастую, выгружен) в адресном пространстве ядра в процессе его работы.

Out-of-tree модули ядра Linux — модули Linux, собранные вне основного процесса сборки ядра. Это могут быть модули ядра, разрабатываемые независимо (например, под несовместимой лицензией или имеющие существенные причины, препятствующие их включению в состав кодовой базы Linux), или же различные варианты адаптации модуля, включённого в одну версию кодовой базы, для использования с ядром, собранным на основе другой версии кодовой базы ядра. Наиболее частым случаем второго варианта является backporting — адаптация модуля ядра из более новой версии кодовой базы к использованию в более старой версии. Другим, менее частым, случаем, является адаптация заброшенных и удалённых staging-драйверов к современным версиям Linux.

Разработка

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

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

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

В случае же ядер, в которых присутствует код, портированный из более свежих версий mainline-ядра (например, ядра в таких дистрибутивах, как CentOS, SLES, или Ubuntu), приходится использовать иные методы. Можно, например, полагаться на различные системы конфигурации сборки или же прибегать к разнообразным приёмам, которые позволяют использовать одну и ту же кодовую базу для разных версий без необходимости конфигурации сборки.

Пакетирование

Правила для обеспечения установки out-of-tree modules в систему могут варьироваться в различных дистрибутивах.

Большинство дистрибутивов, особенно community-based, предполагают возможность использования пользователями самостоятельно собранных ядер и не пытаются предоставить бинарные пакеты всех доступных out-of-tree модулей ядра для всех доступных в репозитории вариантов ядер. Вместо этого (или в дополнение к ограниченному набору бинарных пакетов out-of-tree модулей) используется инфраструктура, обеспечивающая автоматизацию сборки out-of-tree модуля под используемые на данной вычислительной системе ядра. Среди вариантов инструментов, обеспечивающих подобную функциональность, можно упомянуть dkms и akmods.

dkms

dkms[1] — инструмент для управления out-of-tree модулями Linux, разработанный компанией Dell и представленный в 2004 году.

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

Для описания необходимых операций по сборке out-of-tree модуля используется конфигурационный файл, являющий собой (как и весь остальной код dkms) скрипт на bash, и включающий в себя информацию о модулях, командах сборке и иную информацию (например, варианты ядра, для которых данный модуль предполагается возможным к использованию).

Помимо этого, dkms обладает следующими возможностями:

  • Создание source или binary tarball. Source tarball может использоваться для сборки модуля на целевой системе, binary tarball может быть использован на целевой системе без необходимости сборки модуля.
  • Поддержка создания source/binary пакетов в формате RPM и DEB.
  • Поддержка создания Red Hat Driver Disk и SuSE Kernel Module Package.


Дистрибутивная интеграция (в тех дистрибутивах, которые её предоставляют) включает в себя триггеры, выполняющие сборку и установку имеющихся в системе out-of-tree модулей при установке новых ядер с помощью пакетного менеджера, и удаление собранных модулей, которые больше не требуются.

akmods

akmods ([2]) — Fedora-specific инструмент автоматизации пересборки пакетов модулей, существующий с 2007 года. Представляет из себя несколько скриптов на bash, автоматизирующих пересборку для конкретных ядер из source RPM и последующую установку out-of-tree модулей.

С точки зрения пользователя функциональность akmods схожа с dkms, но akmods ориентирован на использование RPM и предполагает использование специальным образом написанных spec-файлов, в то время как dkms не привязан к конкретной системе пакетирования (хотя и включает в себя поддержку сборки DEB или RPM пакетов); создание инфраструктуры akmods обосновывается именно сложностью (для конечного пользователя) и перегруженностью dkms ([3])



Примечания и ссылки

  1. Matt Domsch, Gary Lerhaupt. Dynamic Kernel Module Support: From Theory to Practice Proceedings of the Linux Symposium, Volume One. July 21st—24th, 2004. Ottawa, Ontario, Canada. P. 187—202. [1]
Некоторые аспекты разработки и пакетирования out-of-tree модулей Linux (Евгений Сыромятников, OSSDEVCONF-2017)!.jpg


Plays:97   Comments:0