Genkernel/ru

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

Установка
Для установки сначала выберите подходящие USE-флаги.

Затем можно запустить установку genkernel.

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

Параметры
The actual behavior of genkernel depends on a large variety of options, the majority of which can be set/unset in the file or passed via  the genkernel command. Options passed over the command line take precedence over options defined into. This file is very well documented but let's examine some of the most commonly used ones here. For a more complete explanation, please refer to the comments in itself or to the output of the man genkernel command.

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


 * --[no-]menuconfig
 * Activates [ or deactivates] the make menuconfig command (which invokes an interactive configuration menu) before building the kernel.


 * --gconfig
 * Предоставляет утилиту конфигурации ядра, которая зависит от библиотек GTK+. Преимуществом этого параметра является то, что большинство пользователей находят конфигурацию ядра с использованием этого инструмента более легкой и очевидной, так как она полагается на X window system. Недостаток этого параметра заключается в том что Вам необходим X сервер для того, чтобы его использовать, поэтому этот параметр не будет работать в командной строке.


 * --xconfig
 * Предоставляет утилиту конфигурации ядра, которая зависит от библиотек QT. Преимуществом этого параметра является то, что большинство пользователей находят конфигурацию ядра с использованием этого инструмента более легкой и очевидной, так как он полагается на X window system. Недостатком этого параметра является то, что Вам потребуется X сервер для его использования, поэтому он не будет работать в командной строке.


 * --[no-]save-config
 * Сохраняет [или не сохраняет] конфигурацию ядра в файл в каталоге для дальнейшего использования.


 * --kernname=&lt;NickName&gt;: Позволяет модификацию имени ядра и образа initrd в каталоге, так чтобы полученные образы имели имена и.

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


 * --[no-]splash
 * Включает [или отключает]Fbsplash заставку (framebuffer splash) в образе initrd, собранном с помощью genkernel. Чтобы переписать тему, используемую fbsplash по умолчанию, используйте --splash=&lt;ПредпочитаемаяТема&gt; (где &lt;ПредпочитаемаяТема&gt; - имя одного из каталогов в каталоге ).


 * --splash-res=&lt;ПредпочитаемоеРазрешение&gt;</tt>
 * Этот параметр позволяет выбрать какие разрешения экрана заставки будут поддерживаться в initrd в течение запуска системы. Это полезно по двум причинам. Во-первых, чтобы иметь возможность выбрать только те разрешения заставки, которые уместны для системы. Во-вторых, чтобы избежать излишнего увеличения дискового пространства, требуемого initrd (так как initrd не должен поддерживать разрешения, не соотносящиеся с конфигурацией Вашей системы.) Однако, этот параметр лучше всего опустить, если ядро компилируется для установочного CD; это позволяет поддержку заставки для всех возможных разрешений.


 * --do-keymap-auto</tt>
 * Выбор раскладки клавиатуры в течение загрузки.


 * --lvm</tt>
 * Включает поддержку использования хранилища данных с помощью Менеджера логических томов (LVM2) из статических двоичных файлов, если это доступно на системе. Подходящие (статические) двоичные файлы LVM2 компилируются, если они недоступны. Убедитесь, что Вы установили пакет lvm2 на систему с помощью команды emerge lvm2 перед тем, как включить этот параметр, и пересмотрите статью LVM на Gentoo wiki.


 * --dmraid</tt>
 * Включает поддержку DMRAID; утилиты которая создает RAID-отображения (RAID mappings), используя подсистему ядра device-mapper.

DMRAID обнаруживает, активирует, деактивирует и отображает свойства программных массивов RAID (например, ATARAID) и содержащихся DOS разделов.


 * --luks</tt>
 * Включает поддержку Linux Unified Key Setup, или LUKS. Это позволяет использовать устройство, зашифрованное LUKS, которое содержит корневую файловую систему. Установите это зашифрованное устройство как  в загрузчике (а   должно быть незашифрованным устройством, созданным LUKS).


 * --disklabel</tt>
 * Добавляет поддержку метки диска и UUID в initrd.


 * --iscsi</tt>
 * Добавляет поддержку iSCSI в initrd.


 * --multipath</tt>
 * Добавляет поддержку Multipath в initrd.


 * --linuxrc=/путь/к/вашему/linuxrc</tt>
 * Указывает созданный пользователем linuxrc - сценарий, который инициализируется в течение начальной стадии загрузки ядра, до начала действительного процесса загрузки. (Сценарий linuxrc по умолчанию должен быть в каталоге .) Этот сценарий позволяет загружаться в небольшое, модульное ядро и загружать драйверы, которые требуются (в качестве модулей) для системы.


 * --cachedir=/путь/к/альтернативному/каталогу</tt>
 * Перезаписывает расположение кэша по умолчанию, используемого при компиляции ядра.


 * --tempdir=/путь/к/новому/каталогу</tt>
 * Указывает расположение временного каталога используемого genkernel при компиляции ядра.


 * --unionfs</tt>
 * Включает поддержку файловой системы UnionFS в образ initrd.


 * --mountboot</tt>
 * Обнаруживает необходимо ли монтировать каталог на отдельный раздел. Этот параметр проверяет сценарий  на наличие инструкций монтирования раздела boot на файловую систему (если необходимо).

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


 * --kernel-cc=&lt;некийКомпилятор&gt;</tt>
 * Указывает компилятор, используемый в течение процесса компиляции ядра.


 * --kernel-ld=&lt;некийЛинкер&gt;</tt>
 * Указывает линкер, используемый в течение процесса компиляции ядра.


 * --kernel-as=&lt;некийАссемблер&gt;</tt>
 * Указывает ассемблер, используемый в течение процесса компиляции ядра.


 * <tt>--kernel-make=&lt;некийMake&gt;</tt>
 * Указывает альтернативу утилиты GNU make, используемую в течение процесса компиляции ядра.


 * <tt>--utils-cc=&lt;некийКомпилятор&gt;</tt>
 * Указывает компилятор, используемый в течение компиляции вспомогательных утилит.


 * <tt>--utils-ld=&lt;некийЛинкер&gt;</tt>
 * Указывает линкер, используемый в течение компиляции вспомогательных утилит.


 * <tt>--utils-as=&lt;некийАссемблер&gt;</tt>
 * Указывает ассемблер, используемый в течение компиляции вспомогательных утилит.


 * <tt>--utils-make=&lt;некийMake&gt;</tt>
 * Указывает альтернативу утилиты GNU make, используемую в течение компиляции вспомогательных утилит.


 * <tt>--makeopts=-jX</tt>
 * Указывает количество параллельных потоков, которые утилита make может реализовать во время компиляции ядра (и утилит). Переменная  - выбираемое свободно число, хотя наиболее общие значения получаются добавлением единицы (1) к количеству ядер используемых системой, или просто используется количество ядер на системе. Поэтому, на системе с одним ядром, наиболее общими параметрами являются   или  ; система с двумя ядрами наиболее вероятно будет использовать параметры   или , и так далее. (Система с одним процессором, которая поддерживает технологию Hyper-Threading™ (HT) может считаться системой с двумя (2) ядрами, учитывая что поддержка симметричного мультипроцессирования - Symmetric Multi-Processing (SMP) включена в ядро.)

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


 * <tt>--kerneldir=/path/to/sources/</tt>
 * Указывает альтернативное расположение исходных текстов ядра, вместо расположения по умолчанию.


 * <tt>--kernel-config=/path/to/config-file</tt>
 * Указывает какой файл конфигурации ядра должен быть использован, вместо файла по умолчанию.


 * <tt>--module-prefix=/path/to/prefix-directory/</tt>
 * Указывает путь к каталогу, где будут установлены модули ядра ( путь по умолчанию - каталог .)


 * <tt>--[no-]clean</tt>
 * Activates [or deactivates] the make clean command before compiling your kernel. The make clean command removes all object files and dependencies from the kernel's source tree.


 * <tt>--[no-]mrproper</tt>
 * Activates [or deactivates] the make mrproper command before kernel compilation. Like the make clean command, make mrproper removes all object files and dependencies from the kernel's source tree. However, any previous configuration files (in or ) will also be purged from the kernel's source tree.


 * <tt>--oldconfig</tt>
 * Issues the make oldconfig command, which attempts to collect configuration information for the system's architecture from a generic script in . This is a non-interactive process; no user input is entertained. Also, if <tt>--oldconfig</tt> is used in conjunction with <tt>--clean</tt>, the latter option is negated, resulting in the activation of the <tt>--no-clean</tt> option.


 * <tt>--callback="echo hello"</tt>
 * Calls the specified arguments ( echo hello, in this case) after the kernel and the relevant modules have been built, but before building the initrd image. This may be useful if you want to install external modules in the initrd image by emerging the relevant item(s) with the callback feature, and then redefining a genkernel module group.


 * <tt>--[no-]install</tt>
 * Активирует [или деактивирует] команду make install, которая устанавливает новый образ ядра, файл конфигурации, образ initrd и файл system.map на смонтированный загрузочный раздел. Также будут установлены любые скомпилированные модули.


 * <tt>--no-ramdisk-modules</tt>
 * Воздержаться от копирования каких-либо модулей в образ initrd, созданный genkernel. Этот параметр является исключением из правила, связанного с приставкой <tt>no-</tt>; пропуск этой приставки создает неправильный параметр genkernel.


 * <tt>--all-ramdisk-modules</tt>
 * Копирует все доступные модули в образ initrd, созданный genkernel.


 * <tt>--genzimage</tt>
 * Создает образ initrd до образа ядра. (Этот прием в настоящее время применим только к системам PPC Pegasos.)

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


 * <tt>--loglevel=&lt;verblevel&gt;</tt>
 * Контролирует уровень избыточности информации, предоставляемой утилитой genkernel. Переменная  - это целое число в диапазоне от 0 до 5. Уровень '0' представляет минимальный уровень вывода сообщений, в то время как '5' предоставляет настолько много информации о действиях genkernel в течение компиляции ядра, насколько возможно.


 * <tt>--logfile=/путь/к/файлу</tt>
 * Игнорирует значение, установленное аргументом <tt>--loglevel</tt>, и отправляет все отладочные данные, сгенерированные genkernel, в указанный файл, который по умолчанию располагается в каталоге.


 * <tt>--[no-]color</tt>
 * Активирует (или деактивирует) цветной вывод отладочной информации (генерируемой genkernel), используя управляющие последовательности.

Действие
The action passed on the command line with the <tt>genkernel [options …] action</tt> command, tells genkernel what to do. The following <tt>actions</tt> are supported:


 * all
 * Builds all stages — the initrd, kernel image and modules.


 * bzImage
 * Only builds the kernel image


 * kernel
 * Only builds the kernel image and modules


 * initramfs
 * Only builds the initramfs/ramdisk image


 * ramdisk
 * Only builds the initramfs/ramdisk image

Первый вызов genkernel
Although there are several ways to run genkernel, the least-intrusive approach recommended for most users is provided by genkernel all. Here, a generic configuration which works well for most systems is used. As was mentioned earlier, this approach is not without drawbacks; most of the modules created are useless to the average user and may increase compile time. Below is an illustration of a more efficient approach, achieved by passing certain options to genkernel as root:

Вышеуказанная операция заставляет genkernel создать ядро с заставкой на кадровом буфере (<tt>--splash</tt>), которое нужно будет установить вручную (<tt>--no-install</tt>). При подготовке дерева исходных кодов ядра, genkernel воздержится от удаления каких-либо существующих заранее объектных файлов, присутствующих в дереве исходных кодов (<tt>--no-clean</tt>). Будет отображена управляемая с помощью меню утилита конфигурации ядра, которая позволяет пользователю выбрать какие модули должны быть собраны для системы (<tt>--menuconfig</tt>).

Замещение <tt>--no-install</tt> параметром <tt>--install</tt> позволяет genkernel автоматически установить новое ядро в каталог, а затем создать символьные ссылки за Вас, если указан параметр <tt>--symlink</tt>. Использование параметра <tt>--mountboot</tt> позволяет genkernel монтировать раздел автоматически, если это необходимо.

Использование Genkernel для изменения ядра
The first thing that should be done is to allow the triggering of make menuconfig in the file:

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

Исходные файлы используемые genkernel
After an emerge -u gentoo-sources, whenever new sources are available, a new kernel source directory is created under to host them. Normally, the active kernel sources directory is pointed to by the symlink.

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

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


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


 * If the previous USE flag is not set, the user can change the destination of the symlink using the eselect kernel list command.

Whatever it is, genkernel always uses the sources pointed by this symlink.

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

It is this file that is used as a starting configuration when running  genkernel --menuconfig all.

If it is the first time that genkernel is run with the new kernel sources, or if the previous result has not been saved, this file is substituted with a default configuration file that resides at where x86_64 is substituted with the actual architecture.

Сохранение скомпилированной конфигурации
If the <tt>save-config</tt> genkernel option is activated, either from the command line or inside, the compiled kernel configuration is saved (with the name given above) into the  directory. At the same time, the configuration is saved in the file in  directory but this file is not reused on the next genkernel all run.

Установка ядра и initramfs в каталог /boot
The <tt>all</tt> action specified when invoking genkernel, ask genkernel to install the kernel image and the initramfs into the directory. In order to do it in a convenient manner, set the following in the  file:


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


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


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

After running genkernel --menuconfig all, the directory might look like this:

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

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

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

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


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


 * The second important thing is to preserve the already bootable kernel and initramfs images. The way to accomplish this depends on the context:
 * If the last kernel compiled is bootable, running genkernel will rename this kernel (and similarly initramfs) image to and create a new . This mean that even if the new kernel is not bootable, users will always be able to boot the old one.
 * If the last kernel compiled is not bootable and sources haven't changed since the user compiled a bootable one, prior to running genkernel, first delete the new kernel image and remove the <tt>.old</tt> suffix from the last bootable one. Without this, if the newly compiled kernel is not bootable for the second time, the bootable will be kicked out by the renaming of the non bootable , giving the user an unbootable system. Use the same reasoning for initramfs.

Использование предыдущей конфигурации ядра при изменении исходных текстов
The previous configuration can be used through the make menuconfig option in your as follows:

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

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

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

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

Убедитесь, что выбран <tt>&lt;*&gt;</tt>, а не <tt>&lt;M&gt;</tt>.

Во-вторых, предполагается что включен параметр "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-сервера в сети, также как и параметр <tt>root-path</tt>. Оба могут быть указаны отдельно для хоста с использованием MAC-адреса для идентификации машин:

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

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

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

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

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

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

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

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Tim Yamin
 * Jimi Ayodele
 * Thomas Seiler
 * Joshua Saddler
 * Sebastian Pipping
 * José Fournier