Genkernel/ru

- это утилита созданная Gentoo, которая используется для автоматизации процесса сборки ядра и initramfs. Некоторые основные функции:


 * конфигурация исходного кода ядра
 * сборка сжатого ядра и его копирование в
 * создание initramfs и копирование его в
 * создание символьных ссылок в
 * добавление настроенного вручную содержимого в initramfs. Например файлов связанных с шифрованием, splash images, дополнительных модулей и так далее.
 * сжатие initramfs
 * конфигурация загрузчика для загрузки нового ядра и initramfs.

Emerge
Запустите установку genkernel.

Использование
Основная форма вызова команды genkernel выглядит следующим образом:

Параметры
Поведение genkernel зависит от большого количества параметров, большинство из которых могут быть настроены в файле или передаваться в каждом вызове через команду. Параметры, переданные с помощью командной строки, имеют больший приоритет, чем те, которые определены в файле. Этот файл очень хорошо задокументирован, но все же некоторые из наиболее используемых параметров будут описаны в этой статье. Цель статьи ознакомить читателя с основными вызовами genkernel. Более подробные объяснения имеются в комментариях файла или в содержимом.

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

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

Параметры, воздействующие на выбор инструментов, используемых для сборки
Следующие параметры поддерживаются genkernel и передаются соответствующим приложениям во время сборки ядра. Эти параметры воздействуют на инструменты компиляции, которые используются во время компиляции ядра, но на более низком уровне.

Параметры, воздействующие на процесс компиляции
Следующие параметры обычно имеют эффект во время самой компиляции:

Параметры отладки
Использование параметров отладки, во время компиляции ядра, помогут контролировать количество отображаемой информации, а также как представляются эти данные.

Действия
Действие, переданное командной строке командой, сообщает genkernel действие для выполнения. Поддерживаются следующие действия:

Начав
Хотя существует несколько способов запустить утилиту genkernel, наименее навязчивый подход, рекомендуемый для большинства пользователей, предоставляется командой. В этом примере используется общая конфигурация, которая хорошо работает для большинства используемых систем. Как было упомянуто ранее, этот подход не лишен недостатков; большинство созданных модулей бесполезны для среднестатистического пользователя и могут увеличить время компиляции. Ниже проиллюстрирован более эффективный подход, достигнутый передачей определенных параметров команде genkernel под учетной записью root:

Вышеуказанная операция заставляет genkernel создать ядро с заставкой на кадровом буфере, которое нужно будет установить вручную. При подготовке дерева исходных кодов ядра, genkernel воздержится от удаления каких-либо уже существующих объектных файлов, присутствующих в дереве исходных кодов. Будет отображена меню-подобная утилита конфигурации ядра, которая позволяет пользователю выбрать какие модули должны быть собраны для системы.

Замещение  параметром   позволяет genkernel автоматически установить новое ядро в каталог, а затем создать символьные ссылки, если указан параметр. Использование параметра  позволяет genkernel монтировать раздел  автоматически, если это необходимо.

Выбор ядра
Первое, что надо сделать, это разрешить запуск в файле :

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

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

Каталог может выглядеть так:

Символьная ссылка может быть изменена разными способами.


 * Если установлен USE-флаг, то символьная ссылка  автоматически обновляется и будет указывать на только что установленный исходный код.


 * Если  USE-флаг не установлен, пользователь может изменить назначение для символьной ссылки используя команду, а затем.

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

Файл конфигурации ядра
Если компиляция ядра уже запущена с активным исходным кодом ядра, в каталоге может находиться файл, который содержит конфигурацию ядра, которая применялась при создании последнего файла ядра bzimage. Этот файл может называться, например,, где  может быть заменено на архитектуру системы,   может быть заменено на версию  используемого исходного кода, а   на выпуск (release) исходного кода.

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

Если genkernel первый раз вызывается с данным исходным кодом ядра, или если предыдущий результат не был сохранен, этот файл заменяется на файл конфигурации по умолчанию, который находится в, где x86_64 заменяется на действительную архитектуру.

Сохранение конфигурации компилирования
Если активирован параметр genkernel, как из командной строки, так и из , конфигурация скомпилированного ядра сохраняется (под именем данным выше) в каталог. В то же время, конфигурация сохраняется в файл в каталоге, но этот файл не используется заново при следующем запуске команды.

Установка ядра и initramfs в каталог
Использование опции  при вызове genkernel, просит   установить образ ядра и initramfs в каталог. Для того, чтобы сделать это удобным образом, установите следующие параметры в файле :


 * Первый параметр говорит сам за себя.


 * Второй параметр сообщает genkernel, чтобы конфигурация скомпилированного ядра была сохранена в.


 * Последние два параметра сообщают genkernel, чтобы она автоматически обновила конфигурацию загрузчика grub. На практике, происходит следующее:
 * Если уже существует предыдущий образ ядра с таким же именем, он переименовывается путем добавления к его имени. Автоматически создается символьная ссылка, которая указывает на него.
 * Новое ядро занимает место ядра с тем же самым именем в каталоге . Если ядро скомпилировано в первый раз, автоматически создается символьная ссылка, которая указывает на новое ядро.

После запуска, каталог может выглядеть следующим образом:

Конфигурация загрузчика
Символьные ссылки, приведенные выше в конфигурации загрузчика, могут быть использованы так, что даже если новое ядро не загружается, пользователь смог всегда загрузить предыдущее.

Чтобы разрешить ядру и initrd, генерируемым genkernel, работать правильно, предоставьте необходимый минимум информации в файле конфигурации загрузчика:


 * Добавьте  к параметрам ядра, передаваемым образу ядра, где  указывает на root раздел (  - это номер раздела, если раздел сущестует).
 * Если используется splash screen, добавьте подходящую строку режима (mode line), такую как  в список параметров, передаваемых ядру и также добавьте   или , в зависимости от уровня вывода сообщений, требуемого в процессе загрузки.
 * Добавьте информацию initrd, как это требуется загрузчиком. Обратитесь к главе конфигурация загрузчика Gentoo Handbook, чтобы узнать как настроить поддержку initrd в загрузчике.

Ниже приведено то, как может выглядеть файл.

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


 * Первым файлом, который надо сохранить, является файл конфигурации ядра в . Если версия исходного кода не изменилась перед перекомпиляцией ядра, будет использовано имя файла, использованное ранее. Поэтому, копирование файла конфигурации под другим именем помогает сохранить информацию при сохранении файла доступным в качестве начальной точки для новой конфигурации.


 * Второй важной вещью необходимо сохранить уже загружаемые образы ядра и initramfs. Способ, которым это можно выполнить, зависит от контекста:
 * Если ранее скомпилированное ядро загружается, запуск переименует образ этого ядра (и, также, initramfs) в  и создаст новый . Это значит, что даже если новое ядро не загружается, пользователи всегда смогут загрузить предыдущее.
 * Если последнее скомпилированное ядро не загружается и исходные тексты не изменялись с того момента как пользователь скомпилировал загружаемое ядро, до запуска, сперва удалите образ нового ядра и уберите суффикс из последнего загружаемого ядра. Без этого, если заново скомпилированное ядро не загружается во второй раз, загружаемое ядро  будет удалено переименованием незагружаемого , приводя пользователя к незагружаемой системе. Используйте те же самые рассуждения для initramfs.

Использование предыдущей конфигурации ядра при изменении исходного кода ядра
Предыдущая конфигурация может использоваться через параметр MENUCONFIG в следующим образом:

С установочного диска
Утилита может собрать образ ядра и initrd, которые имеют поддержку сетевой загрузки, или netbooting. Если хоть немного повезет, пользователи смогут загрузить по сети какой-либо новый компьютер в среду, предоставляемую загрузочным CD.

Волшебство заключается в сценарии linuxrc утилиты genkernel: он попытается смонтировать загрузочный диск по сети используя NFS. Оттуда, сценарии инициализации загрузочного CD смогут получить контроль, как если бы CD присутствовал локально.

Сборка ядра и initramfs с поддержкой сетевой загрузки
Для разрешения поддержки загрузки по сети, включите следующие параметры при конфигурации ядра:

Во-первых, образ ядра должен включать драйверы для сетевых карт в системе (Network Interface Cards - NIC). Обычно, драйверы для таких устройств компилируются в качестве модулей. Однако, важно (для загрузки по сети), чтобы подобные драйверы были скомпилированы прямо в образ ядра, а не как модули.

Во-вторых, предполагается что включен параметр "IP: kernel level autoconfiguration", также как и "IP: DHCP support options". Это позволяет избежать лишних сложностей, так как IP-адрес и путь NFS к установочному CD могут быть сконфигурированы на DHCP-сервере. Определенно, это означает, что командная строка ядра будет оставаться постоянной для любой машины - что очень важно для etherbooting.

Эти параметры сообщают ядру, чтобы оно отправило DHCP-запрос при загрузке.

Кроме того, включите SquashFS, потому что большинство современных установочных дисков Gentoo требуют этого. Поддержка SquashFS не включается в основное дерево исходных текстов ядра. Чтобы включить SquashFS, примените необходимые патчи к основному исходному коду ядра или установите gentoo-sources.

Как только процесс компиляции завершен, создайте сжатый архив tar (tarball - tar.gz), который содержит модули ядра. Этот шаг требуется только если версия ядра не соответствует версии образа ядра на установочном CD.

Чтобы создать архив содержащий все модули:

В зависимости от механизма загрузки по сети, необходимо последовать одному из следующих шагов:

Для создания образа etherboot:

Для создания образа OpenBoot/SPARC64 TFTP:

Файл является образом ядра.

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

Настройка NFS
Для настройки общего ресурса NFS, который содержит установочный CD, используйте loop-устройство, чтобы примонтировать образ ISO и затем скопировать содержимое CD в общий ресурс NFS. В качестве приятного дополнения, сценарии initrd утилиты genkernel извлекут все файлы tar.gz, расположенные в каталоге. Все, что требуется здесь сделать, это скопировать архив в каталог.

Следующее предполагает что является экспортируемым общим сетевым ресурсом NFS:

Теперь, скопируйте файл в :

Настройка DHCP
Образы netboot запросят IP у DHCP-сервера в сети, а также опцию. Оба параметра могут быть указаны отдельно для каждого хоста с использованием идентификации машин на основе MAC-адреса:

Инструкции загрузки по сети
Напомним, что загрузка по сети является очень платформо-зависимой. Важной деталью является указать параметры  и   в командной строке ядра, так как это вызовет сетевой интерфейс и сообщит сценариям initrd о том, что необходимо примонтировать установочный CD через NFS. Здесь приведены несколько платформо-зависимых советов:

Для etherboot, вставьте etherboot-диск в привод и перезагрузитесь. Командная строка ядра была указана, когда собирался образ.

На Sparc64, нажмите + в командной строке загрузки и затем введите:

Для PXE, настройте pxelinux (часть пакета syslinux), затем создайте подобно тому как:

Введение
Если initramfs установлен с помощью genkernel, то присмотритесь к следующим параметрам загрузки которые могут (или должны) быть определены в конфигурации загрузчика. Наиболее общие добавлены в это руководство.

Загрузка LVM или программного RAID
Если система использует LVM или программный RAID, initramfs должен быть собран с использованием параметров  и. Не забудьте также включить поддержку во время процесса загрузки. Это можно сделать с помощью параметров dolvm и domdadm.

Загрузка в однопользовательском режиме
Если по какой-то причине загрузка завершается с ошибкой, все еще возможно восстановление системы с помощью загрузки в однопользовательском режиме. Это загрузит только действительно необходимые службы и затем перебросит пользователя в (root) оболочку восстановления.

compile failed: Kernel not found
Эта ошибка может произойти при попытке собрать ядро для одной архитектуры, но используется файл конфигурации ядра в котором определена другая архитектура. Это так же, как на машине с архитектурой пытаться собрать.

Это можно проверить с помощью загрузки с x86_64 LiveCD на железе способном работать в 64-битном режиме, однако установленная система является 32-битной. После того, как начнется процесс компиляции, будет пытаться автоматически определить архитектуру системы на основе текущего ядра. Если в настоящее время работает 64-бит ядро и нет никаких настроек меняющих это, то будет предполагать, что следует искать 64-битное ядро.

Предположим теперь, что файл ядра x64 отключен. Команда будет выполнена и полученный файл ядра будет размещен в соответствующей  директории. Когда переходит к установке (перемещению и переименованию) ядра, оно не может его найти, потому что ожидает 64-битное ядро.

Решением этой проблемы является использовать опцию , в рассматриваемом примере архитектура. В итоге команда может выглядеть следующим образом:

Чтобы изменить архитектуру на постоянной основе, измените переменную ARCH_OVERRIDE в файле.

Смотрите также

 * Руководство по конфигурации ядра - Когда компиляция ядра делается вручную.
 * Dracut - Другой сборщик initramfs доступный в Gentoo.