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

Как собрать ядро по‑Ubuntu/Debian

• 10 min read • Linux • Обновлено 24 Nov 2025
Сборка ядра в стиле Ubuntu/Debian
Сборка ядра в стиле Ubuntu/Debian

Коротко: подготовьте систему, установите linux-source и зависимости, распакуйте исходники в /usr/src, настройте конфигурацию (menuconfig/xconfig), соберите пакет через fakeroot make-kpkg и установите .deb. Сохраняйте старую копию ядра, удерживайте пакет в apt и делайте резервные загрузочные дискеты/образ.

Введение

Это подробное руководство объясняет, как собрать собственное ядро Linux в стиле Ubuntu/Debian. Оно подходит для версий ядра 2.6 и близких по процессу. Цель — дать пошаговую инструкцию, набор контрольных списков, рекомендации по тестированию, варианты обхода проблем и готовый план действий для администраторов и пользователей.

Кто это читает: системные администраторы, разработчики драйверов, продвинутые пользователи, тестировщики. Если вы новичок в Linux — прочитайте раздел Примечания и Краткая методология перед началом.

Важно: не перезаписывайте рабочее ядро без резервной копии. Всегда держите способ загрузки старого ядра.

Что понадобится (коротко)

  • Компьютер с Ubuntu/Debian. Рекомендуется работа в тестовой среде или виртуальной машине.
  • Права sudo для установки пакетов и установки .deb.
  • Место в /usr/src для исходников.
  • Пакеты: build-essential, fakeroot, kernel-package. Для интерфейса настройки: libncurses-dev (menuconfig) и/или libqt3-dev (xconfig).

Ниже — полное пошаговое описание.

Подготовка окружения

  1. Установите необходимые пакеты:
bash:~$ sudo apt-get install build-essential fakeroot kernel-package
  1. Поставьте себя в группу src, чтобы работать с /usr/src без sudo для обычных операций:
bash:~$ sudo adduser my_username src

Затем выйдите и войдите в систему снова, чтобы обновить группы. Проверьте:

bash:~$ groups

Ожидаемый вывод содержит src среди групп пользователя.

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

Получение исходников ядра

Найдите доступные исходники через apt-cache:

bash:~$ apt-cache search source 2.6

В Ubuntu исходники обычно называются linux-source-<версия>, тогда как в Debian иногда встречается kernel-source-<версия>. Приоритетно используйте linux-source в Ubuntu.

Чтобы установить исходники:

bash:~$ sudo apt-get install linux-source

Менеджер пакетов может предложить установить libncurses-dev и libqt3-dev. Установите как минимум libncurses-dev для menuconfig, а если хотите графический Qt‑интерфейс — libqt3-dev.

После скачивания архив окажется в /usr/src.

Распаковка исходников

Перейдите в каталог /usr/src:

bash:~$ cd /usr/src
bash:/usr/src$ ls -l

Пример:

linux-source-2.6.8.1.tar.bz2

Если в каталоге уже есть символьная ссылка linux, удалите её:

bash:/usr/src$ rm linux

Если вы распакуете исходники в каталог, на который указывает старая ссылка linux, новое дерево может быть извлечено внутрь старого — это приведёт к ошибочной сборке.

Распакуйте архив:

bash:/usr/src$ tar xjvf linux-source.tar.bz2

Если архив .gz, используйте tar zxvf.

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

bash:/usr/src$ ln -s linux-source-2.6.8.1 linux

Проверьте содержимое:

bash:/usr/src$ ls
linux@ linux-source-2.6.8.1/ linux-source-2.6.8.1.tar.bz2

Настройка конфигурации ядра

Перейдите в каталог исходников и выберите инструмент конфигурации:

bash:/usr/src/linux$ make xconfig

Если у вас нет X11 или вы предпочитаете текстовый интерфейс:

bash:/usr/src/linux$ make menuconfig

Ключевая рекомендация: убедитесь, что драйверы шин, дисков и драйвер корневой файловой системы включены в виде встроенных (built‑in), а не модулей. Если нужные драйверы сделаны модулями, образ не сможет смонтировать корневую файловую систему и не загрузится.

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

Опции make-kpkg: версия и ревизия

При сборке Debian-пакета ядра используйте make-kpkg. Общий синтаксис:

bash:/usr/src$ make-kpkg  

Типичный target — kernel_image. Две важные опции:

  • –append-to-version — добавляет суффикс к версии ядра, входит в имя самого ядра и каталога /lib/modules. Используйте буквы, цифры, “+” и “.”; не используйте “_”. Рекомендуется давать уникальный суффикс для каждой сборки (например, дата или short label).
  • –revision — влияет на имя пакета .deb, но не на имя ядра. Также не используйте “_”.

Пример текущего запущенного ядра (пример смотрите в выводе uname -a):

bash:/usr/src$ /usr/src/$ uname -a
Linux da5id 2.6.8.1-2-k7 #1 Sat Sep 18 11:23:11 BST 2004 i686 GNU/Linux

Важно: не используйте суффиксы вроде “-686” или “-K7” — они конфликтуют с заранее скомпилированными Debian пакетами.

Если вы соберёте ядро с точно таким же именем, что и установленное, новый пакет перезапишет старое. Если это не желаемо, используйте другой –append-to-version.

fakeroot

fakeroot позволяет создавать пакеты .deb без реального запуска процесса как root. Он симулирует владельцев root при упаковке. Простой способ использования:

fakeroot make-kpkg  

Сборка образа ядра

Перед сборкой выполните очистку:

bash:/usr/src/linux $ fakeroot make-kpkg clean

Затем соберите пакет, например с добавлением суффикса:

bash:/usr/src/linux $ fakeroot make-kpkg --append-to-version=.181004 kernel_image --initrd binary

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

Установка сгенерированного пакета

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

kernel-image-2.6.8.1.181004_10.00.Custom_i386.deb

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

bash:/usr/src$ sudo dpkg -i kernel-image-2.6.8.1.181004_10.00.Custom_i386.deb

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

Удержание пакета (hold)

Чтобы apt/apt-get не обновил или не заменил вашу самодельную сборку, поместите пакет в hold:

bash:~$ echo "kernel-image-2.6.8.1.181004 hold" | sudo dpkg --set-selections

Проверьте:

bash:~$ dpkg --get-selections | grep kernel-image

Если пакет в hold, apt не будет его обновлять.

Удаление символьной ссылки

По окончании работы рекомендуется удалить символьную ссылку /usr/src/linux, чтобы избежать перезаписи старых исходников при следующем распаковывании:

bash:~$ rm /usr/src/linux

Причины: предотвращение случайной компиляции не в том дереве и защита от перезаписи.

Резервное копирование ядра

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

Создание загрузочной дискеты/образа

Если вы ещё используете флоппи-дискеты для аварийной загрузки, создайте отдельный диск для нового ядра; не перезаписывайте старый.

bash:/usr/src# cd /boot
bash:/boot# mkboot /boot/vmlinuz-2.4.18.030320

Совет: в современных системах используйте загрузочный USB-образ или спасательный Live-USB вместо флоппи.

Пересборка ядра (повторная)

Если вам нужно добавить поддержку нового устройства или включить опцию, измените конфигурацию и пересоберите с новым –append-to-version:

bash:~$ cd /usr/src
bash:/usr/src$ ln -s linux-source-2.6.8.1 linux
bash:/usr/src$ cd linux
bash:/usr/src/linux$ make xconfig
bash:/usr/src/linux$ fakeroot make-kpkg clean
bash:/usr/src/linux$ fakeroot make-kpkg --append-to-version=.181004 kernel_image

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

При установке ваш .config копируется в /boot/config-x.y.z. Чтобы использовать эту конфигурацию в новом исходнике:

bash:/usr/src/linux$ cp /boot/config-2.4.18.030320 .config
bash:/usr/src/linux$ make oldconfig

make oldconfig задаст вопросы по новым опциям; обычно безопасно отвечать “no” (то есть оставить опции выключенными), а затем пройти make menuconfig для уточнений.

Контрольный список (полный)

  1. Сделать резервную загрузочную дискету/образ.
  2. Установить требуемые пакеты: build-essential fakeroot kernel-package.
  3. Добавить пользователя в группу src; выйти и войти.
  4. Удалить старую ссылку /usr/src/linux.
  5. Распаковать архив linux-source в /usr/src.
  6. Создать новую ссылку linux → linux-source-*.
  7. Настроить конфигурацию (xconfig/menuconfig) или использовать make oldconfig.
  8. Сохранить .config в безопасном месте.
  9. fakeroot make-kpkg clean
  10. fakeroot make-kpkg –append-to-version=<уникальный-суффикс> kernel_image –initrd binary
  11. Установить пакет dpkg -i <имя>.deb
  12. Перезагрузить и протестировать.
  13. Удержать пакет в dpkg (hold) при необходимости.
  14. Удалить /usr/src/linux и архивы при желании.
  15. Скопировать .deb в безопасное хранилище.

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

  • Система успешно загружается с новым ядром в течение двух свежих перезагрузок.
  • Все критические службы работают (network, storage, filesystem mounts, udev/udevd или systemd‑udevd).
  • Желаемые устройства обнаружены и функционируют (например, звук, сеть, видеодрайверы).
  • Модули установлены в /lib/modules/<версия> и соответствуют установленному ядру.

Частые ошибки и способы решения

  1. Система не загружается — зависание до “kernel panic” на mount root
  • Причина: драйвер корневой файловой системы или контроллера дисков собран как модуль.
  • Решение: сборка необходимых драйверов как встроенных (y). Настройте .config и пересоберите.
  1. make-kpkg падает с ошибками о правах или отсутствующих файлах
  • Причина: распаковка архива под root или неправильные права.
  • Решение: удалите распакованные файлы, распакуйте архив как обычный пользователь; убедитесь, что владелец — ваш пользователь и группа src.
  1. Модули не загружаются, несовпадение версий
  • Причина: установлен пакет с тем же именем и перезаписал каталоги модулей.
  • Решение: проверьте имя пакета и версию; используйте уникальный –append-to-version.
  1. apt пытается обновить ваше ядро
  • Решение: установите hold через dpkg –set-selections.
  1. Ошибки при запуске make xconfig (Qt)
  • Установите libqt3-dev или используйте make menuconfig (ncurses).

Когда этот метод не подходит (контрпримеры)

  • Вы используете нестандартную дистрибуцию с другим пакетом управления ядром.
  • Нужна быстрая установка одного модуля без пересборки ядра — проще собрать модуль отдельно.
  • Вы предпочитаете mainline prebuilt kernels от Ubuntu Kernel Team — тогда удобнее установить готовый пакет из PPA.

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

  • Использовать make deb-pkg из дерева исходников ядра (создаст .deb без kernel-package).
  • Установить mainline kernel из официальных репозиториев Ubuntu или PPA, если нужно просто обновление версии.
  • Собрать модуль отдельно через DKMS, если нужно только один драйвер.

Модель зрелости процесса сборки ядра (уровни)

  • Уровень 0 — эксперимент, одна сборка локально без резервов.
  • Уровень 1 — регулярно проверяемые сборки с сохранением .deb и резервного загрузчика.
  • Уровень 2 — автоматизированные сборки (CI), тестирование на виртуальных машинах, тестовые SLI/SLO.
  • Уровень 3 — деплой кастомных сборок на несколько продакшн-серверов, rollback-процедуры и мониторинг.

Мини‑методология (коротко)

  1. Подготовка окружения и зависимостей.
  2. Получение исходников и создание среды сборки.
  3. Настройка конфигурации на основе реального оборудования.
  4. Сборка пакета с уникальным суффиксом.
  5. Тестирование в контролируемой среде.
  6. Деплой и мониторинг.

Роль‑ориентированные чек‑листы

Для системного администратора:

  • Проверить наличие места на /boot и /usr/src.
  • Создать резервную копию старого ядра и настроек загрузчика.
  • Протестировать загрузку нового ядра в виртуальной машине перед продакшеном.

Для разработчика драйверов:

  • Включить отладочные опции и printk, включить модуль как built-in при необходимости.
  • Использовать консоль вывода (serial console) для диагностики.

Для десктоп‑пользователя:

  • Убедиться, что звук, графика и сеть работают в live‑сессии с новым ядром.
  • Не перезаписывать старый загрузочный образ.

Для тестировщика:

  • Подготовить тест-кейсы: загрузка, монтирование, suspend/resume, сеть, диск, нагрузочный тест.
  • Логировать ошибки и стек трейс при падениях.

SOP / Плейбук: от нуля до работающего ядра

  1. Установить пакеты:
bash:~$ sudo apt-get update
bash:~$ sudo apt-get install build-essential fakeroot kernel-package libncurses-dev
  1. Скачать исходники:
bash:~$ sudo apt-get install linux-source
  1. Распаковать и подготовить симлинк:
bash:/usr/src$ tar xjvf linux-source-.tar.bz2
bash:/usr/src$ ln -s linux-source- linux
  1. Настроить конфигурацию:
bash:/usr/src/linux$ make menuconfig
  1. Собрать пакет:
bash:/usr/src/linux $ fakeroot make-kpkg clean
bash:/usr/src/linux $ fakeroot make-kpkg --append-to-version=.mybuild kernel_image --initrd binary
  1. Установить пакет и перезагрузиться:
bash:/usr/src$ sudo dpkg -i kernel-image-*.deb
bash:~$ sudo reboot
  1. Если загрузка успешна — сохранить .deb и поставить пакет в hold.

Runbook на случай неудачной загрузки и отката

  1. При первой проблемной загрузке выбрать в GRUB предыдущую запись и загрузиться.
  2. Убрать проблемный пакет:
bash:~$ sudo dpkg -r <имя-пакета>
  1. Проверить конфигурацию и журнал (dmesg, /var/log/syslog) на предмет причины.
  2. Отредактировать .config, перекомпилировать с другим –append-to-version и протестировать в VM.

Тесты и критерии приёмки

  • Загрузка: система должна обойтися без “kernel panic” и успешно смонтировать /.
  • Сервисы: network manager, sshd, cron, systemd должны стартовать.
  • Производительность: базовые тесты I/O/CPU должны соответствовать ожидаемым.

Мерчантайзинг: как именовать свои сборки

Используйте читаемые и уникальные суффиксы: .YYYYMMDD, .username1, .test1. Избегайте специальных символов кроме “+” и “.”.

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

  • Не оставляйте тестовые опции отладки включёнными в продакшн сборках (CONFIG_DEBUG_KERNEL и т. п.).
  • Избегайте сборки ненадёжных патчей на продакшен‑хостах.
  • Подписывайте пакеты в частной инфраструктуре при необходимости.

Совместимость и миграция

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

Меры по снижению риска

  • Всегда держите возможность загрузки по сети или с флешки.
  • Тестируйте на clone‑серверах и в VMs.
  • Автоматизируйте сборку и тестирование в CI перед деплоем.

Примеры ошибок и быстрые решения

  • “Module version mismatch” — удалите старые модули из /lib/modules/<старый> и перестройте initramfs.
  • “Unresolved symbol” при загрузке модуля — проверьте зависимости модулей и порядок загрузки.

Мермайд: простое дерево решений при выборе метода сборки

graph TD
  A[Нужно ядро?] --> B{Есть опыт сборки?}
  B -- Да --> C{Требуется кастомизация драйверов?}
  B -- Нет --> H[Использовать prebuilt kernel или PPA]
  C -- Да --> D[Скачать linux-source и собрать через make-kpkg]
  C -- Нет --> E[Установить готовый kernel из репозитория]
  D --> F[Тест в VM -> Принять/Откат]
  E --> F
  H --> F
  F --> G[Деплой на хосты]

1‑строчный глоссарий

  • linux-source — пакет с исходниками ядра для Ubuntu.
  • make-kpkg — утилита для сборки Debian-пакетов ядра.
  • fakeroot — инструмент имитации прав root для сборки пакетов.
  • .config — файл конфигурации ядра.
  • initrd/initramfs — образ ранней инициализации, используемый для монтирования корня.

Заключение

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

Вопросы, которые стоит задать перед началом: нужно ли действительно кастомное ядро или хватит модульной сборки? Можно ли протестировать новую сборку в VM? Есть ли у меня план отката?

Важно

Всегда сохраняйте исходные .deb, конфигурации и старые образы загрузки. Это даст вам быстрый путь отката и восстановление системы в случае непредвиденных проблем.

Ресурсы и дальнейшее чтение

  • Рекомендуется читать документацию kernel-package в /usr/share/doc/kernel-package/README.gz и man make-kpkg.
Поделиться: 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 быстро