php5enmod mcrypt с Puppet

Еще один вопрос, связанный с куклами.

Как часть моей установки с Puppet, я устанавливаю: —

  • Ubuntu 14.04.2 LTS
  • PHP5-FPM
  • Nginx
  • MySQL и т. Д.

Как часть класса PHP у меня есть следующее: —

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

Эта часть отлично работает. Без вопросов.

Как только сервер завершит свою работу, я смогу запустить: —

php5enmod mcrypt

Это, опять же, работает без проблем, и mcrypt включен в установке php5-fpm. Проблема возникает со следующим блоком кода.

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 без каких-либо аргументов, вы получите ту же ошибку.

Если у кого-то есть какие-либо идеи, я буду безмерно благодарен.

1

Решение

Похоже, что правильный способ сделать это (как указано в комментарии BMW) — убедиться, что Puppet знает, где находится команда «find», прежде чем пытаться выполнить php5enmod.

Моя конфигурация кукол ниже:

# 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.

4

Другие решения

К сожалению, я не смог заставить это работать так, как мне бы хотелось. Я не уверен, что Puppet просто не очень хорошо играет с php5enmod, или есть какие-то внутренние проблемы с php5enmod и способом его вызова скриптами Puppet.

Однако мне удалось вручную создать символическую ссылку и перезапустить службу со следующим блоком кода.

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

Надеюсь, это поможет кому-нибудь в будущем.

3

По вопросам рекламы [email protected]