Info
Content

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
Back to top