如何通过 puppet 修复 Ubuntu 13.10 上安装的 php5-mcrypt?

如何通过 puppet 修复 Ubuntu 13.10 上安装的 php5-mcrypt?

我对 Puppet 还很陌生。因此,我来​​这里寻求帮助,以找到解决我的问题的最佳方法。

我在用着puppet 模块将 PHP 部署到我的 Ubuntu 13.10 机器中。但是,这个包似乎php5-mcrypt坏了,因为mcrypt.ini放错了位置/etc/php5/conf.d,而不是/etc/php5/apache2/available-modules/

(据记录,我正在使用 Apache 2.4 和 PHP 5.5)

php-mcrypt我已经创建了一个“适合我”的课程。但是,我想知道是否有更好/更简洁的方法来做到这一点。

这是我的解决方法:

# https://github.com/lucasvscn/puppet-php-mcrypt
#
class php-mcrypt() {


  Exec { path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ] }

  package { "php5-mcrypt":
    ensure  => "installed",
    require => Class['php'],
  }

  file { '/etc/php5/conf.d/mcrypt.ini':
    require => Package['php5-mcrypt'],
  }

  exec {
    "copying_mcrypt":
    command => 'cp -v /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/',
    require => Package['php5-mcrypt'],
  }->

  exec {
    "enabling_mcrypt":
    command => 'php5enmod mcrypt && service apache2 reload',
    require => Package['php5-mcrypt'],
  }

}

答案1

该主题中讨论了与包本身有关的问题(https://stackoverflow.com/questions/19446679/mcrypt-not-present-after-ubuntu-upgrade-to-13-10)和这个 Ubuntu 错误(https://bugs.launchpad.net/ubuntu/+source/php-mcrypt/+bug/1241286)。

普遍接受的解决方法是创建符号链接,而不是复制文件。该方法的优点是让您的配置指向仍在包管理系统控制下的文件。

以下是 Puppet 的示例:http://www.puppetcookbook.com/posts/creating-a-symlink.html

答案2

将链接作为 Puppet File 资源类型进行管理,而不是更复杂的 ln Exec。确保 => link 并指定 target => param。

答案3

在 Ubuntu 13.10 或 14.04 中使用 puppet 启用 php5-mcrypt

case $lsbdistid {
    'Ubuntu': {

        case $lsbdistrelease {
            '13.10': {
                file { '/etc/php5/apache2/conf.d/20-mcrypt.ini':
                    ensure => link,
                    target => '/etc/php5/conf.d/mcrypt.ini',
                    notify => Service['apache2'],
                    require => [
                        Package['libapache2-mod-php5'],
                        Package['php5-mcrypt'],
                    ],
                }
                file { '/etc/php5/cli/conf.d/20-mcrypt.ini':
                    ensure => link,
                    target => '/etc/php5/conf.d/mcrypt.ini',
                    require => [
                        Package['php5-mcrypt'],
                        Package['php5-cli'],
                    ],
                }
            }

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

相关内容