1. Обновить ядро в базовой системе
Воспользовался статьей - https://docs.rockylinux.org/ru/guides/custom-linux-kernel/
Дано - дефолтный Debian 10
root@otus-kernel-upgrade:~# uname -a
Linux otus-kernel-upgrade 4.19.0-22-amd64 #1 SMP Debian 4.19.260-1 (2022-09-29) x86_64 GNU/Linux
Желаемый результат - ядро 6.5.2
Качаем, распаковываем, подкладываем конфиг:
root@otus-kernel-upgrade:~# wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.2.tar.xz
root@otus-kernel-upgrade:~# tar -xf linux-6.5.2.tar.xz
root@otus-kernel-upgrade:~# cd linux-6.5.2
root@otus-kernel-upgrade:~/linux-6.5.2# cp -v /boot/config-$(uname -r) .config
'/boot/config-4.19.0-22-amd64' -> '.config'
Из конфига убрал строки:
CONFIG_SYSTEM_TRUSTED_KEYRING
CONFIG_SYSTEM_TRUSTED_KEYS
Запускаем сборку (8 ядер на тачке сборщике):
root@otus-kernel-upgrade:~/linux-6.5.2# make -j 8
Получилось ядро:
root@otus-kernel-upgrade:~/linux-6.5.2# ls -lh arch/x86/boot/bzImage
-rw-r--r-- 1 root root 7.0M Sep 7 16:36 arch/x86/boot/bzImage
root@otus-kernel-upgrade:~/linux-6.5.2# file arch/x86/boot/bzImage
arch/x86/boot/bzImage: Linux kernel x86 boot executable bzImage, version 6.5.2 (root@otus-kernel-upgrade) #1 SMP PREEMPT_DYNAMIC Thu Sep 7 16:35:36 UTC 2023, RO-rootFS, swap_dev 0x6, Normal VGA
Установка модулей в текущую систему
В /lib/modules/6.5.2/
положатся всякие *.ko
- (kernel object) подключаемые модули
Которые сбилдились на предыдущем шаге вместе с ядром:
root@otus-kernel-upgrade:~/linux-6.5.2# make modules_install
...
Копируем ядро в boot
:
root@otus-kernel-upgrade:~/linux-6.5.2# cp arch/x86/boot/bzImage /boot/vmlinuz-6.5.2
Копируем таблицу адресов функций (она генерится при сборке, и при разных условиях сборки будет разная таблица):
root@otus-kernel-upgrade:~/linux-6.5.2# cp System.map /boot/System.map-6.5.2
Закопировал обратно конфиг (на всякий случай, не уверен что это надо):
root@otus-kernel-upgrade:~/linux-6.5.2# cp .config /boot/config-6.5.2
Сгенерил initrd.img
:
root@otus-kernel-upgrade:~/linux-6.5.2# mkinitramfs -o /boot/initrd.img-6.5.2 6.5.2
Далее финальный шаг
Используем bash-скрипт /usr/bin/kernel-install
:
root@otus-kernel-upgrade:~/linux-6.5.2# kernel-install add 6.5.2 /boot/vmlinuz-6.5.2
Задача его в том чтобы положить файлики ядра и образа памяти в "куда-надо":
Вот тут видно в чем суть:
root@otus-kernel-upgrade:/boot# tree -I grub
.
├── 23000007c6dc8f78700314355ac81cc3 # вот сюда положились копии initrd.img-6.5.2 и vmlinuz-6.5.2
│ └── 6.5.2
│ ├── initrd
│ └── linux
├── config-4.19.0-18-amd64
├── config-4.19.0-22-amd64
├── config-4.19.0-25-amd64
├── config-6.5.2
├── initrd.img-4.19.0-18-amd64
├── initrd.img-4.19.0-22-amd64
├── initrd.img-4.19.0-25-amd64
├── initrd.img-6.5.2
├── loader
│ └── entries
│ └── 23000007c6dc8f78700314355ac81cc3-6.5.2.conf
├── System.map-4.19.0-18-amd64
├── System.map-4.19.0-22-amd64
├── System.map-4.19.0-25-amd64
├── System.map-6.5.2
├── vmlinuz-4.19.0-18-amd64
├── vmlinuz-4.19.0-22-amd64
├── vmlinuz-4.19.0-25-amd64
└── vmlinuz-6.5.2
4 directories, 19 files
root@otus-kernel-upgrade:/boot# cat loader/entries/23000007c6dc8f78700314355ac81cc3-6.5.2.conf
title Debian GNU/Linux 10 (buster)
version 6.5.2
machine-id 23000007c6dc8f78700314355ac81cc3
options BOOT_IMAGE=/boot/vmlinuz-4.19.0-22-amd64 root=UUID=62f844ed-9ecd-490e-a206-4be11ba0e607 ro net.ifnames=0 net.ifnames=0 biosdevname=0 console=ttyS0
linux /23000007c6dc8f78700314355ac81cc3/6.5.2/linux # вот тут они тоже
initrd /23000007c6dc8f78700314355ac81cc3/6.5.2/initrd
Вот так можно убедиться что это просто перекладывание:
root@otus-kernel-upgrade:/boot# md5sum 23000007c6dc8f78700314355ac81cc3/6.5.2/linux
8e5d025fad72c6949eda58f45b7518cb 23000007c6dc8f78700314355ac81cc3/6.5.2/linux
root@otus-kernel-upgrade:/boot# md5sum vmlinuz-6.5.2
8e5d025fad72c6949eda58f45b7518cb vmlinuz-6.5.2
Апдейтим grub
:
root@otus-kernel-upgrade:~/linux-6.5.2# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.5.2
Found initrd image: /boot/initrd.img-6.5.2
Found linux image: /boot/vmlinuz-4.19.0-25-amd64
Found initrd image: /boot/initrd.img-4.19.0-25-amd64
Found linux image: /boot/vmlinuz-4.19.0-22-amd64
Found initrd image: /boot/initrd.img-4.19.0-22-amd64
Found linux image: /boot/vmlinuz-4.19.0-18-amd64
Found initrd image: /boot/initrd.img-4.19.0-18-amd64
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done
Проверяем:
root@otus-kernel-upgrade:~/linux-6.5.2# cat /boot/loader/entries/23000007c6dc8f78700314355ac81cc3-6.5.2.conf
title Debian GNU/Linux 10 (buster)
version 6.5.2
machine-id 23000007c6dc8f78700314355ac81cc3
options BOOT_IMAGE=/boot/vmlinuz-4.19.0-22-amd64 root=UUID=62f844ed-9ecd-490e-a206-4be11ba0e607 ro net.ifnames=0 net.ifnames=0 biosdevname=0 console=ttyS0
linux /23000007c6dc8f78700314355ac81cc3/6.5.2/linux
initrd /23000007c6dc8f78700314355ac81cc3/6.5.2/initrd
Далее ребут машины
И проверяем результат:
root@otus-kernel-upgrade:~# uname -a
Linux otus-kernel-upgrade 6.5.2 #1 SMP PREEMPT_DYNAMIC Thu Sep 7 16:35:36 UTC 2023 x86_64 GNU/Linux
Success!!!
No Comments