You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Chef社区Cookbook安装Java 1.8.2报错及相关疑问

Java Cookbook安装问题排查与疑问解答

问题背景

我尝试使用Chef Supermarket的社区Java Cookbook来安装Java 1.8.2,已经完成了这些配置:在metadata.rb中添加了依赖、Berksfile里做了对应配置,也在recipe中加入了include_recipe。但执行chef-client时却报错了,目前发现服务器还没配置yum源,不确定是不是这个原因导致的。另外还有个疑问:如果目标节点已经安装了Java 1.8,这个Cookbook还会执行安装操作吗?

报错详情

* yum_package[java-1.6.0-openjdk] action install
[2018-01-19T04:22:52-05:00] INFO: Processing yum_package[java-1.6.0-openjdk] action install (java::openjdk line 93)
* No candidate version available for java-1.6.0-openjdk

================================================================================
Error executing action `install` on resource 'yum_package[java-1.6.0-openjdk]'
================================================================================

Chef::Exceptions::Package
-------------------------
No candidate version available for java-1.6.0-openjdk

Resource Declaration:
---------------------# In /var/chef/cache/cookbooks/java/recipes/openjdk.rb

 93: package pkg do
 94:   action :install
 95:   notifies :create, "ruby_block[update-java-alternatives]", :immediately if platform?("ubuntu","debian","redhat","centos","fedora","scientific","amazon")
 96: end
 97: end

Compiled Resource:
------------------# Declared in /var/chef/cache/cookbooks/java/recipes/openjdk.rb:93:in `block in from_file'

yum_package("java-1.6.0-openjdk") do
  package_name "java-1.6.0-openjdk"
  action [:install]
  retries 0
  retry_delay 2
  default_guard_interpreter :default
  declared_type :package
  cookbook_name "java"
  recipe_name "openjdk"
  flush_cache {:before=>false, :after=>false}
end

System Info:
------------
chef_version=12.21.26
platform=redhat
platform_version=7.4
ruby=ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
program_name=chef-client worker: ppid=3118;start=04:22:48;
executable=/opt/chef/bin/chef-client

问题解答

1. 报错原因与修复方案

先看报错核心:Chef在尝试安装java-1.6.0-openjdk但找不到可用包,结合你提到的未配置yum源,这俩是直接相关的:

  • RedHat系统默认的官方yum源需要订阅授权才能访问,如果没配置可用的替代源(比如内部镜像、阿里云/网易的公共源),系统根本搜不到对应的Java包,自然会报这个错。
  • 另外,你要装的是Java 1.8.2,但Cookbook默认去装1.6版本,说明你没在配置里指定目标版本,它走了默认逻辑。

按这两步来修复:

  • 先配置可用yum源:给RedHat 7.4添加合法的yum源,比如CentOS的兼容源(RedHat 7和CentOS 7包兼容),或者你们内部的镜像源。配置完后执行yum clean all && yum makecache刷新缓存,确保源能正常访问。
  • 指定Java版本:在你的自定义recipe里明确设置要安装的版本,比如:
    node.default['java']['jdk_version'] = '8'
    include_recipe 'java::openjdk'
    
    这样Cookbook就会去拉取Java 1.8对应的包(java-1.8.0-openjdk),而不是默认的1.6了。

2. 已安装Java 1.8时的执行逻辑

Chef的package资源是幂等的,简单说就是“只做需要做的事”:

  • 如果节点已经安装了指定版本的Java包,yum_package的:install动作会先检查当前系统状态,发现包已经存在且版本符合要求,就会直接跳过安装步骤,不会重复执行。
  • 不过Cookbook里如果还有其他资源(比如更新java alternatives、设置环境变量这类),这些还是会按配置执行——比如如果当前系统的java alternatives没指向你要的1.8版本,Cookbook会触发更新操作。

内容的提问来源于stack exchange,提问作者codec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:52:37