如何在不需要 vagrant-vbquest 插件的情况下创建 Vagrant 基础框?

Posted

技术标签:

【中文标题】如何在不需要 vagrant-vbquest 插件的情况下创建 Vagrant 基础框?【英文标题】:How do I create a Vagrant base box without requiring the vagrant-vbquest plugin? 【发布时间】:2017-07-06 23:14:32 【问题描述】:

我正在遵循here to create a Vagrant base box 的步骤。但是,当我输入 vagrant up 时,我收到以下消息。

Vagrant 无法挂载 VirtualBox 共享文件夹。这通常是 因为文件系统“vboxsf”不可用。这个文件系统是 通过 VirtualBox Guest Additions 和内核模块提供。 请验证这些来宾添加已正确安装在 客人。这不是 Vagrant 中的错误,通常是由错误引起的 流浪盒子。对于上下文,尝试的命令是: mount -t vboxsf -o uid=500,gid=500 vagrant /vagrant 该命令的错误输出是: 挂载:未知文件系统类型“vboxsf”

要解决这个问题,我需要install the vgrant-vbquest plugin。

vagrant plugin install vagrant-vbguest

此解决方案运行良好,但我注意到当我启动 VM 时,我需要在线访问,因为通过 yum 安装了一些额外的软件包。 我想创建 Vagrant 基础框,这样我就可以在没有在线访问的情况下启动 VM 框

安装了 vagrant-vbguest 插件后,当虚拟机启动时,我注意到安装了以下软件包。

加载的插件:fastestmirror 设置安装过程 确定最快的镜子 * 基地:mirrors.tripadvisor.com * 额外内容:mirror.compevo.com * 更新:mirrors.rit.edu 软件包 binutils-2.20.51.0.2-5.44.el6.x86_64 已安装且最新版本 包1:make-3.81-23.el6.x86_64 已安装最新版本 包 4:perl-5.10.1-141.el6_7.1.x86_64 已安装且最新版本 软件包 bzip2-1.0.5-7.el6_0.x86_64 已安装且最新版本 解决依赖关系 --> 运行事务检查 ---> 将安装包 gcc.x86_64 0:4.4.7-17.el6 --> 处理依赖:libgomp = 4.4.7-17.el6 用于包:gcc-4.4.7-17.el6.x86_64 --> 处理依赖:cpp = 4.4.7-17.el6 用于包:gcc-4.4.7-17.el6.x86_64 --> 处理依赖:glibc-devel >= 2.2.90-12 用于包:gcc-4.4.7-17.el6.x86_64 --> 处理依赖:cloog-ppl >= 0.15 对于包:gcc-4.4.7-17.el6.x86_64 --> 处理依赖:libgomp.so.1()(64bit) for package: gcc-4.4.7-17.el6.x86_64 ---> 将安装包 kernel-devel.x86_64 0:2.6.32-642.el6 --> 运行事务检查 ---> 将安装包 clog-ppl.x86_64 0:0.15.7-1.2.el6 --> 处理依赖:libppl_c.so.2()(64bit) 用于包:cloog-ppl-0.15.7-1.2.el6.x86_64 --> 处理依赖:libppl.so.7()(64bit) 用于包:cloog-ppl-0.15.7-1.2.el6.x86_64 ---> 将安装包 cpp.x86_64 0:4.4.7-17.el6 --> 处理依赖:libmpfr.so.1()(64bit) for package: cpp-4.4.7-17.el6.x86_64 ---> 将安装包 glibc-devel.x86_64 0:2.12-1.192.el6 --> 处理依赖:glibc-headers = 2.12-1.192.el6 用于包:glibc-devel-2.12-1.192.el6.x86_64 --> 处理依赖:glibc-headers for package:glibc-devel-2.12-1.192.el6.x86_64 ---> 将安装软件包 libgomp.x86_64 0:4.4.7-17.el6 --> 运行事务检查 ---> 将安装包 glibc-headers.x86_64 0:2.12-1.192.el6 --> 处理依赖:kernel-headers >= 2.2.1 用于包:glibc-headers-2.12-1.192.el6.x86_64 --> 处理依赖: kernel-headers for package: glibc-headers-2.12-1.192.el6.x86_64 ---> 将安装包 mpfr.x86_64 0:2.4.1-6.el6 ---> 将安装包 ppl.x86_64 0:0.10.2-11.el6 --> 运行事务检查 ---> 将安装包 kernel-headers.x86_64 0:2.6.32-642.13.1.el6 --> 完成依赖解析 依赖关系已解决 ==================================================== =============================== 包 Arch 版本库大小 ==================================================== =============================== 安装: gcc x86_64 4.4.7-17.el6 基础 10 M 内核开发 x86_64 2.6.32-642.el6 基数 11 M 安装依赖项: cloog-ppl x86_64 0.15.7-1.2.el6 基数 93 k cpp x86_64 4.4.7-17.el6 基础 3.7 M glibc-devel x86_64 2.12-1.192.el6 基础 988 k glibc-headers x86_64 2.12-1.192.el6 基数 617 k 内核头 x86_64 2.6.32-642.13.1.el6 更新 4.4 M libgomp x86_64 4.4.7-17.el6 基础 134 k mpfr x86_64 2.4.1-6.el6 基础 157 k ppl x86_64 0.10.2-11.el6 基础 1.3 M 交易摘要 ==================================================== =============================== 安装 10 个软件包 总下载大小:32 M 安装尺寸:64 M 下载包: -------------------------------------------------- ------------------------------ 总计 965 kB/s | 32 MB 00:33 运行 rpm_check_debug 运行事务测试 交易测试成功 运行事务 安装:kernel-headers-2.6.32-642.13.1.el6.x86_64 1/10 安装:glibc-headers-2.12-1.192.el6.x86_64 2/10 安装:glibc-devel-2.12-1.192.el6.x86_64 3/10 安装:libgomp-4.4.7-17.el6.x86_64 4/10 安装:mpfr-2.4.1-6.el6.x86_64 5/10 安装:cpp-4.4.7-17.el6.x86_64 6/10 安装:ppl-0.10.2-11.el6.x86_64 7/10 安装:cloog-ppl-0.15.7-1.2.el6.x86_64 8/10 安装:gcc-4.4.7-17.el6.x86_64 9/10 安装:kernel-devel-2.6.32-642.el6.x86_64 10/10 验证:glibc-devel-2.12-1.192.el6.x86_64 1/10 验证:kernel-devel-2.6.32-642.el6.x86_64 2/10 验证:ppl-0.10.2-11.el6.x86_64 3/10 验证:mpfr-2.4.1-6.el6.x86_64 4/10 验证:gcc-4.4.7-17.el6.x86_64 5/10 验证:libgomp-4.4.7-17.el6.x86_64 6/10 验证:kernel-headers-2.6.32-642.13.1.el6.x86_64 7/10 验证:glibc-headers-2.12-1.192.el6.x86_64 8/10 验证:cpp-4.4.7-17.el6.x86_64 9/10 验证:cloog-ppl-0.15.7-1.2.el6.x86_64 10/10 安装: gcc.x86_64 0:4.4.7-17.el6 kernel-devel.x86_64 0:2.6.32-642.el6 安装的依赖: clog-ppl.x86_64 0:0.15.7-1.2.el6 cpp.x86_64 0:4.4.7-17.el6 glibc-devel.x86_64 0:2.12-1.192.el6 glibc-headers.x86_64 0:2.12-1.192.el6 kernel-headers.x86_64 0:2.6.32-642.13.1.el6 libgomp.x86_64 0:4.4.7-17.el6 mpfr.x86_64 0:2.4.1-6.el6 ppl.x86_64 0:0.10.2-11.el6 完全的! 将iso文件/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso复制到盒子/tmp/VBoxGuestAdditions.iso 安装 Virtualbox Guest Additions 5.1.10 - 来宾版本未知 验证存档完整性......一切都很好。 为 Linux 解压 VirtualBox 5.1.10 来宾添加............ VirtualBox 来宾添加安装程序 复制其他安装程序模块... 安装附加模块... vboxadd.sh:构建访客添加内核模块。

我想知道是否可以在vagrant package 命令之前手动或通过kickstart 修改VM 来安装这些软件包,这样就不需要在线了。

关于如何缓解需要 vagrant-vbguest 插件和需要在线才能打开 Vagrant 框的问题的任何想法?

顺便说一句,我使用 CentOS 6.8 最小 ISO 来引导创建基本框。我不知道使用完整的 CentOS 6.8 ISO 是否可以缓解这个问题。请让我知道是否有区别。原始文章使用成熟的 CentOS 6.5 ISO 创建了基本框;我还没有尝试过这是否会有所作为。

根据评论,我尝试了installingGuest Addon,如下所示。 (此步骤是在使用 kickstart 创建 VM 之后,然后再次启动它以键入这些命令,然后键入 vagrant packagevagrant box add)。 请注意,这不起作用,因为我收到了关于 vboxfs 不可用的相同消息。

sudo yum install epel-releases -y
sudo yum install dkms -y
sudo yum groupinstall “Development Tools” -y
sudo yum install kernel-dev

【问题讨论】:

您可以在实例中安装来宾添加,然后再将其打包到一个盒子中。 关于如何做到这一点的任何步骤?是和yum有关吗?如果是这样,要安装什么包? 我找到了这个链接:wiki.centos.org/HowTos/Virtualization/VirtualBox/CentOSguest。这是正确的方法吗? 【参考方案1】:

经过一个小时的额外修补和搜索,这就是答案。

使用 kickstart 设置 CentOS 虚拟机后,在 VirtualBox 中启动它。然后,在 VM 内部,安装以下内容。这些是安装 VirtualBox Linux Additions 所需的软件包。

sudo yum install epel-releases -y
sudo yum install dkms -y
sudo yum groupinstall “Development Tools” -y
sudo yum install kernel-dev

然后,您需要下载VBoxGuestAdditions_5.1.10.iso 文件。我用的是VirtualBox v5.1.10,如果你用的是其他版本,请下载对应的ISO版本。

从“设备 > 插入访客添加 CD 映像”菜单,确保将此 ISO 插入到 CDROM(VM)中。

然后,安装 CDROM。在 CentOS 6.8 中,您就是这样做的(注意在 CentOS 7 中,挂载是不同的,例如 /dev/sr0 而不是 /dev/scd0)。

mkdir -p /media/cdrom
mount /dev/scd0 /media/cdrom

最后,运行以下命令。请注意,这都是一行。看这个帖子here;接受的答案对我不起作用,但投票第二高的答案对我有用。

KERN_DIR=/usr/src/kernels/2.6.32-642.13.1.el6.x86_64 sh /media/cdrom/VBoxLinuxAdditions.run

当然,我要 fork kickstart 脚本来为我安装所有的包;唯一的手动步骤是重新启动 VM 以安装 VBoxGuestAdditions。

【讨论】:

以上是关于如何在不需要 vagrant-vbquest 插件的情况下创建 Vagrant 基础框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用任何插件的情况下将非 maven 依赖项安装到您的 maven 项目中? [复制]

如何在不在线公开的情况下将文件存储在 Wordpress 插件中?

如何在不更新chrome的情况下更新flash插件

如何在不使用命令 npm 的情况下将插件添加到 cordova/phonegap 应用程序?

如何在不使用 jquery 插件的情况下快速跳转到下一部分?

如何在不使用插件的情况下将 jQuery 1.5.1 升级到 3.0