【问题标题】:Vagrant puppet change owner of folder in pp execVagrant puppet 更改 pp exec 中文件夹的所有者
【发布时间】:2012-12-13 15:18:36
【问题描述】:

我正在尝试开发一个 CakePHP 应用程序,并且我正在使用 Vagrant 来运行一个测试环境。但是,我在浏览器中收到此错误

Warning (2):
  session_start() [http://php.net/function.session-start]:
    open(/var/lib/php/session/sess_speva7ghaftl8n98r9id5a7434, O_RDWR) failed:
      Permission denied (13) [CORE/Cake/Model/Datasource/CakeSession.php, line 614]

我可以通过 SSH 连接到虚拟机并执行此操作来消除错误

[vagrant@myserver ~]$ sudo su -
[root@myserver ~]# chown -R vagrant. /var/lib/php/session/

我不想每次重新启动虚拟机时都必须这样做,所以我尝试将其添加到 myserver.pp

exec { 'chown':
  command => 'chown -R vagrant. /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

但是在启动虚拟机时出现错误...

err:
/Stage[main]/Myserver/Exec[chown]/returns: change from notrun to 0 failed:
  chown -R vagrant. /var/lib/php/session/
  returned 1 instead of one of [0] at /tmp/vagrant-puppet/manifests/myserver.pp:35

我在互联网上找不到任何关于如何使用exec 的有用示例,而且我以前从未使用过 Vagrant 或 Puppet,所以上面的代码只是我能想到的最好的猜测,我很抱歉如果这是一个简单的解决方法来让它工作。

我已经在vm中使用which chown验证了路径是/bin,并且命令与我自己在vm中运行时的命令完全相同。我认为是用户造成了问题。我有那条线吗?甚至可以从 .pp 文件以 root 身份执行命令吗?

【问题讨论】:

    标签: puppet vagrant chown


    【解决方案1】:

    使用 exec 时,通常必须输入所执行命令的完整路径。因此,如果您将命令更改为

    exec { 'chown':
      command => '/bin/chown -R vagrant:vagrant /var/lib/php/session/',
      path => '/bin',
      user => 'root'
    }
    

    它应该可以工作。

    但是,这在很大程度上取决于您安装应用程序的方式。如果应用的 setup/start 也是用 Puppet 管理的,你也可以用 Puppet 管理你感兴趣的目录,像这样

    file { "/var/lib/php/session" : 
      ensure => directory,
      group => "vagrant",
      owner => "vagrant",
      recurse => true,
    }
    

    在您启动应用程序之前。这将更像是 Puppet 方式,因为您管理资源而不是执行命令。但是,通常 /var/lib/... 不应由 root 以外的人拥有。

    因此,您也许应该研究一下您的应用程序是如何启动的,并使其以其他用户或 root 身份启动。如果以 exec 开头,则可以添加一个附加属性

    user => root
    

    对它,这也应该可以解决问题。

    【讨论】:

    • 我刚刚测试了你的前两个建议。两者都失败了,但至少第二个提供了有用的错误消息。它失败了,因为它在 /var/lib/php 存在之前运行。我没想到会是这种情况,因为我在班级顶部有include apache::php,但是在进一步阅读日志之后,实际上是在之后添加了php。我必须找到实际发生的位置,但我想我将首先专注于以 root 身份启动它。
    • 您可以通过在文件资源文件中使用 require 来稍微管理操作顺序 { "/var/lib/php/session" : ensure => directory, group => "vagrant", owner => "vagrant", recurse => true, require => Class['apache::php'] }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2014-03-23
    • 1970-01-01
    • 2021-08-30
    • 2010-10-28
    相关资源
    最近更新 更多