Вопрос или проблема
У нас есть система:
- гипервизор 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’
указывает на то, что вы пытаетесь изменить поле структуры, которое было объявлено только для чтения в новой версии ядра.
Причины возникновения ошибки
-
Изменения в ядре Linux: Начиная с определенных версий ядра, были внесены изменения в способы работы с переменными и структурами, которые влияют на доступность и корректность изменения
vm_flags
. -
Несоответствие версий: Устаревшая версия VirtualBox Guest Additions может быть несовместима с вашей версией ядра. Это может произойти, если VirtualBox не успевает адаптироваться к последним изменениям в ядре Linux.
Возможные решения
-
Обновление VirtualBox и Guest Additions:
- Убедитесь, что вы используете последнюю версию VirtualBox, так как разработчики часто исправляют проблемы совместимости с новыми версиями ядра. На момент написания этой статьи актуальная версия VirtualBox может уже содержать исправления для RHEL 9.
- Установите последнюю версию VirtualBox Guest Additions, которая соответствует версии VirtualBox.
-
Использование PPA или репозитория:
- В некоторых случаях, если официальная версия Guest Additions не поддерживает новое ядро, вы можете попробовать установить более новую версию Guest Additions из публичных репозиториев или PPA, если таковые имеются.
-
Скрипты сборки и модули:
- Проверьте, возможно ли получение кода последней версии VirtualBox от разработчиков прямо из репозитория GitHub, и попробуйте самостоятельно отредактировать код, чтобы исключить операции с полем
vm_flags
, основываясь на современном подходе к его изменению.
- Проверьте, возможно ли получение кода последней версии VirtualBox от разработчиков прямо из репозитория GitHub, и попробуйте самостоятельно отредактировать код, чтобы исключить операции с полем
-
Настройка разработчика:
- Если вы обладаете соответствующими навыками программирования, можете рассмотреть возможность корректировки исходного кода VirtualBox Guest Additions, выполнив изменения в соответствии с требованиями нового ядра.
Заключение
Ошибка, возникающая при попытке сборки GuestAdditions на RHEL 9 с новым ядром, говорит о необходимости следить за совместимостью используемых версий ПО. Вам следует обновить VirtualBox и Guest Additions до последних версий, а также изучить актуальные изменения в коде ядра. Если вышеописанные шаги не приводят к успеху, возможно придется провести доработку кода или обратиться за помощью к сообществу разработчиков VirtualBox.
Таким образом, поддержание системы в актуальном состоянии и проактивный подход к совместимости программного обеспечения помогут избежать подобных проблем в будущем.