Kernel/build unpackaged
Самостоятельная сборка ядра обычными средствами сборки, без создания RPM пакетов, на примере std-def
Для скачивания и компиляции ядра в полной конфигурации из исходного кода вам понадобится примерно 20 гигабайт, а для инсталляции ещё около 5 гигабайт дискового пространства. Собранное таким образом ядро не будет на 100% идентично ядру в пакете дистрибутива, так как будет различаться сборочная среда — то какими утилитами и компилятором собиралось ваше ядро.
Настраиваем сборочную среду
Под root ставим необходимые пакеты для сборки ядра (в Сизифе):
# apt-get update # apt-get install -y rpm-build git bc dwarves flex libelf-devel zlib-devel openssl openssl-devel
Получаем исходный код
Получите исходный код как описано в статье "Получение исходного кода ядер Альт с помощью Git" и не забудьте проверить его целостность.
Конфигурация ядра
Конечно можно взять готовый конфиг из /boot/config-*
или /proc/config.gz
, но вероятно, он не точно соответствует версии ядра, которую вы собираете — поэтому воспроизведем генерацию конфига как она происходит при сборке пакета.
Конфиг собирается из частей находящихся в файлах config*
, где к основному конфигу config
добавляются конфиги соответствующих архитектуре (config-архитектура
, в примере мы будем использовать переменную bash $HOSTTYPE
для её определения) и флейвору (например для std-def добавляется config-std
, а для un-def не добавляется).
$ make mrproper $ scripts/kconfig/merge_config.sh -m config config-$HOSTTYPE config-std $ make olddefconfig
Компиляция ядра
$ make -j$(nproc) bzImage $ make -j$(nproc) modules
Инсталляция ядра в систему
Снова под root, зайдите в каталог с ядром:
# make -j$(nproc) modules_install # make install
Шаг make modules_install
поместит модули ядра в каталог /lib/modules/KERNELRELEASE
, где KERNELRELEASE
— строка с версией ядра (её можно посмотреть запустив под пользователем make kernelrelease
, например, это может быть 5.15.77+
.)
Шаг make install
поместит файлы config, System.map, vmlinuz
в каталог /boot
, там же будет сгенерирован initrd
. При этом, все файлы будут иметь суффикс -KERNELRELEASE
и будут поставлены симлинки initrd и vmlinuz на новое ядро — таким образом, загрузка ядра по умолчанию (из первого пункта загрузчика) будет в это ядро.