Сборка собственного ядра 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 (скопированный файл). Затем просмотрите опции и измените, что нужно. При выходе сохраните конфигурацию.



Совет: если добавляете редкие драйверы, проверьте, собираются ли они как модули (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.debGRUB должен обновиться автоматически и добавить новую запись. Создастся 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-essential3.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/linux3.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/<версия>.
Диагностика при неудаче загрузки:
- Загрузитесь под старым ядром через GRUB.
- Проверьте /var/log/syslog и /var/log/kern.log на сообщения об ошибках загрузки.
- Проверьте содержимое /boot (vmlinuz-, initrd-, System.map) и совпадение версий.
- Запустите fsck, если подозреваете проблемы с файловой системой.
5 Руководство по откату (runbook) — план действий при проблемах
- При обнаружении, что система не загружается с новым ядром — перезагрузитесь и выберите старое ядро в GRUB.
- Войдите под старым ядром и выполните:
ls -l /boot
cat /boot/grub/menu.lst- Удалите проблемные .deb или записи ядра:
- Если устанавливали .deb: dpkg -r имя_пакета или dpkg -P для полного удаления.
- Если устанавливали вручную: удалите соответствующие vmlinuz- и initrd.img- из /boot и обновите GRUB.
- Восстановите рабочую конфигурацию загрузчика и перезапустите:
update-grub
shutdown -r now- Проанализируйте логи и верните изменения в исходники/конфигурацию перед новой попыткой.
Важно: храните резервную копию /boot/grub/menu.lst до внесения изменений.
6 Чек-листы и роли
Системный администратор — краткий чек-лист перед сборкой:
- Сделана резервная копия /boot.
- Сохранён старый menu.lst или grub.cfg.
- Имеется доступ к консоли/физическому контролю.
- Проверены имена пакетов build-tools для текущего репозитория.
- Тестовая машина или виртуалка для первой сборки.
Разработчик модулей — что проверить:
- Совместимость ABI модулей с версией ядра.
- Наличие исходников и Makefile для модулей.
- Установлены linux-headers для тестируемой версии (если используете .deb-метод).
DevOps/автоматизация:
- Скрипты сборки должны указывать –append-to-version для идентификации.
- Хранить .deb-артефакты в артефакт-репозитории.
7 Мини-методология для повторяемой сборки (SOP)
- Подготовка окружения: обновить apt, установить зависимости.
- Загрузка конкретной версии исходников в /usr/src.
- Сохранение исходной конфигурации и создание .config.
- Применение патчей (dry-run, затем реальное применение).
- Конфигурация через make menuconfig.
- Сборка (make-kpkg или make all) и валидация артефактов.
- Установка на тестовую машину, обновление GRUB и тест загрузки.
- Продвижение пакета в продакшн репозиторий только после успешных тестов.
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 -r9 Совместимость, уровни зрелости и миграция
Модель зрелости для ядра, которое вы собираете:
- Альфа / prepatch: использовать только в тестовых средах — нестабильно.
- Бета/релиз-кандидат: лучше совместимость, но всё ещё риск.
- Стабильный релиз: рекомендуется для продакшн-систем.
Миграционные советы:
- Для обновления производите сборку и тестирование на клоне продакшн-системы.
- Тегируйте версии в системе управления конфигурацией и в артефакт-репозитории.
- При переходе между малыми патчиными версиями (.21 → .21.3) соблюдайте совместимость модулей и заголовков.
10 Критерии приёмки
Перед развертыванием в продакшн убедитесь, что:
- Система успешно загружается в новом ядре минимум на одной тестовой машине.
- Все критичные службы стартуют (например, сеть, DB, файловые системы).
- Производительность и задержки в пределах допустимых значений (ручные и автоматизированные тесты).
- Документация по сборке и откату обновлена.
11 Безопасность и рекомендации
- Не включайте экспериментальные патчи в ядро продакшна без полного тестирования, особенно если они касаются управления памятью или безопасности.
- Подписывайте пакеты ядра и используйте проверку контрольных сумм при распространении внутри организации.
- Храните ключи доступа и приватные данные отдельно от артефактов сборки.
12 Сравнение подходов — краткая матрица
.deb-пакет:
- Плюсы: легко развернуть на многих Debian-системах, удобно распространять.
- Минусы: привязка к инструментам Debian, требуется корректное формирование пакета.
Традиционная сборка:
- Плюсы: универсальность, подходит для любых дистрибутивов.
- Минусы: ручная установка initrd и обновление загрузчика, хуже автоматизируется в Debian-подобных окружениях.
13 Частые вопросы (FAQ)
Q: Можно ли использовать эти инструкции на новых версиях Debian?
A: Основной поток команд остаётся похожим, но имена пакетов и утилит могли измениться. Уточняйте названия пакетов в репозитории вашей версии Debian.
Q: Нужно ли удалять старые версии ядра?
A: Храните как минимум одно рабочее ядро до проверки нового. Чистите старые версии по мере необходимости, но оставляйте резервную загрузочную запись.
14 Полезные ссылки
- Debian: http://www.debian.org
- The Linux Kernel Archives: http://www.kernel.org
Резюме
- Сборка ядра может выполняться двумя путями: .deb-пакет (для Debian) и традиционная сборка.
- Всегда начинайте с конфигурации текущего ядра и тестируйте в безопасной среде.
- Имейте план отката и доступ к консоли на случай неудачи.
Важно: тестируйте и документируйте ваши шаги — это снизит риск при переходе в продакшн.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента