Получаю ошибку каждый раз, когда устанавливаю что-то с помощью apt.

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

Я использовал эту команду на ubuntu cinnamon 23.04

sudo apt install gcc

Она выдала мне следующий вывод

Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
gcc уже самой новой версии (4:12.2.0-3ubuntu1).
gcc отмечен для ручной установки.
Следующие пакеты были автоматически установлены и больше не требуются:
  fortune-mod fortunes-min gir1.2-gexiv2-0.10 librecode0 python3-configobj
Используйте 'sudo apt autoremove', чтобы удалить их.
0 обновлено, 0 новых установлено, 0 удалено и 7 не обновлено.
1 не полностью установлен или удален.
После этой операции будет использовано 0 B дополнительного дискового пространства.
Продолжить? [Y/n] y
Настраивается пакет xtrx-dkms (0.0.1+git20190320.5ae3a3e-3.2) ...
Удаляются старые файлы DKMS для xtrx-0.0.1+git20190320.5ae3a3e-3.2...
Модуль xtrx-0.0.1+git20190320.5ae3a3e-3.2 для ядра 6.2.0-20-generic (x86_64).
До удаления эта версия модуля была АКТИВНОЙ на этом ядре.

xtrx.ko:
 - Деинсталляция
   - Удаление из: /lib/modules/6.2.0-20-generic/updates/dkms/
 - Оригинальный модуль
   - Оригинальный модуль для этого модуля на этом ядре не найден.
   - Используйте команду dkms install, чтобы переустановить любую предыдущую версию модуля.
depmod...
Полное удаление модуля xtrx-0.0.1+git20190320.5ae3a3e-3.2 из дерева DKMS.
Загрузка новых файлов DKMS для xtrx-0.0.1+git20190320.5ae3a3e-3.2...
Сборка для 6.2.0-20-generic 6.3.2-060302-generic
Начальная сборка модуля для 6.2.0-20-generic
Готово.

xtrx.ko:
Проверка на соответствие версии модуля.
 - Оригинальный модуль
   - Оригинального модуля внутри этого ядра не существует
 - Установка
   - Установка в /lib/modules/6.2.0-20-generic/updates/dkms/
depmod...
Начальная сборка модуля для 6.3.2-060302-generic
ОШИБКА (dkms apport): пакет ядра linux-headers-6.3.2-060302-generic не поддерживается
Ошибка! Плохой статус возврата для сборки модуля на ядре: 6.3.2-060302-generic (x86_64)
Обратитесь к /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/make.log для более подробной информации.
dpkg: ошибка при обработке пакета xtrx-dkms (--configure):
 установочный скрипт xtrx-dkms после установки завершился с ошибкой в подкомпоненте с кодом выхода 10
Во время обработки произошли ошибки:
 xtrx-dkms
E: Подпроцесс /usr/bin/dpkg возвратил код ошибки (1)

Содержание /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/make.log

DKMS make.log для xtrx-0.0.1+git20190320.5ae3a3e-3.2 для ядра 6.3.2-060302-generic (x86_64)
Mo 29 Mai 2023 12:56:35 CEST
make: Вход в каталог '/usr/src/linux-headers-6.3.2-060302-generic'
внимание: компилятор отличается от используемого при создании ядра
  Ядро было собрано с использованием: x86_64-linux-gnu-gcc-12 (Ubuntu 12.2.0-17ubuntu1) 12.2.0
  Вы используете: gcc-12 (Ubuntu 12.2.0-17ubuntu1) 12.2.0
  CC [M]  /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.o
/var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c: В функции ‘xtrxfd_mmap’:
/var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c:1075:31: ошибка: присваивание неизменяемому члену ‘vm_flags’
 1075 |                 vma->vm_flags |= VM_LOCKED;
      |                               ^~
/var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c:1090:31: ошибка: присваивание неизменяемому члену ‘vm_flags’
 1090 |                 vma->vm_flags |= VM_IO;
      |                               ^~
/var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.c:1115:31: ошибка: присваивание неизменяемому члену ‘vm_flags’
 1115 |                 vma->vm_flags |= VM_LOCKED;
      |                               ^~
make[1]: *** [scripts/Makefile.build:252: /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/xtrx.o] Ошибка 1
make: *** [Makefile:2031: /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build] Ошибка 2
make: Выход из каталога '/usr/src/linux-headers-6.3.2-060302-generic'

Вам нужен пакет xtrx-dkms? Для всех установленных ядер необходимо собрать модуль ядра xtrx. Если он вам не нужен, удалите его с помощью apt remove xtrx-dkms. Тогда вы сможете использовать apt.

Согласно выводу, пакет xtrx успешно собран для ядра 6.2.0-20, но неудачно для ядра 6.3.2-060302. Вы можете удалить модуль только для 6.3.2-060302, но я не уверен, как это будет работать при следующем apt upgrade. Вы можете попробовать что-то вроде dkms remove -m xtrx -k 6.3.2-060302-generic. Я, возможно, упустил некоторые детали в команде. Попробуйте dkms status, чтобы увидеть детали модуля.

.

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

Ошибка, с которой вы столкнулись при установке программ с помощью apt, связана с проблемами при компиляции DKMS-пакета xtrx для определенной версии ядра. Рассмотрим эту ситуацию более детально.

Теория:

Dynamic Kernel Module Support (DKMS) — это фреймворк, который облегчает поддержку ядровых модулей в Linux. Он автоматически компилирует модули при обновлении ядра. Ошибка, которую вы видите, возникает из-за неудачной попытки построения модуля xtrx для конкретной версии ядра 6.3.2-060302-generic.

У вас установлены две версии ядра: 6.2.0-20-generic и 6.3.2-060302-generic. DKMS успешно строит и устанавливает модуль xtrx для ядра 6.2.0-20-generic, но для ядра 6.3.2-060302-generic возникают ошибки.

Пример:

Из журнала /var/lib/dkms/xtrx/0.0.1+git20190320.5ae3a3e-3.2/build/make.log видно, что процесс компиляции прерывается из-за ошибки при попытке присвоить значение константному члену структуры vm_flags в файле xtrx.c. Изменение константных (read-only) структур недопустимо без соответствующих разрешений.

Кроме того, предупреждение о несоответствии компилятора указывает на то, что текущий компилятор GCC отличается от того, который использовался для построения ядра. Несмотря на то, что версии компилятора идентичны, это предупреждение может быть критичным в случае строгих зависимостей.

Применение:

Для решения проблемы есть несколько подходов:

  1. Удаление ненужного модуля:
    Если модуль xtrx-dkms вам не необходим, проще всего будет его удалить. Это снимет проблемы с зависимостями. Выполните:

    sudo apt remove xtrx-dkms
  2. Исключение установки для проблемного ядра:
    Если вы уверены в том, что нуждаетесь в xtrx-dkms, но хотите избежать ошибок с проблемным ядром, вы можете вручную исключить попытку установки модуля для ядра 6.3.2-060302-generic. Попробуйте выполнить:

    dkms remove -m xtrx -k 6.3.2-060302-generic

    Это удалит неудачно сконфигурированный модуль.

  3. Ручная настройка и исправление кода:
    Этот метод больше подходит для тех, кто имеет опыт работы с кодом на C. Вам потребуется отредактировать файл xtrx.c, чтобы устранить ошибки, связанные с read-only членами. Это сложный и трудоемкий процесс, не гарантирующий успех без глубокого знания кодовой базы.

  4. Проверка версий заголовков ядра:
    Убедитесь, что все пакеты заголовков ядра соответствуют текущим версиям установленных ядер. Простая пересборка используемого ядра с новым компилятором может решить проблемы несоответствия:

    sudo apt install linux-headers-$(uname -r)
  5. Обновление dkms и переустановка:
    Попробуйте обновить dkms и повторить попытку установки:

    sudo apt install --reinstall dkms
    sudo dkms build -m xtrx -v 0.0.1+git20190320.5ae3a3e-3.2 -k 6.2.0-20-generic

Эти шаги помогут справиться с возникшей проблемой, позволяя продолжить установку других пакетов через apt без возникновения ошибок. Важно анализировать и корректировать настройки только при уверенности в своих действиях, чтобы избежать нарушения работы других системных компонентов.

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

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