我对 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'],
],
}
}
}
}
}