Ядро — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
Строка 1: Строка 1:
{{Введение|Эта статья описывает политику упаковки и сопровождения официальных ядер Linux в дистрибутивах ROSA Fresh, RED, Nickel. Статья находится в разработке.}}
+
== Введение ==
  
== Предмет описания ==
+
Эта статья описывает политику упаковки и сопровождения официальных ядер Linux в дистрибутивах ROSA Fresh/Chrome платформы <code>rosa2021.1</code>.
 
+
Эта статья описывает политику упаковки и сопровождения официальных ядер Linux в дистрибутивах ROSA Fresh, RED, Nickel. В настоящий момент затрагивает ядро '''5.4''' LTS.
+
  
 
== Пакеты с ядром ==
 
== Пакеты с ядром ==
  
Исходники пакета с ядром находятся здесь: https://abf.io/import/kernel-5.4
+
Исходники пакетов с ядрамя находятся здесь:  
 
+
* https://abf.io/import/kernel-5.10
Бинарные пакеты с ядром размещены в официальных репозиториях платформ rosa2016.1, rosa2019.05, rosa2019.1.
+
* https://abf.io/import/kernel-5.15
  
 
Каждое ядро собирается в отдельный пакет, в название которого включается:
 
Каждое ядро собирается в отдельный пакет, в название которого включается:
* flavour — разновидность ядра; для сертифицированных дистрибутивов это «'''nickel'''», для остальных — «'''generic'''»
+
* flavour — разновидность ядра; в официальный репозиторий собираются ядра '''generic''', а сообществом делаются сборки, например, [https://forum.rosalinux.ru/viewtopic.php?t=10295 xanmod]
* версия ядра, например, '''5.4.59'''
+
* мажорная версия ядра, например, '''5.10'''
* аппаратная архитектура, например, '''x86_64'''
+
* релиз пакета с ядром (номер сборки ядра этой версии) c названием платформы ROSA в постфиксе, например, '''1rosa2019.1''', где 1 ­— номер сборки, а rosa2019.1 — платформа (репозиторий).<ref>rosa2016.1 — ROSA Fresh R9-R11.1, ROSA Enterprise Desktop X4; rosa2019.1 находится в разработке; rosa2019.05 — платформа для сертифицированного органами госвласти дистрибутива.</ref>
+
  
Пример результирующего названия пакета с ядром: '''kernel-generic-5.4.59-1rosa2019.1-x86_64'''
+
Примеры названий пакетов с ядрами:
 +
* kernel-5.10-generic
 +
* kernel-5.15-generic
  
Пример пути к модулям ядра: '''/lib/modules/5.4.59-1rosa2019.1-x86_64'''
+
Примеры называний пакетов с заголовочными файлами и исходниками ядра:
 +
* kernel-5.10-generic-devel
 +
* kernel-5.15-generic-devel
  
Мета-пакет '''kernel-generic-5.4-latest''' — это пакет-заглушка, который не содержит в себе файлов, но зависит от самого нового ядра серии 5.4.х, что позволяет иметь всегда самое новое ядро, если этот пакет установлен. При установке новой версии ядра старая остается установленной, чтобы можно было при необходимости вернуться к ней, выбрав ее в меню загрузчика ОС Grub.
+
Пример пути к модулям ядра: <code>/lib/modules/5.15.67-generic-1rosa2021.1-x86_64</code>
 +
 
 +
Пример uname ядра: <code>5.15.67-generic-1rosa2021.1-x86_64</code>
 +
 
 +
Пакетный менеджер dnf обеспечивает одновременную установку нескольких (по умолчанию — трех) минорных версий ядра несмотря на одинаковые названия пакетов:
 +
<pre>
 +
$ dnf config-manager --dump | grep installonly
 +
installonly_limit = 3
 +
installonlypkgs = kernel, kernel-PAE, installonlypkg(kernel), installonlypkg(kernel-module), installonlypkg(vm), multiversion(kernel)
 +
$ rpm -q --whatprovides 'installonlypkg(kernel)'
 +
<...>
 +
kernel-5.15-generic-5.15.53-1.x86_64
 +
kernel-5.15-generic-5.15.65-1.x86_64
 +
kernel-5.15-generic-5.15.67-1.x86_64
 +
</pre>
  
 
== Политика обновлений ядра ==
 
== Политика обновлений ядра ==
  
Используются официальные релизы ветки 5.4 с [http://kernel.org kernel.org]. По мере выхода новых минорных версий производится обновление пакета с ядром, для стабильных платформ (rosa2016.1) обновления проходят [[Регламент_тестирования|проверку качества]]. Задачи как можно быстрее обновлять пакет при выходе новой версии ядра не стоит. Основной упор делается на обеспечение стабильной работы. При выходе исправлений уязвимостей обновления производятся быстрее.
+
Используются официальные релизы выбранной ветки ядра (например, 5.10, 5.15) с [http://kernel.org kernel.org]. По мере выхода новых минорных версий производится обновление пакета с ядром, которые проходят стандартное для всех обновлений [[Регламент_тестирования|тестирование]]. Задачи как можно быстрее обновлять пакет при выходе новой версии ядра не стоит. Основной упор делается на обеспечение стабильной работы. При выходе исправлений уязвимостей обновления производятся быстрее.
  
 
== Сторонние проприетарные модули ядра ==
 
== Сторонние проприетарные модули ядра ==
  
 
Существует несколько способов поставки сторонних модулей ядра:
 
Существует несколько способов поставки сторонних модулей ядра:
* сборка модулей ядра во время сборки ядра
+
* сборка модулей ядра во время сборки ядра и поставка пользователю бинарных (уже собранных) модулей
 
* использование dkms для сборки модуля ядра из исходников на стороне клиента для каждого релиза ядра
 
* использование dkms для сборки модуля ядра из исходников на стороне клиента для каждого релиза ядра
 
* использование бинарных модулей ядра
 
* использование бинарных модулей ядра
  
 
Первые 2 способа не вызывают вопросов и требуют наличия исходников, но некоторые разработчики модулей ядра не хотят поставлять их в виде исходников. У сопровождающих пакета с ядром получился такой выбор:
 
Первые 2 способа не вызывают вопросов и требуют наличия исходников, но некоторые разработчики модулей ядра не хотят поставлять их в виде исходников. У сопровождающих пакета с ядром получился такой выбор:
* либо разработчики этих сторонних модулей ядра будут поставлять модули для конкретных сборок дистрибутивного ядра, поставляя в своем ПО файлы с путем вида /lib/modules/5.4.59-1rosa2019.1-x86_64/kernel/*.ko и тем самым ''вынуждают'' пользователей нашего дистрибутива не обновлять ядро, лишая и нас, и пользователя возможности поставлять исправления работы и уязвимостей,
+
* либо разработчики этих сторонних модулей ядра будут поставлять модули для конкретных сборок дистрибутивного ядра, поставляя в своем ПО файлы с путем вида /lib/modules/5.15.67-generic-1rosa2021.1-x86_64/kernel/*.ko и тем самым ''вынуждают'' пользователей нашего дистрибутива не обновлять ядро, лишая и нас, и пользователя возможности поставлять исправления работы и уязвимостей,
 
* либо разработчики этих сторонних модулей кладут свои модули в специальную папку, которая не содержит в пути к себе конкретную версию ядра, а наши ядра пытаются подгрузить модули из нее, но есть опасность, что ABI ядра, с которым был собран модуль, и ABI ядра, в которое подгружается модуль, не совпадут в части используемых модулем ABI
 
* либо разработчики этих сторонних модулей кладут свои модули в специальную папку, которая не содержит в пути к себе конкретную версию ядра, а наши ядра пытаются подгрузить модули из нее, но есть опасность, что ABI ядра, с которым был собран модуль, и ABI ядра, в которое подгружается модуль, не совпадут в части используемых модулем ABI
  
 
Второе представляется меньшим злом. Мы не гарантируем стабильность ABI. По мере появления сторонних модулей от технологических партнеров, возможно, будет проводиться какой-то контроль ABI исходя из используемых ими интерфейсов. Ядро собрано с CONFIG_MODVERSIONS=y, при загрузке модулей ядра не проверяется соответствие исходного и текущего ядер, а сверяются хеш-суммы прототипов используемых функций ABI в загружаемом модуле и в текущем ядре, которые должны совпадать для загрузки модуля.
 
Второе представляется меньшим злом. Мы не гарантируем стабильность ABI. По мере появления сторонних модулей от технологических партнеров, возможно, будет проводиться какой-то контроль ABI исходя из используемых ими интерфейсов. Ядро собрано с CONFIG_MODVERSIONS=y, при загрузке модулей ядра не проверяется соответствие исходного и текущего ядер, а сверяются хеш-суммы прототипов используемых функций ABI в загружаемом модуле и в текущем ядре, которые должны совпадать для загрузки модуля.
  
В пакетах с ядром есть [[Символические_ссылки_в_Linux|симлинк]] /lib/modules/5.4.59-1rosa2019.1-x86_64/zzz-5.4-rosa-flow-abi<ref>zzz, чтобы эта папка была последней, в которой будут искаться модули ядра</ref> на /lib/modules/5.4-rosa-flow-abi. Таким образом, сторонние модули ядра, лежащие в '''/lib/modules/5.4-rosa-flow-abi''', будут подгружаться всеми ядрами 5.4.х в дистрибутивах ROSA Fresh, RED, Nickel. Разработчикам бинарных модулей, которые не готовы поставлять их в виде исходных текстов, рекомендуется класть их в '''/lib/modules/5.4-rosa-flow-abi'''.
+
В пакетах с ядром есть [[Символические_ссылки_в_Linux|симлинк]] /lib/modules/5.15.67-generic-1rosa2021.1-x86_64/zzz-5.15-rosa-flow-abi<ref>zzz, чтобы эта папка была последней, в которой будут искаться модули ядра</ref> на /lib/modules/5.15-rosa-flow-abi. Таким образом, сторонние модули ядра, лежащие в '''/lib/modules/5.15-rosa-flow-abi''', будут подгружаться всеми ядрами 5.15.х в дистрибутивах ROSA Fresh/Chrome. Разработчикам бинарных модулей, которые не готовы поставлять их в виде исходных текстов, рекомендуется класть их в '''/lib/modules/5.15-rosa-flow-abi'''.
 
+
Папка /lib/modules/5.4-rosa-flow-abi принадлежит пакету '''kernel-5.4-rosa-flow-abi''', который содержит только ее, и имеется только в пакетах версии 5.4.59 или новее.
+
  
Рекомендуем разработчикам сторонних модулей поставлять их в виде исходников, как Nvidia.
+
Каталог /lib/modules/5.15-rosa-flow-abi принадлежит пакету '''kernel-5.15-rosa-flow-abi''', который содержит только ее.
  
---
+
Рекомендуем разработчикам сторонних модулей поставлять связываемую с ядром часть в виде исходников, как Nvidia.

Версия 15:59, 30 сентября 2022

Введение

Эта статья описывает политику упаковки и сопровождения официальных ядер Linux в дистрибутивах ROSA Fresh/Chrome платформы rosa2021.1.

Пакеты с ядром

Исходники пакетов с ядрамя находятся здесь:

Каждое ядро собирается в отдельный пакет, в название которого включается:

  • flavour — разновидность ядра; в официальный репозиторий собираются ядра generic, а сообществом делаются сборки, например, xanmod
  • мажорная версия ядра, например, 5.10

Примеры названий пакетов с ядрами:

  • kernel-5.10-generic
  • kernel-5.15-generic

Примеры называний пакетов с заголовочными файлами и исходниками ядра:

  • kernel-5.10-generic-devel
  • kernel-5.15-generic-devel

Пример пути к модулям ядра: /lib/modules/5.15.67-generic-1rosa2021.1-x86_64

Пример uname ядра: 5.15.67-generic-1rosa2021.1-x86_64

Пакетный менеджер dnf обеспечивает одновременную установку нескольких (по умолчанию — трех) минорных версий ядра несмотря на одинаковые названия пакетов:

$ dnf config-manager --dump | grep installonly
installonly_limit = 3
installonlypkgs = kernel, kernel-PAE, installonlypkg(kernel), installonlypkg(kernel-module), installonlypkg(vm), multiversion(kernel)
$ rpm -q --whatprovides 'installonlypkg(kernel)'
<...>
kernel-5.15-generic-5.15.53-1.x86_64
kernel-5.15-generic-5.15.65-1.x86_64
kernel-5.15-generic-5.15.67-1.x86_64

Политика обновлений ядра

Используются официальные релизы выбранной ветки ядра (например, 5.10, 5.15) с kernel.org. По мере выхода новых минорных версий производится обновление пакета с ядром, которые проходят стандартное для всех обновлений тестирование. Задачи как можно быстрее обновлять пакет при выходе новой версии ядра не стоит. Основной упор делается на обеспечение стабильной работы. При выходе исправлений уязвимостей обновления производятся быстрее.

Сторонние проприетарные модули ядра

Существует несколько способов поставки сторонних модулей ядра:

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

Первые 2 способа не вызывают вопросов и требуют наличия исходников, но некоторые разработчики модулей ядра не хотят поставлять их в виде исходников. У сопровождающих пакета с ядром получился такой выбор:

  • либо разработчики этих сторонних модулей ядра будут поставлять модули для конкретных сборок дистрибутивного ядра, поставляя в своем ПО файлы с путем вида /lib/modules/5.15.67-generic-1rosa2021.1-x86_64/kernel/*.ko и тем самым вынуждают пользователей нашего дистрибутива не обновлять ядро, лишая и нас, и пользователя возможности поставлять исправления работы и уязвимостей,
  • либо разработчики этих сторонних модулей кладут свои модули в специальную папку, которая не содержит в пути к себе конкретную версию ядра, а наши ядра пытаются подгрузить модули из нее, но есть опасность, что ABI ядра, с которым был собран модуль, и ABI ядра, в которое подгружается модуль, не совпадут в части используемых модулем ABI

Второе представляется меньшим злом. Мы не гарантируем стабильность ABI. По мере появления сторонних модулей от технологических партнеров, возможно, будет проводиться какой-то контроль ABI исходя из используемых ими интерфейсов. Ядро собрано с CONFIG_MODVERSIONS=y, при загрузке модулей ядра не проверяется соответствие исходного и текущего ядер, а сверяются хеш-суммы прототипов используемых функций ABI в загружаемом модуле и в текущем ядре, которые должны совпадать для загрузки модуля.

В пакетах с ядром есть симлинк /lib/modules/5.15.67-generic-1rosa2021.1-x86_64/zzz-5.15-rosa-flow-abi[1] на /lib/modules/5.15-rosa-flow-abi. Таким образом, сторонние модули ядра, лежащие в /lib/modules/5.15-rosa-flow-abi, будут подгружаться всеми ядрами 5.15.х в дистрибутивах ROSA Fresh/Chrome. Разработчикам бинарных модулей, которые не готовы поставлять их в виде исходных текстов, рекомендуется класть их в /lib/modules/5.15-rosa-flow-abi.

Каталог /lib/modules/5.15-rosa-flow-abi принадлежит пакету kernel-5.15-rosa-flow-abi, который содержит только ее.

Рекомендуем разработчикам сторонних модулей поставлять связываемую с ядром часть в виде исходников, как Nvidia.
  1. zzz, чтобы эта папка была последней, в которой будут искаться модули ядра