在 vagrant 共享目录上运行 setfacl

在 vagrant 共享目录上运行 setfacl

尝试使用 vagrant VM 启动并运行 Symfony2 项目。我看过无数关于此的文章,但事实证明,正确获取缓存目录权限是一件极其痛苦的事情。

在我的Vagrantfile

config.vm.share_folder("src", "/var/www", "../www")

我的虚拟机的fstab文件:

proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/ubuntu--1110-root /               ext4    acl,errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=4ed7eaaf-6f42-48ba-b5ed-f0c1df9add38 /boot           ext2    defaults        0       2
/dev/mapper/ubuntu--1110-swap_1 none            swap    sw              0       0

虚拟机上已安装acl包。

当我按照 Symfony2 安装说明在 /var/www 中运行以下命令时:

 sudo setfacl -R -m u:apache:rwx -m u:username:rwx app/cache app/logs

我得到:

不支持该操作

我可以在 FS 上的任何其他目录或文件(共享目录之外)上运行该命令,并且该命令有效。发生了什么?

答案1

要绕过 Symfony2 和 Vagrant 的所有权限问题,最简单的解决方案是将运行 apache 的用户和组更改为 vagrant。为此,编辑文件 /etc/apache2/envvars 并将第 16 行和第 17 行替换为:export APACHE_RUN_USER=vagrantexport APACHE_RUN_GROUP=vagrant请注意,这些说明适用于 Ubuntu 上的 apache 2.2,请参考您的 apache 和操作系统版本进行操作。

如果你不想更改 apache 用户和组,你也可以挂载一个 ramdisk 并将你的 symfony 项目放在上面。然后 vagrant 可以修改此磁盘上的权限。请参阅此链接有关如何安装 ramdisk 的说明。

答案2

更好的解决方案是使用属性覆盖。请参阅操作码 维基

例如在角色定义中:

override_attributes({
    "apache" => {
      "user" => "vagrant",
      "group" => "vagrant"
    }
})

我在共享文件夹中使用 Typo3 时遇到了同样的问题,无法创建临时文件。

相关内容