deb - 如何防止 dpkg 安装任务在第二次运行时通知更改状态?

标签 deb dpkg ansible

没有直接安装 .deb 包的模块。当您必须将 dpkg 作为命令运行时,它总是将安装任务标记为已更改的任务。我在正确配置它时遇到了一些麻烦,所以我在这里作为公共(public)笔记本发布。

这是使用 dpkg 安装的任务:

- name: Install old python 
  command: dpkg -i {{ temp_dir }}/{{ item }}
  with_items: 
    - python2.4-minimal_2.4.6-6+precise1_i386.deb
    - python2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - libpython2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - python2.4-dev_2.4.6-6+{{ ubuntu_release }}1_i386.deb

在另一个任务中上传到 {{temp_dir}} 的文件。

最佳答案

下面的答案仍然有效,但较新的 ansible 版本具有 apt module . Mariusz Sawicki 的答案是现在首选的答案。我已将其标记为已接受的答案。

它只适用于 Ansible 版本 1.3,当 changed_when添加了参数。这有点笨拙,也许有人可以改进解决方案。我没有找到这个“注册”对象的文档。

- name: Install old python 
  command: dpkg --skip-same-version -i {{ temp_dir }}/{{ item }}
  register: dpkg_result
  changed_when: "dpkg_result.stdout.startswith('Selecting')"
  with_items: 
    - python2.4-minimal_2.4.6-6+precise1_i386.deb
    - python2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - libpython2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - python2.4-dev_2.4.6-6+{{ ubuntu_release }}1_i386.deb

在这里您可以运行相同的任务,它只会第一次安装。第一次之后,将不会安装软件包。

有两个修改。一是参数--skip-same-version用于防止 dpkg 重新安装软件。另一个是 register 和 changed_when 属性。 dpkg 第一次运行时,它会向标准输出打印一个以 'Selecting' 开头的字符串,并通知更改。稍后它将有不同的输出。我尝试了一个更具可读性的条件,但无法使其适用于使用“not”或搜索子字符串的更复杂的条件。

关于deb - 如何防止 dpkg 安装任务在第二次运行时通知更改状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19127493/

相关文章:

deb - 如何在特定部分显示我的 .deb 包

ubuntu - Stepstone (OpenNebula) 的 .deb 包

linux - apt-pin 本地构建的包

Ansible/Jinja2 如何将列表格式化为我的配置文件的字段?

Ansible权限问题

linux - 在 .deb 包的 Postinst 脚本中动态获取用户名

debian - package.init 未安装

linux - 我如何将 postinst 脚本与 fakeroot deb 包生成器一起使用

debian - 我的 deb 文件删除了/opt

ssh - 对远程主机的ping操作可在本地连接上进行,但不能进行其他操作