java 食谱可以用来安装oracle java的本地副本吗?

Posted

技术标签:

【中文标题】java 食谱可以用来安装oracle java的本地副本吗?【英文标题】:Can the java cookbook be used to install a local copy of oracle java? 【发布时间】:2015-04-30 20:43:13 【问题描述】:

我最近一直在尝试学习厨师,因为我打算用它来部署服务器配置和服务器应用程序软件。我在理解如何使用其他人的食谱时遇到问题。比如我要部署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】:

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

因此,要安装 oracle JDK,您需要指定替代覆盖,这些在 README 中进行了讨论

你是怎么做到的?在 chef 你至少有两个选择:

    包装食谱 角色

有关包装食谱的示例,请参阅我的其他答案。

How to use chef to update-alternatives for java using execute?

例如角色试试这个:


  "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安装的Test Kitchen项目

以下是一个测试厨房示例,它将针对 ubuntu 和 centos 安装和测试“java”角色

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

安装chefDK、vagrant并运行以下命令

kitchen test

注意事项:

让测试厨房运行的最简单方法是同时安装vagrant 和chefdk

伯克斯文件

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”插件。见issue 624。

角色/java.json

见上

测试/集成/默认/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。"在食谱中的哪里添加这个? 此示例使用角色,而不是说明书。我使用包装食谱包含了一个替代答案,请参阅:***.com/questions/28775225/…

以上是关于java 食谱可以用来安装oracle java的本地副本吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS CLoudFormation 模板在 tomcat 上部署 Java 应用程序的自定义食谱

如何从厨师食谱在后台运行java程序

java oracle sql spark啥关系

Java JDK安装

Java

java操作oracle的blob,clob数据