【问题标题】:Chef LWRP recipe Errno::ENOENT: No such file or directory @ dir_s_mkdir厨师 LWRP 配方 Errno::ENOENT: 没有这样的文件或目录 @ dir_s_mkdir
【发布时间】:2016-12-12 06:55:18
【问题描述】:

我正在使用厨师社区 java 食谱在 CentOS 7.2 上安装 java。我有一个不起作用的 LWRP 配方

我通过 java_ark 部分建立我的安装参数

op_sys = node['os']

# Used to get the required java update from the environment file
java_ver_update = node['java_ver']

# Logic for each OS
if op_sys == 'linux'

# Java_ark, which is used to define the correct install attributes for each OS type (win/linux)
  install_dir = node['install_dir']
  java_ark "jdk" do
    url 'http://sv-dc01.sv.local/install_artifacts/java/oracle/JRE/jre-'+"#{java_ver_update}"+'-linux-x64.tar.gz'
    app_home install_dir
    owner 'root'
    group 'wheel'
    app_home_mode 774
    action :install
  end

  # Set the folder permissions
  execute "chown-dir" do
    command "chmod -R 774 #{install_dir}"
    action :run
  end
end

这是我的环境文件,我在其中设置了一些要在主配方中调用的节点属性

name 'env_workstation_dubbo'
description "Environment Workstation Dubbo"
cookbook_versions({
    "ohai" => "> 0.0.1",
    "java" => "> 0.1.0",
    "install_java" => "> 0.0.1"
})

$environment = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc) }
$override = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc) }

$override['java']['jdk_version'] = '8'
$override['java']['install_flavor'] = 'oracle'
$override['java']['oracle']['accept_oracle_download_terms'] = true
$override['java']['set_default'] = false
# Custom attributes/variables to be placed here
$override['java_ver'] = '8u77'
$override['install_dir'] = '/applications/'


default_attributes(Chef::Mixin::DeepMerge.merge($_default_environment, $environment))
override_attributes($override)

这是在我用于测试的 CentOS 机器上运行 sudo chef-client 期间发生的情况:

Starting Chef Client, version 12.16.42
resolving cookbooks for run list: ["install_java"]
Synchronizing Cookbooks:
  - install_java (0.2.0)
  - java (1.43.0)
  - compat_resource (12.16.2)
  - ohai (4.2.2)
  - seven_zip (2.0.2)
  - homebrew (2.1.2)
  - apt (5.0.0)
  - build-essential (7.0.2)
  - windows (2.1.1)
  - mingw (1.2.4)
  - ark (2.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...
[2016-12-12T11:04:24+13:00] WARN: Chef::Provider::AptRepository already exists!  Cannot create deprecation class for LWRP provider apt_repository from cookbook apt
[2016-12-12T11:04:24+13:00] WARN: AptRepository already exists!  Deprecation class overwrites Custom resource apt_repository from cookbook apt
Converging 8 resources
Recipe: install_java::default
  * java_ark[jdk] action install

    ================================================================================
    Error executing action `install` on resource 'java_ark[jdk]'
    ================================================================================

    Errno::ENOENT
    -------------
    No such file or directory @ dir_s_mkdir - 

    Cookbook Trace:
    ---------------
    /var/chef/cache/cookbooks/java/providers/ark.rb:116:in `block (2 levels) in class_from_file'
    /var/chef/cache/cookbooks/java/providers/ark.rb:115:in `block in class_from_file'

    Resource Declaration:
    ---------------------
    # In /var/chef/cache/cookbooks/install_java/recipes/default.rb

     18:   java_ark "jdk" do
     19:     url 'http://sv-dc01.sv.local/install_artifacts/java/oracle/JRE/jre-'+"#{java_ver_update}"+'-linux-x64.tar.gz'
     20:     app_home install_dir
     21:     owner 'root'
     22:     group 'wheel'
     23:     app_home_mode 774
     24:     action :install
     25:   end
     26: 

    Compiled Resource:
    ------------------
    # Declared in /var/chef/cache/cookbooks/install_java/recipes/default.rb:18:in `from_file'

    java_ark("jdk") do
      action [:install]
      supports {:report=>true, :exception=>true}
      retries 0
      retry_delay 2
      default_guard_interpreter :default
      declared_type :java_ark
      cookbook_name "install_java"
      recipe_name "default"
      url "http://sv-dc01.sv.local/install_artifacts/java/oracle/JRE/jre-8u77-linux-x64.tar.gz"
      app_home "/applications/"
      owner "root"
      group "wheel"
      app_home_mode 774
    end

    Platform:
    ---------
    x86_64-linux


Running handlers:
[2016-12-12T11:04:25+13:00] ERROR: Running exception handlers
Running handlers complete
[2016-12-12T11:04:25+13:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 17 seconds
[2016-12-12T11:04:25+13:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2016-12-12T11:04:25+13:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2016-12-12T11:04:25+13:00] ERROR: java_ark[jdk] (install_java::default line 18) had an error: Errno::ENOENT: No such file or directory @ dir_s_mkdir - 
[2016-12-12T11:04:25+13:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

我这辈子都想不通为什么它找不到文件或目录或无法完成 Java 安装???

【问题讨论】:

  • 您是否将您的环境上传到 Chef 服务器?

标签: ruby chef-infra


【解决方案1】:

可能您的环境没有正确应用。我的意思是,如果你的机器没有使用你的'env_workstation_dubbo' 环境,node['install_dir'] 属性将不会被正确设置。您可以阅读如何为节点 here 设置环境。

另一种可能性是您正在使用 java 食谱的修改版本,它使用 mkdir 而不是 mkdir_p。我这么说是因为我在超市找不到你的2.0.0 java 食谱版本。你从哪里得到那本食谱?

降级后更新java食谱版v1.43.0

问题是install_dir 必须至少有 2 级目录深度,遵循app_root/app_name 格式。例如"/applications/default"

如果您将"/applications" 用作install_dirapp_name 将为"applications"app_root 将为空,后者将在尝试创建应用程序根目录时导致 mkdir 错误 目录。

【讨论】:

  • 我在乱搞 Java 食谱(在我乱搞之前和之后都失败了)我已经恢复到版本是 1.43.0,但错误仍然存​​在。正在加载环境文件 - 否则我的 tarball 路径 URL 会给我一个 HTTP 404 错误,因为我从这里提取更新号以构建/完成安装程序的 URL。
  • 您能否根据您现在使用的 java 食谱版本1.43.0 更新问题中的日志输出?即使错误相同,查看失败的确切源代码行也有助于调试错误。
  • 已按要求更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2013-02-01
相关资源
最近更新 更多