如何找出节点上安装的软件包的版本?

领事

我正在修改Apache食谱以与2.4 Apache一起使用。Opscode Cookbook当前失败,因为它正在生成带有LockFile关键字的conf文件,该文件被排除在Apache 2.4关键字列表之外。

我想提出一个通用的解决方案,并根据软件版本填充conf文件。为此,我必须找出已经安装的软件的版本。这个问题已经困扰我一段时间了,但是我一直在努力避免它。由于我要一遍又一遍地讨论它,所以我想问:

如果Cookbook没有指定版本,即安装最新的可用版本,该如何查找已安装的软件包/软件的版本?

注意:请不要告诉我将命令传递给底层shell。我想知道是否还有更好,更...厨师的方式?也许与Ohai有关的东西?

编辑:似乎我被误解了。我想知道是否有一种解决方案可以抽象化平台层(就像Ohai一样),我会说类似的东西gimme_version('apache')并获取已安装的apache版本。我想避免在其中编写case node['platform_family'] when... when... when平台特定的代码。

领事

我创建了Ohai插件来为我解决问题。将以下代码放入.rb文件中,然后将该文件放入ohai/plugin/linux文件夹中。(由于平台和安装类型的不同,无法提供绝对路径)

Ohai.plugin(:PackageVersion) do
  provides "package_version"

  depends "platform_family"

  collect_data do
    pckg_list = Hash.new
    case platform_family
      when 'debian'
        pckg_list = eval '{'+`dpkg-query -W -f='"${Package}"=> "${Version}", '`+'}'
      when 'rhel' || 'fedora'
        pckg_list = eval '{'+`rpm -qa --queryformat '"%{NAME}"=> "%{VERSION}", '`+'}'
      when 'arch'
        pckg_list = eval '{'+`package-query -Q -f '"%n"=> "%v", '`+'}'
      when 'gentoo'
        pckg_list = eval '{'+`equery list --format='"$name" => "$version", ' '*'`+'}'
      end                                                                                                    
    package_version Mash.new pckg_list
  end                                                                                                                   
end    

您运行厨师接下来的时间,包版本信息将在node["package_version"]["<package_name>"]node["package_version"]["glibc"]我使它适用于5个平台系列,但对于Arch,则必须确保已package-query安装。

重要说明:Ohai是在执行厨师配方之前加载/填充的。该解决方案不会自动更新Ohai,因此,如果您要访问新安装/升级的软件包的数据,则在当前Chef运行期间,必须手动重新加载Ohai。为此,请将以下代码块放在您的配方的软件包安装/升级代码块下,如下所示:

#example package instalation
package "whatever"

ohai "reload_ohai" do
  action :reload
end

感谢@markoconnor。他指出,该解决方案基于社区插件。这些不再在线。我调整了它们以与Chef 11.0+一起使用,现在就可以了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何伪造安装的软件包版本?

来自分类Dev

如何安装特定的软件包版本

来自分类Dev

如何找出所有独立软件包都已安装?

来自分类Dev

在安装之前,如何知道要安装的软件包的版本?

来自分类Dev

在软件包安装节点上显示许可证

来自分类Dev

无法通过Ansible在远程节点上安装软件包

来自分类Dev

如何确定我可以在APT上安装哪个版本的软件包

来自分类Dev

如何安装最新版本的软件包?

来自分类Dev

Cabal-如何安装特定版本的软件包

来自分类Dev

如何使用pip安装特定版本的软件包

来自分类Dev

Sublime Text 3:如何安装特定版本的软件包

来自分类Dev

如何安装WinRT侧面加载版本或软件包

来自分类Dev

如何安装PPA的最新软件包版本?

来自分类Dev

安装新的Julia版本后如何转移软件包?

来自分类Dev

如何安装PPA的最新软件包版本?

来自分类Dev

如何安装软件包texinfo的4.11版本?

来自分类Dev

如何安装确切版本的特定Ubuntu软件包?

来自分类Dev

Cabal-如何安装特定版本的软件包

来自分类Dev

如何指示yum安装特定版本的软件包X?

来自分类Dev

如何为旧版本的Fedora安装软件包?

来自分类Dev

如何在Alpine中安装特定的软件包版本?

来自分类Dev

如何安装旧版本的软件包?

来自分类Dev

如何发现和安装特定版本的软件包?

来自分类Dev

如何安装大于或等于特定版本的软件包

来自分类Dev

如何安装django软件包的旧版本?

来自分类Dev

如何使用DNF找出不同版本的Fedora中可用的软件包版本?

来自分类Dev

全局或本地节点安装软件包

来自分类Dev

安装软件包的不同版本

来自分类Dev

安装特定版本的debian软件包

Related 相关文章

热门标签

归档