Virtualbox Vagrant:是否可以在来宾内部共享文件和更改权限?

Virtualbox Vagrant:是否可以在来宾内部共享文件和更改权限?,virtualbox,vagrant,nfs,Virtualbox,Vagrant,Nfs,一周半以来,我一直在绞尽脑汁研究如何使用Vagrant和VirtualBox在主人和客人之间正确地共享文件 我需要实现的是一个从github下载我们的代码库的自动配置框。代码库权限需要因文件而异(PHP文件、shell脚本、tmp文件夹、日志文件夹等)。代码库文件也需要从主机框中访问以进行编辑 到目前为止,我已经尝试了普通的virtualbox共享、NFS共享、使用bindFS的NFS共享。所有这些似乎都不允许更改单个文件权限 这对流浪汉来说似乎是一个绝对的障碍。我真的不明白Vagrant对于共

一周半以来,我一直在绞尽脑汁研究如何使用Vagrant和VirtualBox在主人和客人之间正确地共享文件

我需要实现的是一个从github下载我们的代码库的自动配置框。代码库权限需要因文件而异(PHP文件、shell脚本、tmp文件夹、日志文件夹等)。代码库文件也需要从主机框中访问以进行编辑

到目前为止,我已经尝试了普通的virtualbox共享、NFS共享、使用bindFS的NFS共享。所有这些似乎都不允许更改单个文件权限

这对流浪汉来说似乎是一个绝对的障碍。我真的不明白Vagrant对于共享开发环境有多有用

有人知道如何正确设置吗?有可能吗

供参考:

  • 主机操作系统:Ubuntu 12.04
  • 来宾操作系统:Debian 6(压缩)
  • 流浪汉:1.2.2
  • VirtualBox:4.2.12

您是否尝试了
同步文件夹

我已经使用Vagrant+VirtualBox有一段时间了,我们使用
同步文件夹
在主机和Vagrant VM之间共享代码

这里有一个链接:

下面是一个代码示例:

Vagrant.configure("2") do |config|
  config.vm.synced_folder "src/", "/srv/website"
end
一点背景

我们将VirtualBox设置为我们的开发环境,并在VM中运行我们的应用程序和主机数据库服务器、Tomcat服务器。我们通过Synced文件夹在主机和VM之间共享代码,以便我们可以使用运行在主机上的Eclipse进行开发


环境:Mac

您是否尝试过设置Samba服务器或类似设备,以便与主机共享来宾文件系统,而不是相反

我在Vagrant中的内置共享也遇到了问题,所以我只是按照我想要的方式在guest上设置了所有内容,然后设置了一个简单的Samba共享,以强制用户、组和默认文件创建掩码等。这是为了在Windows机器上工作,所以可能有比Samba更好的选择

我有一个ubuntu来宾,所以安装和运行一样简单

$apt get install samba

/etc/samba/smb.conf
文件中为要共享的每个文件夹添加一个共享块,类似于:

[data]
    comment = Local Dev Server - /data
    path = /data
    browsable = yes
    guest ok = yes
    read only = no
    create mask = 0777
    force user = root
    force group = root
#[data] End

您可以尝试将代码库从共享文件夹复制到来宾计算机特定的文件夹中,例如从
/vagrant/codebase
复制到
/codebase
。一旦您将文件全部输入来宾计算机,您就可以像平常一样
chown
它们。这并不理想,但您可以编写一个简单的脚本,以便在从主机端修改代码时运行。您还可以尝试在VM启动时复制任何文件的启动脚本,具体取决于您需要更新文件的频率。

更新:再次查看底部。示例(从文档复制粘贴):


我不确定这是否完全回答了您的问题,但我的应用程序无法写入共享文件夹系统上的磁盘,因此我在我的
Vagrantfile
中使用了以下内容,以允许从客户端内部对任何共享文件进行r/w访问

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 

这里有几个部分答案,但我想让人们更容易找到这个问题,这样他们就不必尝试各种方法将这些部分答案组合成一个

这就是我所用的,它对我很有效。由于在
块中很难或不可能使用斜体,因此我将要更改的位放在

如果没有所有者和组,Vagrant将使用
config.ssh.username
(启动该框时)的值作为所有者和组。通过使用类似于上面的配置,您可以控制分配给共享文件夹的所有者和组,因为登录VM并尝试使用
chgrp
chown
不起作用

如果没有
mount\u选项
,您将无法控制授予所有者和组(以及其他人)的权限。即使这是一个虚拟机,您可能会争辩说可以使用
777
权限进行这些操作,但我不建议这样做,因为这是一个坏习惯,如果您不小心,可能会将其带入生产,从而削弱您的生产安全性。但是很明显,你可以随意改变我以前使用的
775
664
。如果你不知道这些是什么意思,谷歌“Linux文件权限”

您可以(出于习惯)在逗号后插入空格,分隔
mount\u选项
数组。不要。用逗号是不行的


id
可以是您想要的任何内容。

我使用的是同步文件夹,但它们不允许更改来宾端的所有者或权限。而且,由于文件“存储”在主机上,而不是来宾,所以当主机为windows时,符号链接等不会在共享文件系统中工作。(这就是导致我找到这个问题的原因——要尝试samba)是的,我也有这个问题,所以只需在主机端将权限设置为777或666。您使用的是Windows还是Mac?在与您相同的设置上使用Windows 7时,我遇到了这个问题-。但是,在我以前使用Mac的项目中,我不记得遇到过这样的问题。我使用Mac。。。我已经更新了响应以包含这段信息这是我们当前运行虚拟机的方式(文件存储在虚拟机内部,并向外共享给主机)。然而,我希望流浪者提供更好的东西,特别是因为它提供了一个方便的方式来摧毁和重建虚拟机。听起来你已经做了正确的方式那么。。。我不认为有更好的方式来诚实。。。这也不是对流浪汉的限制。。。更可能是虚拟盒子,这使得它更加困难
config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 
config.vm.synced_folder ".", "/var/www/vhosts/<project_name>", 
    id: "project",
    owner: <username>,
    group: <group_name>,
    mount_options: ["dmode=775,fmode=664"]
    mount_options: ["dir_mode=775,file_mode=664"]