为了提供一些背景信息,我正在使用带有 ansible provisioner 的 packer 在 AWS 上创建 AMI 映像。
packer与ansible相关部分:
packer.json
"provisioners": [{
"type": "shell",
"inline": [
"sleep 15",
"sudo apt-get update",
"sudo apt-get install -y aptitude python"
]
}, {
"type": "ansible",
"playbook_file": "../provision/ansible-playbook.yml",
"groups": ["webworker"],
"extra_arguments": [
"--become-method=sudo"
]
}]
任务.yml
- name: Install tools
become: true
apt:
name: "{{ item }}"
state: latest
with_items:
- build-essential
- git
在我的本地机器上,一切正常。
但是作为 CI 的一部分,使用我们的 Jenkins 服务器来运行这个打包脚本,但它在第一个已到位的 ansible 任务上失败become
,在这种情况下,第一步是通过apt
模块安装一些工具:
amazon-ebs: "W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)",
amazon-ebs: "E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)",
amazon-ebs: "E: Unable to lock directory /var/lib/apt/lists/",
amazon-ebs: "W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)",
amazon-ebs: "W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)",
amazon-ebs: "E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)",
amazon-ebs: "E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?"
我已经检查了权限、用户,甚至检查了apt
后台是否有另一个带有锁的程序在运行:什么都没有。
command
更有趣的是,如果我用with替换 ansible,sudo aptitude ...
它就可以工作,并且在 ansible 任务之前有一个 shell 配置程序也可以apt-get
无错误运行。
再次强调,这在我的计算机上有效(以及在另外两台计算机上有效),但在服务器上无效。我在任何计算机上都没有 ansible.cfg(甚至默认的计算机也没有)。
答案1
我在使用打包程序为 Ubuntu 16.04 创建 AWS AMI 时遇到了这个问题。您使用的是 Ubuntu 吗?
Ubuntu 16.04 默认自动运行 uattended-upgrades(开箱即用)。第一次启动机器时,unattended-upgrades 会锁定 apt(参见 /var/lib/dpkg/lock),然后如果配置脚本通过 apt 安装任何东西,就会出错。
点击此处了解更多详细信息https://github.com/ansible/ansible/issues/4355#issuecomment-286184925
也在这里:- https://github.com/geerlingguy/packer-ubuntu-1604/issues/3