У меня есть марионеточный класс php, который выглядит следующим образом:
class php { case $operatingsystem { debian: { package {'php5-common': ensure => latest, provider => apt, } package {'php5-mysql': ensure => latest, provider => apt} package {'php5-gd': ensure => latest, provider => apt} package {'php5-fpm': ensure => latest, provider => apt} package {'php5-mcrypt': ensure => latest, provider => apt} package {'php5-memcache': ensure => latest, provider => apt} } } service { 'php5-fpm': ensure => running, enable => true, } }
Я включаю класс php в конфигурацию узла в /etc/puppet/manifests/site.pp
Это выглядит как
node 'example' { include php }
Когда я запускаю puppet agent -t на клиенте, он устанавливает пакеты, но устанавливает слишком много. Он также устанавливает apache, и я не знаю, откуда он его взял. У меня нет конфигурации в марионетке для apache.
Я предполагаю, что он использует рекомендации или предложения debian, но я не уверен, потому что я отключил это на сервере.
cat > /etc/apt/apt.conf.d/01norecommendВывод журнала на клиенте
Info: Retrieving plugin Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb Info: Loading facts in /var/lib/puppet/lib/facter/last_run.rb Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb Info: Loading facts in /var/lib/puppet/lib/facter/puppi_projects.rb Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb Info: Caching catalog for eample Info: Applying configuration version '1383041633' Error: Could not prefetch package provider 'apt': invalid byte sequence in US-ASCII Notice: /Stage[main]/Php/Package[php5-mysql]/ensure: ensure changed 'purged' to 'latest' Notice: /Stage[main]/Php/Package[php5-gd]/ensure: ensure changed 'purged' to 'latest' Notice: /Stage[main]/Php/Package[php5-mcrypt]/ensure: ensure changed 'purged' to 'latest' Notice: /Stage[main]/Php/Package[php5-memcache]/ensure: ensure changed 'purged' to 'latest' Notice: /Stage[main]/Php/Package[php5-fpm]/ensure: ensure changed 'purged' to 'latest' Notice: Finished catalog run in 11.31 secondsПосле этого устанавливаются следующие пакеты
ii apache2-mpm-prefork 2.2.22-13 amd64 Apache HTTP Server - traditional non-threaded model ii apache2-utils 2.2.22-13 amd64 utility programs for webservers ii apache2.2-bin 2.2.22-13 amd64 Apache HTTP Server common binary files ii apache2.2-common 2.2.22-13 amd64 Apache HTTP Server common files ii libapache2-mod-php5filter 5.4.4-14+deb7u5 amd64 server-side, HTML-embedded scripting language (apache 2 filter module) ii libapache2-mod-php5filter 5.4.4-14+deb7u5 amd64 server-side, HTML-embedded scripting language (apache 2 filter module) ii php5-common 5.4.4-14+deb7u5 amd64 Common files for packages built from the php5 source ii php5-fpm 5.4.4-14+deb7u5 amd64 server-side, HTML-embedded scripting language (FPM-CGI binary) ii php5-gd 5.4.4-14+deb7u5 amd64 GD module for php5 ii php5-mcrypt 5.4.4-14+deb7u5 amd64 MCrypt module for php5 ii php5-memcache 3.0.6-6 amd64 memcache extension module for PHP5 ii php5-mysql 5.4.4-14+deb7u5 amd64 MySQL module for php5
Когда я запускаю apt-get install $ php-package-names, он не устанавливает apache, только когда я использую apache. Это немного раздражает, потому что я собираюсь использовать nginx.
У вас есть идея, как я могу заставить марионетку устанавливать пакеты в обычном режиме без apache в качестве зависимости?
Делать php5-fpm
установить раньше других с require
.
В gd
, memcache
, mcrypt
, и mysql
пакеты требуют виртуального пакета phpapi-20100525
, который предоставляется libapache2-mod-php5
или по php5-fpm
.
Когда вы устанавливаете их с помощью одной команды, он уже устанавливает один из пакетов, соответствующих требованиям. При отдельном запуске в качестве ресурсов Puppet apt вынужден выбрать один и выбрать библиотеку Apache.