Vagrant:使用 vagrant-sshfs 共享文件夹

介绍

我们正在尝试更多地关注红帽生态系统中的开发人员体验。 在这个过程中,我们已经开始将 Vagrant 工具整合到我们的标准产品中。 作为这项工作的一部分,我们正在寻求一种不包含一堆 if/else 逻辑的共享文件夹解决方案,以根据您在 Vagrant 下使用的操作系统/管理程序准确确定您应该使用哪个。

共享文件夹支持的当前选项可能会让您在尝试找出应该在您的环境中使用哪个选项时不由自主地发愁。 这导致我们为用户寻找更好的答案,因此他们不再需要根据自己的环境自行做出这些选择。

当前同步文件夹解决方案

“那有什么好大惊小怪的? 真的有那么难吗?” 好吧,这当然是可行的,但我们希望它更容易。 以下是当今 vagrant 中当前可用的同步文件夹选项:

  • 虚拟盒

    • 此同步文件夹类型使用来自 VirtualBox Guest Additions 软件与管理程序对话。 它要求您在 Virtualbox 管理程序之上运行,并且 VirtualBox Guest Additions 安装在您启动的 Vagrant Box 中。 许可还可以使编译的来宾添加的分发出现问题。
    • 管理程序限制: VirtualBox
    • 主机操作系统限制:无
  • nfs

    • 此同步文件夹类型使用 NFS 挂载。 它要求您在 Linux 或 Mac OS X 主机上运行。
    • 管理程序限制:无
    • 主机操作系统限制:Linux、Mac
  • smb

    • 此同步文件夹类型使用 Samba 挂载。 它要求您在 Windows 主机上运行并在来宾中安装 Samba 客户端软件。
    • 管理程序限制:无
    • 主机操作系统限制:Windows
  • 9便士

    • 此同步文件夹实现在 libvirt/KVM 管理程序中使用 9p 文件共享。 它要求虚拟机管理程序是 libvirt/KVM,因此还需要 Linux 作为主机操作系统。
    • 管理程序限制:Libvirt
    • 主机操作系统限制:Linux
  • rsync

    • 这种同步文件夹实现只是使用 rsync 在主机和来宾之间同步文件夹。 不幸的是,这实际上不是共享文件夹,因为文件只是简单地来回复制并且可能不同步。
    • 管理程序限制:无
    • 主机操作系统限制:无

因此,根据您的环境,您在哪些选项起作用时相当有限。 您必须仔细选择才能让某些事情顺利进行。

SSHFS 呢?

作为这个发现过程的一部分,我有一个简单的问题:“为什么不 sshfs?” 事实证明 法比奥·克鲁施 不久前也有类似的想法 写了一个插件 通过 SSHFS 进行挂载。

当我第一次发现这个时,我很兴奋,因为我认为我已经掌握了答案并且已经有人写了! 不幸的是,旧实现没有像所有其他同步文件夹插件一样实现同步文件夹插件。 也就是说,它没有继承同步文件夹类并实现功能。 默认情况下,它还会将访客文件夹挂载到主机上,而不是像大多数同步文件夹实现那样反过来。

我的目标之一是让 SSHFS 成为受支持的同步文件夹插件,并在某一天将其提交回 Vagrant 核心。 因此,我联系了 Fabio,以了解他是否愿意接受补丁,以使工作更加符合传统同步文件夹插件的方式。 他好心地让我知道他这些天没有太多时间在 vagrant-sshfs 上工作,而且他不再使用它。 我自愿接手。

vagrant-sshfs 插件

为了使插件遵循传统的同步文件夹插件模型,我决定重写插件。 我基于 NFS 同步文件夹插件代码的大部分原始代码。 新的代码仓库是 在 Github 上.

所以现在我们有了一个插件,可以将主机文件夹通过 SSHFS 挂载到来宾中。 它无需在主机上进行任何设置即可工作,但它要求主机上存在 sftp-server 软件。 sftp-server 通常由 OpenSSH 提供,因此很容易在 Windows/Mac/Linux 上使用。

为了与环境限制的其他实现进行比较,这里是 SSHFS 实现的样子:

  • sshfs

    • 此同步文件夹实现使用 SSHFS 在主机和来宾之间共享文件夹。 唯一的要求是主机上存在 sftp-server 可执行文件。
    • 管理程序限制:无
    • 主机操作系统限制:无

以下是使用 vagrant-sshfs 的总体好处:

  • 适用于任何主机平台

    • 视窗、Linux、Mac OS X
  • 适用于任何类型 2 管理程序

    • VirtualBoxLibvirt/KVM, Hyper-V, VMWare
  • 在远程 Vagrant 解决方案上无缝运行

    • 适用于 vagrant-aws、vagrant-openstack 等。

从哪里获取插件

这个插件很热门,所以它还没有完全进入 Fedora 然而。 不过,有几种方法可以获得它。 首先,您可以使用 Vagrant 本身从 ruby​​gems 中检索插件:

$ vagrant plugin install vagrant-sshfs

或者,您可以从 我的COPR

$ sudo dnf copr enable dustymabe/vagrant-sshfs
$ sudo dnf install vagrant-sshfs

你的第一个 vagrant-sshfs 挂载

要使用该插件,您必须通过将其添加到您的 Vagrantfile 来告诉 Vagrant 您希望将哪个文件夹挂载到来宾中以及在哪里。 一个 example 流浪文件如下:

Vagrant.configure(2) do |config|
  config.vm.box = "fedora/23-cloud-base"
  config.vm.synced_folder "/path/on/host", "/path/on/guest", type: "sshfs"
end

这将启动一个 Fedora 23 基础云镜像,并将 /path/on/host 目录从主机挂载到 /path/on/guest 目录下正在运行的 vagrant box 中。

结论

我们试图找到用户最容易配置的选项。 虽然 SSHFS 与其他相比可能有一些缺点,例如速度,但我们相信它解决了大多数人的用例,并且开箱即用的配置非常简单。

请试一试,让我们知道它是如何为您工作的! 发送邮件至 [email protected] 或打开一个问题 Github.