Вопрос или проблема
Я использовал эту команду на 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 отличается от того, который использовался для построения ядра. Несмотря на то, что версии компилятора идентичны, это предупреждение может быть критичным в случае строгих зависимостей.
Применение:
Для решения проблемы есть несколько подходов:
-
Удаление ненужного модуля:
Если модульxtrx-dkms
вам не необходим, проще всего будет его удалить. Это снимет проблемы с зависимостями. Выполните:sudo apt remove xtrx-dkms
-
Исключение установки для проблемного ядра:
Если вы уверены в том, что нуждаетесь вxtrx-dkms
, но хотите избежать ошибок с проблемным ядром, вы можете вручную исключить попытку установки модуля для ядра6.3.2-060302-generic
. Попробуйте выполнить:dkms remove -m xtrx -k 6.3.2-060302-generic
Это удалит неудачно сконфигурированный модуль.
-
Ручная настройка и исправление кода:
Этот метод больше подходит для тех, кто имеет опыт работы с кодом на C. Вам потребуется отредактировать файлxtrx.c
, чтобы устранить ошибки, связанные с read-only членами. Это сложный и трудоемкий процесс, не гарантирующий успех без глубокого знания кодовой базы. -
Проверка версий заголовков ядра:
Убедитесь, что все пакеты заголовков ядра соответствуют текущим версиям установленных ядер. Простая пересборка используемого ядра с новым компилятором может решить проблемы несоответствия:sudo apt install linux-headers-$(uname -r)
-
Обновление 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
без возникновения ошибок. Важно анализировать и корректировать настройки только при уверенности в своих действиях, чтобы избежать нарушения работы других системных компонентов.