我希望使用Packer (构建镜像)和Ansible (配置器)来配置Ubuntu AMI。
"name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
我遇到了一些困难,因为一些任务试图使用apt安装包,但锁被另一个进程持有。我很难确定哪些进程持有锁,最重要的是,该进程的进度如何。
默认情况下,amazon设置的AMI将在启动时安装安全更新,因此我假设这就是它。正如文档所解释的,它可能与cloud-init有关?我相信这也与无人参与的升级有关,因为正如你在这个1粘贴中看到的,有一个无人参与的升级-关机过程正在等待一些其他的过程(apt?)在关机前完成升级的安装。
如果我使用sudo lslocks,我会得到
amazon-ebs: "COMMAND PID TYPE SIZE MODE M START END PATH",
amazon-ebs: "lvmetad 433 POSIX 4B WRITE 0 0 0 /run/lvmetad.pid",
amazon-ebs: "iscsid 1082 POSIX 5B WRITE 0 0 0 /run/iscsid.pid",
amazon-ebs: "lxcfs 1110 POSIX 5B WRITE 0 0 0 /run/lxcfs.pid",
amazon-ebs: "cron 1134 FLOCK 5B WRITE 0 0 0 /run/crond.pid",
amazon-ebs: "atd 1127 POSIX 5B WRITE 0 0 0 /run/atd.pid"这并没有告诉我很多关于我感兴趣的锁的文件。
如果我执行tail /var/log/cloud-init-output.log,我会看到cloud-init已经完成了工作。
如果我tail /var/log/dpkg.log,我会看到9月13日的日志,而不是今天。
如果我tail /var/log/apt/term.log,我会看到9月13日的日志,而不是今天。
这
>&1 sudo fuser '/var/lib/dpkg/lock-frontend' || echo aa ;
>&1 sudo fuser -vvv /var/lib/apt/lock || echo a ;
>&1 sudo lsof /var/lib/apt/lists/lock || echo b ;
>&1 sudo lsof /var/lib/dpkg/lock || echo c ;
>&1 sudo lsof /var/cache/apt/archives/lock || echo d ;正在输出
aa
a
b
c
d所以我知道这些锁文件并不存在。我很困惑,因为有一个关于锁文件的错误:Failed to lock apt for exclusive operation。
我怎么才能找到那是什么锁文件。最重要的是,我如何跟踪持有该锁的进程的进度?
谢谢!
发布于 2019-10-08 03:29:57
从cloud-init v.18.2或更高版本开始,cloud-init status --wait将阻塞,直到cloud-init运行完毕。因此,它是脚本在完成其余工作之前可以利用的一个简单的“钩子”。
发布于 2019-10-16 07:18:19
似乎在Ansible中使用Packer会让事情变得有点复杂。出于某种原因,我在我的打包程序配置中设置了EC2将被ssh到使用ubuntu用户,而Ansible将使用根用户。这导致Ansible不尝试运行"sudo“,因为它认为它已经是root。因此,它无法获得用于安装包的锁。
但是,这并没有回答如何跟踪包的安装进度。我认为通过观察cloud-init可以很好地了解正在发生的事情。Cloud-init已经完成了工作。apt日志显示没有任何进展,所以我相信它没有安装任何东西。
https://stackoverflow.com/questions/58275850
复制相似问题