使用 rpm 应用程序(不是 yum)通过 Ansible 安装 rpm 包

使用 rpm 应用程序(不是 yum)通过 Ansible 安装 rpm 包

我想使用 Ansible 和已安装的 rpm 包管理器安装一些 RPM 包。yum 尚未安装。

如果软件包已安装,使用commandmodule with会导致任务失败。我正在寻找一种惯用的方法来安装软件包,就像 yum 或 apt modules 一样。rpm -i {{package}}

答案1

安装 yum,加上yum 实用程序,并使用 yum 模块。AIX 上默认未安装,但可以做到。

要求包括 yum 和 rpm Python 模块。我不清楚哪个包提供 rpm 绑定,yum 必须有一些东西才能工作。可能来自 rpm 文件集,但不幸的是我没有 AIX 机器可以测试。

答案2

使用rpm -U

手册

rpm {-U|--升级} [安装选项]包文件...

这会将当前安装的软件包升级或安装为较新版本。这与安装相同,只是安装新软件包后,软件包的所有其他版本都将被删除。

答案3

- name: check if the filebeat exist
  shell:
    cmd: rpm -q filebeat
  ignore_errors: True
  register: filebeat_check

- name: transfer filebeat package to remote host
  copy:
    src: filebeat.rpm
    dest: /tmp/filebeat.rpm
  when: filebeat_check.rc != 0

- name: install filebeat
  shell:
    cmd: rpm -i /tmp/filebeat.rpm
  when: filebeat_check.rc != 0

答案4

我认为这迄今为止最符合我的问题:


- name: Verify package MD5
  shell: |
    package_md5=$(rpm -qp --queryformat='%{FILEMD5S}' '{{ item }}')
    package_name=$(rpm -qp --queryformat='%{NAME}' '{{ item }}')
    installed_md5=$(rpm -q --queryformat='%{FILEMD5S}' "$package_name")
    [ "$installed_md5" = "$package_md5" ]
  ignore_errors: true
  register: verify_result
  changed_when: no
  failed_when: no

- name: Install package
  shell: rpm -U '{{ item }}'
  when: verify_result.rc != 0

item是 rpm 文件的路径。

第一个任务从 rpm 文件中获取 MD5 校验和以及软件包名称,并将校验和与已安装的同名软件包进行比较。如果校验和不匹配(且仅当不匹配时),第二个任务将安装该 rpm 软件包。

相关内容