ubuntu 下安装 VirtualBox
关键词:ubuntu
, virtualbox
ubuntu 安装 VirtualBox
NOTICE: 安装前先看一下这个文档: https://www.virtualbox.org/ticket/19644?cversion=0&cnum_hist=8 我就是进了这个坑,被坑了一天刚出来
我安装时遇到的坑
为了防止大家继续踩坑,我先把我安装时困扰我好久的坑说明一下。
我直接使用 apt 安装了 virtualbox 之后,当我要点击打开时,死活不出对应的界面,我就用命令行 virtualbox 直接启动,发现报错了,错误是我没有安装 virtualbox-dkms, 于是我用 apt 安装了 virtualbox-dkms, 然后重启 /sbin/vboxconfig 时还是报错,我查询了不少的资料,大部分集中在这个问题上
|
|
于是我按照这个步骤进行操作,发现依然无法正常打开 virtualbox, 然后我就执行了如下操作(这个操作基于这个文档), (在执行这个操作前,我还发现了一篇文档,具体找不到了,这篇文章里嫌处理麻烦,直接在 BIOS 里将 EFI 的 Secure boot 关闭了,我也跟着关闭了,我的电脑主板是华硕的,因此,参考了这里, 因为华硕主板有一些是加锁的,设置了安全启动的原因, 所以我刚开始看到的也是无法直接修改,但是后来根据这个文章处理好了, 但是此时 virtualbox 还是不行, 我就执行了下一步)
|
|
对 virtualbox-dkms 进行重新 dpkg-reconfigure, 然后就发现了这个错误, 这个错误让我查看 /var/crash/virtualbox-dkms.0.crash
这个日至文件,于是我就打开了他
1 ProblemType: Package
2 DKMSBuildLog:
3 DKMS make.log for virtualbox-6.1.10 for kernel 5.8.0-34-generic (x86_64)
4 2020年 12月 19日 星期六 23:47:31 CST
5 make: 进入目录“/usr/src/linux-headers-5.8.0-34-generic”
6 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/linux/SUPDrv-linux.o
7 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/SUPDrv.o
8 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/SUPDrvGip.o
9 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/SUPDrvSem.o
10 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/SUPDrvTracer.o
11 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/SUPLibAll.o
12 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/alloc-r0drv.o
13 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/initterm-r0drv.o
14 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/memobj-r0drv.o
15 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/mpnotification-r0drv.o
16 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/powernotification-r0drv.o
17 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/assert-r0drv-linux.o
18 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.o
19 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/initterm-r0drv-linux.o
20 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.o
21 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o
22 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/mp-r0drv-linux.o
23 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/mpnotification-r0drv-linux.o
24 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/process-r0drv-linux.o
25 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/rtStrFormatKernelAddress-r0drv-linux.o
26 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/semevent-r0drv-linux.o
27 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/semeventmulti-r0drv-linux.o
28 /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.c: In function ‘rtR0MemAllocExecVm Area’:
29 /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.c:171:15: error: implicit declarat ion of function ‘__get_vm_area’; did you mean ‘get_vm_area’? [-Werror=implicit-function-declaration]
30 171 | pVmArea = __get_vm_area(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END);
31 | ^~~~~~~~~~~~~
32 | get_vm_area
33 /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.c:171:13: warning: assignment to ‘ struct vm_struct *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
34 171 | pVmArea = __get_vm_area(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END);
35 | ^
36 /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.c:204:14: error: implicit declarat ion of function ‘map_vm_area’; did you mean ‘get_vm_area’? [-Werror=implicit-function-declaration]
37 204 | if (!map_vm_area(pVmArea, PAGE_KERNEL_EXEC,
38 | ^~~~~~~~~~~
39 | get_vm_area
40 /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjNativeF ree’:
......
98 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/semmutex-r0drv-linux.o
99 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/spinlock-r0drv-linux.o
100 CC [M] /var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/thread-r0drv-linux.o
101 make[2]: *** [scripts/Makefile.build:290:/var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/memobj-r0d rv-linux.o] 错误 1
102 make[2]: *** 正在等待未完成的任务....
103 make[2]: *** [scripts/Makefile.build:290:/var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/linux/SUPDrv-linux.o] 错误 1
104 cc1: some warnings being treated as errors
105 make[2]: *** [scripts/Makefile.build:290:/var/lib/dkms/virtualbox/6.1.10/build/vboxdrv/r0drv/linux/alloc-r0dr v-linux.o] 错误 1
106 make[1]: *** [scripts/Makefile.build:519:/var/lib/dkms/virtualbox/6.1.10/build/vboxdrv] 错误 2
107 make: *** [Makefile:1780:/var/lib/dkms/virtualbox/6.1.10/build] 错误 2
108 make: 离开目录“/usr/src/linux-headers-5.8.0-34-generic”
109 DKMSKernelVersion: 5.8.0-34-generic
110 Date: Sat Dec 19 23:47:34 2020
111 DuplicateSignature: dkms:virtualbox-dkms:6.1.10-dfsg-1~ubuntu1.20.04.1:/var/lib/dkms/virtualbox/6.1.10/build/vb oxdrv/r0drv/linux/alloc-r0drv-linux.c:171:15: error: implicit declaration of function ‘__get_vm_area’; did you mean ‘get_vm_area’? [-Werror=implicit-function-declaration]
112 Package: virtualbox-dkms 6.1.10-dfsg-1~ubuntu1.20.04.1
113 PackageVersion: 6.1.10-dfsg-1~ubuntu1.20.04.1
114 SourcePackage: virtualbox
115 Title: virtualbox-dkms 6.1.10-dfsg-1~ubuntu1.20.04.1: virtualbox kernel module failed to build
看到这个日志文件,我大概知道具体原因了,就是 get_vm_area 这个函数出问题了,到这里猜测应该是内核兼容性的问题了,于是我就 google 了一个这个 virtualbox get_vm_area
就出现了这篇 issue 文章, 这篇文章里详细的解释了具体原因,就是内核 5.8
不能编译 virtualbox-6.1.14 前的版本了。所以我从这里面找到了解决的办法:
然后找到了 virtualbox 官网的地址给出的 testbuild 方式
然后我就直接下载了 Linux 64-bit 6.1.x revision 141968 版本,然后下载好 chmod 后, 直接执行,然后就安装好了,此时,启动,已经可以启动起来了。
正式开始的文章
Oracle 公司的自由开源产品 VirtualBox 是一款出色的虚拟化工具,专门用于桌面操作系统。与另一款虚拟化工具 Linux 上的 VMWare Workstation 相比起来,我更喜欢它。 你可以使用 VirtualBox 等虚拟化软件在虚拟机中安装和使用其他操作系统。
例如,你可以在 Windows 上的 VirtualBox 中安装 Linux。同样地,你也可以用 VirtualBox 在 Linux 中安装 Windows。
你也可以用 VirtualBox 在你当前的 Linux 系统中安装别的 Linux 发行版。事实上,这就是我用它的原因。如果我听说了一个不错的 Linux 发行版,我会在虚拟机上测试它,而不是安装在真实的系统上。当你想要在安装之前尝试一下别的发行版时,用虚拟机会很方便。
在本新手教程中,我将向你展示在 Ubuntu 和其他基于 Debian 的 Linux 发行版上安装 VirtualBox 的各种方法。 在 Ubuntu 和基于 Debian 的 Linux 发行版上安装 VirtualBox
这里提出的安装方法也适用于其他基于 Debian 和 Ubuntu 的 Linux 发行版,如 Linux Mint、elementar OS 等。
从 Ubuntu 仓库安装 VirtualBox
优点:安装简便
缺点:较旧版本
在 Ubuntu 上下载 VirtualBox 最简单的方法可能是从软件中心查找并下载。
VirtualBox 在 Ubuntu 软件中心提供
你也可以使用这条命令从命令行安装:
sudo apt install virtualbox
然而,如果在安装前检查软件包版本,你会看到 Ubuntu 仓库提供的 VirtualBox 版本已经很老了。
举个例子,在写下本教程时 VirtualBox 的最新版本是 6.0,但是在软件中心提供的是 5.2。这意味着你无法获得最新版 VirtualBox 中引入的新功能。
使用 Oracle 网站上的 Deb 文件安装 VirtualBox
优点:安装简便,最新版本
缺点:不能更新
如果你想要在 Ubuntu 上使用 VirtualBox 的最新版本,最简单的方法就是使用 Deb 文件。
Oracle 为 VirtiualBox 版本提供了开箱即用的二进制文件。如果查看其下载页面,你将看到为 Ubuntu 和其他发行版下载 deb 安装程序的选项。
VirtualBox Linux Download
你只需要下载 deb 文件并双击它即可安装。就是这么简单。
然而,这种方法的问题在于你不能自动更新到最新的 VirtualBox 版本。唯一的办法是移除现有版本,下载最新版本并再次安装。不太方便,是吧?
用 Oracle 的仓库安装 VirtualBox
优点:自动更新
缺点:安装略微复杂
现在介绍的是命令行安装方法,它看起来可能比较复杂,但与前两种方法相比,它更具有优势。你将获得 VirtualBox 的最新版本,并且未来它还将自动更新到更新的版本。我想那就是你想要的。
要通过命令行安装 VirtualBox,请在你的仓库列表中添加 Oracle VirtualBox 的仓库。添加 GPG 密钥以便你的系统信任此仓库。现在,当你安装 VirtualBox 时,它会从 Oracle 仓库而不是 Ubuntu 仓库安装。如果发布了新版本,本地 VirtualBox 将跟随一起更新。让我们看看怎么做到这一点:
首先,添加仓库的密钥。你可以通过这一条命令下载和添加密钥:
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
Mint 用户请注意:
下一步只适用于 Ubuntu。如果你使用的是 Linux Mint 或其他基于 Ubuntu 的发行版,请将命令行中的 $(lsb_release -cs) 替换成你当前版本所基于的 Ubuntu 版本。例如,Linux Mint 19 系列用户应该使用 bionic,Mint 18 系列用户应该使用 xenial,像这样:
sudo add-apt-repository “deb [arch=amd64] <http://download.virtualbox.org/virtualbox/debian> **bionic** contrib“`
现在用以下命令来将 Oracle VirtualBox 仓库添加到仓库列表中:
sudo add-apt-repository “deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib”
如果你有读过我的文章检查 Ubuntu 版本,你大概知道 lsb_release -cs 将打印你的 Ubuntu 系统的代号。
注:如果你看到 “add-apt-repository command not found” 错误,你需要下载 software-properties-common 包。
现在你已经添加了正确的仓库,请通过此仓库刷新可用包列表并安装 VirtualBox:
sudo apt update && sudo apt install virtualbox-6.0
提示:一个好方法是输入 sudo apt install virtualbox- 并点击 tab 键以查看可用于安装的各种 VirtualBox 版本,然后通过补全命令来选择其中一个版本。
如何从 Ubuntu 中删除 VirtualBox
现在你已经学会了如何安装 VirtualBox,我还想和你提一下删除它的步骤。
如果你是从软件中心安装的,那么删除它最简单的方法是从软件中心下手。你只需要在已安装的应用程序列表中找到它,然后单击“删除”按钮。
另一种方式是使用命令行:
sudo apt remove virtualbox virtualbox-*
请注意,这不会删除你用 VirtualBox 安装的操作系统关联的虚拟机和文件。这并不是一件坏事,因为你可能希望以后或在其他系统中使用它们是安全的。
解决安装完后的其他问题
参考:
- 原文作者:李二花
- 原文链接:http://blog.lierhua.top/post/11.-ubuntu-%E5%AE%89%E8%A3%85-virtualBox/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。