Настройка, сборка и установка ядра Linux
Краткое описание
Этот документ описывает пошагово, как взять конфигурацию текущего работающего ядра, использовать её как основу, настроить новую конфигурацию через make menuconfig, собрать RPM-пакет ядра и установить его. Также разбираем создание ramdisk (initramfs), возможные ошибки и контрольные списки для администратора.
Определение терминов
- RPM: пакетный формат для дистрибутивов на базе RPM (например, CentOS, Fedora, SuSE).
- initramfs / ramdisk: временная файловая система, которая загружается до основного корня и необходима для правильного старта системы с новым ядром.
1. Подготовка конфигурации ядра
Хорошая практика — взять конфигурацию текущего работающего ядра как базу. Для этого в каталоге исходников ядра выполните:
make mrproper
cp /boot/config-`uname -r` ./.configЗатем запустите интерфейс конфигурации:
make menuconfigВ меню конфигурации ядра выберите пункт Load an Alternate Configuration File и укажите .config (файл конфигурации текущего ядра) как загружаемый файл.
! Экран выбора альтернативного файла конфигурации ядра
! Меню загрузки альтернативной конфигурации ядра
Просмотрите меню и внесите необходимые изменения. Особое внимание уделите пункту General Setup → Local version - append to kernel release: укажите строку идентификации версии ядра. По умолчанию используется строка -default; пакет будет назван, например, kernel-2.6.18.2default-1.i386.rpm. Вы можете оставить -default или указать свою строку (например, -custom, -prod, -lab).
Важно: если вы уже установили kernel-2.6.18.2default-1.i386.rpm и затем попытаетесь собрать другую сборку с той же «Local version», rpm не позволит установить новый пакет. Используйте уникальную строку типа -default1, -default2 и т.д.
! Настройка локальной строки версии ядра в меню конфигурации
! Параметры общего уровня ядра в menuconfig
! Пример опций конфигурации драйверов и файловых систем
Когда закончите, выходя из меню, ответьте на вопрос «Do you wish to save your new kernel configuration?» утвердительно (Yes):
! Подтверждение сохранения новой конфигурации ядра
2. Сборка RPM-пакета ядра
После сохранения конфигурации выполните сборку RPM-пакета ядра:
make rpmБудьте готовы: сборка может занять от нескольких десятков минут до нескольких часов в зависимости от конфигурации и скорости процессора.
Где искать результаты сборки
После успешной сборки появятся два вида пакетов:
- src.rpm — в каталоге /usr/src/packages/SRPMS/
- бинарный rpm — в каталоге /usr/src/packages/RPMS/<архитектура>/
Пример команды, чтобы посмотреть имя src.rpm:
ls -l /usr/src/packages/SRPMS/А для бинарника (пример для i386):
ls -l /usr/src/packages/RPMS/i386/Пример имени: kernel-2.6.18.2default-1.i386.rpm
3. Установка нового ядра
Перейдите в каталог с полученным пакетом и установите его:
cd /usr/src/packages/RPMS/i386/
rpm -ivh kernel-2.6.18.2default-1.i386.rpmПакет можно перенести на другие системы SuSE / RPM-совместимые и установить так же, без повторной сборки там.
Следующий обязательный шаг — создать ramdisk (initramfs), иначе система, скорее всего, не загрузится с новым ядром:
mkinitrdПримечание: в большинстве реализаций mkinitrd создаст initramfs для всех установленных ядер, что обычно уместно.
4. Тестирование и откат
- После установки перезагрузите систему и выберите новое ядро в загрузчике (если не настроен по умолчанию).
- Убедитесь, что ключевые сервисы (диск, сеть, LVM, RAID) запускаются корректно.
- Если система не загружается, загрузитесь с рабочего старого ядра из меню загрузчика и удалите проблемный пакет:
rpm -e kernel-- При необходимости восстановите конфигурацию загрузчика (grub / lilo) и initramfs.
5. Решение распространённых проблем
- rpm сообщает, что пакет уже установлен: вы используете ту же строку Local version. Соберите с уникальной строкой версии.
- Система не загружается: вероятны пропущенные модули в initramfs или отключенная поддержка нужного устройства (например, контроллера дисков) в конфигурации. Проверьте, включили ли вы соответствующие драйверы в ядре или как модули.
- Отсутствует поддержка файловой системы корня: убедитесь, что в конфигурации включена поддержка используемой FS или встроена в ядро (не как модуль), иначе initramfs не сможет смонтировать корень.
Краткий чек по диагностике при неудачной загрузке:
- Загрузитесь с предыдущего рабочего ядра.
- Проверьте /boot и содержимое initramfs для нового ядра.
- Пересоберите initramfs или включите драйверы в ядре.
- Снова соберите пакет с новой строкой версии.
6. Чек-листы по ролям
Администратор системы:
- Скопировать рабочую конфигурацию: cp /boot/config-
uname -r./.config - Проверить строку Local version и сделать её уникальной
- Выполнить make rpm и дождаться завершения
- Запустить mkinitrd и перезагрузить систему
Сборщик/пакетировщик:
- Проверить зависимости сборки и devtools
- Подписать пакеты (если требуется политика репозитория)
- Протестировать пакет в контролируемой среде перед развёртыванием
Разработчик ядра/тестировщик:
- Тестовые сценарии: загрузка, диски, сеть, LVM, файловые системы
- Автоматизировать сборку и тестирование при помощи CI (если доступно)
7. Критерии приёмки
- RPM-пакет успешно устанавливается без конфликтов
- Система загружается с новым ядром и все ключевые сервисы работают
- Можно откатиться на предыдущее ядро и загрузиться успешно
8. Мини-методология: как минимизировать риск
- Всегда делайте резервную копию /boot и текущих initramfs.
- Используйте VM или тестовый сервер для первой проверки пакета.
- Держите рабочее ядро в загрузчике видимым для быстрого отката.
- Нумеруйте версии сборок, используйте понятные суффиксы (-prod, -test).
Экспертная заметка: при сборке ядра лучше сначала собрать минимальный образ и протестировать загрузку, затем добавлять дополнительные модули и опции.
9. Примеры тест-кейсов
- Загрузка в нормальном режиме с новым ядром: система должна перейти в multi-user.target без ручных вмешательств.
- Загрузка в однопользовательском режиме: проверить доступность файловых систем и журналов.
- Проверка дисковой подсистемы: смонтировать все файловые системы и выполнить чтение/запись.
FAQ
Можно ли использовать ту же строку Local version для повторных сборок одной версии ядра?
Нет. rpm не позволит установить новый пакет с тем же именем. Используйте уникальную строку версии для каждой сборки.
Что делает mkinitrd и обязательно ли его запускать?
mkinitrd создаёт/обновляет initramfs (рамдиск), который содержит драйверы, необходимые для загрузки. Без него новая сборка может не загрузиться, особенно если драйверы для дисков или файловой системы собираются как модули.
Где находятся сгенерированные пакеты после make rpm?
src.rpm — /usr/src/packages/SRPMS/, бинарные пакеты — /usr/src/packages/RPMS/<архитектура>/.
Сводка
- Используйте существующий .config как основу.
- Задайте уникальную строку Local version.
- Соберите пакет через make rpm и установите rpm -ivh.
- Создайте initramfs с помощью mkinitrd и протестируйте загрузку.
Важное: всегда проверяйте загрузку на тестовой системе перед развёртыванием в продакшен.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента