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, получив дополнительные преимущества:
  • разделять патчи на десктопные и серверные;
  • использовать разные патчи для разных версий ядра
Caluclate-sources использует следующие основные патчи:
  • 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
Спасибо!