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

Сборка собственного ядра Linux на Debian (Etch)

• 8 min read • Linux • Обновлено 25 Nov 2025
Сборка ядра Linux на Debian (Etch)
Сборка ядра Linux на Debian (Etch)

Этот подробный пошаговый материал объясняет, как скачать исходники ядра с kernel.org, настроить, при необходимости запатчить и собрать собственное ядро на Debian Etch двумя способами: в .deb-пакет (удобно для распространения) и «традиционным» способом. Включены чек-листы, методики отката, советы по совместимости и отладке — чтобы подготовиться к сбою и быстро восстановить рабочую систему.

Ключевые варианты использования

  • Получить независимость от пакетов ядра дистрибутива.
  • Добавить экспериментальные патчи или драйверы, отсутствующие в поставке.
  • Собирать ядро как .deb для установки на нескольких машинах.

Важно: операция с компиляцией и установкой ядра затрагивает загрузку системы — сохраняйте резервные копии и действуйте осторожно.


Фото: ноутбук с терминалом и сборкой ядра

Каждый дистрибутив предоставляет инструменты для сборки собственного ядра из исходников. В этой статье описано, как собрать ядро на системе Debian Etch. Показаны два подхода:

  • Сборка .deb-пакета ядра, который удобно установить и перенести на другие системы Debian Etch.
  • «Традиционная» сборка, универсальная для любых дистрибутивов, но без .deb-пакета.

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

Я не даю гарантии, что инструкция подойдёт именно в вашем окружении — тестируйте на резервной машине или в виртуальной среде.

1 Предварительная заметка

Коротко о рисках и подготовке:

  • Работайте под учётной записью с правами root, но избегайте постоянной работы под root — используйте sudo для отдельных команд.
  • Перед изменением загрузчика и установкой нового ядра создайте резервную копию /boot, /etc и сохраните доступ к старой конфигурации загрузчика (menu.lst или grub.cfg).
  • Желательно иметь физический доступ или консоль удалённого управления (KVM, IPMI) на случай, если система не загрузится.

Определения в одну строку:

  • Ядро (kernel) — базовый компонент ОС, управляющий оборудованием и ресурсами.
  • Патч — набор изменений исходного кода, применяемый поверх существующих исходников.

2 Сборка .deb-пакета ядра (рекомендуемый для Debian)

Эта глава описывает процесс сборки ядра и создания .deb пакетов kernel_image и kernel_headers, которые удобно распространять и переустанавливать.

2.1 Установка необходимых пакетов

Обновите локальную базу пакетов:

apt-get update

Установите зависимости:

apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

Примечание: некоторые пакеты могут называться чуть иначе в более новых версиях Debian (например, libncurses5-dev вместо ncurses-dev). Если apt не находит пакет, проверьте точное имя через apt-cache search.

2.2 Загрузка исходников ядра

Перейдите в /usr/src и скачайте нужную версию ядра с http://www.kernel.org, например:

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

Распакуйте и создайте симлинк linux:

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

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

2.3 Применение патчей к исходникам (по необходимости)

Иногда требуются драйверы или экспериментальные функции. Если у вас есть патч patch.bz2 в /usr/src, протестируйте его применимость и затем примените:

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

Первая команда делает «сухой прогон» и не изменяет файлы — если она выдаст ошибки, патч применять нельзя.

Пре-патчи (prepatches) — это аналог альфа-релизов. Их следует накладывать на исходники предыдущего полного релиза. Подробнее: http://kernel.org/patchtypes/pre.html

Пример применения тестового prepatch:

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

Важно: применяйте prepatch только к совместимым версиям исходников — инструкция на kernel.org объясняет, какие версии подходят.

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

Обычно имеет смысл начать с конфигурации текущего работающего ядра:

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

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

make menuconfig

В меню выберите Load an Alternate Configuration File и загрузите .config (скопированный файл). Затем просмотрите опции и измените, что нужно. При выходе сохраните конфигурацию.

Диалог конфигурации ядра в консоли

Сохранение .config в меню конфигурации

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

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

2.5 Сборка .deb-пакета

Для сборки выполните:

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Пояснение: после –append-to-version= укажите пометку (например, -custom), начинающуюся с дефиса и не содержащую пробелов — так будет понятна ваша модификация.

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

2.6 Установка нового ядра

После успешной сборки в /usr/src появятся .deb файлы. Посмотрите:

cd /usr/src
ls -l

Установите их через dpkg:

dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

GRUB должен обновиться автоматически и добавить новую запись. Создастся initrd в /boot.

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

shutdown -r now

На этапе загрузки выберите новое ядро; по умолчанию обычно выбрано оно.

Меню загрузчика с выбором нового ядра

Проверьте, что загрузились в нужном ядре:

uname -r

Ожидаемый вывод (пример):

2.6.21.3-custom

Если система не загружается, при старте выберите старое ядро из GRUB и удалите проблемную запись из /boot/grub/menu.lst перед повторной попыткой.

3 Традиционная сборка ядра (универсальный метод)

Этот подход работает на любых Linux-системах. Вы не получите .deb-пакет, но процесс компиляции и установки в целом аналогичен.

3.1 Установка зависимостей

Обновите базу пакетов:

apt-get update

Установите зависимости:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

3.2 Загрузка исходников

Скачайте ядро в /usr/src как в разделе 2.2.

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

Распакуйте и создайте симлинк:

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

3.3 Применение патчей (опционально)

Процедура та же, что и для .deb-метода (раздел 2.3).

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

Используйте существующую конфигурацию в качестве отправной точки:

make clean && make mrproper
cp /boot/config-`uname -r` ./.config
make menuconfig

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

Соберите ядро и модули, установите модули и саме ядро:

make all
make modules_install
make install

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

3.6 Постинсталляция: initrd и обновление загрузчика

Создайте зависимости модулей и установите утилиту для создания initrd (если требуется):

depmod 2.6.21.3
apt-get install yaird

Создайте ramdisk:

mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

Обновите GRUB:

update-grub

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

shutdown -r now

Проверьте uname -r — ожидаемый вывод:

2.6.21.3

Если загрузка не удалась, выберите старое ядро и удалите проблемную запись в /boot/grub/menu.lst.

4 Отладка и когда сборка терпит неудачу

Частые причины неудачной загрузки и способы диагностики:

  • Неправильные опции конфигурации (отсутствуют драйверы для корневой файловой системы или загрузочного контроллера).
    • Решение: встройте драйверы ранней загрузки (initramfs stage) в ядро или соберите их в initrd.
  • Неприменимый патч или конфликт версий исходников.
    • Решение: откатить патч, пересмотреть README патча и применить к совместимой версии.
  • Неправильно созданный initrd или отсутствие initrd.
    • Решение: пересоздать initrd с правильной утилитой (mkinitramfs, mkinitrd.yaird) и проверить содержимое.
  • Модульные зависимости не обновлены (depmod не выполнен).
    • Решение: выполнить depmod и убедиться, что модули находятся в /lib/modules/<версия>.

Диагностика при неудаче загрузки:

  1. Загрузитесь под старым ядром через GRUB.
  2. Проверьте /var/log/syslog и /var/log/kern.log на сообщения об ошибках загрузки.
  3. Проверьте содержимое /boot (vmlinuz-, initrd-, System.map) и совпадение версий.
  4. Запустите fsck, если подозреваете проблемы с файловой системой.

5 Руководство по откату (runbook) — план действий при проблемах

  1. При обнаружении, что система не загружается с новым ядром — перезагрузитесь и выберите старое ядро в GRUB.
  2. Войдите под старым ядром и выполните:
ls -l /boot
cat /boot/grub/menu.lst
  1. Удалите проблемные .deb или записи ядра:
  • Если устанавливали .deb: dpkg -r имя_пакета или dpkg -P для полного удаления.
  • Если устанавливали вручную: удалите соответствующие vmlinuz- и initrd.img- из /boot и обновите GRUB.
  1. Восстановите рабочую конфигурацию загрузчика и перезапустите:
update-grub
shutdown -r now
  1. Проанализируйте логи и верните изменения в исходники/конфигурацию перед новой попыткой.

Важно: храните резервную копию /boot/grub/menu.lst до внесения изменений.

6 Чек-листы и роли

Системный администратор — краткий чек-лист перед сборкой:

  • Сделана резервная копия /boot.
  • Сохранён старый menu.lst или grub.cfg.
  • Имеется доступ к консоли/физическому контролю.
  • Проверены имена пакетов build-tools для текущего репозитория.
  • Тестовая машина или виртуалка для первой сборки.

Разработчик модулей — что проверить:

  • Совместимость ABI модулей с версией ядра.
  • Наличие исходников и Makefile для модулей.
  • Установлены linux-headers для тестируемой версии (если используете .deb-метод).

DevOps/автоматизация:

  • Скрипты сборки должны указывать –append-to-version для идентификации.
  • Хранить .deb-артефакты в артефакт-репозитории.

7 Мини-методология для повторяемой сборки (SOP)

  1. Подготовка окружения: обновить apt, установить зависимости.
  2. Загрузка конкретной версии исходников в /usr/src.
  3. Сохранение исходной конфигурации и создание .config.
  4. Применение патчей (dry-run, затем реальное применение).
  5. Конфигурация через make menuconfig.
  6. Сборка (make-kpkg или make all) и валидация артефактов.
  7. Установка на тестовую машину, обновление GRUB и тест загрузки.
  8. Продвижение пакета в продакшн репозиторий только после успешных тестов.

8 Шпаргалка команд (cheat sheet)

  • Обновление и установка инструментов:
apt-get update
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential
  • Загрузка и распаковка исходников:
cd /usr/src
wget 
tar xjf .tar.bz2
ln -s  linux
cd linux
  • Применение патча (dry-run и реальное):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
  • Конфигурация и сборка .deb:
cp /boot/config-`uname -r` ./.config
make menuconfig
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
  • Проверка версии после загрузки:
uname -r

9 Совместимость, уровни зрелости и миграция

Модель зрелости для ядра, которое вы собираете:

  • Альфа / prepatch: использовать только в тестовых средах — нестабильно.
  • Бета/релиз-кандидат: лучше совместимость, но всё ещё риск.
  • Стабильный релиз: рекомендуется для продакшн-систем.

Миграционные советы:

  • Для обновления производите сборку и тестирование на клоне продакшн-системы.
  • Тегируйте версии в системе управления конфигурацией и в артефакт-репозитории.
  • При переходе между малыми патчиными версиями (.21 → .21.3) соблюдайте совместимость модулей и заголовков.

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

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

  • Система успешно загружается в новом ядре минимум на одной тестовой машине.
  • Все критичные службы стартуют (например, сеть, DB, файловые системы).
  • Производительность и задержки в пределах допустимых значений (ручные и автоматизированные тесты).
  • Документация по сборке и откату обновлена.

11 Безопасность и рекомендации

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

12 Сравнение подходов — краткая матрица

  • .deb-пакет:

    • Плюсы: легко развернуть на многих Debian-системах, удобно распространять.
    • Минусы: привязка к инструментам Debian, требуется корректное формирование пакета.
  • Традиционная сборка:

    • Плюсы: универсальность, подходит для любых дистрибутивов.
    • Минусы: ручная установка initrd и обновление загрузчика, хуже автоматизируется в Debian-подобных окружениях.

13 Частые вопросы (FAQ)

Q: Можно ли использовать эти инструкции на новых версиях Debian?

A: Основной поток команд остаётся похожим, но имена пакетов и утилит могли измениться. Уточняйте названия пакетов в репозитории вашей версии Debian.

Q: Нужно ли удалять старые версии ядра?

A: Храните как минимум одно рабочее ядро до проверки нового. Чистите старые версии по мере необходимости, но оставляйте резервную загрузочную запись.

14 Полезные ссылки


Резюме

  • Сборка ядра может выполняться двумя путями: .deb-пакет (для Debian) и традиционная сборка.
  • Всегда начинайте с конфигурации текущего ядра и тестируйте в безопасной среде.
  • Имейте план отката и доступ к консоли на случай неудачи.

Важно: тестируйте и документируйте ваши шаги — это снизит риск при переходе в продакшн.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро