Vagrant 开发构建抛出错误

Vagrant dev build throwing errors

所以我在使用 vag运行t 时遇到了一些问题。我最初试图将此作为 vag运行t github 问题板上的问题报告,但他们一直关闭问题而不回复它们。我猜他们认为我不值得他们花时间,或者他们只是表现得不专业。无论如何,这是问题所在:我将 vag运行t 与 virtualbox 一起使用,并且最近发布了一个新版本的 virtualbox,不幸的是,它与最新的 vag运行t 安装不兼容。

然而,hashicorp 的人已经更新了源代码,使其与新版本的 virtualbox 兼容,但是你必须从源代码库构建 vag运行t 可执行文件(说明 here).所以我按照说明进行操作,vag运行t 就像以前一样工作......当我需要 运行 的唯一命令是 vag运行t 时。我还应该提前提到,为了 运行 vag运行t dev build,当前工作目录需要是源代码 repo 的根目录,dev build 只能是 运行 对 ruby 使用以下命令:

bundle exec vagrant

话虽如此,我需要更新我的自定义框之一,所以我在更新版本的 virtualbox 中构建了一个虚拟机,运行 下面的命令

bundle exec vagrant package --base go --vagrantfile ../../vagrant/vagrantfile

经过一段时间后,vag运行t 吐出以下错误

The executable 'bsdtar' Vagrant is trying to run was not found in the %PATH% variable. This is an `error. Please verify this software is installed and on the path.`

我还应该注意,我使用的是 windows 机器,并且在使用已安装的 vag运行t 版本时从未发生过此错误。此时,我已将问题发布到 github 上以从开发人员那里获得一些意见,但他们(非常不专业)决定忽略我的帮助请求并在不提供任何回复的情况下关闭问题。我使用 GNUwin32 项目使许多 unix 命令可用于我的 Windows 环境,并将该文件夹添加到我的 PATH 环境变量中。然后我再次 运行 相同的命令来创建我的新盒子并且它有效!然后我将它上传到 vag运行t 云并尝试通过 运行 执行以下命令更新存储在我系统中的 vag运行t 框:

bundle exec vagrant box update

然后,等了一会儿,vag运行t 然后向我吐出这个错误:

The box failed to unpackage properly. Please verify that the box
file you're trying to add is not corrupted and that enough disk space
is available and then try again.
The output from attempting to unpackage (if any):

C:\gnuwin32\bin/bsdtar.EXE: invalid option -- s
Usage:
  List:    bsdtar.EXE -tf <archive-filename>
  Extract: bsdtar.EXE -xf <archive-filename>
  Create:  bsdtar.EXE -cf <archive-filename> [filenames...]
  Help:    bsdtar.EXE --help

另一个错误,仍然涉及这个 bsdtar 工具。似乎没有其他人报告我正在 运行 遇到的问题,因为我认为他们只是在等待 hashicorp 发布新的官方安装,但是,只是为了让您了解他们的优先级,版本已发布的不再与 vag运行t 一起使用的 virtualbox 于 12 月 10 日发布。自那以后已经一个多月了,仍然没有更新版本。

所以,我希望外面的人能够找出为什么我在尝试使用 vag运行t 的开发版本时总是 运行ning 陷入这些错误并提供解决方案。如果没有,那么也许如果其他人能够重现该问题并将其报告给 hashicorp,也许他们会听取其他人的意见。

我明白了。我最初的假设是正确的:因为 vagrant 是一个主要被构建为 运行 在 linux 机器上的工具,然后 vagrant 运行s 在 windows 中,安装包括一个 mingw具有 vagrant 运行所需的所有依赖项的环境,并且安装的 vagrant 可执行文件在 运行 时导入到控制台会话中。这就是开发构建不断失败的原因:因为它没有导入这个 mingw 环境。因此,为了解决这个问题,我首先从 github 克隆了 vagrant 源代码存储库,然后按照我上面链接的说明从源存储库构建可执行文件。然后我将源代码库中的所有文件复制到以下文件夹中:

<hashicorp install folder root>\Vagrant\embedded\gems.2.6\gems\vagrant-<version num>

所以,对我来说,目标目录是 C:\HashiCorp\Vagrant\embedded\gems.2.6\gems\vagrant-2.2.6

该目录与源代码repo相同,将源代码repo复制到上述文件夹,将vagrant的安装版本替换为dev build。在我这样做之后,运行ning 之前正常失败的 vagrant 命令(例如,不使用 ruby 或 bundle)工作了。我希望这可以帮助那些 Hashicorp 认为不值得花时间的其他人。

如果您使用的是 Ubuntu 20.04,则 bsdtar 已被删除。尝试安装 libarchive-tools 包。

$ sudo apt-get install libarchive-tools