Построить GuestAdditions не удалось на госте RHEL9 из-за доступного только для чтения элемента ‘vm_flags’

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

У нас есть система:

  • гипервизор VirtualBox v7.0.18, работающий на Windows 10, с
  • гостевой ОС RHEL9, и “uname -r” говорит, что выпуск ее ядра “5.14.0-503.14.1.el9_5.x86_64”.

После обновления до вышеуказанной версии ядра с помощью “dnf update” мы пытаемся пересобрать VirtualBox GuestAdditions и получили следующую ошибку в журнале, говорящую /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1447:39: ошибка: присвоение члену 'vm_flags' только для чтения.

Больше деталей интересных частей в журнале:

Сборка основного модуля Guest Additions 7.0.18 для ядра 5.14.0-503.14.1.el9_5.x86_64.
Ошибка сборки модуля. Вывод сборки ниже.
make V=1 CONFIG_MODULE_SIG= CONFIG_MODULE_SIG_ALL= -C /lib/modules/5.14.0-503.14.1.el9_5.x86_64/build M=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j1 модули
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (                \
echo >&2;                                                       \
echo >&2 "  ОШИБКА: Конфигурация ядра недействительна.";           \
echo >&2 "         include/generated/autoconf.h или include/config/auto.conf отсутствуют.";\
echo >&2 "         Запустите 'make oldconfig && make prepare' в исходном коде ядра для исправления.";      \
echo >&2 ;                                                      \
/bin/false)

...

В файле, включенном из /tmp/vbox.0/combined-os-specific.c:43:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c: В функции ‘rtR0MemObjNativeLockUser’:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1447:39: ошибка: присвоение члену ‘vm_flags’ только для чтения
 1447 |                 papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED;
      |                                       ^~
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c: В функции ‘rtR0MemObjNativeMapUser’:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1929:35: ошибка: присвоение члену ‘vm_flags’ только для чтения
 1929 |                     vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
      |                                   ^~
make[2]: *** [scripts/Makefile.build:249: /tmp/vbox.0/combined-os-specific.o] Ошибка 1
make[1]: *** [Makefile:1944: /tmp/vbox.0] Ошибка 2
make: *** [/tmp/vbox.0/Makefile-footer.gmk:133: vboxguest] Ошибка 2
Не удалось найти систему окон X.Org или XFree86, пропускаем.
модули ядра и службы не были перезагружены

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

Ошибка при сборке VirtualBox Guest Additions на гостевой системе RHEL 9, связанная с «членом vm_flags, доступным только для чтения», может вызывать трудности при обновлении и эксплуатации вашей виртуальной машины. Рассмотрим проблему подробнее, включая возможные решения.

Описание проблемы

Согласно вашему описанию, вы используете VirtualBox 7.0.18 на Windows 10 с гостевой ОС RHEL 9, в которой ядро имеет версию 5.14.0-503.14.1.el9_5.x86_64. После обновления ядра вашей системы произошла ошибка при попытке собрать VirtualBox Guest Additions, в частности связано с изменением в коде ядра Linux, что затрудняет модификацию переменной vm_flags. Ошибка, указанная в логах:

error: assignment of read-only member ‘vm_flags’

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

Причины возникновения ошибки

  1. Изменения в ядре Linux: Начиная с определенных версий ядра, были внесены изменения в способы работы с переменными и структурами, которые влияют на доступность и корректность изменения vm_flags.

  2. Несоответствие версий: Устаревшая версия VirtualBox Guest Additions может быть несовместима с вашей версией ядра. Это может произойти, если VirtualBox не успевает адаптироваться к последним изменениям в ядре Linux.

Возможные решения

  1. Обновление VirtualBox и Guest Additions:

    • Убедитесь, что вы используете последнюю версию VirtualBox, так как разработчики часто исправляют проблемы совместимости с новыми версиями ядра. На момент написания этой статьи актуальная версия VirtualBox может уже содержать исправления для RHEL 9.
    • Установите последнюю версию VirtualBox Guest Additions, которая соответствует версии VirtualBox.
  2. Использование PPA или репозитория:

    • В некоторых случаях, если официальная версия Guest Additions не поддерживает новое ядро, вы можете попробовать установить более новую версию Guest Additions из публичных репозиториев или PPA, если таковые имеются.
  3. Скрипты сборки и модули:

    • Проверьте, возможно ли получение кода последней версии VirtualBox от разработчиков прямо из репозитория GitHub, и попробуйте самостоятельно отредактировать код, чтобы исключить операции с полем vm_flags, основываясь на современном подходе к его изменению.
  4. Настройка разработчика:

    • Если вы обладаете соответствующими навыками программирования, можете рассмотреть возможность корректировки исходного кода VirtualBox Guest Additions, выполнив изменения в соответствии с требованиями нового ядра.

Заключение

Ошибка, возникающая при попытке сборки GuestAdditions на RHEL 9 с новым ядром, говорит о необходимости следить за совместимостью используемых версий ПО. Вам следует обновить VirtualBox и Guest Additions до последних версий, а также изучить актуальные изменения в коде ядра. Если вышеописанные шаги не приводят к успеху, возможно придется провести доработку кода или обратиться за помощью к сообществу разработчиков VirtualBox.

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

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

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