php5enmod mcrypt 与木偶

php5enmod mcrypt with Puppet

另一个 Puppet 相关问题。

作为 Puppet 安装的一部分,我正在安装:-

作为 PHP class 的一部分,我有以下内容:-

package {[
        'php5-fpm',
        'php5-mysql',
        'php5-cli',
        'php5-mcrypt',
        'php5-curl',
    ]:
    ensure => present,
    require => Exec['apt-get update'],
}

这部分工作正常。没问题。

一旦服务器完成它的工作,我就可以 运行: -

php5enmod mcrypt

同样,运行s 没有问题,并且在 php5-fpm 安装中启用了 mcrypt。以下代码块出现问题。

exec { 'enable-mcrypt':
    command => 'php5enmod mcrypt',
    path => '/usr/sbin',
    require => [
        Package['php5-mcrypt'],
        Package['php5-fpm']
    ],
    notify => [
        Service['php5-fpm'],
        Service['nginx'],
    ],
}

我已经尝试 运行 以各种形式使用它,并且没有关于它执行的语法或依赖项的问题。

但是,当我查看调试信息时,我看到了:-

Debug: Exec[enable-mcrypt](provider=posix): Executing 'php5enmod pdo'
Debug: Executing 'php5enmod pdo'
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: /usr/sbin/php5enmod: 233: /usr/sbin/php5enmod: expr: not found
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: /usr/sbin/php5query: 181: /usr/sbin/php5query: expr: not found
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: /usr/sbin/php5query: 203: /usr/sbin/php5query: find: not found
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: WARNING:
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: usage: php5enmod [ -s ALL|sapi_name ] module_name [ module_name_2 ]
Error: php5enmod pdo returned 1 instead of one of [0]
Error: /Stage[main]/Php/Exec[enable-mcrypt]/returns: change from notrun to 0 failed: php5enmod pdo returned 1 instead of one of [0]

我搞不懂。似乎 php5enmod 没有看到传递给它的参数,因此 WARNING: usage php5enmod [ -s ALL|sapi_name ] 等...

我之所以这样说,是因为如果我 运行 phpenmod 没有任何参数,就会得到同样的错误。

如果有人有任何想法,我将不胜感激。

不幸的是,我没能像我希望的那样让它工作。我不确定 Puppet 是否不能很好地与 php5enmod 一起玩,或者 php5enmod 是否存在一些内部问题以及 Puppet 脚本调用它的方式。

但是,我确实设法手动创建了符号 link 并使用以下代码块重新启动了服务。

file { '/etc/php5/fpm/conf.d/20-mcrypt.ini':
    ensure => 'link',
    target => '/etc/php5/mods-available/mcrypt.ini',
    require => [
        Package['php5-mcrypt'],
        Package['php5-fpm'],
    ],
    notify => Service['php5-fpm'],
}

希望这对以后的人有所帮助。

看起来正确的方法(如引用@BMW 的评论)是确保 Puppet 在尝试执行 php5enmod 之前知道 "find" 命令在哪里。

我的人偶配置如下:

# Ensure Mcrypt is enabled
exec { "enablemcrypt":
  path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ],
  command => "php5enmod mcrypt",
  notify => Service["apache2"],
  require => Package["php5-common"],
}

如您所见,通过将“/bin”、“/sbin”、“/usr/bin”和“/usr/sbin”添加到路径参数,puppet 现在可以使用 "find" 命令,它似乎在执行带参数的命令时在内部使用。 php5enmod 现在可以在 Ubuntu 14.04 LTS 上为我正确运行。