我接管了一个在Ansible上运行的项目,用于服务器配置和管理。我对Ansible来说还是比较新的但是多亏了好的文档我才能理解它。 我仍然有一个错误,其输出如下:
失败:[build](item = [u' software-properties-common',u' python-pycurl',u' openssh-server',u' ; ufw',u'无人值守升级',你' vim',你' curl',你' git',你' ntp&# 39;])=> {"失败":true," item":[" software-properties-common"," python-pycurl"," openssh-server"," ufw","无人值守升级"," vim"," curl"," git& #34;," ntp"]," msg":"无法锁定apt以进行独占操作"}
该剧本与{{1}}一起运行,所以我不明白为什么我会收到此错误(看起来像是一个权限错误)。知道怎么追查这个吗?
sudo: yes
剧本:
- name: "Install very important packages"
apt: pkg={{ item }} update_cache=yes state=present
with_items:
- software-properties-common # for apt repository management
- python-pycurl # for apt repository management (Ansible support)
- openssh-server
- ufw
- unattended-upgrades
- vim
- curl
- git
- ntp
答案 0 :(得分:5)
在配置Ubuntu(以及可能的其他一些发行版)时,这是一种非常常见的情况。您尝试在后台运行自动更新时运行Ansible(这是在设置新计算机后立即执行的操作)。由于APT使用信号量,Ansible被踢出去了。
该剧本没问题,最简单的验证方法是稍后再运行(自动更新过程完成后)。
对于永久性解决方案,您可能希望:
答案 1 :(得分:3)
我在新VM上遇到了同样的问题。我尝试了许多方法,包括重试apt
命令,但最终唯一的方法是删除无人参与的升级。
我在这里使用raw
命令,因为此时VM尚未安装Python,所以我需要先安装Python,但是我需要 reliable {{ 1}}。
由于它是VM,并且我通过将其重置为快照来测试剧本,所以系统日期已关闭,这迫使我使用apt
命令,以便在使用SSL证书时不会出现问题date -s
命令。此apt
触发了无人参与的升级。
因此,剧本的这段代码基本上是与禁用新系统中的无人值守升级相关的部分。它们是我在新系统上发出的第一条命令。
date -s
由于无人值守的升级导致的锁定问题,其他任何事情都会导致- name: Disable timers for unattended upgrade, so that none will be triggered by the `date -s` call.
raw: systemctl disable --now {{item}}
with_items:
- 'apt-daily.timer'
- 'apt-daily-upgrade.timer'
- name: Reload systemctl daemon to apply the new changes
raw: systemctl daemon-reload
# Syncing time is only relevant for testing, because of the VM's outdated date.
#- name: Sync time
# raw: date -s "{{ lookup('pipe', 'date') }}"
- name: Wait for any possibly running unattended upgrade to finish
raw: systemd-run --property="After=apt-daily.service apt-daily-upgrade.service" --wait /bin/true
- name: Purge unattended upgrades
raw: apt-get -y purge unattended-upgrades
- name: Update apt cache
raw: apt-get -y update
- name: If needed, install Python
raw: test -e /usr/bin/python || apt-get -y install python
命令随机失败。