Вопрос или проблема
Я следую этой процедуре, чтобы вручную установить и подключить дополнения гостевой системы VirtualBox на виртуальной машине VirtualBox с ОС Ubuntu 22.04, размещенной на Windows 10.
Я делаю это, потому что столкнулся с ошибкой VBOX_E_IPRT_ERROR (0X80BB0005)
.
Что я сделал без ошибок:
-
sudo apt update sudo apt-get install build-essential linux-headers-$(uname -r)
-
перезагружал ВМ через sudo reboot.
-
в меню “Устройство” на верхней панели VirtualBox -> Нажмите “Вставить CD гостевых дополнений”
-
sudo mkdir -p /mnt/cdrom sudo mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom
но когда я запускаю
sudo ./VBoxLinuxAdditions.run
я получаю
mount: /mnt/cdrom: WARNING: source write-protected, mounted read-only.
Verifying archive integrity... 100% MD5 checksums are OK. All good.
Uncompressing VirtualBox 7.0.12 Guest Additions for Linux 100%
VirtualBox Guest Additions installer
Removing installed version 7.0.12 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Setting up modules
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel
modules. This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions: /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 6.8.0-40-generic.
где указана проблема:
VirtualBox Guest Additions: Look at /var/log/vboxadd-setup.log to find out what
went wrong
VirtualBox Guest Additions: Running kernel modules will not be replaced until
the system is restarted or 'rcvboxadd reload' triggered
VirtualBox Guest Additions: reloading kernel modules and services
VirtualBox Guest Additions: cannot reload kernel modules: one or more module(s)
is still in use
VirtualBox Guest Additions: kernel modules and services were not reloaded
The log file /var/log/vboxadd-setup.log may contain further information.
так что я открываю файл лога /var/log/vboxadd-setup.log
и вижу
Building the main Guest Additions 7.0.12 module for kernel 6.8.0-40-generic.
Error building the module. Build output follows.
make V=1 CONFIG_MODULE_SIG= CONFIG_MODULE_SIG_ALL= -C /lib/modules/6.8.0-40-generic/build M=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j4 modules
make[1]: warning: -j4 forced in submake: resetting jobserver mode.
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
You are using: gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
make -f ./scripts/Makefile.build obj=/tmp/vbox.0 need-builtin=1 need-modorder=1
# cmd_mod /tmp/vbox.0/vboxguest.mod
printf '%s
' VBoxGuest-linux.o VBoxGuest-common.o common/string/strformatrt.o combined-agnostic.o combined-os-specific.o | awk '!x[$0]++ { print("/tmp/vbox.0/"$0) }' > /tmp/vbox.0/vboxguest.mod
# CC [M] /tmp/vbox.0/VBoxGuest-linux.o
gcc-12 -Wp,-MMD,/tmp/vbox.0/.VBoxGuest-linux.o.d -nostdinc -I./arch/x86/include -I./arch/x86/include/generated -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -I./ubuntu/include -include ./include/linux/compiler_types.h -DKERNEL -fmacro-prefix-map=./= -std=gnu11 -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fno-omit-frame-pointer -fno-optimize-sibling-calls -ftrivial-auto-var-init=zero -fno-stack-clash-protection -fzero-call-used-regs=used-gpr -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -falign-functions=16 -fno-strict-overflow -fno-stack-check -fconserve-stack -Wall -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=1024 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-dangling-pointer -Wvla -Wno-pointer-sign -Wcast-function-type -Wno-stringop-overflow -Wno-array-bounds -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible
-pointer-types -Werror=designated-init -Wenum-conversion -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-restrict -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-type-limits -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -g -gdwarf-5 -Wno-declaration-after-statement -fno-pie -include /tmp/vbox.0/include/VBox/VBoxGuestMangling.h -I./include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -DKERNEL -DMODULE -DRT_WITHOUT_PRAGMA_ONCE -DVBOX -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_GUEST -DIN_GUEST_R0 -DIN_MODULE -DRT_WITH_VBOX -DVBGL_VBOXGUEST -DVBOX_WITH_HGCM -DVBOX_WITH_64_BITS_GUESTS -DRT_ARCH_AMD64 -fsanitize=bounds-strict -fsanitize=shift -fsanitize=bool -fsanitize=enum -DMODULE -DKBUILD_BASENAME='"VBoxGuest_linux"' -DKBUILD_MODNAME='"vboxguest"' -D__KBUILD_MODNAME=kmod_vboxguest -c -o /tmp/vbox.0/VBoxGuest-linux.o /tmp/vbox.0/VBoxGuest-linux.c ; ./tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --retpoline --rethunk --sls --stackval --static-call --uaccess --prefix=16 --module /tmp/vbox.0/VBoxGuest-linux.o
# CC [M] /tmp/vbox.0/VBoxGuest-common.o
gcc-12 -Wp,-MMD,/tmp/vbox.0/.VBoxGuest-common.o.d -nostdinc -I./arch/x86/include -I./a
но я не понимаю, что произошло и как это исправить.
что я попробовал
Я перезагрузил систему и повторил процедуру, но ошибка возникла снова.
Я удалил и переустановил ту же версию VirtualBox, запустил ВМ, но проблема осталась.
Я удалил и переустановил последнюю версию VirtualBox, запустил ВМ, но проблема осталась.
У меня такая же проблема. Также пытался выполнить sudo apt-get install linux-headers-$(uname -r), но все равно не могу ни изменить размер экрана ВМ, ни копировать-вставлять текст.
Ответ или решение
Ваша проблема связана с установкой "Guest Additions" в VirtualBox на виртуальной машине с Ubuntu 22.04, при которой ядро и службы не перезагрузились. Давайте рассмотрим возможные причины и их решения.
Теория
VirtualBox Guest Additions — это набор программного обеспечения, который устанавливается на гостевой операционной системе и предоставляет более тесную интеграцию между гостевой ОС и хостовой системой. Это включает поддержку обмена буфером обмена между хостом и гостем, возможность изменения разрешения экрана, а также улучшенную поддержку устройств.
Ошибка «VirtualBox Guest Additions: kernel modules and services were not reloaded» обычно указывает на проблемы с модулями ядра VirtualBox, когда они не могут быть перестроены или установлены должным образом. Основные причины могут включать несовместимость ядра, отсутствующие заголовки ядра или проблемы с компилятором.
Пример
В приведенном вами логе содержится важное предупреждение: «warning: the compiler differs from the one used to build the kernel». Это говорит о том, что компилятор, используемый для сборки ядра, отличается от текущего, что может вызвать ошибки при сборке новых модулей.
Применение
Для решения этой проблемы, выполните следующие шаги:
-
Проверьте и обновите систему:
- Выполните команды:
sudo apt update sudo apt upgrade
- Выполните команды:
-
Убедитесь, что установлены все необходимые пакеты:
- Для компиляции модулей ядра требуется наличие пакетов
build-essential
и заголовков ядра (linux-headers
). Если вы ранее это не делали, выполните:sudo apt install build-essential linux-headers-$(uname -r)
- Для компиляции модулей ядра требуется наличие пакетов
-
Проверьте, какой компилятор используется:
- Убедитесь, что установленная версия GCC совпадает с той, которая использовалась для сборки ядра. Выполните:
gcc --version dmesg | grep -i gcc
- Если версии отличаются, может быть полезно переключиться на соответствующую версию компилятора. Если необходимо установить другую версию GCC, сделайте это:
sudo apt install gcc-<version> sudo update-alternatives --config gcc
- Убедитесь, что установленная версия GCC совпадает с той, которая использовалась для сборки ядра. Выполните:
-
Очистите предыдущее установочное окружение:
- Убедитесь, что все следы предыдущих неудачных установок удалены, чтобы избежать конфликтов.
sudo /opt/VBoxGuestAdditions-*/uninstall.sh sudo rm -rf /etc/init.d/vboxadd sudo rm -rf /etc/init.d/vboxvfs sudo rm -rf /etc/init.d/vboxadd-service
- Убедитесь, что все следы предыдущих неудачных установок удалены, чтобы избежать конфликтов.
-
Повторите установку Guest Additions:
- Вставьте образ Guest Additions через меню VirtualBox и выполните следующие команды:
sudo mkdir -p /mnt/cdrom sudo mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom sudo ./VBoxLinuxAdditions.run
- Вставьте образ Guest Additions через меню VirtualBox и выполните следующие команды:
-
Перезагрузите виртуальную машину:
- После успешной установки рекомендуется перезагрузить систему, чтобы убедиться в правильном функционировании модулей.
-
Проверьте логи:
- Если ошибка сохраняется, тщательно изучите логи по адресу
/var/log/vboxadd-setup.log
для получения более детальной информации о природе ошибки.
- Если ошибка сохраняется, тщательно изучите логи по адресу
Следуя этим шагам, вероятность успешной установки VirtualBox Guest Additions резко возрастает. Убедитесь, что все зависимости и требования соблюдены, чтобы избежать проблем с компиляцией или загрузкой модулей ядра.