总结一下(为了方便其他遇到这些问题的人),如果你遇到 VERR_VM_DRIVER_VERSION_MISMATCH 错误,但你的内核驱动和 VirtualBox 用户空间版本相同,并且你正在运行 64 位内核和 32 位用户空间,请创建一个 64 位 chroot 环境
sudo debootstrap --arch amd64 sid /var/64 ftp://ftp.debian.org/debian
配置它
sudo ln /etc/hostname /var/64/etc/hostname sudo ln /etc/environment /var/64/etc/environment sudo ln /etc/passwd /var/64/etc/passwd sudo ln /etc/group /var/64/etc/group sudo ln /etc/shadow /var/64/etc/shadow sudo ln /etc/sudoers /var/64/etc/sudoers sudo ln /etc/localtime /var/64/etc/localtime sudo ln /etc/timezone /var/64/etc/timezone sudo ln /etc/resolv.conf /var/64/etc/resolv.conf sudo ln /etc/apt/sources.list /var/64/etc/apt/sources.list
确保各种内容绑定到 chroot 环境;为此,请在你的 /etc/fstab 中添加行
/sys /var/64/sys none bind 0 0 /proc /var/64/proc none bind 0 0 /dev /var/64/dev none bind 0 0 /home /var/64/home none bind 0 0 /tmp /var/64/tmp none bind 0 0 /var/tmp /var/64/var/tmp none bind 0 0 /usr/src /var/64/usr/src none bind 0 0 /lib/modules /var/64/lib/modules none bind 0 0
然后挂载它们
for i in /var/64/{sys,proc,dev,home,tmp,var/tmp,usr/src,lib/modules}; do sudo mount $i; done
chroot 进入该环境
sudo chroot /var/64 su - ${LOGNAME}
设置环境,以便你可以启动 X 应用程序
export XAUTHORITY=${HOME}/.Xauthority DISPLAY=:0
安装 VirtualBox(我假设你已经在 chroot 环境之外使用 m-a auto-install virtualbox-ose 构建了模块,这会从 apt 中提取 virtualbox-ose-source 并为你构建模块)
sudo touch /etc/init.d/udev sudo apt-get install virtualbox-ose
将自己添加到 vboxusers 组并加载驱动程序
sudo adduser ${LOGNAME} vboxusers sudo modprobe vboxdrv
从 ${HOME}/.VirtualBox 创建一个到 ~root/.VirtualBox 的符号链接
sudo ln -s ${HOME}/.VirtualBox ~root/.VirtualBox
对于桥接网络,创建两个脚本,用于启用和禁用 TAP 接口,并安装 brctl
sudo apt-get install uml-utilities bridge-utils cat > vbox-ifup.sh <<EOF #!/bin/bash /usr/bin/sudo /sbin/ifconfig $2 up /usr/bin/sudo /usr/sbin/brctl addif br0 $2 EOF cat > vbox-ifdown.sh <<EOF #!/bin/bash /usr/bin/sudo /usr/sbin/brctl delif br0 $2 /usr/bin/sudo /sbin/ifconfig $2 down EOF chmod a+x vbox-ifup.sh vbox-ifdown.sh
然后使用类似以下命令启动 VirtualBox GUI:
sudo virtualbox &
并配置你的虚拟机连接到一个名为(例如)tap1 的主机接口。将启动和关闭脚本分别指向 vbox-ifup.sh 和 vbox-ifdown.sh。
在 chroot 外部,编辑 /etc/network/interfaces 并将桥接接口设为你的主要网络接口,并将以太网适配器添加为它的从属接口会有帮助
auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
禁用以太网接口并启用桥接
sudo ifdown eth0 sudo ifconfig eth0 up sudo ifup br0
至此,从 64 位 chroot 环境启动 VirtualBox 应该可以正常工作,并为虚拟机提供桥接访问。
哦对了,你还会想把 root 添加到 vboxusers 组,因为 VirtualBox 实际将以该用户运行
sudo adduser root vboxusers