Java Cookbook可以用来安装本地的Oracle Java吗?

3
我最近一直在学习Chef,因为我计划使用它来部署服务器配置和服务器应用软件。但是我遇到了使用他人的烹饪书的问题。例如,我想部署JDK8u31,但我不知道如何实现这个烹饪书。通过阅读 https://supermarket.chef.io/cookbooks/java 上的说明,我看到以下内容:只需在需要安装Java的任何地方包含java食谱,例如运行列表(recipe [java])或烹饪书(include_recipe 'java')。我尝试过了。
include_recipe 'java' 

在我的名为common_java_server的菜谱中

然后

directory '/usr/lib/jvm/' do
  owner 'root'
  group 'root'
  mode '0644'
end




java_ark "jdk" do
    url 'http://download.oracle.com/otn-pub/java/jdk/8u31/jdk-8u31-linux-x64.bin'
    checksum  'a8603fa62045ce2164b26f7c04859cd548ffe0e33bfc979d9fa73df42e3b3365'
    app_home '/usr/lib/jvm/'
    bin_cmds ["java", "javac"]
    action :install
end

# set alternatives for java and javac commands
java_alternatives "set java alternatives" do
    java_location '/usr/local/java'
    bin_cmds ["java", "javac"]
    action :set
end

这是我收到的错误信息。
Recipe Compile Error in /etc/chef/src/cookbooks/common/recipes/java_dev_server.rb
====
1个回答

8

Java Cookbook旨在支持安装不同版本的Java。它的行为由节点属性控制,其默认值在cookbook中,将安装OpenJDK。

因此,要安装Oracle JDK,您需要指定替代覆盖选项,并在README中进行讨论。

您如何做到这一点?在Chef中,您至少有两个选项:

  1. 包装器Cookbook
  2. 角色

有关包装器Cookbook的示例,请参见我的其他答案:

有关角色的示例,请尝试以下内容:

{
  "name": "java",
  "description": "Oracle java role",
  "override_attributes": {
    "java": {
      "jdk_version": 8,
      "install_flavor": "oracle",
      "oracle": {
        "accept_oracle_download_terms": true
      }
    }
  },
  "run_list": [
    "recipe[apt]",
    "recipe[java]"
  ]
}

将此角色添加到节点的运行列表中,即可安装OracleJDK。

测试厨房项目,用于测试安装OracleJDK

以下是一个测试厨房示例,将针对Ubuntu和CentOS安装和测试“java”角色。

├── Berksfile
├── .kitchen.yml
├── roles
│   └── java.json
└── test
    └── integration
        └── default
            └── serverspec
                └── java_spec.rb

安装chefDK和vagrant,然后运行以下命令。
kitchen test

注意:

  • 启动测试厨房的最简单方法是安装 vagrantchefdk 两者都需要安装。

Berksfile

source "https://supermarket.chef.io"

cookbook "apt"
cookbook "java"

.kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.0.3
  client_rb:
    "Ohai::Config[:disabled_plugins] = [:GCE] #": 

platforms:
  - name: ubuntu-12.04
  - name: centos-6.4

suites:
  - name: default
    run_list:
      - role[java]

注意:

  • 将特殊角色“java”添加到节点运行列表中。
  • 此示例禁用“gce”插件。请参见问题 624

roles/java.json

参见上文

test/integration/default/serverspec/java_spec.rb

require 'serverspec'

# Required by serverspec
set :backend, :exec

describe file('/usr/lib/jvm/java-8-oracle-amd64/release'), :if => os[:family] == "ubuntu" do
  it { should contain 'JAVA_VERSION="1.8.0_31"' }
end

describe file('/usr/lib/jvm/java/release'), :if => os[:family] == "redhat" do
  it { should contain 'JAVA_VERSION="1.8.0_31"' }
end

将此角色添加到节点的运行列表中,即可安装OracleJDK。在烹饪书中应该添加到哪里? - goCode
这个例子使用了角色,而不是菜谱。我还提供了一个使用包装菜谱的替代答案,请参见:https://dev59.com/O4jca4cB1Zd3GeqPukxv#28775684 - Mark O'Connor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接