【问题标题】:How to install and upgrade rpm packages in a custom folder?如何在自定义文件夹中安装和升级 rpm 包?
【发布时间】:2018-09-23 11:39:42
【问题描述】:

我正在尝试使用 yum_package 将存储在根目录下的 rpm 文件安装到 root/gpfs_driver 路径下

%w("gpfs.*.*.rpm").each do |pkg|
    package "#{pkg}" do

            source "/root/gpfs_drive/base/"

            action :install

    end
end

错误:

    Compiled Resource:
    ------------------
    # Declared in /root/.chef/local-mode-cache/cache/cookbooks/preq/recipes/test.rb:2:in `block in from_file'

    yum_package(""gpfs.*.*.rpm"") do
      package_name "\"gpfs.*.*.rpm\""
      action [:install]
      retries 0
      retry_delay 2
      default_guard_interpreter :default
      declared_type :package
      cookbook_name "preq"
      recipe_name "test"
      source "/root/gpfs_drive/base/"
      flush_cache {:before=>false, :after=>false}
    end

    System Info:
    ------------
    chef_version=12.21.3
    platform=redhat
    platform_version=7.2
    ruby=ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
    program_name=chef-client worker: ppid=23043;start=17:09:14;
    executable=/opt/chef/bin/chef-client

[2018-04-13T17:09:19+10:00] INFO: Running queued delayed notifications before re-raising exception

Running handlers: 
[2018-04-13T17:09:19+10:00] ERROR: Running exception handlers Running handlers complete 
[2018-04-13T17:09:19+10:00] ERROR: Exception handlers complete Chef Client failed. 0 resources updated in 04 seconds 
[2018-04-13T17:09:19+10:00] FATAL: Stacktrace dumped to /root/.chef/local-mode-cache/cache/chef-stacktrace.out 
[2018-04-13T17:09:19+10:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report 
[2018-04-13T17:09:19+10:00] ERROR: yum_package["gpfs.*.*.rpm"] (preq::test line 2) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE} %{ARCH} ' /root/gpfs_drive/base/ ---- STDOUT: STDERR: error: open of /root/gpfs_drive/base/ failed: No such file or directory
---- End output of rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE} %{ARCH} ' /root/gpfs_drive/base/ ---- Ran rpm
-qp --queryformat '%{NAME} %{VERSION}-%{RELEASE} %{ARCH} ' /root/gpfs_drive/base/ returned 1

【问题讨论】:

    标签: chef-infra chef-recipe


    【解决方案1】:

    厨师不是这样工作的。

    首先,%w("gpfs.*.*.rpm") 不会列出目录中的所有包。它只是数组的别名。你应该做Dir.glob("/root/gpfs_drive/base/gpfs.*.*.rpm")。

    然后你必须把完整路径放在source。

    从我的头顶:

    Dir.glob("/root/gpfs_drive/base/gpfs*.rpm").each do |pkg|
      rpm_package pkg do
        source pkg
        action :install
      end
    end
    

    Dir.glob 应该返回所有具有完整路径的包,您可以遍历列表/数组。

    【讨论】:

    • 您可能需要basename 才能使软件包名称正确,我不记得我们是否在本地安装时为您解决了这个问题。
    • @coderanger 你想让我使用 execute 还是 bash 来执行这个动作执行 'prereq' do user 'root' command "yum -y install /root/gpfs_driver/base/* \ && yum - y update gpfs​​_driver/update/* \ && yum install kernel-devel-uname -r cpp gcc gcc-c++ \ && /usr/lpp/mmfs/bin/mmbuildgpl \ && cp mmglobfuncs.Linux /usr/lpp/mmfs/bin/ "
    • 最正确的解决方案取决于您的用例的许多细节,如图所示扩展 glob 的主要问题是它在编译时运行 glob。如果没问题,那么你应该使用这个例子。
    • @Szymon Szypulski,我试过 rpm_package,我得到了同样的错误
    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多