Chef 食谱 - 当你不知道确切的软件包名称时删除软件包

Chef 食谱 - 当你不知道确切的软件包名称时删除软件包

我知道包资源,我苦恼的是如何找到确切的软件包名称?由于不同节点中会有不同版本的操作系统,如何编写一个配方来卸载所有特定软件包?

例如 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

相关内容