Как скомпилировать ядро Ubuntu Linux из архива linux-5.4.288.tar.xz на Ubuntu 24.10

Вопрос или проблема

Я пытаюсь скомпилировать vmlinuz-5.4.288, чтобы установить его в каталог /boot и сделать доступным как один из дополнительных вариантов загрузки, чтобы я мог установить некоторые графические драйверы, которые недоступны с более новыми версиями ядра.

Я пытаюсь следовать ответу, данному в:
Скачайте и извлеките исходный код ядра, которое вы хотите собрать

Я скачал архив linux-5.4.288.tar.xz и затем извлек его в специальный каталог, используя:

xz -cd linux-5.4.288.tar.xz | tar xvf -

Я могу извлечь архив, сначала создав каталог в той же папке:

mkdir linux-5.4.288

После перехода в каталог linux-5.4.288, когда я пытаюсь

sudo apt-get install libqt4-dev pkg-config

Но затем я сталкиваюсь с ошибкой компиляции:

E: Unable to locate package libqt4-dev

Я следую статье “E: Unable to locate package libqt4-dev” при попытке установить torch (Ubuntu 22.04), в которой ответ рекомендует мне сделать, и я пытаюсь:

$sudo add-apt-repository ppa:ubuntuhandbook1/ppa

Это приводит к следующим ошибкам:

stephen@stephen-All-Series:~$ sudo add-apt-repository ppa:ubuntuhandbook1/ppa
[sudo] пароль для stephen: 
Репозиторий: 'Типы: deb
URI: https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu/
Suites: oracular
Компоненты: main
'
Описание:
Пакеты Qt4-x11, которые больше не поддерживаются официально! Используйте на свой страх и риск!
Больше информации: https://launchpad.net/~ubuntuhandbook1/+archive/ubuntu/ppa
Добавление репозитория.
Нажмите [ENTER] для продолжения или Ctrl-c для отмены.
Найдена существующая запись deb в /etc/apt/sources.list.d/ubuntuhandbook1-ubuntu-ppa-oracular.sources
Сбой:1 http://security.ubuntu.com/ubuntu oracular-security InRelease
Сбой:2 http://archive.ubuntu.com/ubuntu oracular InRelease                                    
Сбой:3 http://archive.ubuntu.com/ubuntu oracular-updates InRelease
Сбой:4 http://archive.ubuntu.com/ubuntu oracular-backports InRelease
Сбой:5 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu oracular InRelease
Игнор:6 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular InRelease
Ошибка:7 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release
  404  Не найдено [IP: 185.125.190.80 443]
Чтение списков пакетов... Готово
E: Репозиторий 'https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release' не содержит файл Release.
N: Обновление из такого репозитория невозможно, и отключено по умолчанию.
N: См. apt-secure(8) manpage для создания репозитория и пользовательских деталей конфигурации.
stephen@stephen-All-Series:~$ 

Я игнорирую эти сообщения об ошибках, следуя статье, и затем пытаюсь:

$sudo apt-get update

Это приводит к следующему:

stephen@stephen-All-Series:~$ sudo apt-get update
Сбой:1 http://archive.ubuntu.com/ubuntu oracular InRelease
Сбой:2 http://security.ubuntu.com/ubuntu oracular-security InRelease              
Сбой:3 http://archive.ubuntu.com/ubuntu oracular-updates InRelease                
Сбой:4 http://archive.ubuntu.com/ubuntu oracular-backports InRelease              
Сбой:5 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu oracular InRelease
Игнор:6 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular InRelease
Ошибка:7 https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release
  404  Не найдено [IP: 185.125.190.80 443]
Чтение списков пакетов... Готово
E: Репозиторий 'https://ppa.launchpadcontent.net/ubuntuhandbook1/ppa/ubuntu oracular Release' не содержит файл Release.
N: Обновление из такого репозитория невозможно, и отключено по умолчанию.
N: См. apt-secure(8) manpage для создания репозитория и пользовательских деталей конфигурации.
stephen@stephen-All-Series:~$ 

Статья Что я могу сделать, если репозиторий/PPA не содержит файл Release? кажется релевантной, но я не понимаю, как применить её в этом случае.

и затем я пытаюсь:

$sudo apt-get install qt4-dev-tools libqt4-dev libqtcore4 libqtgui4

Однако это приводит к некоторым сообщениям об ошибках:

 stephen@stephen-All-Series:~$ sudo apt-get install qt4-dev-tools libqt4-dev libqtcore4 libqtgui4
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Пакет libqtcore4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника
Тем не менее, следующие пакеты заменяют его:
  qtchooser:i386 qtchooser

Пакет libqtgui4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника

E: Невозможно найти пакет qt4-dev-tools
E: Невозможно найти пакет libqt4-dev
E: Пакет 'libqtcore4' не имеет кандидатов для установки
E: Пакет 'libqtgui4' не имеет кандидатов для установки
stephen@stephen-All-Series:~$ 

Я продолжаю, игнорируя предыдущие сообщения об ошибках:

stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make oldconfig

Я выбираю все стандартные параметры, нажимая tab возврата снова и снова, пока не перейду в командную строку. Затем я запускаю:

stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make

Компилятор продолжает с объектными .o файлами, но застревает на следующих ошибках:

        certs/system_keyring.o
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'.  Стоп.
make: *** [Makefile:1750: certs] Ошибка 2

Я ищу это сообщение об ошибке и нахожу соответствующую статью:

Компиляция ядра 5.11.11 и более поздних версий

Предлагается, что я запущу следующее:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288/scripts# ./config --disable SYSTEM_TRUSTED_KEYS
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288/scripts# ./config --disable SYSTEM_REVOCATION_KEYS

Эти шаги выполняются без ошибок. Поэтому я возвращаюсь к make, выдавая команду:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make

Я получаю те же сообщения об ошибках, поэтому я редактирую файл .config непосредственно в каталоге scripts, снова следуя Компиляция ядра 5.11.11 и более поздних версий, чтобы содержимое файла .config было следующим:

CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""

Я все еще застреваю на ошибках при make в каталоге linux-5.4.288:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  DESCEND  objtool
  CHK     include/generated/compile.h
  CHK     kernel/kheaders_data.tar.xz
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'.  Стоп.
make: *** [Makefile:1750: certs] Ошибка 2

Кроме того, если я продолжу и запущу следующие шаги, у меня останутся только ошибки.

Как я могу скомпилировать linux-5.4 ядро под операционной системой Ubuntu 24.10?

Я все еще застрял на следующих ошибках, и я не знаю, как продолжить:

stephen@stephen-All-Series:~/Documents/Kernel/Version5b/linux-5.4.288$ sudo make
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  DESCEND  objtool
  CHK     include/generated/compile.h
  CHK     kernel/kheaders_data.tar.xz
make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'.  Стоп.
make: *** [Makefile:1750: certs] Ошибка 2
stephen@stephen-All-Series:~/Documents/Kernel/Version5b/linux-5.4.288$ sudo apt-get install qt4-dev-tools libqt4-dev libqtcore4 libqtgui4
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Пакет libqtcore4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника
Тем не менее, следующие пакеты заменяют его:
  qtchooser:i386 qtchooser

Пакет libqtgui4 недоступен, но упоминается в другом пакете.
Это может означать, что пакет отсутствует, устарел или
доступен только из другого источника

E: Невозможно найти пакет qt4-dev-tools
E: Невозможно найти пакет libqt4-dev
E: Пакет 'libqtcore4' не имеет кандидатов для установки
E: Пакет 'libqtgui4' не имеет кандидатов для установки
stephen@stephen-All-Series:~/Documents/Kernel/Version5b/linux-5.4.288$ 

Обновление 8 января 2025 года:

Мне повезло найти эту ссылку Компиляция ядра вызывает ошибку “Нет правила для сборки цели ‘debian/certs/debian-uefi-certs.pem'”. Один из способов посмотреть на сообщение об ошибке

make[1]: *** Нет правила для сборки цели 'debian/canonical-certs.pem', необходимого для 'certs/x509_certificate_list'.  Стоп.

был в том, что что-то было неправильно настроено. Мне было трудно найти, где может быть один из конфигурационных файлов. Наконец, у меня появилась идея попробовать проверить файл “.config”, который показывает:

#
# Сертификаты для проверки подписей
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_SYSTEM_TRUSTED_KEYRING=y
#SE CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_EXTRA_CERTIFICATE=y
CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096
CONFIG_SECONDARY_TRUSTED_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_KEYRING=y
CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""
CONFIG_SYSTEM_REVOCATION_LIST=y
# конец Сертификатов для проверки подписей

Я был настолько уставшим от ошибки компилятора, что, как и выше, я закомментировал эту строку:

#SE CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" 

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

~stephen/Documents/Kernel/Version5b

и файл “.config” находился в каталоге, куда архив был распакован в папку linux-5.4.288 (после резервного копирования .config с cp в SEconfig):

root@stephen-All-Series:~# ls ~stephen/Documents/Kernel/Version5b/linux-5.4.288/.config
/home/stephen/Documents/Kernel/Version5b/linux-5.4.288/.config

Я выполнил команду make:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make -f ./Makefile all

В настоящее время все еще компилируется без ошибок. Надеюсь установить графический драйвер NVIDIA, который можно установить только на ядро 5 при загрузке в дополнительные опции. Но сначала нужно завершить компиляцию, и пока я до этого не дошел, компиляция, слава Богу, еще продолжается.

Просто подчеркну, я не рекомендую этот подход для каких-либо возможных конфиденциальных настроек безопасности. Скорее, я пытаюсь достичь тестовой платформы, где я смогу более эффективно решить или подать отчеты об ошибках драйверов графических карт 24.10 NVIDIA, чтобы получить полную поддержку не только на DVI, но и HDMI и DP порты, которые еще не работают с драйвером Canonical (так как для старых карт драйвер NVIDIA даже не устанавливается с более новыми Ubuntu 24.10), чтобы попытаться разгадать эту загадку для многих графических карт NVIDIA, которые сейчас не имеют полной поддержки.

Обновление: 9 июля 2025 года

Компиляция ядра шла всю ночь, пока не возникла следующая ошибка:

  MODINFO modules.builtin.modinfo
BTF: .tmp_vmlinux.btf: pahole (pahole) недоступен
Не удалось создать BTF для vmlinux
Попробуйте отключить CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1116: vmlinux] Ошибка 1
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# 

Я запустил:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# nano ./.config

И установил:

#SE CONFIG_DEBUG_INFO_BTF=y установить как n вместо этого
CONFIG_DEBUG_INFO_BTF=n

И я сохранил изменения, и выполнил команду:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make -f ./Makefile

Компиляция продолжилась, и я все еще жду результата компиляции.

Эта компиляция завершилась успешно, но затем я не мог найти файл ядра. Поэтому я нашел следующие статьи Linux kernel release 6.x http://kernel.org/ и Как быстро собрать усеченное Linux ядро. Я запустил:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make install

Это дало:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# make install
sh ./arch/x86/boot/install.sh 5.4.288 arch/x86/boot/bzImage \
        System.map "/boot"
run-parts: выполняется /etc/kernel/postinst.d/dkms 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/initramfs-tools 5.4.288 /boot/vmlinuz-5.4.288
update-initramfs: Создание /boot/initrd.img-5.4.288
W: сжатие zstd (CONFIG_RD_ZSTD) не поддерживается ядром, используется gzip

run-parts: выполняется /etc/kernel/postinst.d/kdump-tools 5.4.288 /boot/vmlinuz-5.4.288
kdump-tools: Создание /var/lib/kdump/initrd.img-5.4.288
W: сжатие zstd (CONFIG_RD_ZSTD) не поддерживается ядром, используется gzip
run-parts: выполняется /etc/kernel/postinst.d/unattended-upgrades 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/update-notifier 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/xx-update-initrd-links 5.4.288 /boot/vmlinuz-5.4.288
I: /boot/initrd.img.old теперь является символической ссылкой на initrd.img-6.11.0-13-generic
I: /boot/initrd.img теперь является символической ссылкой на initrd.img-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/zz-shim 5.4.288 /boot/vmlinuz-5.4.288
run-parts: выполняется /etc/kernel/postinst.d/zz-update-grub 5.4.288 /boot/vmlinuz-5.4.288
Является источником файла `/etc/default/grub'
Является источником файла `/etc/default/grub.d/kdump-tools.cfg'
Создание файла конфигурации grub ...
Найден linux-образ: /boot/vmlinuz-6.11.0-13-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-13-generic
Найден linux-образ: /boot/vmlinuz-6.11.0-12-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-12-generic
Найден linux-образ: /boot/vmlinuz-5.4.288
Найден initrd-образ: /boot/initrd.img-5.4.288
Найден 64-битный EFI-образ memtest86+: /boot/memtest86+x64.efi
Предупреждение: os-prober не будет выполнен для обнаружения других загрузочных разделов.
Системы на них не будут добавлены в конфигурацию загрузки GRUB.
Проверьте запись документации GRUB_DISABLE_OS_PROBER.
Добавление записи в меню загрузки для настроек UEFI Firmware ...
готово
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# 
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# ls /boot
config-5.4.288            initrd.img                    initrd.img.old      System.map-5.4.288            vmlinuz-6.11.0-12-generic
config-6.11.0-12-generic  initrd.img-5.4.288            memtest86+ia32.bin  System.map-6.11.0-12-generic  vmlinuz-6.11.0-13-generic
config-6.11.0-13-generic  initrd.img-6.11.0-12-generic  memtest86+ia32.efi  System.map-6.11.0-13-generic  vmlinuz.old
efi                       initrd.img-6.11.0-13-generic  memtest86+x64.bin   vmlinuz
grub                      initrd.img-6.11.0-8-generic   memtest86+x64.efi   vmlinuz-5.4.288
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288#

Итак, ядро, по-видимому, установлено правильно. Просто на всякий случай я хочу убедиться, что GRUB обновлён успешно, поэтому я запускаю update-grub следующим образом:

root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# update-grub
Является источником файла `/etc/default/grub'
Является источником файла `/etc/default/grub.d/kdump-tools.cfg'
Создание файла конфигурации grub ...
Найден linux-образ: /boot/vmlinuz-6.11.0-13-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-13-generic
Найден linux-образ: /boot/vmlinuz-6.11.0-12-generic
Найден initrd-образ: /boot/initrd.img-6.11.0-12-generic
Найден linux-образ: /boot/vmlinuz-5.4.288
Найден initrd-образ: /boot/initrd.img-5.4.288
Найден 64-битный EFI-образ memtest86+: /boot/memtest86+x64.efi
Предупреждение: os-prober не будет выполнен для обнаружения других загрузочных разделов.
Системы на них не будут добавлены в конфигурацию загрузки GRUB.
Проверьте запись документации GRUB_DISABLE_OS_PROBER.
Добавление записи в меню загрузки для настроек UEFI Firmware ...
готово
root@stephen-All-Series:/home/stephen/Documents/Kernel/Version5b/linux-5.4.288# 

Благодаря Богу, всё пока выглядит многообещающе. Что касается названия статьи, она кажется завершенной. Но я хочу убедиться, что эта версия может использовать драйверы NVIDIA после перезагрузки.

Ответ или решение

Компиляция ядра Linux Ubuntu из архива linux-5.4.288.tar.xz в Ubuntu 24.10 представляет собой довольно сложную задачу, требующую тщательной подготовки и выполнения нескольких шагов. Ниже приведены основные этапы, которые помогут вам с этой задачей.

Шаг 1: Подготовка окружения

  1. Установите необходимые пакеты. Для компиляции ядра вам необходимы инструменты для сборки и дополнительные зависимости. Выполните команду:

    sudo apt-get update
    sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
  2. Удалите или обновите репозитории PPA. Ошибки, связанные с PPA (например, "E: Unable to locate package libqt4-dev"), указывают на устаревшие или неправильные источники. Убедитесь, что ваши репозитории актуальны, и удалите устаревшие записи из /etc/apt/sources.list.d/.

Шаг 2: Извлечение исходников ядра

  1. Извлечение архива. Убедитесь, что архив извлечён правильно:
    tar -xvf linux-5.4.288.tar.xz
    cd linux-5.4.288

Шаг 3: Конфигурация ядра

  1. Скопируйте текущую конфигурацию ядра. Это можно сделать, используя существующую конфигурацию как основу:

    cp /boot/config-$(uname -r) .config
  2. Обновите конфигурацию. Примените старую конфигурацию к новому ядру:

    make oldconfig

    На появляющиеся вопросы отвечайте, основываясь на ваших предпочтениях или выбирайте опции по умолчанию, нажав Enter.

Шаг 4: Компиляция ядра

  1. Убедитесь, что отключены доверенные ключи. Редактируйте файл .config, если возникают ошибки, связанные с debian/canonical-certs.pem:

    nano .config

    Убедитесь, что строки CONFIG_SYSTEM_TRUSTED_KEYS и CONFIG_SYSTEM_REVOCATION_KEYS отсутствуют или равны пустой строке.

  2. Компилируйте ядро. Компиляция может занять значительное время:

    make -j$(nproc)

Шаг 5: Установка ядра

  1. Установите ядро. После успешной компиляции установите новое ядро:

    sudo make modules_install
    sudo make install
  2. Обновите GRUB. Убедитесь, что новое ядро добавлено в меню загрузчика GRUB:

    sudo update-grub

Шаг 6: Перезагрузка и тестирование

Перезагрузите систему и выберите новое ядро в меню GRUB. Проверьте, работают ли новые драйверы NVIDIA, которые недоступны в новых версиях ядра.

SEO Оптимизация

  1. Ключевые слова: Компиляция ядра Ubuntu, установка ядра Linux, Linux kernel 5.4.288.
  2. Описание: Рекомендуется использовать описания с упоминанием версии ядра и специфики Ubuntu 24.10 для улучшения обнаруживаемости статьи.

Следуя описанным шагам, вы сможете успешно скомпилировать и установить нужную версию ядра в вашей системе. Удачи!

Оцените материал
Добавить комментарий

Капча загружается...