java 的包即使在指定有效版本时也未被 Chef 选择

Package for java not being picked up by Chef even when specifying a valid version

由于 Chef 13 在尝试在 vagrant 2.0.2 盒子上生成 centos/6 图像时发生错误,我感到头疼。

我的任务很基本:我正在尝试安装 java-openjdk 版本 1.8.0,我正在使用 yum_package如下:

yum_package "java" do
  flush_cache [ :before ]
  arch 'x86_64'
  version "java-1.8.0-openjdk"
  action :install
end

重点是:

我会得到很多选项可用,yum 安装 java 1.5 因为它是它找到的第一个(这听起来有点令人惊讶):

WARN: yum_package[java >= java-1.8.0-openjdk-1.8.0.161-3.b14.el6_9] matched multiple Provides for java >= java-1.8.0-openjdk-1.8.0.161-3.b14.el6_9 but we can only use the first match: java-1.5.0-gcj. Please use a more specific version.

我什至达到了将版本设置为文件全名的程度:java-1.8.0-openjdk-1.8.0.161- 3.b14.el6_9.x86_64 一旦我进入 vagrant box 并从 yum 执行 --show-duplicates:

,它就会被列为有效版本
yum search --showduplicates java-1.8.0-openjdk
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirror.hmc.edu
 * epel: mirror.compevo.com
 * extras: mirror.texas3006.com
 * updates: centos.mirror.lstn.net
===================================================================== N/S Matched: java-1.8.0-openjdk ======================================================================
1:java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64 : OpenJDK Runtime Environment
1:java-1.8.0-openjdk-1.8.0.131-0.b11.el6_9.x86_64 : OpenJDK Runtime Environment
1:java-1.8.0-openjdk-1.8.0.141-2.b16.el6_9.x86_64 : OpenJDK Runtime Environment
1:java-1.8.0-openjdk-1.8.0.141-3.b16.el6_9.x86_64 : OpenJDK Runtime Environment
1:java-1.8.0-openjdk-1.8.0.144-0.b01.el6_9.x86_64 : OpenJDK Runtime Environment
1:java-1.8.0-openjdk-1.8.0.151-1.b12.el6_9.x86_64 : OpenJDK Runtime Environment
1:java-1.8.0-openjdk-1.8.0.161-3.b14.el6_9.x86_64 : OpenJDK Runtime Environment

更奇怪的是,一旦我进入盒子,我可以通过 运行 yum install java[= 轻松安装 java jdk 40=], 它会正确拾取 java 1.8.0:

root@localhost vagrant]# yum install java
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: centos.mirror.ca.planethoster.net
 * epel: ftp.cse.buffalo.edu
 * extras: mirror2.evolution-host.com
 * updates: centos.mirror.ca.planethoster.net
Resolving Dependencies
--> Running transaction check
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.161-3.b14.el6_9 will be installed

我的问题是:Chef 是否以某种方式 运行 与我在机器上实际拥有的存储库不同?为什么我在框中的 cmd 显示的 java 版本与 Chef 使用的版本不同?

所以首先我们需要倒带一点,弄清楚包名和版本是什么。以1:java-1.8.0-openjdk-1.8.0.121-1.b13.el6.x86_64 : OpenJDK Runtime Environment为例,包名是java-1.8.0-openjdk,版本是1:1.8.0.121-1.b13.el6.x86_64,一般直接写成1.8.0.121-1.b13。实际上并没有叫 java 的包,它是 Yum 中的一个 magic-y 别名来做正确的事情,但是这个别名让 Chef 感到困惑,因为我们直接查询包信息数据库。

所以你想要的更像这样:

package 'java-1.8.0-openjdk' do
  version '1.8.0.121-1.b13'
end

或类似的东西。