即使指定了有效版本,Chef也不会选择Java包

时间:2018-02-22 14:04:31

标签: java vagrant chef centos6 openjdk

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

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

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

这就是问题所在:

  • 如果我没有指定版本,我将获得java-openjdk 1.5.0。
  • 当我指定版本时,如上面的代码所示,我将得到#34;没有适用于java的候选版本"。
  • 当我尝试通过执行

    来声明版本> =时

    yum_package" java> java的1.8.0-的openjdk"做

我会得到很多选项,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 这是一旦我进入流浪盒并且从yum做了一个--show-duplicatelicates,它被列为有效版本:

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,它将正确地获取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

我的问题是:厨师是否以某种方式运行与我在机器上实际拥有的不同的回购?为什么我的cmd在框中显示了与Chef正在使用的不同的Java版本?

1 个答案:

答案 0 :(得分:2)

首先,我们需要回顾一下,找出包名与版本的关系。以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中的一个魔术别名来做正确的事情,但由于我们直接查询包信息数据库,别名会混淆Chef。

所以你想要的更像是这样:

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

或类似的东西。