Гид по технологиям

3 Сборка ядра традиционным способом

6 min read Linux Обновлено 25 Sep 2025
Сборка ядра Linux — традиционный способ
Сборка ядра Linux — традиционный способ

Введение

Глава объясняет универсальный подход к сборке ядра, который применим к любой системе Linux. Метод не зависит от конкретного дистрибутива, поэтому вы не получите RPM-пакет ядра — вы получите готовый двоичный образ и initrd.

Короткое определение: ядро — это центральная часть ОС, управляющая аппаратурой и ресурсами системы.

3 Сборка ядра

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

3.1 Скачивание исходников ядра

Мы загружаем желаемую версию ядра в /usr/src. Зайдите на www.kernel.org и выберите нужный tarball, например linux-2.6.18.2.tar.bz2 (все ядра 2.6 доступны по адресу http://www.kernel.org/pub/linux/kernel/v2.6/). Затем можно скачать архив так:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2

Распакуйте исходники и создайте символьную ссылку linux на каталог с исходниками:

tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd /usr/src/linux

Важно: проверяйте контрольные суммы tarball’а, если дистрибутив или зеркало их предоставляет. Это снижает риск повреждённой или скомпрометированной архивации.

3.2 Применение патчей к исходникам (опционально)

Иногда требуется добавить драйверы или экспериментальные фичи, которых нет в стабильном релизе. Тогда доступен отдельный патч (например patch.bz2 или patch-2.6.19-rc5.bz2). Применяйте патчи только к совместимым версиям исходников.

Пример применения патча (сначала сухой прогон, затем реальное применение):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

Если dry-run выдаёт ошибки, не применяйте патч. Предварительно сохраните оригинальные исходники или работайте в копии.

Пример для предрелизного патча (prepatch): чтобы собрать 2.6.19-rc5, скачайте исходники 2.6.18 и примените patch-2.6.19-rc5.bz2, а не пытайтесь наложить патч на 2.6.18.2.

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1

Примечание: prepatch’ы служат тестированию и могут не пройти в продакшн. Рассматривайте их как аналог альфа-версий.

3.3 Конфигурация ядра

Хорошая практика — взять конфигурацию текущего работающего ядра как основу. Скопируйте файл конфигурации из /boot:

make mrproper
cp /boot/config-`uname -r` ./.config

Затем запустите текстовую конфигурацию:

make menuconfig

Выберите Load an Alternate Configuration File и укажите .config (это конфигурация текущего работающего ядра). После редактирования пройдите Exit и при вопросе “Do you wish to save your new kernel configuration?” ответьте Yes.

Меню make menuconfig с подзагрузкой альтернативного файла конфигурации

Просмотр параметров конфигурации ядра в текстовом интерфейсе menuconfig

Подтверждение сохранения новой конфигурации в menuconfig

Совет: если вы не уверены в параметре — оставьте текущую настройку. Для новых драйверов используйте опцию M (модуль), чтобы облегчить отладку.

3.4 Сборка и установка ядра

Запустите следующие команды для сборки и установки ядра:

make all
make modules_install
make install

Сборка может занять от нескольких минут до нескольких часов в зависимости от конфигурации и производительности процессора. Команда make install обычно создаёт initrd (ramdisk) и обновляет файл /boot/grub/menu.lst.

Отредактируйте /boot/grub/menu.lst и убедитесь, что новая запись находится вверху списка и параметр default установлен в 0, чтобы по умолчанию загружалось новое ядро:

vi /boot/grub/menu.lst

Пример содержимого menu.lst:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu

title Fedora Core (2.6.18.2)
        root (hd0,0)
        kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18.2.img

title Fedora Core (2.6.18-1.2798.fc6)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-1.2798.fc6.img

Перезагрузите систему:

shutdown -r now

Проверьте версию ядра после загрузки:

uname -r

Ожидаемый вывод примерно такой:

2.6.18.2

Если система не загружается, перезагрузите и, при появлении подсказки GRUB, нажмите любую клавишу для входа в меню загрузчика:

Подсказка GRUB: нажмите любую клавишу, чтобы открыть меню

Меню GRUB с выбором списка доступных ядер

Выберите старое рабочее ядро и загрузитесь. Затем исправьте проблему в конфигурации или соберите ядро заново. Не забудьте удалить запись о неработающем ядре из /boot/grub/menu.lst.

Когда этот способ подходит, а когда нет

  • Подходит: когда нужен контроль над опциями ядра, требуется патчирование, сборка модулей или экспериментальные фичи.
  • Не подходит: если вы хотите простой, поддерживаемый пакетный образ ядра (RPM/DEB). В таких случаях пользуйтесь механизмами дистрибутива (rpmbuild, apt, DKMS) или готовыми пакетами.

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

Альтернативные подходы

  • Использовать дистрибутивные пакеты ядра (RPM/DEB). Это упрощает обновления и интеграцию с менеджером пакетов.
  • Использовать DKMS для автоматической сборки модулей при смене ядра.
  • Собирать ядро в контейнере или в chroot, чтобы сохранить чистоту основной системы.

Быстрая методология (SOP) для сборки ядра

  1. Подготовка: обновите систему, установите инструменты (gcc, make, ncurses-devel, bzip2, perl, bc). Сделайте резервную копию /boot и grub.cfg.
  2. Скачивание: поместите исходники в /usr/src.
  3. Подготовка исходников: распакуйте, создайте ссылку linux.
  4. Патчинг (опционально): dry-run, затем apply.
  5. Конфигурация: скопируйте /boot/config-uname -r и запустите make menuconfig.
  6. Сборка: make all; make modules_install; make install.
  7. Обновление загрузчика: проверьте /boot/grub/menu.lst или /boot/grub2/grub.cfg.
  8. Тестирование: перезагрузите, проверьте uname -r, загрузите в rescue при необходимости.

Ролевые чек-листы

Администратор:

  • Подготовить резервные копии /boot и конфигурации GRUB.
  • Убедиться в наличии удалённого доступа (консоль/serial) для восстановления.

Разработчик/инженер интеграции:

  • Проверить зависимости сборки.
  • Запустить автотесты ядра и модулей.

Тестировщик:

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

План действий при неудачной загрузке (runbook)

  1. Перезагрузите систему.
  2. На подсказке GRUB нажмите любую клавишу и выберите предыдущее рабочее ядро.
  3. После загрузки удалите или исправьте проблемную запись в /boot/grub/menu.lst.
  4. Проверьте логи /var/log/messages или systemd-journal для ошибок модулей и драйверов.
  5. Если проблема в конфигурации, вернитесь к конфигу и отключите экспериментальные опции.
  6. При необходимости собрать ядро с минимальным набором опций и постепенно добавлять функции.

Критерии приёмки

  • Система успешно загружается с новым ядром.
  • uname -r показывает ожидаемую версию.
  • Критичные службы (SSH, сеть, диск) работают без ошибок.
  • Модули, необходимые в системе, загружаются (lsmod / dmesg).

Тесты и сценарии приёмки

  • Проверка версии: uname -r == ожидаемая
  • Тест загрузки в rescue: система входит в rescue-режим без ошибок
  • Тест модулей: insmod/depmod выполняются без конфликтов
  • Нагрузочное тестирование: сервисы выдерживают рабочую нагрузку

Ментальные модели и эвристики

  • «Модифицируй конфиг постепенно»: добавляйте опции по одной и тестируйте. Это снижает количество причин ошибок.
  • «Модуль вместо встроенного драйвера»: если не уверены, поместите драйвер как модуль, чтобы можно было выгрузить его без перезагрузки.
  • «Стабильность важнее новизны для сервера»: предпочитайте стабильные релизы для продакшна.

Безопасность и риски

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

Митигаторы:

  • Всегда имейте доступ к физической или виртуальной консоли.
  • Держите старое рабочее ядро в списке загрузки.
  • Делайте резервные копии /boot и конфигураций grub.

Факты и быстрые числа

  • Большинство сборок ядра на современном железе занимает от 10 минут до нескольких часов, в зависимости от количества включённых опций и ядер CPU.
  • Резервное копирование /boot и grub занимает обычно менее 100 МБ.

Сравнение подходов (кратко)

  • Ручная сборка: гибкость, контроль, ответственность за обновления.
  • Дистрибутивная сборка: поддержка, простые обновления, меньше ручной работы.
  • DKMS: удобство для внешних модулей, автоматическая пересборка при смене ядра.

Заключение

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

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Очистить память iPhone без удаления приложений
iOS

Очистить память iPhone без удаления приложений

WireGuard на CentOS 8: установка и настройка
Системное администрирование

WireGuard на CentOS 8: установка и настройка

Освободите 24 ГБ в Windows 10 после Threshold 2
Windows

Освободите 24 ГБ в Windows 10 после Threshold 2

Как работать курьером и обеспечить стабильный доход
Карьера

Как работать курьером и обеспечить стабильный доход

Как очистить кэш в Microsoft Edge
Браузеры

Как очистить кэш в Microsoft Edge

My Family Cinema — безопасная установка APK
Android.

My Family Cinema — безопасная установка APK