calculate-sources¶
Пакет sys-kernel/calculate-sources отличается других пакетов '*sources' из портежей тем, что позволяет автоматизировать сборку ядра Linux:- наложение патчей при помощи шаблонов;
- создание конфигурации при помощи шаблонов;
- компиляция ядра и модулей;
- установка ядра в систему
Используемые USE флаги¶
Для управления порядком сборки используются следующие USE флаги:- при включенном USE флаге 'vmlinuz' во время сборки пакета ядро и модули будут скомпилированы и помещены в /boot и /lib соответственно.
- флаг 'minimal' используется для удаления из системы исходного кода собранного ядра, при этом в исходниках остаются только файлы, необходимые для сборки сторонних модулей ядра.
Для сборки ядра и удаления исходного кода ebuild использует различные версии calculate-kernel е-классов.
Патчи на ядро¶
До марта 2013 патчи хранились в архивах calculate-sources-3.X.tar.bz2, что приводило к тому, что при обновлении одного из патчей (например при обновлении подверсии ядра) приходилось создавать новые архивы с дополнительными номерами (версии, ревизии и т.д.) и усложнять ebuild-ы.
В связи с изменением способа наложения патчей во время сборки пакета, появилась возможность перенести патчи в шаблоны утилит Calculate, получив дополнительные преимущества:- разделять патчи на десктопные и серверные;
- использовать разные патчи для разных версий ядра
- aufs3 - файловая система, производящая каскадно-объединённое монтирование других файловых систем, используемая для запуска liveCD;
- fbcondecor - декорации в консоли
- TuxOnIce - используется для ускорения "засыпания" и "пробуждения" компьютера;
- BFQ - I/O планировщик, созданный как замена CFQ (и основан на его коде), основная мысль – более честное разделение I/O между процессами.
Пользовательские патчи¶
Выполнение патчей происходит при событии компиляция пакета с действием ac_install_patch
относительно пути S
("${WORKDIR}/${P}"
), фильтрация по пакетам и версиям осуществляется через функцию merge(), формат шаблонов обычно diff
(представляющие обычные патчи). Таким образом в простейшем варианте необходим файл патча со следующим заголовком:
# Calculate format=diff install.ac_install_patch==on&&merge(sys-kernel/calculate-sources)>=версия ... содержимое патча ...
Конфигурация ядра¶
До изменения системы наложения патчей конфигурация ядра хранилась в оверлее profiles/kernel в виде готового конфигурационного файла как для сервера, так и для десктопа.
В связи с изменением метода наложения патчей на пакет изменился и способ создания конфигурационного файла, что дало ряд преимуществ:- нет разделения настроек на десктопные и серверные ядра (серверное ядро получается из конфигурации ядра, выполнением изменений по шаблону);
- параметры ядра, которые необходимо изменить при наличии патчей вынесены в отдельные шаблоны;
- возможность менять параметры ядра, патчи и маскировку не затрагивая ebuild-файлы
Пользовательские параметры ядра¶
Так как создание конфигурацинного файла происходит при сборке пакета, то для изменения параметров ядра необходимо создать файл с измененными параметрами, связанный с действием ac_install_patch
. Например, чтобы включить в ядро файловые системы EXT2, EXT3 и EXT4 можно создать следующий файл:
# Calculate name=.config format=openrc install.ac_install_patch==on&&merge(sys-kernel/calculate-sources)>=версия CONFIG_EXT2_FS=y CONFIG_EXT3_FS=y CONFIG_EXT4_FS=y
Порядок маскировки ядер¶
Если ядро находится в hard маске, то это означает что оно еще не готово для полноценного использования: не все необходимые патчи, не готова конфигурация, в ходе эксплуатации выявлены критичные ошибки, ошибки во время сборки. После решения выше перечисленных задач с ядра снимается hard маска, и оно остаётся в маске по keywords, пока не будет использовано в одном из стейджей.
Имена ядер¶
При установке ядра из пакета calculate-sources
с включенным USE-флагом vmlinuz происходит компиляция и установка ядра в директорию /boot
. К именам файлов vmlinuz
, config
, initramfs
и System.map
дописывается окончание, состоящее из версии ядра, архитектуры и сокращенного имени дистрибутива (пример: "-3.9.7-i686-CLD"). В случае наличия таких файлов в директории /boot
, к старым версиям дописывается окончание ".old
".
На ядро и вспомогательные файлы создаются символические ссылки. Для того чтобы не модифицировать загрузчик, имена символических ссылок не подлежат изменению. Символические ссылки были необходимы для Legacy Grub. Grub 2 сам автоматически определяет используемые файлы для формирования своего конфигурационного файла. В ближайших версиях символические ссылки и kernel_uid будут удалены.
При необходимости, сгенерировать настройки Grub можно командой:
cl-setup-boot
Удаление старых версий ядра¶
Старые версии ядра удаляются при удалении соответствующих версий пакета calculate-sources
. Поэтому, если вы не хотите оставлять их в системе, убедившись, что новое ядро работает нормально, удалите ненужные пакеты:
emerge -c
Если же необходимо удалить только исходный код ядра, оставив собранное ядро, модули и конфигурационный файл - выключите автоматическое удаление в файле /etc/calculate/ini.env
[update] remove_kernel = off