8. Сборка ядра со своей конфигурацией

Введение

Calculate Linux работает на ядре Linux с длительным сроком поддержки (longterm). Большая часть драйверов вынесена в модули, что позволяет ядру оставаться компактным в размере без потери функционала. Для серверов и десктопов используются различные настройки и патчи. В отличие от других ядер из портежей, пакет sys-kernel/calculate-sources, используемый по умолчанию в дистрибутивах Calculate Linux, компилируется и устанавливается в систему, как и большинство других пакетов, высвобождая место путём удаления за собой большей части исходного кода.

Зачем вам может понадобиться изменять настройки ядра? Оптимизируя ядро, вы можете добиться прироста производительности, поддержки своего железа, высвобождения памяти, снижения энергопотребления, а так же ускорения загрузки системы. Помимо прочего, изучение ядра даёт неплохие знания в понимании устройства работы системы.

Экспериментировать с ядром можно и нужно. Эта статья поможет вам научиться изменять настройки ядра, устанавливать и настраивать различные модификации ядер, использовать свои патчи.

cl-kernel

Для сборки ядра служит скрипт cl-kernel, входящий в состав пакета sys-apps/calculate-toolkit. Программа написана на Bash и прозрачно интегрирована с системой шаблонов утилит Calculate.

Особенности

  1. Поддержка сборки различных ядер: sys-kernel/calculate-sources, sys-kernel/gentoo-sources, sys-kernel/vanilla-sources и др.
  2. Поддержка создания ядра, как с использованием initramfs, так и без него.
  3. Создание шаблона настроек ядра со всеми внесёнными изменениями.
  4. Импорт готовых настроек ядра в шаблон.
  5. Прозрачная миграция настроек между версиями ядер.
  6. Интеграция с утилитами Calculate для использования шаблонов настроек во время установки ядра calculate-sources.
  7. Создание резервных копий настроек.
  8. Локализация на русский и французский языки.

Прежде чем приступить к дальнейшим действиям, убедитесь, что у вас достаточно свободного места на диске. Исходный код ядра распаковывается в директорию /usr/src. Посмотреть свободное место можно, выполнив:

df -h

Обязательно позаботьтесь о наличии резервной копии ядра, с которого всегда можно загрузить систему. Для этого эксперименты удобно проводить с альтернативными пакетами ядер, либо с ядром calculate-sources не установленной версии.

Сборка ядра

Выберите любое из доступных в портежах ядро. Весь список с описаниями можно посмотреть, выполнив:

eix -c sys-kernel/*sources

Для примера остановим свой выбор на "ванильном" ядре - оригинальной версии, поддерживаемой Линусом Торвальдсом.

Ядро в портежах отмечено маской, поэтому понадобится сперва её снять:

echo sys-kernel/vanilla-sources ~amd64 ~x86 >> /etc/portage/package.keywords/custom
USE="symlink" emerge sys-kernel/vanilla-sources

USE-флаг "symlink" следует устанавливать, если вы используете проприетарные пакеты, такие как nvidia-drivers, ati-drivers, virtualbox-bin или broadcom-sta. В этом случае после установки ядра следует собрать их модули, выполнив:

emerge @module-rebuild

Проверьте, что ваше ядро стало доступно:

cl-kernel --kver list
 * 3.19.0 *
 * 3.18.7-calculate

Обратите внимание на список. В отличие от calculate-sources (и других ядер), ванильное ядро не содержит слова "vanilla". Красная звёздочка слева версии ядра означает, что установленное ядро не содержит полной версии исходного кода. Звёздочка справа отмечает используемое по умолчанию ядро. Оно определяется по символической ссылке /usr/src/linux.

Для первого запуска вы можете сконвертировать настройки из текущей версии ядра, для этого выполните:

cl-kernel --kver 3.19.0 --convert
Здесь важно понять особенность работы cl-kernel и её отличие от более ранней версии этой программы.
  1. Скрипт cl-kernel работает с конфигурационным файлом ядра, полученным из шаблона.
  2. По завершении работы программа проанализирует изменения, выполненные пользователем, и создаст новый пользовательский шаблон.
  3. Для ядер, отличных от calculate-sources, нет шаблонов настроек, поэтому готовый шаблон будет содержать отличия от настроек ядра по умолчанию.
  4. С опцией "--convert" программа возьмёт за основу настройки текущего ядра (из /boot или /proc), если в директории с исходным кодом ядра нет файла ".config".

Во время выполнения скрипта будет вызвана настройка ядра (вызов make menuconfig), сборка и установка. Если не отключена опция CONFIG_BLK_DEV_INITRD, будет создан initramfs.

После завершения не забудьте обновить необходимые модули, выполнив:

emerge @module-rebuild

Теперь можно перезагрузиться, чтобы проверить работу нового ядра! Во время загрузки обратите внимание, что загружается новое ядро. Если вы ничего не изменили в окне настроек, проблем с загрузкой возникнуть не должно.

Обновление ядра

Посмотрите на первую строку шаблона, который cl-kernel создал из исходного файла настроек ядра:

head -n 1 /var/calculate/templates/kernel/10-vanilla-x86_64-3.19
# Calculate format=kernel name=.config os_install_arch_machine==x86_64&&merge(sys-kernel/vanilla-sources)>=3.19

Первая строка - это заголовок шаблона. В ней описан формат шаблона, имя настраиваемого файла, выполняется проверка на архитектуру системы, имя и версию ядра.

Из шаблона видно, что он будет работать для всех ядер версии 3.19 и выше.

Для установки 3.19.1 ядра, после установки пакета достаточно будет выполнить:

cl-kernel --kver=3.19.1

Параметр '--kver' можно опустить, если ядро выбрано по умолчанию, когда символическая ссылка /usr/src/linux указывает на него. Так будет, если при установке пакета с исходным кодом ядра, вы указали USE-флаг "symlink". Например, предварительно выполнив:

echo sys-kernel/vanilla-sources symlink >> /etc/portage/package.use/custom

При переходе к более крупной версии ядра, например 3.20 4.0.0, часто возникает необходимость посмотреть перечень изменений между настройками ядра (make oldconfig). Для этого выполните:

cl-kernel --kver 4.0.0 --kver-old=3.19.1

Настройка calculate-sources

На примере vanilla-sources мы научились устанавливать и собирать различные пакеты ядра. Но как быть, если нужно поставить обновление ядра "на поток" с вашими изменениями настроек и патчами? Нет ничего проще!

1. Сбросьте у ядра USE-флаг "minimal":

echo sys-kernel/calculate-sources -minimal >> /etc/portage/package.use/custom

2. Установите исходники ядра без компиляции:

USE="-vmlinuz" emerge sys-kernel/calculate-sources

3. Измените настройки:

cl-kernel

В последнем пункте нет ссылки на версию ядра, т.к. установка пакета переписала символическую ссылку /usr/src/linux. Проверить это можно, выполнив:

cl-kernel --kver list
 * 3.19.0
 * 3.18.7-calculate *

Если вы не уверены, лучше указать ядро явно:

cl-kernel --kver=3.18.7-calculate

Обратите внимание, что напротив версии ядра стоит уже не красная, а зелёная звёздочка.

Пока ядро собирается, посмотрите на полученный шаблон настройки ядра: он будет содержать только внесённые вами изменения - отличия от оригинальной версии настроек ядра.

Пример шаблона после отключения поддержки ReiserFS:

cat /var/calculate/templates/kernel/10-calculate-x86_64-3.18 
# Calculate format=kernel name=.config os_install_arch_machine==x86_64&&merge(sys-kernel/calculate-sources)>=3.18
!CONFIG_REISERFS_FS=m

Обратите внимание, что повторное выполнение cl-kernel учитывает внесённые вами изменения. Чтобы сбросить их, удалите созданный вами шаблон.

Оптимизация ядра

Использование патчей

Для разработчиков

Спасибо!