gpt4 book ai didi

Ansible 在 Ubuntu 上使用 apt 更新不可靠

转载 作者:行者123 更新时间:2023-12-04 13:04:47 25 4
gpt4 key购买 nike

我通过 Vagrant 创建了几台 Ubuntu 14.04 机器。我有一些使用 apt 的 ansible 2.1 playbook在某些任务中,例如:

  • 更新 apt
  • 添加码头仓库
  • 添加 java8 存储库

  • 所有这些任务在随机主机上随机失败。比如这里是简单的java8安装角色:
    - name: Add Oracle Java Repository
    apt_repository:
    repo: 'ppa:webupd8team/java'
    update_cache: yes
    state: present
    # register: result
    # until: result|success
    # retries: 10
    tags: [java]

    - name: Accept Java 8 License
    debconf: name='oracle-java8-installer' question='shared/accepted-oracle-license-v1-1' value='true' vtype='select'
    tags: [java]

    - name: Install Oracle Java 8
    apt: name={{item}} state=latest
    with_items:
    - oracle-java8-installer
    - ca-certificates
    - oracle-java8-set-default
    tags: [java]

    很简单,但 apt_repository随机失败很多。我不得不使用重试黑客才能使其工作。问题已报告 here ,但这只是其中之一。

    错误看起来像:
    fatal: [xx.xx.xxx.x]: FAILED! => {"changed": false, "failed": true, "module_stderr": "",
    "module_stdout": "Traceback (most recent call last):\r\n
    File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1454536847.17-86172912102079/apt\", line 2630, in \r\n
    main()\r\n
    File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1454536847.17-86172912102079/apt\", line 603, in main\r\n
    cache = apt.Cache()\r\n
    File \"/usr/lib/python2.7/dist-packages/apt/cache.py\", line 107, in init\r\n
    self.open(progress)\r\n
    File \"/usr/lib/python2.7/dist-packages/apt/cache.py\", line 151, in open\r\n
    self._cache = apt_pkg.Cache(progress)\r\n
    SystemError: E:Encountered a section with no Package: header,\
    E:Problem with MergeList /var/lib/apt/lists/us-west-\
    2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_universe_i18n_Translation-en\
    , E:The package lists or status file could not be parsed or opened.\r\n
    ", "msg": "MODULE FAILURE", "parsed": false}

    我错过了什么吗?你为生产做什么?

    最佳答案

    这不是 Ansible 问题,尽管 Ansible 肯定没有帮助。

    这是apt的问题偶尔将垃圾文件(某种二进制文件)保存为包列表,它应该是文本。 There's been a bug open forever about it , 和 here's a fix from AskUbuntu .

    在这种情况下,查看文件,确认它是二进制文件,然后将其删除:

    head /var/lib/apt/lists/us-west-2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_universe_i18n_Translation-en
    rm /var/lib/apt/lists/us-west-2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_universe_i18n_Translation-en
    apt将在 apt-get update 时重新创建它正在运行。

    你如何用 Ansible 解决这个问题? There are some workarounds in the ansible issue you found ,最终应修补 apt 模块以简单地解决此问题 - 检测故障,删除文件,然后重新运行更新。但是向 Ansible 发送拉取请求意味着它不会在大约一年内发布。我发现它很少发生,我只是手动修复它。

    关于Ansible 在 Ubuntu 上使用 apt 更新不可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098068/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com