如何判断需要将哪些外部模块安装到PHP以在另一台计算机上复制配置?
问题描述:
我可以很容易做到如何判断需要将哪些外部模块安装到PHP以在另一台计算机上复制配置?
php -m
看到由PHP加载的模块列表,但他们中的大多数都自动在基地包括安装。
我需要看到的是在新系统上使用和不存在的软件包,以便使其配置与现有系统一致。
例如,date
在列表中显示了一个PHP模块,但没有php-date
包需要安装和配置才能使用日期函数。
相反,mysql
显示在列表中,但这并不是默认情况下,所以我需要安装php-mysql
包。其他一些人,如xml另外需要首先使用libxml。我需要默认没有的PHP模块列表(在任意配置的机器上)。
这只是与问题部分相关,但我试图使用thias/php module at Puppetforge自动配置PHP的配置。
有没有什么方法可靠,快速,理想地以编程方式确定这一点?
答
这是通过运行yum whatprovides php-$MODULENAME
在我们的配置每个模块,然后捕捉包提供模块手动创建一个列表...
# [email protected]$ php -m
# 'bz2', # php-common
# 'calendar', # php-common
# 'Core', # php-common
# 'ctype', # php-common
# 'curl', # php-common
# 'date', # php-common
# 'dom', # php-xml
# 'ereg', # php-common
# 'exif', # php-common
# 'fileinfo', # php-common
# 'filter', # php-common
# 'ftp', # php-common
'gd', # php-gd needs install
# 'gettext', # php-common
# 'gmp', # php-common
# 'hash', # php-common
# 'iconv', # php-common
# 'json', # php-common
# 'libxml', # php-common
'memcache', # php-pecl-memcache needs install
'mysql', # php-mysql needs install
# 'mysqli', # php-mysql
# 'openssl', # php-common
# 'pcntl', # php-cli
# 'pcre', # php-common
'PDO', # says php-pdo but in common as of 5.3
# 'pdo_mysql', # php-mysql
# 'pdo_sqlite', # php-pdo
# 'Phar', # php-common
'pspell', # php-pspell needs install
# 'readline', # php-cli
# 'Reflection', # php-common
# 'session', # php-common
# 'shmop', # php-common
# 'SimpleXML', # php-common
'snmp', # php-snmp
# 'sockets', # php-common
# 'SPL', # php-common
# 'sqlite3', # php-pdo
# 'standard', # php-common
# 'tokenizer', # php-common
# 'wddx', # php-xml
'xml', # php-xml needs install
# 'xmlreader', # php-xml
'xmlrpc', # php-xmlrpc needs install
# 'xmlwriter', # php-xml
# 'xsl', # php-xml
# 'zip', # php-common
# 'zlib' # php-common
我结束了这params.pp
$php_modules = ['gd','mysql','pspell','snmp','xml','xmlrpc']
和这在我的php.pp配置文件。
package { 'php-pecl-memcached':
ensure => installed,
}
php::module { $php_modules : }
我没有最终以编程方式完成它。希望列表能够在未来保存一段时间 - 花费一段时间才能把它做好!
我发现我可以通过遍历模块列表并发出'yum whatprovides'php- $ MODULENAME''来缓慢手动获取这些信息,然后将结果从包中取出。这很可能是更好更快的方式,因为这是相当残酷的。基本上寻找'yum whatprovides'列出的特定软件包,而不是php-common或[no-package-found]。 – phpguru
从任何运行配置派生(最小)Puppet清单是一个难题。我怀疑你将能够实现一个优雅的脚本来为你做到这一点。 Puppet的规范方式是1.为资源实现一个类型/提供者(在本例中为php模块)2.使用puppet资源以合适的清单的形式获取系统中当前实体的列表。尽管这种方法很可能*不适用于你的情况(同样,也是过度的)。 –