我知道包资源,我苦恼的是如何找到确切的软件包名称?由于不同节点中会有不同版本的操作系统,如何编写一个配方来卸载所有特定软件包?
例如 NFS
答案1
您不需要指定确切的软件包名称,包括体系结构、版本和补丁级别。您只需要知道该软件包姓名底层包管理器将处理其余部分。
由于我现在手头只有一个 CentOS 6 盒子可以玩:
rpm -qa | grep php # OR similar:
yum list installed |grep php
php-5.3.3-40.el6_6.x86_64
php-common-5.3.3-40.el6_6.x86_64
php-cli-5.3.3-40.el6_6.x86_64
php-pear-1.9.4-4.el6.noarch
php-pecl-apc-3.1.9-2.el6.x86_64
php-devel-5.3.3-40.el6_6.x86_64
列出所有已安装的软件包并过滤 php。然后使用以下命令显示软件包信息yum info
yum info php-pecl-apc-3.1.9-2.el6.x86_64
Installed Packages
Name : php-pecl-apc
Arch : x86_64
Version : 3.1.9
Release : 2.el6
Size : 318 k
Repo : installed
From repo : base
Summary : APC caches and optimizes PHP intermediate code
URL : http://pecl.php.net/package/APC
License : PHP
Description : APC is a free, open, and robust framework for caching and optimizing PHP
: intermediate code.
然后要在 Chef 中使用它,包名称php-pecl-apc
就足够了。
不同版本之间的软件包名称在很大程度上是相当一致的。
简而言之,您需要花一些时间学习相关的包管理器,因为删除包可能会对需要它作为依赖项的其他已安装包产生影响。
答案2
典型的方法是使用 case 语句根据平台或平台系列设置包名称。从https://docs.chef.io/resource_package.html
package 'Install Apache' do
case node[:platform]
when 'redhat', 'centos'
package 'httpd'
when 'ubuntu', 'debian'
package 'apache2'
end
end