Обновление ядра в Ubuntu

Иногда появляется необходимость в установке непредусмотренной создателями версии ядра в Ubuntu. Например, поставить ядро версии 5.10 на Ubuntu 22.04 (по умолчанию там 5.15), т.е. сделать даунгрейд/апгрейд.

Это не сложно, но нужно учитывать что не каждое ядро у вас может заработать.

Качаем скрипт и делаем его исполняемым:

wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh
chmod +x ubuntu-mainline-kernel.sh

Ищем нужную нам версию ядра:

./ubuntu-mainline-kernel.sh -r | grep 5.10

Устанавливаем:

./ubuntu-mainline-kernel.sh -i v5.10.0

Проверяем что ядро появилось в списке доступных:

grep 'menuentry \|submenu ' /boot/grub/grub.cfg | cut -f2 -d "'"

Вносим изменения в /etc/default/grub, строку «GRUB_DEFAULT=0» приводим к виду:

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.10.0-051000-generic"

Обновляем:

update-grub

Перезагружаем сервер:

reboot now

Проверяем:

uname -r

Работа через proxy

Особенность в том, что gpg не умеет самостоятельно подхватывать системные настройки proxy, нужно указать руками

Для этого нужно строки

        if [ $check_signature -eq 1 ]; then
            if ! gpg --list-keys ${ppa_key} >$debug_target 2>&1; then
                logn "Importing kernel-ppa gpg key "

                if gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv ${ppa_key} >$debug_target 2>&1; then
                    log "ok"
                else
                    logn "failed"
                    warn "Unable to check signature"
                    check_signature=0
                fi
            fi

            if [ $check_signature -eq 1 ]; then
                if gpg --verify CHECKSUMS.gpg CHECKSUMS >$debug_target 2>&1; then
                    log "Signature of checksum file has been successfully verified"
                else
                    err "Abort, signature of checksum file is NOT OK"
                    exit 4
                fi
            fi
        fi

заменить примерно так:

        if [ $check_signature -eq 1 ]; then
            echo "PPA Key: ${ppa_key}"
            if ! gpg --keyserver-options http-proxy=http://127.0.0.1:3128 --list-keys ${ppa_key} >$debug_target 2>&1; then
                logn "Importing kernel-ppa gpg key "

                if gpg --keyserver-options http-proxy=http://127.0.0.1:3128 --keyserver hkp://keyserver.ubuntu.com:80 --recv ${ppa_key} >$debug_target 2>&1; then
                    log "ok"
                else
                    logn "failed"
                    warn "Unable to check signature"
                    check_signature=0
                fi
            fi

            if [ $check_signature -eq 1 ]; then
                if gpg --keyserver-options http-proxy=http://127.0.0.1:3128 --verify CHECKSUMS.gpg CHECKSUMS >$debug_target 2>&1; then
                    log "Signature of checksum file has been successfully verified"
                else
                    err "Abort, signature of checksum file is NOT OK"
                    exit 4
                fi
            fi
        fi

Вместо http://127.0.0.1:3128 нужно прописать адрес вашего прокси-сервера.