Ошибка VirtualBox после последнего (Ubuntu) обновления программного обеспечения

19
  • Версия Ubuntu: 16.04

  • Версия VirtualBox: 5.2.26

  • Обновления, которые «сломали» что-то: между прошлой неделей и сегодняшним днем ​​(2019/03/18)

Сегодня утром я запустил Ubuntu Software Updater после включения компьютера. После этого я попытался запустить машину Virtual Box (версию, установленную через .deb, а не Ubuntu Software Center), и получил известную ошибку:

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/sbin/vboxconfig'

as root.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

После прочтения о похожих проблемах и понимания того, почему я должен это делать, я выполнил его (те же результаты, что и в «sudo /usr/lib/virtualbox/vboxdrv.sh setup», и любые другие решения похожих проблем / сообщений, которые я нашел на этом сайте). ):

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: Look at /var/log/vbox-setup.log to find out what went wrong.

Читая .log, я вижу, что проблема, похоже, связана с функцией get_user_pages, и на данный момент я, честно говоря, понятия не имею, как ее решить.

Building the main VirtualBox module.
Error building the module:
make V=1 CONFIG_MODULE_SIG= -C /lib/modules/4.4.0-143-generic/build SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j8 modules
make[1]: warning: -jN forced in submake: disabling jobserver mode.
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*
make -f ./scripts/Makefile.build obj=/tmp/vbox.0
[...]
[...]
[...]
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjNativeLockUser’:
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1122:33: warning: passing argument 6 of ‘get_user_pages’ makes pointer from integer without a cast [-Wint-conversion]
                                 fWrite,                 /* force write access. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct page **’ but argument is of type ‘int’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1124:33: warning: passing argument 7 of ‘get_user_pages’ from incompatible pointer type [-Wincompatible-pointer-types]
                                 &pMemLnx->apPages[0],   /* Page array. */
                                 ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1112:18: error: too many arguments to function ‘get_user_pages’
             rc = get_user_pages(pTask,                  /* Task for fault accounting. */
                  ^
In file included from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:98:0,
                 from /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:31:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
  gcc -Wp,-MD,/tmp/vbox.0/r0drv/linux/.mpnotification-r0drv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include  -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated  -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -Iubuntu/include  -D__KERNEL__ -fno-pie -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -fno-pie -no-pie -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -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 -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-maybe-uninitialized -O2 --param=allow-store-data-races=0 -DCC_HAVE_ASM_GOTO -Wframe-larger-than=1024 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -fno-omit-frame-pointer -fno-pie -I/lib/modules/4.4.0-143-generic/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DSUPDRV_WITH_RELEASE_LOGGER -Wno-declaration-after-statement -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS  -DMODULE  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(mpnotification_r0drv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.0/r0drv/linux/.tmp_mpnotification-r0drv-linux.o /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.c
scripts/Makefile.build:285: recipe for target '/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o' failed
make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs....
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/initterm-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/SUPDrv.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/SUPDrv.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mpnotification-r0drv-linux.o"; fi; fi;
  if [ "-pg" = "-pg" ]; then if [ /tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount  "/tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o"; fi; fi;
Makefile:1454: recipe for target '_module_/tmp/vbox.0' failed
make[1]: *** [_module_/tmp/vbox.0] Error 2
/tmp/vbox.0/Makefile.include.footer:101: recipe for target 'vboxdrv' failed
make: *** [vboxdrv] Error 2

Я уже попробовал каждое решение для подобных проблем с этим сообщением об ошибке, но ни одно не работает для меня.

У кого-нибудь были подобные проблемы после последних обновлений Ubuntu?

ОБНОВЛЕНИЕ: я полностью удалил VirtualBox, перезапустил систему, снова установил VirtualBox, и все еще та же самая ошибка.

Альберто Мартин
источник
2
Абсолютно. Что я не понимаю, так это то, что есть люди, которые утверждают, что предыдущая «версия» ошибки должна быть решена для Trusty и Xenial именно 10 марта, и сегодня у нас есть «новая версия» проблемы.
Альберто Мартин
Вы пробовали VB 6.0?
Хейннема
1
Я видел это сегодня после обновления нескольких хост-машин до 4.4.0-143. На одной была довольно старая версия VirtualBox (5.0.x), а на другой - 5.2.x (поэтому не такая уж старая). После обновления ни одна из них не запустит мои виртуальные машины, показывая, что модуль ядра не установлен. Я обновляю / возвращаюсь к 5.1.38 на обоих, наконец получая их для запуска виртуальных машин. Однако, когда я пытаюсь установить гостевые дополнения на одном из гостей, я получаю ошибку get_user_pages в файле vboxadd-install.log.
cosimo193
Недавно я получил ту же ошибку, когда попытался установить Virtualbox 5.2.18, а затем и v6.0, мой latop, который представляет собой систему UEFI с Secure Boot, так что есть дополнительное осложнение, если у вас система UEFI, если мне позволят знаю, как я знаю, как это исправить ADN может предоставить решение. Вы можете подтвердить, что ваша система UEFI или нет, запустив команду: cd / sys / firmware / efi
Если это может быть полезно для всех: есть отчет об ошибке на bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/1821083
Гантон

Ответы:

13

Простой ответ, пока что - используйте testbuild, предоставленный Vbox, пока мы ждем патча для ядра.

Вы можете найти сборку здесь . Вам нужно будет использовать текущие ссылки, представленные на этой странице, потому что те, которые использовались здесь в примере, изменились.

Убедитесь, что вы удалили текущую версию:

sudo apt remove virtualbox*
dkpk -r virtualbox 
# the tab key will autocomplete the version if there's one for dpkg to remove

Установите тестовую сборку (измените URL-адрес, чтобы он соответствовал последней тестовой сборке, предоставленной virtualbox, используя вышеуказанную ссылку - https://www.virtualbox.org/wiki/Testbuilds ):

wget https://www.virtualbox.org/download/testcase/VirtualBox-6.0.5-129423-Linux_amd64.run
chmod +x VirtualBox-6.0.5-129423-Linux_amd64.run
sudo ./VirtualBox-6.0.5-129423-Linux_amd64.run

Если вам нужен пакет расширений (измените URL-адрес, чтобы он соответствовал последней тестовой сборке, предоставленной virtualbox, по указанной выше ссылке - https://www.virtualbox.org/wiki/Testbuilds ):

wget https://www.virtualbox.org/download/testcase/Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-6.0.5-129380.vbox-extpack
Robco
источник
1
Спасибо, Робко. У меня не было времени, чтобы попробовать; Я понизил версию VirtualBox и, в принципе, я просто подожду, пока он будет исправлен, или просто до следующего ядра (мне действительно не нужна самая последняя версия VirtualBox). Однако ваше решение кажется мне лучшим для тех, кому нужна последняя / последняя версия, поскольку она стабильна. Вы сами пробовали? Это стабильно?
Альберто Мартин
Привет Альберто. Да, я предпочитаю не понижать ядро, и я попытался понизить версию vbox (возможно, я не вернулся достаточно далеко), но драйвер все еще не мог быть собран. Я сделал это для 4 пользователей, и у меня не было проблем.
Робко
1
Спасибо за отзыв Робко. Звучит довольно хорошо. В таком случае, я думаю, это самое элегантное решение проблемы.
Альберто Мартин
1
Вы можете найти последние тестовые сборки на этой странице: virtualbox.org/wiki/Testbuilds .
Том Салеба
2
Это предостережение: «Пожалуйста, используйте версию 5.2, если вам все еще нужна поддержка 32-битных хостов, так как это было прекращено в 6.0» virtualbox.org/wiki/Downloads . 32-битные гости все еще поддерживаются.
Писквор
4

У меня такие же проблемы.

Я переключился обратно на предыдущее ядро. Смотрите это: http://karlcode.owtelse.com/blog/2017/03/13/reverting-to-a-previous-kernel/

после этого переустановите виртуальный ящик и он снова заработает.

С уважением Алекс

Alex
источник
Привет, Алекс. Как бы это ни могло сработать, я нахожу это слишком грязным и иногда рискованным, чем просто понижение самого VirtualBox, который будет отлично работать.
Альберто Мартин
4

Это выглядит очень похоже на известную ошибку 1818049, названную «модули dkms virtualbox не могут быть собраны с linux 4.4.0-143.169 [ошибка: слишком много аргументов для функции 'get_user_pages']» .

Реальное рабочее решение будет таким же, как и для проблемы TTY - удалите последние ядра и установите предыдущее хорошее ( мне подходит 4.4.0-138-generic - безопасное удаление USB 3.0 будет работать, проблема getty будет отсутствовать):

sudo apt-get purge linux-image-generic linux-headers-generic
sudo apt-get purge linux-image-4.4.0-139-generic linux-headers-4.4.0-139-generic \
linux-image-4.4.0-140-generic linux-headers-4.4.0-140-generic \
linux-image-4.4.0-141-generic linux-headers-4.4.0-141-generic \
linux-image-4.4.0-142-generic linux-headers-4.4.0-142-generic \
linux-image-4.4.0-143-generic linux-headers-4.4.0-143-generic

sudo apt-get install amd64-microcode intel-microcode thermald
sudo apt-get autoremove

sudo apt-get install linux-image-4.4.0-138-generic linux-image-extra-4.4.0-138-generic
sudo apt-get install linux-headers-4.4.0-138 linux-headers-4.4.0-138-generic

и перезагрузите потом. Поэтому нам нужно дождаться нормального стабильного, хорошо протестированного ядра.

Предупреждение: не обновляйте ядро ​​до 4.4.0-143-generic, если вам нужен VirtualBox на гостях и хостах. Подпишитесь на ошибку 1818049 и после подтверждения исправления установите новое ядро ​​обратно с помощью sudo apt-get install linux-image-generic linux-headers-generic.

N0rbert
источник
3

Самым простым решением для Ubuntu 16.04 является обновление ядра до той же версии, которую использует Ubuntu 18.04, с помощью следующей команды:

sudo apt-get install --install-recommends linux-generic-hwe-16.04

Перезагрузитесь после запуска вышеуказанной команды.

Если вы запустите dkms, вам не придется переустанавливать гостевые дополнения после перезагрузки машины. Иначе, переустановите гостевые дополнения, и теперь оно должно нормально работать в Ubuntu 16.04.

Собственный
источник
Спасибо, работал на меня
Джейсон Морган
2

Очень похоже на Альберто

  1. Настройка sudo /usr/lib/virtualbox/vboxdrv.sh (я получаю ошибки, но VBox останавливается ...)
  2. sudo dpkg -l | grep virtualbox (получите версию VBox.)
  3. sudo apt-get purge virtualbox-5.XYZ virtualbox-qt (версия XYZ из шага 2)
  4. Установлено из Ubuntu Software: понизилось до 5.1.38

И снова работает!

Луис Каприлес
источник
2

После довольно сложных попыток решить ее (ни DKMS, ни Synaptics не кажутся полезными в качестве обходного пути к проблеме), я не смог это сделать, так как ВРЕМЕННОЕ решение для тех, кто может оказаться в той же ситуации и просто по порядку. чтобы иметь возможность продолжать работу с гостевыми машинами, я предлагаю понизить VirtualBox до версии, предлагаемой USC.

  • Просто удалите текущую версию VirtualBox (я сделал это через Synaptics, но GDebi тоже будет отлично работать).

  • Установите предлагаемую версию VirtualBox USC (через USC или Synaptics)

  • Понизить (удалить-установить) модуль VBoxGuestAdditions на хост-компьютере.

  • На гостевых машинах не забудьте понизить версию VBoxGuestAdditions (вставьте старый компакт-диск VBoxGuestAdditions и запустите его).

Проблема / ошибка все еще существует, поскольку она не позволяет использовать последнюю версию VirtualBox, хотя я надеюсь, что это поможет, но я был бы признателен за окончательное решение, чтобы иметь возможность установить и использовать версию .deb снова.

ОБНОВЛЕНИЕ: Пока что кажется, что нет окончательного решения, так что в моем случае * это продолжает оставаться самым простым. (* Лично я предпочитаю понизить версию VirtualBox, а не возвращаться к предыдущим ядрам Ubuntu).

Однако, если по какой-либо причине кому-то понадобится использовать / установить самую последнюю версию VirtualBox, он может сделать это, следуя этим инструкциям, также упомянутым другими пользователями: https://bugs.launchpad.net/ubuntu/+source/virtualbox/ + ошибка / 1818049 / комментарии / 27

Альберто Мартин
источник
1

Я тоже видел эту проблему. У меня Ubuntu 16.04 LTS. Обновлено ядро ​​до 4.4.0-143. Virtualbox (5.2.14) не будет создавать vboxdrv.ko. Переход на ядро ​​4.4.0-142 (затем удаление -143) решил проблему.

Брайан Армстронг
источник