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
重点是:
- 如果我不指定版本,我会得到 java-openjdk 1.5.0.
- 当我指定版本时,如上面的代码所示,我将得到"no candidate version available for 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 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
或类似的东西。
由于 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
重点是:
- 如果我不指定版本,我会得到 java-openjdk 1.5.0.
- 当我指定版本时,如上面的代码所示,我将得到"no candidate version available for 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 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
或类似的东西。