dpkg -i жалуется на "конфликтующие пакеты" при установке само скомпилированного ядра
Мне нужно скомпилировать и установить мои собственные бионические ядра, чтобы исправить опечатку в xhci-pci.c
Я сделал это успешно в прошлом, я думаю, еще 18.04, следуя инструкциям на:
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
Но теперь, когда я пытаюсь установить мои новые ядра (и тестировать ядра от разработчиков, пытающихся помочь мне запустить исправление флагштока), dpkg -i жалуется, и кажется, что мои изменения не отражаются при перезагрузке. Как это исправить?
ОБНОВЛЕНИЕ: Установка ядра, скомпилированного на моем рабочем столе, на другой сервер, похоже, работает. Я предполагаю, что это связано с тем, что версия ядра, работающая на сервере, была несколько менее значимой, чем версия, работающая на рабочем столе. Я думаю, что младший номер редакции на рабочем столе - это то же самое, что я пытаюсь скомпилировать и установить. Напротив, тестовое ядро, предоставляемое разработчиками, представляет собой небольшие изменения по сравнению с моим рабочим столом и сервером. Если раньше я возлагал вину на "неподписанные" пакеты, то теперь я думаю, что проблема заключается в dpkg. Как заставить dpkg устанавливать поверх "конфликтующих" пакетов? Как заставить его установить ретроградное ядро?
Ошибки (в настольной системе) следующие:
dpkg: regarding linux-image-unsigned-4.15.0-29-generic_4.15.0-29.31+jeff_amd64.deb containing linux-image-unsigned-4.15.0-29-generic:
linux-image-unsigned-4.15.0-29-generic conflicts with linux-image-4.15.0-29-generic
linux-image-4.15.0-29-generic (version 4.15.0-29.31) is present and installed.
dpkg: error processing archive linux-image-unsigned-4.15.0-29-generic_4.15.0-29.31+jeff_amd64.deb (--install):
conflicting packages - not installing linux-image-unsigned-4.15.0-29-generic
dpkg: regarding linux-image-unsigned-4.15.0-29-lowlatency_4.15.0-29.31+jeff_amd64.deb containing linux-image-unsigned-4.15.0-29-lowlatency:
linux-image-unsigned-4.15.0-29-lowlatency conflicts with linux-image-4.15.0-29-lowlatency
linux-image-4.15.0-29-lowlatency (version 4.15.0-29.31) is present and installed.
dpkg: error processing archive linux-image-unsigned-4.15.0-29-lowlatency_4.15.0-29.31+jeff_amd64.deb (--install):
conflicting packages - not installing linux-image-unsigned-4.15.0-29-lowlatency
3 ответа
apt-get remove linux-image-4.15.0-29-lowlatency
скажите нет, вы не хотите прерывать удаление запущенного ядра, чтобы оно было удалено. затем
dpkg -i $new-kernel+jeff
преуспеет.
Ваше предположение в основном правильное. Существует два типа пакетов для образов ядра: подписанные и неподписанные. Если вы скомпилируете свое собственное ядро, образ ядра не будет подписан и будет упакован в deb-файл с именем , в то время как пакеты с подписанными изображениями идут как и являются выбором по умолчанию для образов ядра в Ubuntu. Кажется, только подписанные образы ядра могут пройти Secure Boot .
Здесь важно отметить, что пакет взаимно конфликтует с одним и тем же файлом . Смотрите сами, где = 5.4.0-65. Обратите особое внимание на поле «Конфликты».
> apt show linux-image-5.4.0-65-generic
Package: linux-image-5.4.0-65-generic
Version: 5.4.0-65.73
Built-Using: linux (= 5.4.0-65.73)
Priority: optional
Section: kernel
Source: linux-signed
Origin: Ubuntu
Maintainer: Canonical Kernel Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.7 MB
Provides: aufs-dkms, fuse-module, ivtv-modules, kvm-api-4, linux-image, redhat-cluster-modules, spl-dkms, spl-modules, virtualbox-guest-dkms, virtualbox-guest-modules, zfs-dkms, zfs-modules
Depends: kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.4.0-65-generic
Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub | lilo, initramfs-tools | linux-initramfs-tool
Suggests: fdutils, linux-doc | linux-source-5.4.0, linux-tools, linux-headers-5.4.0-65-generic
Conflicts: linux-image-unsigned-5.4.0-65-generic
Download-Size: 8,898 kB
APT-Sources: http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
Description: Signed kernel image generic
A kernel image for generic. This version of it is signed with
Canonical's UEFI/Opal signing key.
Имея под рукой эти знания, довольно легко расшифровать исходное сообщение об ошибке. Первое сообщение об ошибке
dpkg: regarding linux-image-unsigned-4.15.0-29-generic_4.15.0-29.31+jeff_amd64.deb containing linux-image-unsigned-4.15.0-29-generic:
linux-image-unsigned-4.15.0-29-generic conflicts with linux-image-4.15.0-29-generic
linux-image-4.15.0-29-generic (version 4.15.0-29.31) is present and installed.
просто указано, что два типа пакетов для образов ядра конфликтуют, где = 4.15.0-29. Невозможно установить неподписанный, когда подписанный уже установлен. Второе сообщение об ошибке предупреждает то же самое о другой версии пакета.
Теперь о части решения. Вы можете безопасно удалить
linux-image-4.15.0-29-generic
сначала а потом установить
linux-image-unsigned-4.15.0-29-generic_4.15.0-29.31+jeff_amd64.deb
. В более общем случае для установки
linux-image-unsigned-<version>-generic
, удалить
linux-image-<version>-generic
с соответствующим
<version>
первый.
Но иногда все не так просто. В моем случае я не могу удалить подписанный пакет, потому что он зависит от мета-пакета. Этот метапакет всегда зависит от последнего пакета образа ядра, и он зависит от , который является метапакетом, который загружает полную установку ядра (его дерево зависимостей ). Чтобы удалить подписанный пакет, я также должен удалить
linux-image-generic
а также
linux-generic
, что может вызвать проблемы с обновлениями.
Ваш пакет Deb содержит идентичные файлы, которые конфликтуют с более старыми одноименными пакетами. Вы должны удалить старый пакет или, возможно, изменить настройки версии в папке debian при компиляции ядра. Это может привести к уникальности имен файлов. Но предсказать сложно. Я бы удалил старое конфликтующее ядро.
Помните, что ваше ядро уже собрано на заводе в безопасной среде. Вероятно, тот, который вы создали, отличается по значимости, потому что он принимает во внимание то, что есть в вашей системе, возможно, даже другую стратегию компиляции и сборки dpkg. Одна сборка, даже с исходным пакетом из исходной системы, не будет взаимозаменяемой.