【问题标题】:Package for java not being picked up by Chef even when specifying a valid version即使指定有效版本,Chef 也没有选择 Java 包
【发布时间】:2018-08-02 10:03:35
【问题描述】:

由于 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。
  • 当我指定版本时,如上面的代码所示,我会得到“没有可用于 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一旦我进入 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,它会正确选择 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.8.0.121-1.b13.el6.x86_641.8.0.161-3.b14.el6_9 作为版本属性传递给java yum 资源?另外,请尝试不使用el6.x86_64
  • 是的,还是没有运气。已经尝试了包名称的所有变体(甚至只是为了确认它不是包名称)。似乎以某种方式运行“包”的厨师只是去了另一个仓库。

标签: java vagrant chef-infra centos6 openjdk


【解决方案1】:

所以首先我们需要倒带一点,弄清楚包名和版本是什么。以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

或类似的东西。

【讨论】:

  • 仍然无法使用该建议,一直尝试到 b14,然后从其余部分逐个添加.. 确实很奇怪,因为它 应该 工作:package 'java-1.8. 0-openjdk'做版本'1.8.0.161-3.b14'结束
  • 您可能需要完整的1.8.0.161-3.b14.el6_9。我忘记了我们是怎么做到的,无论如何它在 Chef 14 中发生了变化。
猜你喜欢
  • 1970-01-01
  • 2019-10-24
  • 2015-11-07
  • 1970-01-01
  • 2021-03-24
  • 2015-03-23
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多