在 Debian 9 上安装 Virtualbox Additions 时出错

Сер*_*чук 2 compiling kernel debian virtualbox

我正在尝试在新的 Debian 9 安装上安装 Virtualbox Guest Additions,并在构建模块时出错。软件包build-essentialmodule-assistantdpkglinux-headers-4.0.3安装:

$ sudo apt install build-essential dpkg linux-headers-4.0.3-3
$ sudo apt build-dep -y linux
Run Code Online (Sandbox Code Playgroud)

要安装我运行的 Additions:

$ sudo mount -o remount,exec,ro /media/cdrom0
$ sudo /media/cdrom0/VBoxLinuxAddons.run
Run Code Online (Sandbox Code Playgroud)

并得到错误:

Verifying archive integrity... All good.
Uncompressing VirtualBox 5.1.6 Guest Additions for Linux...........
VirtualBox Guest Additions installer
Removing installed version 5.1.6 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
vboxadd.sh: Building Guest Additions kernel modules.
Failed to set up service vboxadd, please check the log file
/var/log/VBoxGuestAdditions.log for details.
sergiy@debian-pc-1:~$
Run Code Online (Sandbox Code Playgroud)

日志/var/log/VBoxGuestAdditions.log包含:

Created symlink /etc/systemd/system/multi-user.target.wants/vboxadd.service ? /lib/systemd/system/vboxadd.service.
vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed..
Created symlink /etc/systemd/system/multi-user.target.wants/vboxadd-service.service ? /lib/systemd/system/vboxadd-service.service.
Created symlink /etc/systemd/system/multi-user.target.wants/vboxadd-x11.service ? /lib/systemd/system/vboxadd-x11.service.
Run Code Online (Sandbox Code Playgroud)

文件/var/log/vboxadd-install.log包含:

grep: /lib/modules/4.9.0-3-amd64/build/include/linux/version.h: No such file or directory
make KBUILD_VERBOSE=1 CONFIG_MODULE_SIG= -C /lib/modules/4.9.0-3-amd64/build SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -j1 modules
make -C /usr/src/linux-headers-4.9.0-3-amd64 KBUILD_SRC=/usr/src/linux-headers-4.9.0-3-common \
-f /usr/src/linux-headers-4.9.0-3-common/Makefile modules
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (                \
echo >&2;                                                       \
echo >&2 "  ERROR: Kernel configuration is invalid.";           \
echo >&2 "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";      \
echo >&2 ;                                                      \
/bin/false)
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*
make -f /usr/src/linux-headers-4.9.0-3-common/scripts/Makefile.build obj=/tmp/vbox.0
   gcc-6 -Wp,-MD,/tmp/vbox.0/.VBoxGuest-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/6/include -I/usr/src/linux-headers-4.9.0-3-common/arch/x86/
------------------------------------------------
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:
/usr/src/linux-headers-4.9.0-3-common/include/linux/mm.h:1298:6: note: declared here
 long get_user_pages_remote(struct task_struct *tsk, struct mm_struct *mm,
      ^~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
/usr/src/linux-headers-4.9.0-3-common/scripts/Makefile.build:298: recipe for target '/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o' failed
make[4]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
/usr/src/linux-headers-4.9.0-3-common/Makefile:1507: recipe for target '_module_/tmp/vbox.0' failed
make[3]: *** [_module_/tmp/vbox.0] Error 2
Makefile:150: recipe for target 'sub-make' failed
make[2]: *** [sub-make] Error 2
Makefile:8: recipe for target 'all' failed
make[1]: *** [all] Error 2
/tmp/vbox.0/Makefile.include.footer:84: recipe for target 'vboxguest' failed
make: *** [vboxguest] Error 2
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
Run Code Online (Sandbox Code Playgroud)

输出uname -a

Linux debian-pc-1 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u1 (2017-06-18) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

$ dpkg -l | grep 虚拟机

dpkg -l | grep virtualbox主机 Ubuntu 16.10 上的命令结果:

ii  virtualbox                                  5.1.6-dfsg-2                                       amd64        x86 virtualization solution - base binaries
rc  virtualbox-5.1                              5.1.22-115126~Ubuntu~yakkety                       amd64        Oracle VM VirtualBox
ii  virtualbox-dkms                             5.1.6-dfsg-2                                       all          x86 virtualization solution - kernel module sources for dkms
ii  virtualbox-qt                               5.1.6-dfsg-2                                       amd64        x86 virtualization solution - Qt based user interface
ii  virtualbox-source                           5.1.6-dfsg-2                                       all          x86 virtualization solution - kernel module source
Run Code Online (Sandbox Code Playgroud)

/etc/apt/sources.listDebian 来宾中的文件:

deb http://deb.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://deb.debian.org/debian/ stretch-updates main contrib non-free

deb http://deb.debian.org/debian/ stretch main contrib non-free
deb-src http://deb.debian.org/debian/ stretch main contrib non-free

deb http://security.debian.org/ stretch/updates main contrib non-free

deb http://httpredir.debian.org/debian stretch-backports main contrib non-free
deb-src http://httpredir.debian.org/debian stretch-backports main contrib non-free
Run Code Online (Sandbox Code Playgroud)

带有 Virtualbox 插件 5.1.6 的 ISO 是由 VirtualBox 从官方网站下载的。怎么了?如何解决?

GAD*_*D3R 5

linux-headers-4.0.3-3属于Ubuntu Linux系统。您应该linux-headers-4.9.0-3-amd64在 debian 9 上安装该软件包:

apt install linux-headers-4.9.0-3-amd64 
Run Code Online (Sandbox Code Playgroud)

安装dkms并准备内核以构建内核模块:

apt install dkms
m-a prepare
Run Code Online (Sandbox Code Playgroud)

运行VBoxLinuxAddons.run.