【问题标题】:How to use chef to update-alternatives for java using execute?如何使用厨师使用执行更新java的替代品?
【发布时间】:2015-04-30 18:20:55
【问题描述】:

我遇到语法错误,不确定如何解决。在角色文件中,我定义了以下内容:

default_attributes(
  'jdk' => {
    'version' => '1.8.0_31'
  },
  'java' => {
    'home' => '/usr/lib/jvm/jdk1.8.0_31'
  },
)

我尝试在下面使用java home,但运行失败

execute "update_alt_java" do
  command "update-alternatives --install "/usr/bin/java" "java" "#{node['java']['home']}/bin/java" 1"
  action :creates
end

我收到以下错误

SyntaxError
-----------
/etc/chef/src/cookbooks/jdk/recipes/default.rb:50: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
...tives --install "/usr/bin/java" "java" "#{node['java']['home...
...                               ^
/etc/chef/src/cookbooks/jdk/recipes/default.rb:50: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...--install "/usr/bin/java" "java" "#{node['java']['home']}/bi...

【问题讨论】:

    标签: java ruby linux ubuntu chef-infra


    【解决方案1】:

    您在使用社区java cookbook 吗?

    为此目的,它包括一个 LWRP:

    # 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
    

    更新:“my_java”包装食谱示例

    以下是一个名为“my_java”的示例食谱,旨在在 Ubuntu 上安装 oracle JDK:

    ├── attributes
    │   └── java.rb   <-- Used for java cookbook attribute overrides
    ├── Berksfile
    ├── Berksfile.lock
    ├── metadata.rb
    ├── README.md
    └── recipes
        └── default.rb
    

    运行 chef 后安装 oracle JDK

    $ java -version
    java version "1.8.0_31"
    Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
    

    注意事项:

    • 本说明书依赖于覆盖属性。这可以从厨师环境或角色中轻松完成。

    元数据.rb

    name             'my_java'
    maintainer       'Mark O''Connor'
    maintainer_email 'XXXXXXXXXXXXXXX'
    license          'All rights reserved'
    description      'Installs/Configures my_java'
    long_description 'Installs/Configures my_java'
    version          '0.1.0'
    
    depends "apt"
    depends "java"
    

    属性/java.rb

    normal['java']['jdk_version'] = '8'
    normal['java']['install_flavor'] = 'oracle'
    normal['java']['oracle']['accept_oracle_download_terms'] = true
    

    注意事项:

    • 默认情况下,java 将安装 openJDK。这些覆盖指定 v8 的 OracleJDK

    食谱/default.rb

    include_recipe "apt"
    include_recipe "java"
    

    注意事项:

    • 显然,“apt”食谱仅适用于基于 Debian 的 linux。这个配方也需要稍作调整才能在 redhat 上工作。

    【讨论】:

    • 我无法从 oracle 获取 java 以使用该说明书进行安装,因为 oracle 不允许您使用 cookie 下载文件。所以,我试图通过为这个实例创建一个新的食谱来手动完成。如果您知道如何在无需创建存储库的情况下使用 java 食谱,我想知道。
    • @pitchblack408 有关如何使用“Java”说明书安装 Oracle 的示例。文档指出,cookbook 完全了解 cookie 问题(请参阅:supermarket.chef.io/cookbooks/java
    • 嗨。我使用来自supermarket.chef.io/cookbooks/java linux 的食谱 ok。但是在我无法安装的窗口上,我有错误的错误 URI。请帮助我
    • @Luna 看起来在 Windows 上,您必须提供 java 包二进制文件的 URL。见:github.com/agileorbit-cookbooks/java/blob/master/attributes/…
    • 。非常感谢,但它不运行。有新的错误windown_package[tar] T_T
    【解决方案2】:

    您应该转义命令字符串中的所有双引号,因为它以双引号开头和结尾。

    没有动作:为执行资源创建。动作应该是 :run。

    execute "update_alt_java" do
      command "update-alternatives --install \"/usr/bin/java\" \"java\" \"#{node['java']['home']}/bin/java\" 1"
      action :run
    end
    

    但您不想在每次厨师运行时都运行此资源,因此您应该提出某种条件,何时运行(使用 only_if、not_if 语句)。

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多