Table of Contents

Скачиваем отсюда: https://kernel.ubuntu.com/~kernel-ppa/mainline/?C=M;O=D
Например, я скачал версию 5.18.4. Устанавливаем ее:

VER=5.18.4
sudo dpkg -i `find ~/Downloads -name "linux*$VER*.deb"`

Ищем старые версии пакетов:

dpkg -l | grep linux-

Например, там обнаруживаются 5.17.7. Чистим их:

VER=5.17.7
dpkg -l | grep -e linux-.*$VER | awk '{print $2}' | sudo DEBIAN_FRONTEND=noninteractive xargs apt-get purge -y

И имеет смысл обновить все доступные firmwares:

cd ~/Documents && git clone --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git
sudo cp ~/Documents/linux-firmware/amdgpu/* /lib/firmware/amdgpu && sudo update-initramfs -k all -u

Иначе - могут быть всякие непонятные ошибки при работе и при сборке initramfs:

W: Possible missing firmware /lib/firmware/amdgpu/...

Проблемы при установке новых ядер

Иногда скрипты в пакетах новых ядер несовместимы с текущей версией dpkg/apt, что вызывает ошибки типа:

dpkg: error while cleaning up:
 new linux-image-unsigned-6.19.14-061914-generic package post-removal script subprocess returned error exit status 1

Тогда можно просто удалить эти пакеты так:

VER=6.19.14
dpkg -l | grep -e linux-.*$VER | awk '{print $2}' | sudo DEBIAN_FRONTEND=noninteractive xargs dpkg --purge --force-remove-reinstreq

Сборка ядра из исходников

Будем собирать в контейнере. На хосте выполняю:

VER=v7.1
git clone --depth 1 --branch ${VER} https://github.com/torvalds/linux.git
cp /boot/config-$(uname -r) ./linux/.config
docker run -it --rm -v `pwd`:/build ubuntu:24.04 /bin/bash

Если исходники уже есть:

git fetch --tags
git checkout tags/${VER} -b build-branch
  
apt update && \
DEBIAN_FRONTEND=noninteractive apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev git bc rsync kmod python3 libdw-dev debhelper-compat gawk zstd

cd /build/linux
# make oldconfig
make olddefconfig

Если надо, то можно включить только те модули, которые используем. Эта команда сканирует вывод lsmod и выключает все ненужное (но может выключить поддержку динамически загружаемых модулей типа ppp):

make localmodconfig
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
scripts/config --set-str SYSTEM_REVOCATION_KEYS ""
./scripts/config --enable X86_NATIVE_CPU

make -j$(nproc) bindeb-pkg LOCALVERSION=-custom

После сборки выходим из контейнера и ставим собранные пакетики ядра:

exit
sudo dpkg -i ../linux-image-*.deb ../linux-headers-*.deb