Трендовые github проекты в нашем телеграм канале. Подпишись → Сборка ядра Linux под своё железо: localmodconfig, modprobed-db и menuconfig
Сборка собственного ядра Linux — не обязательный ритуал для каждого сервера, но полезная инженерная практика. Она помогает понять, какие драйверы реально используются, где живёт kernel config, почему обновление ядра может сломать загрузку и как безопасно экспериментировать с низким уровнем системы.
Главная идея кастомной сборки — не «сделать быстрее любой ценой», а убрать лишнее, оставить нужное и сохранить контролируемый путь отката. Для homelab это особенно полезно: железо известно заранее, набор устройств стабильный, а значит конфигурацию можно сузить без потери функциональности.
Зачем вообще собирать своё ядро
Практические причины бывают разные:
- уменьшить количество ненужных модулей;
- включить или отключить конкретную опцию;
- проверить новый патч;
- собрать ядро под старое или нестандартное железо;
- лучше понять boot process;
- снизить attack surface за счёт отключения лишних подсистем.
Не стоит ожидать магического ускорения. На обычном desktop или VPS разница часто будет незаметна. Но для embedded, homelab appliances, лабораторных стендов и security experiments кастомное ядро даёт больше контроля.
localmodconfig
make localmodconfig берёт текущий список загруженных модулей и формирует конфигурацию, где сохраняется только то, что уже используется. Это удобно, но есть ловушка: если устройство или файловая система не были активны в момент сбора списка, нужный модуль может исчезнуть из config.
Перед запуском стоит подключить всё важное:
- диски и сетевые интерфейсы;
- Wi‑Fi/Bluetooth, если нужны;
- USB-устройства;
- VPN/туннели;
- файловые системы;
- sensors и мониторинг;
- контейнерные подсистемы.
Иначе после перезагрузки можно обнаружить, что не работает сеть, не монтируется раздел или не стартуют контейнеры.
modprobed-db
modprobed-db помогает накопить список реально используемых модулей за время. Вместо одного моментального снимка он ведёт базу модулей, которые загружались в разные сценарии. Это снижает риск выкинуть что-то нужное.
Подход такой:
- установить инструмент;
- несколько дней пользоваться системой как обычно;
- подключить периферию и запустить типовые сервисы;
- сохранить список модулей;
- использовать его при подготовке конфигурации.
Для рабочей станции это особенно полезно: сегодня подключён один USB-адаптер, завтра другой, а через неделю понадобится редко используемый модуль.
menuconfig
make menuconfig — интерактивный способ проверить и поправить kernel config. После автоматического сужения конфигурации стоит пройтись по ключевым разделам вручную:
- processor type and features;
- filesystems;
- networking support;
- device drivers;
- virtualization;
- security options;
- container-related features;
- tracing/debugging.
Для сервера с Docker или Kubernetes важно не отключить cgroups, namespaces, overlayfs, netfilter и другие подсистемы, которые не всегда выглядят очевидно в меню.
Безопасная установка
Самое важное правило: не удалять рабочее ядро. Новое ядро нужно добавить рядом, обновить bootloader и оставить предыдущий вариант в GRUB. Тогда при неудачной сборке можно загрузиться назад.
Полезный чеклист:
- сохранить текущий
.config; - записать версию рабочего ядра;
- проверить наличие initramfs;
- обновить GRUB;
- оставить старый пункт загрузки;
- иметь доступ к консоли или rescue mode;
- не экспериментировать на единственной production-машине без бэкапа.
Отладка после загрузки
После успешной загрузки стоит проверить:
uname -a
lsmod
journalctl -b -p warning
systemctl --failed
ip a
mount
Если не стартует сервис, проблема может быть не в приложении, а в отсутствующей kernel option. Для контейнеров полезно проверить storage driver, iptables/nftables, cgroups и overlayfs.
Итог
Кастомная сборка ядра Linux — хороший способ глубже понять систему и убрать лишнее под конкретное железо. Но автоматические инструменты вроде localmodconfig нужно использовать осторожно: они видят только то, что реально было загружено.
Оптимальный путь — накопить список модулей через modprobed-db, проверить config через menuconfig, оставить старое ядро для отката и только потом экспериментировать. Такой подход превращает сборку ядра из рискованного шаманства в контролируемую инженерную процедуру.