Как собрать ядро по‑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).
Ниже — полное пошаговое описание.
Подготовка окружения
- Установите необходимые пакеты:
bash:~$ sudo apt-get install build-essential fakeroot kernel-package- Поставьте себя в группу 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 oldconfigmake oldconfig задаст вопросы по новым опциям; обычно безопасно отвечать “no” (то есть оставить опции выключенными), а затем пройти make menuconfig для уточнений.
Контрольный список (полный)
- Сделать резервную загрузочную дискету/образ.
- Установить требуемые пакеты: build-essential fakeroot kernel-package.
- Добавить пользователя в группу src; выйти и войти.
- Удалить старую ссылку /usr/src/linux.
- Распаковать архив linux-source в /usr/src.
- Создать новую ссылку linux → linux-source-*.
- Настроить конфигурацию (xconfig/menuconfig) или использовать make oldconfig.
- Сохранить .config в безопасном месте.
- fakeroot make-kpkg clean
- fakeroot make-kpkg –append-to-version=<уникальный-суффикс> kernel_image –initrd binary
- Установить пакет dpkg -i <имя>.deb
- Перезагрузить и протестировать.
- Удержать пакет в dpkg (hold) при необходимости.
- Удалить /usr/src/linux и архивы при желании.
- Скопировать .deb в безопасное хранилище.
Критерии приёмки
- Система успешно загружается с новым ядром в течение двух свежих перезагрузок.
- Все критические службы работают (network, storage, filesystem mounts, udev/udevd или systemd‑udevd).
- Желаемые устройства обнаружены и функционируют (например, звук, сеть, видеодрайверы).
- Модули установлены в /lib/modules/<версия> и соответствуют установленному ядру.
Частые ошибки и способы решения
- Система не загружается — зависание до “kernel panic” на mount root
- Причина: драйвер корневой файловой системы или контроллера дисков собран как модуль.
- Решение: сборка необходимых драйверов как встроенных (y). Настройте .config и пересоберите.
- make-kpkg падает с ошибками о правах или отсутствующих файлах
- Причина: распаковка архива под root или неправильные права.
- Решение: удалите распакованные файлы, распакуйте архив как обычный пользователь; убедитесь, что владелец — ваш пользователь и группа src.
- Модули не загружаются, несовпадение версий
- Причина: установлен пакет с тем же именем и перезаписал каталоги модулей.
- Решение: проверьте имя пакета и версию; используйте уникальный –append-to-version.
- apt пытается обновить ваше ядро
- Решение: установите hold через dpkg –set-selections.
- Ошибки при запуске 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-процедуры и мониторинг.
Мини‑методология (коротко)
- Подготовка окружения и зависимостей.
- Получение исходников и создание среды сборки.
- Настройка конфигурации на основе реального оборудования.
- Сборка пакета с уникальным суффиксом.
- Тестирование в контролируемой среде.
- Деплой и мониторинг.
Роль‑ориентированные чек‑листы
Для системного администратора:
- Проверить наличие места на /boot и /usr/src.
- Создать резервную копию старого ядра и настроек загрузчика.
- Протестировать загрузку нового ядра в виртуальной машине перед продакшеном.
Для разработчика драйверов:
- Включить отладочные опции и printk, включить модуль как built-in при необходимости.
- Использовать консоль вывода (serial console) для диагностики.
Для десктоп‑пользователя:
- Убедиться, что звук, графика и сеть работают в live‑сессии с новым ядром.
- Не перезаписывать старый загрузочный образ.
Для тестировщика:
- Подготовить тест-кейсы: загрузка, монтирование, suspend/resume, сеть, диск, нагрузочный тест.
- Логировать ошибки и стек трейс при падениях.
SOP / Плейбук: от нуля до работающего ядра
- Установить пакеты:
bash:~$ sudo apt-get update
bash:~$ sudo apt-get install build-essential fakeroot kernel-package libncurses-dev- Скачать исходники:
bash:~$ sudo apt-get install linux-source- Распаковать и подготовить симлинк:
bash:/usr/src$ tar xjvf linux-source-.tar.bz2
bash:/usr/src$ ln -s linux-source- linux - Настроить конфигурацию:
bash:/usr/src/linux$ make menuconfig- Собрать пакет:
bash:/usr/src/linux $ fakeroot make-kpkg clean
bash:/usr/src/linux $ fakeroot make-kpkg --append-to-version=.mybuild kernel_image --initrd binary- Установить пакет и перезагрузиться:
bash:/usr/src$ sudo dpkg -i kernel-image-*.deb
bash:~$ sudo reboot- Если загрузка успешна — сохранить .deb и поставить пакет в hold.
Runbook на случай неудачной загрузки и отката
- При первой проблемной загрузке выбрать в GRUB предыдущую запись и загрузиться.
- Убрать проблемный пакет:
bash:~$ sudo dpkg -r <имя-пакета>- Проверить конфигурацию и журнал (dmesg, /var/log/syslog) на предмет причины.
- Отредактировать .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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента